diff --git a/README.md b/README.md
index 53b0439ec42f7beef311774dcf2f38d3b17db0f3..c6dc89fa47c1cfb9856cc17f309c64749b93d369 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,7 @@ The following operations are available:
 * MERGE: Merge two or more patches into one
 * CONCATENATE: Concatenate two sky models
 * ADD: Add a source
+* SETPATCHPOSITIONS: Calculate and set patch positions
 * PLOT: Plot the sky model
 
 For details, please see the full documentation (doc/lsmtool.tex).
diff --git a/doc/build/doctrees/code.doctree b/doc/build/doctrees/code.doctree
index 4473eeb73cbc2c4005cff1b63ae6f5aa184f3c8b..733fdd15cf85ca374750e314b9b69fe4bcc0b93c 100644
Binary files a/doc/build/doctrees/code.doctree and b/doc/build/doctrees/code.doctree differ
diff --git a/doc/build/doctrees/environment.pickle b/doc/build/doctrees/environment.pickle
index b0cd2ca5915e884eae852d9ac49b835995e10651..4a79bd472d52bc7dc6e1a8ae46dc68135c309091 100644
Binary files a/doc/build/doctrees/environment.pickle and b/doc/build/doctrees/environment.pickle differ
diff --git a/doc/build/doctrees/index.doctree b/doc/build/doctrees/index.doctree
index 9fb62513db848cacc5a7140f0cd781590c384958..60515b93738f06130f2d82b359e64fb099a2f039 100644
Binary files a/doc/build/doctrees/index.doctree and b/doc/build/doctrees/index.doctree differ
diff --git a/doc/build/html/_sources/code.txt b/doc/build/html/_sources/code.txt
index d184c03adb17c0c890f8333941539f66e6e55b10..be389bb9029c5ae2813ef0b7d9b2da919ef6b008 100644
--- a/doc/build/html/_sources/code.txt
+++ b/doc/build/html/_sources/code.txt
@@ -1,6 +1,3 @@
-LSMTool: the LOFAR Local Sky Model Tool
-***************************************
-
 .. automodule:: lsmtool
     :members:
 .. autoclass:: SkyModel
diff --git a/doc/build/html/_sources/index.txt b/doc/build/html/_sources/index.txt
index c6b45d5b81712dc74703c35c5d8ea486dfe15834..1caa8c0a70ec68e23cd58f05c93e0a90913c99f3 100644
--- a/doc/build/html/_sources/index.txt
+++ b/doc/build/html/_sources/index.txt
@@ -1,27 +1,20 @@
-.. LSMTool documentation master file, created by
-   sphinx-quickstart on Thu Jun 19 17:05:13 2014.
-   You can adapt this file completely to your liking, but it should at least
-   contain the root `toctree` directive.
-
 Welcome to LSMTool's documentation!
 ===================================
 
-LSMTool is a Python package which allow the manipulation of sky models in the ``makesourcedb`` format understood by BBS. Note that LSMTool is still in beta. Please report bugs to ``drafferty@hs.uni-hamburg.de``. To initialize your environment for LSMTool, users on CEP1 and CEP2 should run the following commands::
-
-    use LofIm
-    source ~rafferty/init_lsmtool
+LSMTool is a Python package which allows for the manipulation of LOFAR sky models in the ``makesourcedb`` format.
 
-Note that the Pythonlibs LOFAR package includes an older version of astropy that conflicts with LSMTool and cannot be used in conjunction with it.
+Contents
+========
 
 .. toctree::
    :maxdepth: 2
 
-
+   overview.rst
+   lsmtool.rst
 
 Indices and tables
 ==================
 
 * :ref:`genindex`
-* :ref:`modindex`
 * :ref:`search`
 
diff --git a/doc/build/html/_static/basic.css b/doc/build/html/_static/basic.css
index c959cf0db10b0d30c9b059a9cd52fcba205119e9..967e36ce05f3933b61037c1ddbf5bffcf23d2176 100644
--- a/doc/build/html/_static/basic.css
+++ b/doc/build/html/_static/basic.css
@@ -4,7 +4,7 @@
  *
  * Sphinx stylesheet -- basic theme.
  *
- * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/doc/build/html/_static/default.css b/doc/build/html/_static/default.css
index e534a07802b94d88019ee1b61e28541e6fc05856..5f1399abd5d85bc2519ad8f3a0c266cfa51fd2a4 100644
--- a/doc/build/html/_static/default.css
+++ b/doc/build/html/_static/default.css
@@ -4,7 +4,7 @@
  *
  * Sphinx stylesheet -- default theme.
  *
- * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/doc/build/html/_static/doctools.js b/doc/build/html/_static/doctools.js
index 2036e5f5f812a93169ac1869f891e87da9658990..c5455c905dcf5323dc6bd0ac8b93c3851daeeecd 100644
--- a/doc/build/html/_static/doctools.js
+++ b/doc/build/html/_static/doctools.js
@@ -4,7 +4,7 @@
  *
  * Sphinx JavaScript utilities for all documentation.
  *
- * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/doc/build/html/_static/searchtools.js b/doc/build/html/_static/searchtools.js
index f5c7e5fee71426595a839f84759f47681fd1a74d..6e1f06bd1b9b1e3969cbd453a4ed16eb31f7977d 100644
--- a/doc/build/html/_static/searchtools.js
+++ b/doc/build/html/_static/searchtools.js
@@ -4,7 +4,7 @@
  *
  * Sphinx JavaScript utilties for the full-text search.
  *
- * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/doc/build/html/_static/sidebar.js b/doc/build/html/_static/sidebar.js
index 874a890a3cd928992933188798a6ae30a1543668..4f09a0df1f433af4e045a62871ebb12169557710 100644
--- a/doc/build/html/_static/sidebar.js
+++ b/doc/build/html/_static/sidebar.js
@@ -16,7 +16,7 @@
  * Once the browser is closed the cookie is deleted and the position
  * reset to the default (expanded).
  *
- * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/doc/build/html/_static/websupport.js b/doc/build/html/_static/websupport.js
index 19fcda5647b4c91f66bd99c653c15475ec86fcc2..71c0a1364aa3074b12315515f53be3694fd632c4 100644
--- a/doc/build/html/_static/websupport.js
+++ b/doc/build/html/_static/websupport.js
@@ -4,7 +4,7 @@
  *
  * sphinx.websupport utilties for all documentation.
  *
- * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/doc/build/html/code.html b/doc/build/html/code.html
index 0d2c0b25bf993f557e6f0e0d97b456aae3a30abe..d7f057a9776ed9ce4ca4276fe22bceafbaa84742 100644
--- a/doc/build/html/code.html
+++ b/doc/build/html/code.html
@@ -6,7 +6,7 @@
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
-    <title>LSMTool: the LOFAR Local Sky Model Tool &mdash; LSMTool 1.0.0 documentation</title>
+    <title>&lt;no title&gt; &mdash; LSMTool 1.0.0 documentation</title>
     
     <link rel="stylesheet" href="_static/default.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -45,9 +45,8 @@
         <div class="bodywrapper">
           <div class="body">
             
-  <div class="section" id="module-lsmtool">
-<span id="lsmtool-the-lofar-local-sky-model-tool"></span><h1>LSMTool: the LOFAR Local Sky Model Tool<a class="headerlink" href="#module-lsmtool" title="Permalink to this headline">¶</a></h1>
-<p>LSMTool: the LOFAR Local Sky Model Tool</p>
+  <span class="target" id="module-lsmtool"></span><p>The load() convenience function is used to load a sky model file into a
+SkyModel object.</p>
 <dl class="function">
 <dt id="lsmtool.load">
 <tt class="descclassname">lsmtool.</tt><tt class="descname">load</tt><big>(</big><em>fileName</em>, <em>beamMS=None</em><big>)</big><a class="headerlink" href="#lsmtool.load" title="Permalink to this definition">¶</a></dt>
@@ -157,7 +156,7 @@ sky model with a high-resolution one):</p>
 
 <dl class="method">
 <dt id="lsmtool.SkyModel.getColValues">
-<tt class="descname">getColValues</tt><big>(</big><em>colName</em>, <em>units=None</em>, <em>aggregate=None</em>, <em>weight=False</em>, <em>applyBeam=False</em><big>)</big><a class="headerlink" href="#lsmtool.SkyModel.getColValues" title="Permalink to this definition">¶</a></dt>
+<tt class="descname">getColValues</tt><big>(</big><em>colName</em>, <em>units=None</em>, <em>aggregate=None</em>, <em>applyBeam=False</em><big>)</big><a class="headerlink" href="#lsmtool.SkyModel.getColValues" title="Permalink to this definition">¶</a></dt>
 <dd><p>Returns a numpy array of column values.</p>
 <dl class="docutils">
 <dt>colName <span class="classifier-delimiter">:</span> <span class="classifier">str</span></dt>
@@ -492,46 +491,27 @@ dictionary in the form:</p>
 </dl>
 <p>The property to filter on must be a valid column name or the filename
 of a mask image.</p>
-<dl class="docutils">
-<dt>Supported operators are:</dt>
-<dd><ul class="first last simple">
-<li>!=</li>
-<li>&lt;=</li>
-<li>&gt;=</li>
-<li>&gt;</li>
-<li>&lt;</li>
-<li>= (or &#8216;==&#8217;)</li>
-</ul>
-</dd>
-</dl>
+<p>Supported operators are:
+- !=
+- &lt;=
+- &gt;=
+- &gt;
+- &lt;
+- = (or &#8216;==&#8217;)</p>
 <p class="last">Units are optional and must be specified as required by astropy.units.</p>
 </dd>
 <dt>aggregate <span class="classifier-delimiter">:</span> <span class="classifier">str, optional</span></dt>
-<dd><p class="first">If set, the array returned will be of values aggregated
+<dd>If set, the array returned will be of values aggregated
 over the patch members. The following aggregation functions are
-available:</p>
-<blockquote class="last">
-<div><ul>
-<li><p class="first">&#8216;sum&#8217;: sum of patch values</p>
-</li>
-<li><p class="first">&#8216;mean&#8217;: mean of patch values</p>
-</li>
-<li><p class="first">&#8216;wmean&#8217;: Stokes I weighted mean of patch values</p>
-</li>
-<li><p class="first">&#8216;min&#8217;: minimum of patch values</p>
-</li>
-<li><p class="first">&#8216;max&#8217;: maximum of patch values</p>
-</li>
-<li><dl class="first docutils">
-<dt>True: only valid when the filter indices are specified directly as</dt>
-<dd><p class="first last">a numpy array. If True, filtering is done on patches instead of
-sources.</p>
-</dd>
-</dl>
-</li>
-</ul>
-</div></blockquote>
-</dd>
+available:
+- &#8216;sum&#8217;: sum of patch values
+- &#8216;mean&#8217;: mean of patch values
+- &#8216;wmean&#8217;: Stokes I weighted mean of patch values
+- &#8216;min&#8217;: minimum of patch values
+- &#8216;max&#8217;: maximum of patch values
+- True: only valid when the filter indices are specified directly as
+a numpy array. If True, filtering is done on patches instead of
+sources.</dd>
 <dt>applyBeam <span class="classifier-delimiter">:</span> <span class="classifier">bool, optional</span></dt>
 <dd>If True, apparent fluxes will be used.</dd>
 <dt>useRegEx <span class="classifier-delimiter">:</span> <span class="classifier">bool, optional</span></dt>
@@ -569,20 +549,12 @@ given filter expression is true.</p>
 <dl class="docutils">
 <dt>filterExpression <span class="classifier-delimiter">:</span> <span class="classifier">str or dict</span></dt>
 <dd><dl class="first docutils">
-<dt>A string specifying the filter expression in the form:</dt>
-<dd>&#8216;&lt;property&gt; &lt;operator&gt; &lt;value&gt; [&lt;units&gt;]&#8217;</dd>
-</dl>
-<p>(e.g., &#8216;I &lt;= 10.5 Jy&#8217;). These elements can also be given as a
-dictionary in the form:</p>
-<blockquote>
-<div><dl class="docutils">
-<dt>{&#8216;filterProp&#8217;:property, &#8216;filterOper&#8217;:operator,</dt>
-<dd>&#8216;filterVal&#8217;:value, &#8216;filterUnits&#8217;:units}</dd>
-</dl>
-</div></blockquote>
-<dl class="docutils">
-<dt>or as a list:</dt>
-<dd>[property, operator, value, value]</dd>
+<dt>The filter expression specified as:</dt>
+<dd><ul class="first last simple">
+<li>a string of <tt class="docutils literal"><span class="pre">'&lt;property&gt;</span> <span class="pre">&lt;operator&gt;</span> <span class="pre">&lt;value&gt;</span> <span class="pre">[&lt;units&gt;]'</span></tt></li>
+<li>a list of <tt class="docutils literal"><span class="pre">[property,</span> <span class="pre">operator,</span> <span class="pre">value,</span> <span class="pre">value]</span></tt></li>
+</ul>
+</dd>
 </dl>
 <p>The property to filter on must be a valid column name or the filename
 of a mask image.</p>
@@ -601,31 +573,17 @@ of a mask image.</p>
 <p class="last">Units are optional and must be specified as required by astropy.units.</p>
 </dd>
 <dt>aggregate <span class="classifier-delimiter">:</span> <span class="classifier">str, optional</span></dt>
-<dd><p class="first">If set, the array returned will be of values aggregated
+<dd>If set, the array returned will be of values aggregated
 over the patch members. The following aggregation functions are
-available:</p>
-<blockquote class="last">
-<div><ul>
-<li><p class="first">&#8216;sum&#8217;: sum of patch values</p>
-</li>
-<li><p class="first">&#8216;mean&#8217;: mean of patch values</p>
-</li>
-<li><p class="first">&#8216;wmean&#8217;: Stokes I weighted mean of patch values</p>
-</li>
-<li><p class="first">&#8216;min&#8217;: minimum of patch values</p>
-</li>
-<li><p class="first">&#8216;max&#8217;: maximum of patch values</p>
-</li>
-<li><dl class="first docutils">
-<dt>True: only valid when the filter indices are specify directly as</dt>
-<dd><p class="first last">a numpy array. If True, filtering is done on patches instead of
-sources.</p>
-</dd>
-</dl>
-</li>
-</ul>
-</div></blockquote>
-</dd>
+available:
+- &#8216;sum&#8217;: sum of patch values
+- &#8216;mean&#8217;: mean of patch values
+- &#8216;wmean&#8217;: Stokes I weighted mean of patch values
+- &#8216;min&#8217;: minimum of patch values
+- &#8216;max&#8217;: maximum of patch values
+- True: only valid when the filter indices are specify directly as
+a numpy array. If True, filtering is done on patches instead of
+sources.</dd>
 <dt>applyBeam <span class="classifier-delimiter">:</span> <span class="classifier">bool, optional</span></dt>
 <dd>If True, apparent fluxes will be used.</dd>
 <dt>useRegEx <span class="classifier-delimiter">:</span> <span class="classifier">bool, optional</span></dt>
@@ -710,12 +668,9 @@ where both RA and Dec are degrees J2000 or in makesourcedb format.</dd>
 to set the patch positions:
 - &#8216;mid&#8217; =&gt; the position is set to the midpoint of the patch
 - &#8216;mean&#8217; =&gt; the positions is set to the mean RA and Dec of the patch
-- &#8216;wmean&#8217; =&gt; the position is set to the flux-weighted mean RA and</p>
-<blockquote>
-<div>Dec of the patch</div></blockquote>
-<ul class="simple">
-<li>&#8216;zero&#8217; =&gt; set all positions to [0.0, 0.0]</li>
-</ul>
+- &#8216;wmean&#8217; =&gt; the position is set to the flux-weighted mean RA and
+Dec of the patch
+- &#8216;zero&#8217; =&gt; set all positions to [0.0, 0.0]</p>
 <p class="last">Note that the mid, mean, and wmean positions are calculated from TAN-
 projected values.</p>
 </dd>
@@ -843,7 +798,6 @@ BBS:</p>
 
 </dd></dl>
 
-</div>
 
 
           </div>
@@ -887,7 +841,7 @@ BBS:</p>
     </div>
     <div class="footer">
         &copy; Copyright 2014, David Rafferty.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.1.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.2.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/doc/build/html/genindex.html b/doc/build/html/genindex.html
index c34cd1641a3bc43f704913b37997792a7e3b6169..52c2f36a0cf4210aa856d77157b5b7130871c10e 100644
--- a/doc/build/html/genindex.html
+++ b/doc/build/html/genindex.html
@@ -52,8 +52,11 @@
 <div class="genindex-jumpbox">
  <a href="#A"><strong>A</strong></a>
  | <a href="#C"><strong>C</strong></a>
+ | <a href="#D"><strong>D</strong></a>
+ | <a href="#F"><strong>F</strong></a>
  | <a href="#G"><strong>G</strong></a>
  | <a href="#I"><strong>I</strong></a>
+ | <a href="#K"><strong>K</strong></a>
  | <a href="#L"><strong>L</strong></a>
  | <a href="#M"><strong>M</strong></a>
  | <a href="#P"><strong>P</strong></a>
@@ -62,13 +65,34 @@
  | <a href="#T"><strong>T</strong></a>
  | <a href="#U"><strong>U</strong></a>
  | <a href="#W"><strong>W</strong></a>
+ | <a href="#X"><strong>X</strong></a>
  
 </div>
 <h2 id="A">A</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.add">add() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.add.add">add() (in module lsmtool.operations.add)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.add">(lsmtool.skymodel.SkyModel method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.group.addEvery">addEvery() (in module lsmtool.operations.group)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.group.addSingle">addSingle() (in module lsmtool.operations.group)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.html#lsmtool.operations_lib.attenuate">attenuate() (in module lsmtool.operations_lib)</a>
   </dt>
 
   </dl></td>
@@ -78,13 +102,49 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.concatenate">concatenate() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.concatenate.concatenate">concatenate() (in module lsmtool.operations.concatenate)</a>
   </dt>
 
+      <dd><dl>
+        
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.concatenate">(lsmtool.skymodel.SkyModel method)</a>
+  </dt>
+
+      </dl></dd>
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.copy">copy() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.copy">copy() (lsmtool.skymodel.SkyModel method)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="D">D</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="lsmtool.html#lsmtool.tableio.Dec2Angle">Dec2Angle() (in module lsmtool.tableio)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.plot.Dectickformatter">Dectickformatter() (in module lsmtool.operations.plot)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="lsmtool.html#lsmtool.tableio.ds9RegionWriter">ds9RegionWriter() (in module lsmtool.tableio)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="F">F</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.plot.formatCoord">formatCoord() (in module lsmtool.operations.plot)</a>
   </dt>
 
   </dl></td>
@@ -94,43 +154,53 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.getColNames">getColNames() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.getColNames">getColNames() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
       
-  <dt><a href="code.html#lsmtool.SkyModel.getColValues">getColValues() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.getColValues">getColValues() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
       
-  <dt><a href="code.html#lsmtool.SkyModel.getDefaltValues">getDefaltValues() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.getDefaltValues">getDefaltValues() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
       
-  <dt><a href="code.html#lsmtool.SkyModel.getPatchNames">getPatchNames() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.getPatchNames">getPatchNames() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
       
-  <dt><a href="code.html#lsmtool.SkyModel.getPatchPositions">getPatchPositions() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.group.getPatchNamesFromMask">getPatchNamesFromMask() (in module lsmtool.operations.group)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.getPatchSizes">getPatchSizes() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.getPatchPositions">getPatchPositions() (lsmtool.skymodel.SkyModel method)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.getPatchSizes">getPatchSizes() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
       
-  <dt><a href="code.html#lsmtool.SkyModel.getRowIndex">getRowIndex() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.getRowIndex">getRowIndex() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
       
-  <dt><a href="code.html#lsmtool.SkyModel.getRowValues">getRowValues() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.getRowValues">getRowValues() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
       
-  <dt><a href="code.html#lsmtool.SkyModel.group">group() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.group.group">group() (in module lsmtool.operations.group)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.group">(lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
+      </dl></dd>
   </dl></td>
 </tr></table>
 
@@ -138,7 +208,17 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.info">info() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.info">info() (lsmtool.skymodel.SkyModel method)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="K">K</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="lsmtool.html#lsmtool.tableio.kvisAnnWriter">kvisAnnWriter() (in module lsmtool.tableio)</a>
   </dt>
 
   </dl></td>
@@ -148,13 +228,73 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.load">load() (in module lsmtool)</a>
+  <dt><a href="lsmtool.html#lsmtool.load">load() (in module lsmtool)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.html#module-lsmtool">lsmtool (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations">lsmtool.operations (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations.add">lsmtool.operations.add (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations.concatenate">lsmtool.operations.concatenate (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations.group">lsmtool.operations.group (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations.merge">lsmtool.operations.merge (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations.move">lsmtool.operations.move (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations.plot">lsmtool.operations.plot (module)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#module-lsmtool">lsmtool (module)</a>
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations.remove">lsmtool.operations.remove (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations.select">lsmtool.operations.select (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations.setpatchpositions">lsmtool.operations.setpatchpositions (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations.transfer">lsmtool.operations.transfer (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#module-lsmtool.operations.ungroup">lsmtool.operations.ungroup (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.html#module-lsmtool.operations_lib">lsmtool.operations_lib (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.html#module-lsmtool.skymodel">lsmtool.skymodel (module)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.html#module-lsmtool.tableio">lsmtool.tableio (module)</a>
   </dt>
 
   </dl></td>
@@ -164,19 +304,31 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.merge">merge() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.merge.merge">merge() (in module lsmtool.operations.merge)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.merge">(lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
+      </dl></dd>
       
-  <dt><a href="code.html#lsmtool.SkyModel.more">more() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.more">more() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.move">move() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.move.move">move() (in module lsmtool.operations.move)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.move">(lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
+      </dl></dd>
   </dl></td>
 </tr></table>
 
@@ -184,9 +336,15 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.plot">plot() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.plot.plot">plot() (in module lsmtool.operations.plot)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.plot">(lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
+      </dl></dd>
   </dl></td>
 </tr></table>
 
@@ -194,39 +352,127 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.remove">remove() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.tableio.RA2Angle">RA2Angle() (in module lsmtool.tableio)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.html#lsmtool.operations_lib.radec2xy">radec2xy() (in module lsmtool.operations_lib)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.plot.RAtickformatter">RAtickformatter() (in module lsmtool.operations.plot)</a>
   </dt>
 
   </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.remove.remove">remove() (in module lsmtool.operations.remove)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.remove">(lsmtool.skymodel.SkyModel method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="lsmtool.html#lsmtool.tableio.rowStr">rowStr() (in module lsmtool.tableio)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.add.run">run() (in module lsmtool.operations.add)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.concatenate.run">(in module lsmtool.operations.concatenate)</a>
+  </dt>
+
+        
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.group.run">(in module lsmtool.operations.group)</a>
+  </dt>
+
+        
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.merge.run">(in module lsmtool.operations.merge)</a>
+  </dt>
+
+        
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.move.run">(in module lsmtool.operations.move)</a>
+  </dt>
+
+        
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.plot.run">(in module lsmtool.operations.plot)</a>
+  </dt>
+
+        
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.remove.run">(in module lsmtool.operations.remove)</a>
+  </dt>
+
+        
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.select.run">(in module lsmtool.operations.select)</a>
+  </dt>
+
+        
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.setpatchpositions.run">(in module lsmtool.operations.setpatchpositions)</a>
+  </dt>
+
+        
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.transfer.run">(in module lsmtool.operations.transfer)</a>
+  </dt>
+
+        
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.ungroup.run">(in module lsmtool.operations.ungroup)</a>
+  </dt>
+
+      </dl></dd>
+  </dl></td>
 </tr></table>
 
 <h2 id="S">S</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.select">select() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.select.select">select() (in module lsmtool.operations.select)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.select">(lsmtool.skymodel.SkyModel method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.setColValues">setColValues() (lsmtool.skymodel.SkyModel method)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.setDefaltValues">setDefaltValues() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
       
-  <dt><a href="code.html#lsmtool.SkyModel.setColValues">setColValues() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.setPatchPositions">setPatchPositions() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
       
-  <dt><a href="code.html#lsmtool.SkyModel.setDefaltValues">setDefaltValues() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.setRowValues">setRowValues() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
   </dl></td>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.setPatchPositions">setPatchPositions() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel">SkyModel (class in lsmtool.skymodel)</a>
+  </dt>
+
+      
+  <dt><a href="lsmtool.html#lsmtool.tableio.skyModelIdentify">skyModelIdentify() (in module lsmtool.tableio)</a>
   </dt>
 
       
-  <dt><a href="code.html#lsmtool.SkyModel.setRowValues">setRowValues() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.tableio.skyModelReader">skyModelReader() (in module lsmtool.tableio)</a>
   </dt>
 
       
-  <dt><a href="code.html#lsmtool.SkyModel">SkyModel (class in lsmtool)</a>
+  <dt><a href="lsmtool.html#lsmtool.tableio.skyModelWriter">skyModelWriter() (in module lsmtool.tableio)</a>
   </dt>
 
   </dl></td>
@@ -236,9 +482,15 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.transfer">transfer() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.operations.html#lsmtool.operations.transfer.transfer">transfer() (in module lsmtool.operations.transfer)</a>
   </dt>
 
+      <dd><dl>
+        
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.transfer">(lsmtool.skymodel.SkyModel method)</a>
+  </dt>
+
+      </dl></dd>
   </dl></td>
 </tr></table>
 
@@ -246,7 +498,7 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.ungroup">ungroup() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.ungroup">ungroup() (lsmtool.skymodel.SkyModel method)</a>
   </dt>
 
   </dl></td>
@@ -256,7 +508,17 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%" valign="top"><dl>
       
-  <dt><a href="code.html#lsmtool.SkyModel.write">write() (lsmtool.SkyModel method)</a>
+  <dt><a href="lsmtool.html#lsmtool.skymodel.SkyModel.write">write() (lsmtool.skymodel.SkyModel method)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="X">X</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="lsmtool.html#lsmtool.operations_lib.xy2radec">xy2radec() (in module lsmtool.operations_lib)</a>
   </dt>
 
   </dl></td>
@@ -303,7 +565,7 @@
     </div>
     <div class="footer">
         &copy; Copyright 2014, David Rafferty.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.1.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.2.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/doc/build/html/index.html b/doc/build/html/index.html
index 388d62c7ac2f62ef447e2550ff1854c96c91254e..723d9906984b068f1edd20e597baed3c5ecd7273 100644
--- a/doc/build/html/index.html
+++ b/doc/build/html/index.html
@@ -24,7 +24,8 @@
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
     <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
-    <link rel="top" title="LSMTool 1.0.0 documentation" href="#" /> 
+    <link rel="top" title="LSMTool 1.0.0 documentation" href="#" />
+    <link rel="next" title="LSMTool: the LOFAR Local Sky Model Tool" href="overview.html" /> 
   </head>
   <body>
     <div class="related">
@@ -36,6 +37,9 @@
         <li class="right" >
           <a href="py-modindex.html" title="Python Module Index"
              >modules</a> |</li>
+        <li class="right" >
+          <a href="overview.html" title="LSMTool: the LOFAR Local Sky Model Tool"
+             accesskey="N">next</a> |</li>
         <li><a href="#">LSMTool 1.0.0 documentation</a> &raquo;</li> 
       </ul>
     </div>  
@@ -47,14 +51,26 @@
             
   <div class="section" id="welcome-to-lsmtool-s-documentation">
 <h1>Welcome to LSMTool&#8217;s documentation!<a class="headerlink" href="#welcome-to-lsmtool-s-documentation" title="Permalink to this headline">¶</a></h1>
-<p>LSMTool is a Python package which allow the manipulation of sky models in the <tt class="docutils literal"><span class="pre">makesourcedb</span></tt> format understood by BBS. Note that LSMTool is still in beta. Please report bugs to <tt class="docutils literal"><span class="pre">drafferty&#64;hs.uni-hamburg.de</span></tt>. To initialize your environment for LSMTool, users on CEP1 and CEP2 should run the following commands:</p>
-<div class="highlight-python"><div class="highlight"><pre>use LofIm
-source ~rafferty/init_lsmtool
-</pre></div>
+<p>LSMTool is a Python package which allows for the manipulation of LOFAR sky models in the <tt class="docutils literal"><span class="pre">makesourcedb</span></tt> format.</p>
 </div>
-<p>Note that the Pythonlibs LOFAR package includes an older version of astropy that conflicts with LSMTool and cannot be used in conjunction with it.</p>
+<div class="section" id="contents">
+<h1>Contents<a class="headerlink" href="#contents" title="Permalink to this headline">¶</a></h1>
 <div class="toctree-wrapper compound">
-<ul class="simple">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="overview.html">LSMTool: the LOFAR Local Sky Model Tool </a><ul>
+<li class="toctree-l2"><a class="reference internal" href="overview.html#usage">Usage</a></li>
+<li class="toctree-l2"><a class="reference internal" href="overview.html#operations">Operations</a></li>
+<li class="toctree-l2"><a class="reference internal" href="overview.html#example-parset">Example parset</a></li>
+<li class="toctree-l2"><a class="reference internal" href="overview.html#interactive-use-and-scripting">Interactive use and scripting</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="lsmtool.html">LSMTool Module Documentation</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="lsmtool.html#module-lsmtool">lsmtool module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="lsmtool.html#module-lsmtool.operations_lib">lsmtool.operations_lib module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="lsmtool.html#module-lsmtool.skymodel">lsmtool.skymodel module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="lsmtool.html#module-lsmtool.tableio">lsmtool.tableio module</a></li>
+</ul>
+</li>
 </ul>
 </div>
 </div>
@@ -62,7 +78,6 @@ source ~rafferty/init_lsmtool
 <h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
 <ul class="simple">
 <li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
-<li><a class="reference internal" href="py-modindex.html"><em>Module Index</em></a></li>
 <li><a class="reference internal" href="search.html"><em>Search Page</em></a></li>
 </ul>
 </div>
@@ -76,9 +91,13 @@ source ~rafferty/init_lsmtool
   <h3><a href="#">Table Of Contents</a></h3>
   <ul>
 <li><a class="reference internal" href="#">Welcome to LSMTool&#8217;s documentation!</a></li>
+<li><a class="reference internal" href="#contents">Contents</a></li>
 <li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
 </ul>
 
+  <h4>Next topic</h4>
+  <p class="topless"><a href="overview.html"
+                        title="next chapter">LSMTool: the LOFAR Local Sky Model Tool </a></p>
   <h3>This Page</h3>
   <ul class="this-page-menu">
     <li><a href="_sources/index.txt"
@@ -110,12 +129,15 @@ source ~rafferty/init_lsmtool
         <li class="right" >
           <a href="py-modindex.html" title="Python Module Index"
              >modules</a> |</li>
+        <li class="right" >
+          <a href="overview.html" title="LSMTool: the LOFAR Local Sky Model Tool"
+             >next</a> |</li>
         <li><a href="#">LSMTool 1.0.0 documentation</a> &raquo;</li> 
       </ul>
     </div>
     <div class="footer">
         &copy; Copyright 2014, David Rafferty.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.1.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.2.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/doc/build/html/objects.inv b/doc/build/html/objects.inv
index d62ac62bc30952b92ac08587bfd7950735c42d52..1ad4e57d44aeede78777686874d3cff4463ad167 100644
Binary files a/doc/build/html/objects.inv and b/doc/build/html/objects.inv differ
diff --git a/doc/build/html/py-modindex.html b/doc/build/html/py-modindex.html
index ca56c3e665858e43da511275189366b7c7a994e3..6e362de5e68da1f118fe01e9a5d0e34870503439 100644
--- a/doc/build/html/py-modindex.html
+++ b/doc/build/html/py-modindex.html
@@ -27,10 +27,6 @@
     <link rel="top" title="LSMTool 1.0.0 documentation" href="index.html" />
  
 
-    <script type="text/javascript">
-      DOCUMENTATION_OPTIONS.COLLAPSE_INDEX = true;
-    </script>
-
 
   </head>
   <body>
@@ -64,9 +60,85 @@
      <tr class="cap" id="cap-l"><td></td><td>
        <strong>l</strong></td><td></td></tr>
      <tr>
-       <td></td>
+       <td><img src="_static/minus.png" class="toggler"
+              id="toggle-1" style="display: none" alt="-" /></td>
        <td>
-       <a href="code.html#module-lsmtool"><tt class="xref">lsmtool</tt></a></td><td>
+       <a href="lsmtool.html#module-lsmtool"><tt class="xref">lsmtool</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations"><tt class="xref">lsmtool.operations</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations.add"><tt class="xref">lsmtool.operations.add</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations.concatenate"><tt class="xref">lsmtool.operations.concatenate</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations.group"><tt class="xref">lsmtool.operations.group</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations.merge"><tt class="xref">lsmtool.operations.merge</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations.move"><tt class="xref">lsmtool.operations.move</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations.plot"><tt class="xref">lsmtool.operations.plot</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations.remove"><tt class="xref">lsmtool.operations.remove</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations.select"><tt class="xref">lsmtool.operations.select</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations.setpatchpositions"><tt class="xref">lsmtool.operations.setpatchpositions</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations.transfer"><tt class="xref">lsmtool.operations.transfer</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.operations.html#module-lsmtool.operations.ungroup"><tt class="xref">lsmtool.operations.ungroup</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.html#module-lsmtool.operations_lib"><tt class="xref">lsmtool.operations_lib</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.html#module-lsmtool.skymodel"><tt class="xref">lsmtool.skymodel</tt></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&nbsp;&nbsp;&nbsp;
+       <a href="lsmtool.html#module-lsmtool.tableio"><tt class="xref">lsmtool.tableio</tt></a></td><td>
        <em></em></td></tr>
    </table>
 
@@ -107,7 +179,7 @@
     </div>
     <div class="footer">
         &copy; Copyright 2014, David Rafferty.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.1.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.2.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/doc/build/html/search.html b/doc/build/html/search.html
index 205dacb20f266e38784a4eee220c313e88af17dd..357ffe110345dcd521dcca5ee864edffb8b993ff 100644
--- a/doc/build/html/search.html
+++ b/doc/build/html/search.html
@@ -100,7 +100,7 @@
     </div>
     <div class="footer">
         &copy; Copyright 2014, David Rafferty.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.1.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.2.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/doc/build/html/searchindex.js b/doc/build/html/searchindex.js
index f5238d145a4b7b7722306d52f3120709bafaf354..896d5a541d58e2774656ff2a2be62f94f2897e5a 100644
--- a/doc/build/html/searchindex.js
+++ b/doc/build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({envversion:42,terms:{all:1,per:1,follow:[0,1],row:1,arcsec:1,lsm2:1,present:1,sourc:[0,1],everi:1,string:1,fals:1,print:1,appar:1,strang:1,list:1,pleas:0,second:1,aggreg:1,index:[0,1],appear:1,sum:1,access:1,version:0,"new":1,method:1,whose:1,valu:1,convert:1,hdf5:1,shift:1,within:1,clean_mask:1,appli:1,approxim:1,"140e6":1,filenam:1,unix:1,src1:1,total:1,select:1,plot:1,from:1,two:1,type:1,patchdict:1,sort:1,desir:1,must:1,none:1,can:1,meet:1,dec:1,deg:1,give:1,colnamesv:1,accept:1,high:1,minimum:1,tan:1,anoth:1,write:1,how:1,low:1,makesourcedb:[0,1],tile:1,verifi:1,simpl:1,bin0:1,bin2:1,lowtohigh:1,astropi:[0,1],max:1,getcolvalu:1,after:1,befor:1,catalog:1,plane:1,attenu:1,mai:1,coldict:1,averag:1,element:1,inform:1,environ:0,allow:[0,1],order:1,over:1,move:1,filterv:1,rashift:1,still:0,paramet:1,conjunct:0,group:1,fit:1,might:1,them:1,good:1,"return":1,greater:1,python:0,initi:0,instead:1,name:1,bin1:1,separ:1,each:1,found:1,mean:1,weight:1,replac:1,content:[],suitabl:1,high_res_ski:1,asarrai:1,numclust:1,reg:1,rownam:1,manipul:0,midpoint:1,given:1,brightest:1,dictionari:1,ask:1,ds9:1,angl:1,checkdup:1,keep:1,filter:1,length:1,place:1,filterop:1,outsid:1,onto:1,oper:1,directli:1,arrai:1,number:1,alreadi:1,setrowvalu:1,patchnam:1,miss:1,primari:1,size:1,differ:1,sb100:1,tot:1,skymodel:1,circl:1,colnam:1,store:1,includ:0,option:1,filterunit:1,copi:1,specifi:1,targetflux:1,part:1,from1:1,from2:1,than:1,center:1,target:1,provid:1,remov:1,zero:1,project:1,str:1,posit:1,ani:1,packag:[0,1],votabl:1,have:1,need:1,getdefaltvalu:1,lie:1,min:1,mid:1,note:[0,1],also:1,which:[0,1],singl:1,sky_plot:1,unless:1,cep1:0,cep2:0,object:1,setdefaltvalu:1,beta:0,regular:1,referencefrequ:1,pair:1,"class":1,useregex:1,mjy:1,determin:1,show:1,radiu:1,current:1,onli:1,should:0,dict:1,getcolnam:1,overwritten:1,lsm:1,get:1,express:1,beam:1,getpatchposit:1,cannot:0,beamm:1,report:0,requir:1,rafferti:0,intrins:1,patch:1,contain:1,where:1,set:1,maximum:1,result:1,close:1,"import":1,getpatchnam:1,parent:1,filterexpress:1,screen:1,entir:1,pythonlib:0,addit:1,both:1,region:1,getpatchs:1,pdf:1,load:1,point:1,color:1,pole:1,respect:1,assum:1,duplic:1,addition:1,numpi:1,three:1,treat:1,ungroup:1,imag:1,resolut:1,search:0,togeth:1,hamburg:0,those:1,"case":1,ident:1,casa:1,properti:1,defin:1,calcul:1,abov:1,cluster:1,setcolvalu:1,ascii:1,same:1,member:1,conflict:0,user:0,uni:0,appropri:1,kept:1,sortbi:1,older:0,clobber:1,exampl:1,command:[0,1],thi:1,getrowvalu:1,decshift:1,gsm:1,identifi:1,wmean:1,except:1,setdefaultvalu:1,add:1,valid:1,input:1,save:1,modul:0,match:1,drafferti:0,around:1,format:[0,1],read:1,filterprop:1,measur:1,like:1,flux:1,either:1,output:1,page:0,sagec:1,some:1,understood:0,binmerg:1,scale:1,getrowindex:1,overlap:1,estim:1,unit:1,plu:1,run:0,perpatchproject:1,src:1,about:1,column:1,degre:1,done:1,discard:1,produc:1,own:1,consid:1,"float":1,your:0,merg:1,transfer:1,support:1,avail:1,modski:1,"function":1,form:1,forc:1,majoraxi:1,"true":1,bug:0,info:1,concaten:1,j2000:1,"default":1,displai:1,init_lsmtool:0,more:1,lofim:0,creat:1,patchfil:1,"int":1,certain:1,exist:1,file:1,matchbi:1,ind:1,when:1,setpatchposit:1,other:1,bool:1,applybeam:1,star:1,clean:1,kvi:1,meaning:1,tessel:1,stoke:1,master_ski:1,sourcenam:1,algorithm:1,mask:1,gsm_sky2:1},objtypes:{"0":"py:module","1":"py:method","2":"py:function","3":"py:class"},objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","function","Python function"],"3":["py","class","Python class"]},filenames:["index","code"],titles:["Welcome to LSMTool&#8217;s documentation!","LSMTool: the LOFAR Local Sky Model Tool"],objects:{"":{lsmtool:[1,0,0,"-"]},lsmtool:{load:[1,2,1,""],SkyModel:[1,3,1,""]},"lsmtool.SkyModel":{setRowValues:[1,1,1,""],setPatchPositions:[1,1,1,""],getPatchNames:[1,1,1,""],select:[1,1,1,""],move:[1,1,1,""],plot:[1,1,1,""],group:[1,1,1,""],getColNames:[1,1,1,""],getRowValues:[1,1,1,""],getRowIndex:[1,1,1,""],transfer:[1,1,1,""],setDefaltValues:[1,1,1,""],write:[1,1,1,""],add:[1,1,1,""],ungroup:[1,1,1,""],more:[1,1,1,""],concatenate:[1,1,1,""],getDefaltValues:[1,1,1,""],getPatchPositions:[1,1,1,""],getPatchSizes:[1,1,1,""],getColValues:[1,1,1,""],copy:[1,1,1,""],info:[1,1,1,""],setColValues:[1,1,1,""],remove:[1,1,1,""],merge:[1,1,1,""]}},titleterms:{lsmtool:[0,1],welcom:0,tool:1,lofar:1,sky:1,indic:0,tabl:0,model:1,document:0,local:1}})
\ No newline at end of file
+Search.setIndex({envversion:42,terms:{represent:[0,3],all:[0,1,3],interpret:0,overlap:[3,1],follow:[0,1,3],ds9regionwrit:3,row:[0,1,3],arcsec:[0,1,3],discard:[3,1],lsm1:1,lsm2:[3,1],program:0,those:[0,1,3],sourc:[0,1,3],everi:[0,1,3],string:[0,1,3],fals:[0,1,3],print:[0,3],appar:[0,1,3],strang:3,list:[0,1,3],getterminals:[],pleas:0,second:[0,1,3],aggreg:[0,1,3],index:[0,2,3],kvisannwrit:3,appear:[3,1],sum:[3,1],ndppp:0,access:3,version:0,"new":[0,1,3],method:[0,1,3],full:0,whose:[3,1],valu:[0,1,3],convert:3,sky_model_with_patch:0,hdf5:[0,3],shift:[0,1,3],chang:1,appli:[0,3],approxim:[3,1],submodul:[],filenam:[3,1],unix:[3,1],src1:[0,3],total:[0,1,3],select:[],plot:[],from:1,describ:0,two:[0,1,3],ratickformatt:1,next:0,call:3,type:[0,3],patchdict:3,sort:3,desir:[3,1],outskymodel:0,must:[3,1],none:[3,1],annot:[0,3],can:[0,1,3],meet:[3,1],dec:[0,1,3],deg:3,control:0,give:3,colnamesv:[3,1],accept:[0,3],high:[3,1],minimum:[3,1],tab:0,tan:3,david:0,anoth:[0,1,3],write:[0,3],how:[3,1],low:[3,1],makesourcedb:[0,1,2,3],tile:[3,1],instead:[3,1],attflux:3,bin1:[0,1,3],bin0:[3,1],bin3:0,bin2:[0,1,3],lowtohigh:3,astropi:[0,1,3],high_res_ski:[3,1],getcolvalu:[0,3],after:[3,1],addsingl:1,dec2angl:3,befor:3,catalog:3,plane:3,attenu:[3,1],mai:3,coldict:3,skymodel:[],forc:[3,1],getpatchnamesfrommask:1,correspond:[0,3],element:[3,1],inform:[0,3],maintain:0,environ:0,allow:[0,2,3],mjy:[0,1,3],origin:3,help:0,refra:3,over:[3,1],move:[],filterv:[3,1],rashift:[3,1],still:0,paramet:[0,1,3],conjunct:0,group:[],fit:[0,3],x1b:[],might:[3,1],pixel:[3,1],them:3,good:3,"return":[0,1,3],greater:[3,1],python:[0,2],initi:0,verifi:3,name:[0,1,3],simpl:[0,1,3],separ:[3,1],radian:1,each:[3,1],found:[3,1],mean:[0,1,3],weight:[3,1],replac:[3,1],rownam:3,out:0,content:[],suitabl:3,max:[3,1],asarrai:3,numclust:[0,1,3],reg:[0,3],insid:3,manipul:[0,2],midpoint:[0,3],given:[0,1,3],base:3,brightest:[3,1],dictionari:[3,1],ask:3,ds9:[0,3],angl:3,checkdup:3,keep:[0,1,3],filter:[0,1,3],length:3,place:[3,1],filterop:[3,1],outsid:[3,1],onto:3,first:0,oper:[],directli:[3,1],arrai:[0,1,3],number:[0,1,3],anyvalidcolumnnam:0,radeg:3,alreadi:3,setrowvalu:[0,3],messag:0,patchnam:[3,1],miss:3,primari:3,size:[0,3],differ:[3,1],sb100:3,script:[],interact:[],tot:3,averag:3,circl:[3,1],conveni:3,colnam:3,"final":0,store:3,modski:3,option:[0,1,3],filterunit:[3,1],addeveri:1,copi:[0,3],specifi:[0,1,3],targetflux:[0,1,3],part:[3,1],from1:[0,1,3],from2:[0,1,3],than:[3,1],merged_patch:0,scheme:0,target:[0,1,3],provid:3,raangl:3,remov:[],zero:3,project:3,formatcoord:1,str:[3,1],posit:[0,1,3],ann:0,ani:[0,3],packag:[],votabl:[0,3],increment:[],need:[0,3],getdefaltvalu:[0,3],tableio:[],lie:[3,1],min:[3,1],mid:[0,1,3],decrad:1,note:[0,3],also:[0,1,3],without:0,which:[0,1,2,3],singl:[0,1,3],sky_plot:[],unless:3,cep1:0,cep2:0,object:[0,1,3],setdefaltvalu:3,beta:0,regular:[3,1],referencefrequ:3,pair:[3,1],"class":3,useregex:[3,1],order:[0,3],in_sky_model2:0,determin:[3,1],section:0,selectbright:0,show:[0,1,3],text:[],verbos:0,radiu:[0,1,3],current:3,onli:[0,1,3],should:0,dict:[3,1],getcolnam:[0,3],overwritten:3,lsm:[0,1,3],get:[3,1],express:[3,1],stop:[],beam:[0,1,3],getpatchposit:[0,3],cannot:0,beamm:3,report:0,requir:[0,1,3],rafferti:0,intrins:3,patch:[0,1,3],contain:[3,1],sky1:1,sky2:1,where:[3,1],set:[0,1,3],"float":[0,1,3],displai:[3,1],see:0,sec:0,result:[0,1,3],arg:3,close:[3,1],label:1,written:[0,3],"import":[0,3],getpatchnam:3,parent:[3,1],filterexpress:[0,1,3],screen:[0,3],skymodelread:3,entir:3,outfil:0,ipython:0,pythonlib:0,addit:[0,3],both:[3,1],region:[0,1,3],quiet:0,getpatchs:[0,3],pdf:[],col:[],load:1,among:0,point:[0,3],color:[3,1],pole:3,respect:3,assum:3,duplic:[0,1,3],addition:[0,3],numpi:[0,1,3],three:[3,1],treat:[3,1],ungroup:[],imag:[3,1],resolut:[3,1],search:2,coordin:[3,1],addsrc:0,togeth:[3,1],hamburg:0,spin:[],present:3,"case":[0,3],ident:[3,1],casa:[3,1],properti:[0,1,3],defin:[0,1,3],calcul:[0,3],abov:[0,3],have:[3,1],sting:3,cluster:[0,1,3],kwarg:3,setcolvalu:[0,3],ascii:3,perform:0,same:[0,1,3],member:[3,1],skymodelwrit:3,setpo:0,conflict:0,rarad:1,new_patch:0,user:0,mani:0,subpackag:[],appropri:3,kept:[3,1],sortbi:3,older:0,well:0,clobber:3,exampl:[3,1],command:[0,3],thi:[0,1,3],getrowvalu:[0,3],decshift:[3,1],gsm:3,comment:0,identifi:[0,1,3],refdec:3,wmean:[0,1,3],except:3,setdefaultvalu:[0,3],add:[],other:[0,3],input:[3,1],save:[3,1],modul:[],match:[0,1,3],drafferti:0,around:[3,1],format:[0,1,2,3],read:3,"140e6":3,radec2xi:3,filterprop:[3,1],tick:1,measur:3,decdeg:3,like:[0,3],specif:0,flux:[0,1,3],either:[3,1],output:[0,3],page:2,sagec:[3,1],exttt:[],ra2angl:3,some:[3,1],understood:0,binmerg:[3,1],scale:[3,1],getrowindex:[0,3],per:[3,1],estim:3,exit:0,unit:[3,1],refer:3,plu:3,run:[0,1],perpatchproject:3,rowstr:3,usag:[],step:[0,1],src:[3,1],about:[0,3],column:[0,1,3],degre:[0,1,3],done:[0,1,3],clean_mask:[3,1],produc:3,own:[3,1],new_sourc:0,tessel:[0,1,3],within:[0,1,3],your:0,merg:[],transfer:[],support:[0,1,3],custom:1,avail:[0,1,3],start:[],includ:0,"var":0,skymodel2:0,"function":[3,1],skymodelidentifi:3,decangl:3,form:[3,1],dectickformatt:1,majoraxi:3,out_sky_model:0,line:[0,3],uni:0,"true":[0,1,3],bug:0,info:[0,1,3],concaten:[],made:3,j2000:3,"default":[0,3],maximum:[3,1],init_lsmtool:0,xy2radec:3,more:[0,1,3],lofim:0,creat:3,patchfil:[0,1,3],"int":[0,1,3],certain:3,parset:1,repres:3,exist:3,file:1,matchbi:[0,1,3],ind:3,grp:0,sequenti:0,when:[3,1],detail:0,setpatchposit:[],valid:[0,1,3],bool:[0,1,3],applybeam:[0,1,3],operations_lib:[],star:[3,1],clean:[3,1],center:3,kvi:[0,3],meaning:3,consid:[3,1],stoke:[3,1],master_ski:[3,1],sourcenam:3,algorithm:[0,1,3],statusbar:[],mask:[3,1],gsm_sky2:3},objtypes:{"0":"py:module","1":"py:method","2":"py:function","3":"py:class"},objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","function","Python function"],"3":["py","class","Python class"]},filenames:["overview","lsmtool.operations","index","lsmtool"],titles:["LSMTool: the LOFAR Local Sky Model Tool ","lsmtool.operations package","Welcome to LSMTool&#8217;s documentation!","LSMTool Module Documentation"],objects:{"":{lsmtool:[3,0,0,"-"]},lsmtool:{operations:[1,0,0,"-"],operations_lib:[3,0,0,"-"],load:[3,2,1,""],skymodel:[3,0,0,"-"],tableio:[3,0,0,"-"]},"lsmtool.operations.setpatchpositions":{run:[1,2,1,""]},"lsmtool.operations.plot":{RAtickformatter:[1,2,1,""],Dectickformatter:[1,2,1,""],formatCoord:[1,2,1,""],run:[1,2,1,""],plot:[1,2,1,""]},"lsmtool.operations.concatenate":{concatenate:[1,2,1,""],run:[1,2,1,""]},"lsmtool.operations.ungroup":{run:[1,2,1,""]},"lsmtool.operations.add":{add:[1,2,1,""],run:[1,2,1,""]},"lsmtool.operations":{concatenate:[1,0,0,"-"],plot:[1,0,0,"-"],setpatchpositions:[1,0,0,"-"],group:[1,0,0,"-"],transfer:[1,0,0,"-"],move:[1,0,0,"-"],remove:[1,0,0,"-"],merge:[1,0,0,"-"],add:[1,0,0,"-"],ungroup:[1,0,0,"-"],select:[1,0,0,"-"]},"lsmtool.operations.remove":{run:[1,2,1,""],remove:[1,2,1,""]},"lsmtool.operations.transfer":{transfer:[1,2,1,""],run:[1,2,1,""]},"lsmtool.tableio":{RA2Angle:[3,2,1,""],skyModelReader:[3,2,1,""],ds9RegionWriter:[3,2,1,""],skyModelWriter:[3,2,1,""],kvisAnnWriter:[3,2,1,""],skyModelIdentify:[3,2,1,""],rowStr:[3,2,1,""],Dec2Angle:[3,2,1,""]},"lsmtool.operations_lib":{radec2xy:[3,2,1,""],attenuate:[3,2,1,""],xy2radec:[3,2,1,""]},"lsmtool.operations.select":{run:[1,2,1,""],select:[1,2,1,""]},"lsmtool.operations.merge":{merge:[1,2,1,""],run:[1,2,1,""]},"lsmtool.operations.move":{move:[1,2,1,""],run:[1,2,1,""]},"lsmtool.skymodel":{SkyModel:[3,3,1,""]},"lsmtool.operations.group":{addSingle:[1,2,1,""],group:[1,2,1,""],addEvery:[1,2,1,""],getPatchNamesFromMask:[1,2,1,""],run:[1,2,1,""]},"lsmtool.skymodel.SkyModel":{setRowValues:[3,1,1,""],move:[3,1,1,""],getPatchNames:[3,1,1,""],select:[3,1,1,""],plot:[3,1,1,""],group:[3,1,1,""],getColNames:[3,1,1,""],getRowValues:[3,1,1,""],getRowIndex:[3,1,1,""],transfer:[3,1,1,""],setDefaltValues:[3,1,1,""],write:[3,1,1,""],add:[3,1,1,""],ungroup:[3,1,1,""],more:[3,1,1,""],concatenate:[3,1,1,""],getDefaltValues:[3,1,1,""],getPatchPositions:[3,1,1,""],getPatchSizes:[3,1,1,""],getColValues:[3,1,1,""],copy:[3,1,1,""],info:[3,1,1,""],setPatchPositions:[3,1,1,""],setColValues:[3,1,1,""],remove:[3,1,1,""],merge:[3,1,1,""]}},titleterms:{oper:[0,1],load:[],modul:[3,1],lofar:0,submodul:1,indic:2,packag:1,file:[],tabl:2,select:1,merg:1,plot:1,group:1,welcom:2,script:0,transfer:1,interact:0,sky:0,setpatchposit:1,content:[2,1],add:1,ungroup:1,tableio:3,local:0,operations_lib:3,move:1,lsmtool:[0,1,2,3],tool:0,usag:0,parset:0,from:[],skymodel:3,subpackag:[],concaten:1,document:[3,2],remov:1,exampl:0,model:0}})
\ No newline at end of file
diff --git a/doc/lsmtool.pdf b/doc/lsmtool.pdf
index f34b3350219b8a434fdbcc39c8505e8f3e8395c4..fcfc164ed97b2de4d618d472f3f6403b8ce726ff 100644
Binary files a/doc/lsmtool.pdf and b/doc/lsmtool.pdf differ
diff --git a/doc/lsmtool.tex b/doc/lsmtool.tex
index 62eee53732b3bf25bd88c6e4e3c4356d031aea8f..6a46b24815549954188e2d24aaa19596184d6ea7 100644
--- a/doc/lsmtool.tex
+++ b/doc/lsmtool.tex
@@ -29,7 +29,7 @@
 \section[LSMTool: the LOFAR Local Sky Model Tool]{LSMTool: the LOFAR Local Sky Model Tool\footnote{This section is maintained by David Rafferty ({\tt drafferty@hs.uni-hamburg.de}).}}
 \label{lsmtool}
 
-LSMTool is a Python package which allow the manipulation of sky models in the \texttt{makesourcedb} format understood by BBS. Note that LSMTool is still in beta. Please report bugs to drafferty@hs.uni-hamburg.de. To initialize your environment for LSMTool, users on CEP1 and CEP2 should run the following commands:
+LSMTool is a Python package which allows for the manipulation of sky models in the \texttt{makesourcedb} format (understood by BBS and NDPPP). Note that LSMTool is still in beta. Please report bugs to drafferty@hs.uni-hamburg.de. To initialize your environment for LSMTool, users on CEP1 and CEP2 should run the following commands:
 \begin{verbatim}
 use LofIm
 source ~rafferty/init_lsmtool
@@ -40,7 +40,7 @@ Note that the Pythonlibs LOFAR package includes an older version of astropy that
 \subsection{Usage}
 \label{lsmtool:usage}
 
-LSMTool can be run as follows:
+The command-line version of LSMTool can be run as follows:
 \begin{verbatim}
 Usage: lsmtool.py <skymodel> <parset> [<beam MS>]
 Options:
@@ -66,6 +66,7 @@ These are the operations that LSMTool can perform:
  \item[MERGE]: Merge two or more patches into one
  \item[CONCATENATE]: Concatenate two sky models
  \item[ADD]: Add a source
+ \item[SETPATCHPOSITIONS]: Calculate and set patch positions
  \item[PLOT]: Plot a simple representation of the sky model
 \end{description}
 
@@ -122,9 +123,9 @@ PatchFile & string & sky\_model\_with\_patches.sky & File with patches that will
 \hline
 \multicolumn{4}{l}{\textbf{GROUP}}\\
 Algorithm & string & tessellate & One of tessellate, cluster, single, every\\
-TargetFlux & string & 10.0 Jy & target total flux of patches (tessellate only)\\
+TargetFlux & string & 10.0 Jy & Target total flux of patches (tessellate only)\\
+NumClusters & int & 100 & Number of clusters (cluster only)\\
 ApplyBeam & bool & True & If true, apparent fluxes will be used \\
-Method & string & mid & Set patch positions by mid, mean, or wmean\\
 \hline
 \multicolumn{4}{l}{\textbf{UNGROUP}}\\
 \hline
diff --git a/doc/source/.DS_Store b/doc/source/.DS_Store
index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..6a60f02d7148f197b444804ed2b729f5833465d3 100644
Binary files a/doc/source/.DS_Store and b/doc/source/.DS_Store differ
diff --git a/doc/source/code.rst b/doc/source/code.rst
deleted file mode 100644
index d184c03adb17c0c890f8333941539f66e6e55b10..0000000000000000000000000000000000000000
--- a/doc/source/code.rst
+++ /dev/null
@@ -1,7 +0,0 @@
-LSMTool: the LOFAR Local Sky Model Tool
-***************************************
-
-.. automodule:: lsmtool
-    :members:
-.. autoclass:: SkyModel
-    :members:
diff --git a/doc/source/conf.py b/doc/source/conf.py
index 6553401d659cce99ea491a1812d48e81135d6732..3a2182ee76c2bb38fe5ab791c27e069bd7a1e8e5 100644
--- a/doc/source/conf.py
+++ b/doc/source/conf.py
@@ -30,9 +30,9 @@ import os
 # ones.
 extensions = [
     'sphinx.ext.autodoc',
-    'sphinx.ext.doctest',
     'sphinx.ext.intersphinx',
     'sphinx.ext.mathjax',
+    'numpydoc',
 ]
 
 # Add any paths that contain templates here, relative to this directory.
diff --git a/doc/source/index.rst b/doc/source/index.rst
index c6b45d5b81712dc74703c35c5d8ea486dfe15834..1caa8c0a70ec68e23cd58f05c93e0a90913c99f3 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -1,27 +1,20 @@
-.. LSMTool documentation master file, created by
-   sphinx-quickstart on Thu Jun 19 17:05:13 2014.
-   You can adapt this file completely to your liking, but it should at least
-   contain the root `toctree` directive.
-
 Welcome to LSMTool's documentation!
 ===================================
 
-LSMTool is a Python package which allow the manipulation of sky models in the ``makesourcedb`` format understood by BBS. Note that LSMTool is still in beta. Please report bugs to ``drafferty@hs.uni-hamburg.de``. To initialize your environment for LSMTool, users on CEP1 and CEP2 should run the following commands::
-
-    use LofIm
-    source ~rafferty/init_lsmtool
+LSMTool is a Python package which allows for the manipulation of LOFAR sky models in the ``makesourcedb`` format.
 
-Note that the Pythonlibs LOFAR package includes an older version of astropy that conflicts with LSMTool and cannot be used in conjunction with it.
+Contents
+========
 
 .. toctree::
    :maxdepth: 2
 
-
+   overview.rst
+   lsmtool.rst
 
 Indices and tables
 ==================
 
 * :ref:`genindex`
-* :ref:`modindex`
 * :ref:`search`
 
diff --git a/lsmtool/__init__.py b/lsmtool/__init__.py
index 7dc418a742bd53b3dae069f04cb16fcecb97697d..4bf7f9ea5684f2b6900683d7c3bec68eb9c0ebd0 100644
--- a/lsmtool/__init__.py
+++ b/lsmtool/__init__.py
@@ -16,7 +16,8 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-"""LSMTool: the LOFAR Local Sky Model Tool
+"""The load() convenience function is used to load a sky model file into a
+SkyModel object.
 
 .. moduleauthor:: David Rafferty <drafferty@hs.uni-hamburg.de>
 
@@ -39,6 +40,12 @@ def load(fileName, beamMS=None):
         Measurement set from which the primary beam will be estimated. A
         column of attenuated Stokes I fluxes will be added to the table.
 
+    Returns
+    -------
+    SkyModel object
+        A SkyModel object that stores the sky model and provides methods for
+        accessing it.
+
     Examples
     --------
     Load a sky model into a SkyModel object::
@@ -47,7 +54,7 @@ def load(fileName, beamMS=None):
         >>> s = lsmtool.load('sky.model')
 
     Load a sky model with a beam MS so that apparent fluxes will
-    be available (in addition to intrinsic fluxes):::
+    be available (in addition to intrinsic fluxes)::
 
         >>> s = lsmtool.load('sky.model', 'SB100.MS')
 
diff --git a/lsmtool/_version.py b/lsmtool/_version.py
index 28c169c1bfd88d434ec76102a02cc4b346e341b8..f8a0f3b9f7fd634a3c6c87f5ca99381f77e372e4 100644
--- a/lsmtool/_version.py
+++ b/lsmtool/_version.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-#This module stores the version and changelog
+# This module stores the version and changelog
 
 # Version number
 __version__ = '1.0.0'
@@ -10,7 +10,7 @@ def changelog():
     log = """
     LSMTool Changelog.
     -----------------------------------------------
-    2014/05/25 - Version 1.0.0 (initial release)
+    2014/06/25 - Version 1.0.0 (initial release)
     """
 
     print(log)
diff --git a/lsmtool/lsmtool.py b/lsmtool/lsmtool.py
index c1b7d573c27ddb081e9f70053c86df57d6942c0b..d3b4f0cd77477860c179412e4314cbbf549dec04 100755
--- a/lsmtool/lsmtool.py
+++ b/lsmtool/lsmtool.py
@@ -1,5 +1,21 @@
-#!/usr/bin/env python
 # -*- coding: utf-8 -*-
+#
+# This is the command-line script that performs the operations defined in a
+# LSMTool parset.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 # Authors:
 # David Raffery
diff --git a/lsmtool/operations/_filter.py b/lsmtool/operations/_filter.py
index 1fd23b6e508e9a341aa6ee883d73fe5295d453f0..18d9662d6b77a2acd0af4c985531e453d919862f 100644
--- a/lsmtool/operations/_filter.py
+++ b/lsmtool/operations/_filter.py
@@ -246,8 +246,8 @@ def filter(LSM, filterExpression, exclusive=False, aggregate=None,
 
 def parseFilter(filterExpression):
     """
-    Takes a filter expression and returns tuple of
-    (property, operation, val, units), all as strings
+    Takes a filter expression and returns tuple of (property, operation, val,
+    units), all as strings.
     """
     try:
         from ..tableio import allowedColumnNames
@@ -352,7 +352,7 @@ def convertOperStr(operStr):
 
 def getFilterIndices(colVals, filterOper, filterVal, useRegEx=False):
     """
-    Returns the indices that correspond to the input filter expression
+    Returns the indices that correspond to the input filter expression.
     """
     import operator as op
     import fnmatch
@@ -388,7 +388,7 @@ def getFilterIndices(colVals, filterOper, filterVal, useRegEx=False):
 
 def getMaskValues(mask, RARad, DecRad):
     """
-    Returns an array of mask values for each (RA, Dec) pair in radians
+    Returns an array of mask values for each (RA, Dec) pair in radians.
     """
     import math
     import pyrap
diff --git a/lsmtool/operations/concatenate.py b/lsmtool/operations/concatenate.py
index aec428d0a77a435a139578afc9e430a41283f8e9..284d5cea942a1a82325c04cef6700222e1bf7104 100644
--- a/lsmtool/operations/concatenate.py
+++ b/lsmtool/operations/concatenate.py
@@ -60,7 +60,7 @@ def concatenate(LSM1, LSM2, matchBy='name', radius=0.1, keep='all'):
         Determines how duplicates are treated:
         - 'all' => all duplicates are kept; those with identical names are re-
             named
-        - 'from1' => duplicates kept are those from sky model 1 (the parent)
+        - 'from1' => duplicates kept are those from sky model 1 (LSM1)
         - 'from2' => duplicates kept are those from sky model 2 (LSM2)
 
     Examples
diff --git a/lsmtool/operations_lib.py b/lsmtool/operations_lib.py
index 8da995d4287a5a349d57ee67a54c6d4c8890514a..f384bc19d2173d6ee52a5a2f391ef70dbf1ee228 100644
--- a/lsmtool/operations_lib.py
+++ b/lsmtool/operations_lib.py
@@ -24,6 +24,22 @@ import os
 def attenuate(beamMS, fluxes, RADeg, DecDeg):
     """
     Returns flux attenuated by primary beam.
+
+    Parameters
+    ----------
+    beamMS : str
+        Measurement set for which the beam model is made
+    fluxes : list
+        List of fluxes to attenuate
+    RADeg : list
+        List of RA values in degrees
+    DecDeg : list
+        List of Dec values in degrees
+
+    Returns
+    -------
+    attFluxes : numpy array
+
     """
     import numpy as np
 
@@ -75,7 +91,29 @@ def attenuate(beamMS, fluxes, RADeg, DecDeg):
 
 
 def radec2xy(RA, Dec, refRA=None, refDec=None):
-    """Returns x, y for input ra, dec
+    """Returns x, y for input ra, dec.
+
+    Note that the reference RA and Dec must be the same in calls to both
+    radec2xy() and xy2radec() if matched pairs of (x, y) <=> (RA, Dec) are
+    desired.
+
+    Parameters
+    ----------
+    RA : list
+        List of RA values in degrees
+    Dec : list
+        List of Dec values in degrees
+    refRA : float, optional
+        Reference RA in degrees.
+    refDec : float, optional
+        Reference Dec in degrees
+
+    Returns
+    -------
+    x, y : list, list
+        Lists of x and y pixel values corresponding to the input RA and Dec
+        values
+
     """
     from astropy.wcs import WCS
     import numpy as np
@@ -104,8 +142,30 @@ def radec2xy(RA, Dec, refRA=None, refDec=None):
 
 
 def xy2radec(x, y, refRA=0.0, refDec=0.0):
-    """Returns x, y for input ra, dec
-    """
+    """Returns x, y for input ra, dec.
+
+    Note that the reference RA and Dec must be the same in calls to both
+    radec2xy() and xy2radec() if matched pairs of (x, y) <=> (RA, Dec) are
+    desired.
+
+    Parameters
+    ----------
+    x : list
+        List of x values in pixels
+    y : list
+        List of y values in pixels
+    refRA : float, optional
+        Reference RA in degrees
+    refDec : float, optional
+        Reference Dec in degrees
+
+    Returns
+    -------
+    RA, Dec : list, list
+        Lists of RA and Dec values corresponding to the input x and y pixel
+        values
+
+     """
     from astropy.wcs import WCS
     import numpy as np
 
@@ -126,135 +186,3 @@ def xy2radec(x, y, refRA=0.0, refDec=0.0):
         Dec.append(w.wcs_pix2world(x_y, 0)[0][1])
 
     return RA, Dec
-
-
-class StatusBar():
-    # class variables:
-    # max:  number of total items to be completed
-    # pos:  number of completed items
-    # spin_pos: current position in array of busy_chars
-    # inc:  amount of items to increment completed 'pos' by
-    #           (shared resource)
-    # comp: amount of '=' to display in the progress bar
-    # started: whether or not the statusbar has been started
-    # color: color of text
-    def __init__(self, text, pos=0, max=100, color='\033[0m'):
-        self.text = text
-        self.pos = pos
-        self.max = max
-        self.busy_char = '|'
-        self.spin_pos = 0
-        self.inc =  0
-        self.started = 0
-        self.color = color
-        self.__getsize()
-        if max > 0:
-            self.comp = int(float(self.pos) / self.max * self.columns)
-        else:
-            self.comp = 0
-
-    # find number of columns in terminal
-    def __getsize(self):
-        try:
-            rows, columns = getTerminalSize()
-        except ValueError:
-            rows = columns = 0
-        if int(columns) > self.max + 2 + 44 + (len(str(self.max))*2 + 2):
-            self.columns = self.max
-        else:
-            # note: -2 is for brackets, -44 for 'Fitting islands...' text, rest is for pos/max text
-            self.columns = int(columns) - 2 - 44 - (len(str(self.max))*2 + 2)
-        return
-
-    # redraw progress bar
-    def __print(self):
-        self.__getsize()
-
-        sys.stdout.write('\x1b[1G')
-        if self.max == 0:
-            sys.stdout.write(self.color + self.text + '[] 0/0\033[0m\n')
-        else:
-            sys.stdout.write(self.color + self.text + '[' + '=' * self.comp + self.busy_char + '-'*(self.columns - self.comp - 1) + '] ' + str(self.pos) + '/' + str(self.max) + '\033[0m')
-            sys.stdout.write('\x1b[' + str(self.comp + 2 + 44) + 'G')
-        sys.stdout.flush()
-        return
-
-    # spin the spinner by one increment
-    def spin(self):
-        busy_chars = ['|','/','-','\\']
-        self.spin_pos += 1
-        if self.spin_pos >= len(busy_chars):
-            self.spin_pos = 0
-        # display the busy spinning icon
-        self.busy_char = busy_chars[self.spin_pos]
-        sys.stdout.write(self.color + busy_chars[self.spin_pos] + '\x1b[1D' + '\033[0m')
-        sys.stdout.flush()
-
-    # increment number of completed items
-    def increment(self):
-        self.inc = 1
-        if (self.pos + self.inc) >= self.max:
-            self.pos = self.max
-            self.comp = self.columns
-            self.busy_char = ''
-            self.__print()
-            return 0
-        else:
-            self.pos += self.inc
-            self.inc = 0
-            self.spin()
-            self.comp = int(float(self.pos) / self.max \
-                * self.columns)
-            self.__print()
-        return 1
-
-    def start(self):
-        self.started = 1
-        self.__print()
-
-    def stop(self):
-        if self.started:
-            self.pos = self.max
-            self.comp = self.columns
-            self.busy_char = ''
-            self.__print()
-            sys.stdout.write('\n')
-            self.started = 0
-            return 0
-
-
-def getTerminalSize():
-    """
-    returns (lines:int, cols:int)
-    """
-    import os, struct
-    def ioctl_GWINSZ(fd):
-        import fcntl, termios
-        return struct.unpack("hh", fcntl.ioctl(fd, termios.TIOCGWINSZ, "1234"))
-    # try stdin, stdout, stderr
-    for fd in (0, 1, 2):
-        try:
-            return ioctl_GWINSZ(fd)
-        except:
-            pass
-    # try os.ctermid()
-    try:
-        fd = os.open(os.ctermid(), os.O_RDONLY)
-        try:
-            return ioctl_GWINSZ(fd)
-        finally:
-            os.close(fd)
-    except:
-        pass
-    # try `stty size`
-    try:
-        return tuple(int(x) for x in os.popen("stty size", "r").read().split())
-    except:
-        pass
-    # try environment variables
-    try:
-        return tuple(int(os.getenv(var)) for var in ("LINES", "COLUMNS"))
-    except:
-        pass
-    # Give up. return 0.
-    return (0, 0)
diff --git a/lsmtool/skymodel.py b/lsmtool/skymodel.py
index 210d077d62660ef780540f06d8dd61e1393a775b..ba39872bcd7bc7e9735b13e8c464a94f7b7ba2cd 100644
--- a/lsmtool/skymodel.py
+++ b/lsmtool/skymodel.py
@@ -141,7 +141,7 @@ class SkyModel(object):
 
     def copy(self):
         """
-        Returns a copy of the sky model
+        Returns a copy of the sky model.
         """
         import copy
 
@@ -151,7 +151,7 @@ class SkyModel(object):
     def more(self, colName=None, patchName=None, sourceName=None, sortBy=None,
         lowToHigh=False):
         """
-        Prints the sky model table to the screen with more-like commands
+        Prints the sky model table to the screen with more-like commands.
 
         Parameters
         ----------
@@ -191,7 +191,6 @@ class SkyModel(object):
                 colName = [colName] # needed in order to get a table instead of a column
             table = table[colName]
 
-
         # Get patches
         if patchName is not None:
             pindx = self._getNameIndx(patchName, patch=True)
@@ -425,7 +424,7 @@ class SkyModel(object):
 
 
     def setPatchPositions(self, patchDict=None, method='mid', applyBeam=False,
-         perPatchProjection=True):
+        perPatchProjection=True):
         """
         Sets the patch positions.
 
@@ -440,8 +439,9 @@ class SkyModel(object):
             - 'mid' => the position is set to the midpoint of the patch
             - 'mean' => the positions is set to the mean RA and Dec of the patch
             - 'wmean' => the position is set to the flux-weighted mean RA and
-               Dec of the patch
+            Dec of the patch
             - 'zero' => set all positions to [0.0, 0.0]
+
             Note that the mid, mean, and wmean positions are calculated from TAN-
             projected values.
         applyBeam : bool, optional
@@ -499,7 +499,7 @@ class SkyModel(object):
 
     def _getXY(self, patchName=None):
         """
-        Returns lists of projected x and y values for all sources
+        Returns lists of projected x and y values for all sources.
 
         Parameters
         ----------
@@ -538,7 +538,7 @@ class SkyModel(object):
 
     def getDefaltValues(self):
         """
-        Returns dict of {colName:default} values for all columns with defaults
+        Returns dict of {colName:default} values for all columns with defaults.
         """
         colNames = self.getColNames()
         defaultDict = {}
@@ -550,7 +550,7 @@ class SkyModel(object):
 
     def setDefaltValues(self, colDict):
         """
-        Sets default column values
+        Sets default column values.
 
         Parameters
         ----------
@@ -604,7 +604,7 @@ class SkyModel(object):
         return self.table.keys()
 
 
-    def getColValues(self, colName, units=None, aggregate=None, weight=False,
+    def getColValues(self, colName, units=None, aggregate=None,
         applyBeam=False):
         """
         Returns a numpy array of column values.
@@ -617,7 +617,7 @@ class SkyModel(object):
             Output units (the values are converted as needed). By default, the
             units are those used by makesourcedb, with the exception of Ra and
             Dec which have default units of degrees.
-        aggregate : str, optional
+        aggregate : {'sum', 'mean', 'wmean', 'min', max'}, optional
             If set, the array returned will be of values aggregated
             over the patch members. The following aggregation functions are
             available:
@@ -944,6 +944,17 @@ class SkyModel(object):
     def getPatchSizes(self, units=None, weight=False, applyBeam=False):
         """
         Returns array of patch sizes.
+
+        Parameters
+        ----------
+        units : str, optional
+            Units for returned sizes (e.g., 'arcsec', 'degree')
+        weight : bool, optional
+            If True, weight the source positions inside the patch by flux
+        applyBeam : bool, optional
+            If True and weight is True, attenuate the fluxes used for weighting
+            by the beam
+
         """
         if self.hasPatches:
             col = self._getSizeColumn(weight=weight, applyBeam=applyBeam)
@@ -956,7 +967,7 @@ class SkyModel(object):
 
     def getPatchNames(self):
         """
-        Returns array of patch names.
+        Returns array of all patch names in the sky model.
         """
         if self.hasPatches:
             return self.table.groups.keys['Patch'].data
@@ -1086,7 +1097,7 @@ class SkyModel(object):
 
     def _applyBeamToCol(self, col, patch=False):
         """
-        Applies beam attenuation to the column values
+        Applies beam attenuation to the column values.
         """
         from operations_lib import attenuate
 
@@ -1420,14 +1431,10 @@ class SkyModel(object):
         Parameters
         ----------
         filterExpression : str or dict
-            A string specifying the filter expression in the form:
-                '<property> <operator> <value> [<units>]'
-            (e.g., 'I <= 10.5 Jy'). These elements can also be given as a
-            dictionary in the form:
-                {'filterProp':property, 'filterOper':operator,
-                    'filterVal':value, 'filterUnits':units}
-            or as a list:
-                [property, operator, value, value]
+            The filter expression specified as:
+                - a string of ``'<property> <operator> <value> [<units>]'``
+                - a list of ``[property, operator, value, unit]``
+
             The property to filter on must be a valid column name or the filename
             of a mask image.
 
@@ -1438,6 +1445,7 @@ class SkyModel(object):
                 - >
                 - <
                 - = (or '==')
+
             Units are optional and must be specified as required by astropy.units.
         aggregate : str, optional
             If set, the array returned will be of values aggregated
@@ -1448,9 +1456,7 @@ class SkyModel(object):
                 - 'wmean': Stokes I weighted mean of patch values
                 - 'min': minimum of patch values
                 - 'max': maximum of patch values
-                - True: only valid when the filter indices are specify directly as
-                    a numpy array. If True, filtering is done on patches instead of
-                    sources.
+                - True: only valid when the filter indices are specify directly as a numpy array. If True, filtering is done on patches instead of sources.
         applyBeam : bool, optional
             If True, apparent fluxes will be used.
         useRegEx : bool, optional
@@ -1497,35 +1503,39 @@ class SkyModel(object):
         filterExpression : str or dict
             A string specifying the filter expression in the form:
                 '<property> <operator> <value> [<units>]'
+
             (e.g., 'I <= 10.5 Jy'). These elements can also be given as a
             dictionary in the form:
                 {'filterProp':property, 'filterOper':operator,
                     'filterVal':value, 'filterUnits':units}
+
             or as a list:
                 [property, operator, value, value]
+
             The property to filter on must be a valid column name or the filename
             of a mask image.
 
             Supported operators are:
-                - !=
-                - <=
-                - >=
-                - >
-                - <
-                - = (or '==')
+            - !=
+            - <=
+            - >=
+            - >
+            - <
+            - = (or '==')
+
             Units are optional and must be specified as required by astropy.units.
         aggregate : str, optional
             If set, the array returned will be of values aggregated
             over the patch members. The following aggregation functions are
             available:
-                - 'sum': sum of patch values
-                - 'mean': mean of patch values
-                - 'wmean': Stokes I weighted mean of patch values
-                - 'min': minimum of patch values
-                - 'max': maximum of patch values
-                - True: only valid when the filter indices are specified directly as
-                    a numpy array. If True, filtering is done on patches instead of
-                    sources.
+            - 'sum': sum of patch values
+            - 'mean': mean of patch values
+            - 'wmean': Stokes I weighted mean of patch values
+            - 'min': minimum of patch values
+            - 'max': maximum of patch values
+            - True: only valid when the filter indices are specified directly as
+            a numpy array. If True, filtering is done on patches instead of
+            sources.
         applyBeam : bool, optional
             If True, apparent fluxes will be used.
         useRegEx : bool, optional
@@ -1561,7 +1571,7 @@ class SkyModel(object):
 
     def group(self, algorithm, targetFlux=None, numClusters=100, applyBeam=False):
         """
-        Groups sources into patches
+        Groups sources into patches.
 
         Parameters
         ----------
@@ -1681,7 +1691,7 @@ class SkyModel(object):
 
     def merge(self, patches, name=None):
         """
-        Merge two or more patches together
+        Merge two or more patches together.
 
         Parameters
         ----------
@@ -1702,7 +1712,7 @@ class SkyModel(object):
 
     def concatenate(self, LSM2, matchBy='name', radius=0.1, keep='all'):
         """
-        Concatenate two sky models
+        Concatenate two sky models.
 
         Parameters
         ----------
diff --git a/lsmtool/tableio.py b/lsmtool/tableio.py
index 3c38b534b400112dd337ed8f9ee866835d90240d..f1ac3ff1d6bdc98121add3b0164ff5fc6d79c0f0 100644
--- a/lsmtool/tableio.py
+++ b/lsmtool/tableio.py
@@ -47,7 +47,7 @@ allowedColumnDefaults = {'name':'N/A', 'type':'N/A', 'patch':'N/A', 'ra':'N/A',
 
 def skyModelReader(fileName):
     """
-    Reads a makesourcedb sky model file into an astropy table
+    Reads a makesourcedb sky model file into an astropy table.
 
     Parameters
     ----------
@@ -58,6 +58,7 @@ def skyModelReader(fileName):
     Returns
     -------
     table : astropy.table.Table object
+
     """
     # Open the input file
     try:
@@ -225,6 +226,17 @@ def skyModelReader(fileName):
 def RA2Angle(RA):
     """
     Returns Angle objects for input RA values.
+
+    Parameters
+    ----------
+    RA : str, float or list of str, float
+        Values of RA to convert. Can be strings in makesourcedb format or floats
+        in degrees.
+
+    Returns
+    -------
+    RAAngle : astropy.coordinates.Angle object
+
     """
     if type(RA) is str or type(RA) is float:
         RA = [RA]
@@ -244,6 +256,17 @@ def RA2Angle(RA):
 def Dec2Angle(Dec):
     """
     Returns Angle objects for input Dec values.
+
+    Parameters
+    ----------
+    Dec : str, float or list of str, float
+        Values of Dec to convert. Can be strings in makesourcedb format or floats
+        in degrees.
+
+    Returns
+    -------
+    DecAngle : astropy.coordinates.Angle object
+
     """
     if type(Dec) is str or type(Dec) is float:
         Dec = [Dec]
@@ -349,11 +372,16 @@ def skyModelWriter(table, fileName):
 
 def rowStr(row):
     """
-    Returns makesourcedb representation of a row
+    Returns makesourcedb representation of a row.
 
     Parameters
     ----------
     row : astropy.table.Row object
+
+    Returns
+    -------
+    line : str
+        Sting representing a row in a makesourcedb sky model file
     """
     line = []
     for colKey in row.columns:
diff --git a/setup.py b/setup.py
index fbbd16ebc3a82defd4f54385f59bcd7c0515b504..e469d5bc86f0f631690f6f4be25c19828fda4c84 100644
--- a/setup.py
+++ b/setup.py
@@ -45,7 +45,7 @@ setup(
         'Topic :: Software Development :: Libraries :: Python Modules',
         ],
     tests_require=['pytest'],
-    install_requires=['numpy','cython','astropy'],
+    install_requires=['numpy','astropy'],
     #scripts = ['say_hello.py'],
     packages=['lsmtool','lsmtool.operations'],
     test_suite='test',