diff --git a/dev-docs/source/BatchWidget/API/CodeExamples/change_color.py b/dev-docs/source/BatchWidget/API/CodeExamples/change_color.py
new file mode 100644
index 0000000000000000000000000000000000000000..c8bb1e1d2bb8d2fa0141329abee07d59828258a2
--- /dev/null
+++ b/dev-docs/source/BatchWidget/API/CodeExamples/change_color.py
@@ -0,0 +1,26 @@
+from mantidqtpython import MantidQt
+
+
+# Inside the parent view
+def setup(self):
+    self.table = MantidQt.MantidWidgets.Batch.JobTreeView(
+        ["Column 1", "Column 2"], cell(""), self)
+
+    self.table_signals = \
+        MantidQt.MantidWidgets.Batch.JobTreeViewSignalAdapter(self.table, self)
+
+    self.table.appendChildRowOf(row([]), [cell("Value for Column A"), cell("Value for Column B")])
+    self.change_colour_to_red(location=row([0]), column_index=1)
+
+
+def change_colour_to_red(self, location, column_index):
+    cell = self.table.cellAt(location, column_index)
+    cell.setBackgroundColor("#FF0000")
+    self.table.setCellAt(location, column_index, cell)
+
+def cell(text):
+    return MantidQt.MantidWidgets.Batch.Cell(text)
+
+
+def row(path):
+    return MantidQt.MantidWidgets.Batch.RowLocation(path)
diff --git a/dev-docs/source/BatchWidget/API/CodeExamples/depth_limit_example.py b/dev-docs/source/BatchWidget/API/CodeExamples/depth_limit_example.py
new file mode 100644
index 0000000000000000000000000000000000000000..ff7e1310b0604fab8f905454076a9a81686bb859
--- /dev/null
+++ b/dev-docs/source/BatchWidget/API/CodeExamples/depth_limit_example.py
@@ -0,0 +1,23 @@
+from mantidqtpython import MantidQt
+
+
+def empty_cell():
+    return MantidQt.MantidWidgets.Batch.Cell("")
+
+
+# Inside the parent view
+def setup(self):
+    self.table = MantidQt.MantidWidgets.Batch.JobTreeView(
+        ["Column 1", "Column 2"], empty_cell(), self)
+
+    self.table_signals = MantidQt.MantidWidgets.Batch.JobTreeViewSignalAdapter(self.table, self)
+
+    self.table_signals.rowInserted.connect(self.on_row_inserted)
+    # The rowInserted signal is fired every time a user inserts a row.
+    # It is NOT fired if we manually insert a row.
+
+
+def on_row_inserted(self, rowLocation):
+    if rowLocation.depth() > 2: # If the depth is more than two then
+                             # we can safely 'rollback' the insertion.
+        self.table.removeRowAt(rowLocation)
diff --git a/dev-docs/source/BatchWidget/API/CodeExamples/init.cpp b/dev-docs/source/BatchWidget/API/CodeExamples/init.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e8d23cfc10b21722f1621388fead0eb704d3a64c
--- /dev/null
+++ b/dev-docs/source/BatchWidget/API/CodeExamples/init.cpp
@@ -0,0 +1,15 @@
+#include "MantidQtWidgets/Common/Batch/JobTreeView.h"
+
+using namespace MantidWidgets::Common::Batch;
+
+// Inside the parent view constructor
+m_treeView = new JobTreeView(
+    {"Heading 1", "Heading 2"}, // The table column headings.
+    Cell(""), // The default style and content for the new 'empty' cells.
+    this      // The parent QObject
+    );
+m_treeViewSignals = // JobTreeViewSignalAdapter is also available from C++
+    // Constructing a signal adapter with the view implicitly calls subscribe.
+    new JobTreeViewSignalAdapter(*m_treeView, this);
+m_treeView->appendChildRowOf(RowLocation(), {Cell("Value for Column A"),
+                                             Cell("Value for Column B")})
diff --git a/dev-docs/source/BatchWidget/API/CodeExamples/init.py b/dev-docs/source/BatchWidget/API/CodeExamples/init.py
new file mode 100644
index 0000000000000000000000000000000000000000..5fb71d1a894f96661e0bc7a5ac65dc51f0c20594
--- /dev/null
+++ b/dev-docs/source/BatchWidget/API/CodeExamples/init.py
@@ -0,0 +1,25 @@
+from mantidqtpython import MantidQt
+
+
+# Inside the parent view
+def setup(self):
+    self.table = MantidQt.MantidWidgets.Batch.JobTreeView(
+        ["Column 1", "Column 2"], # The table column headings
+        cell(""), # The default style and content for new 'empty' cells.
+        self # The parent QObject.
+    )
+
+    self.table_signals = \
+        MantidQt.MantidWidgets.Batch.JobTreeViewSignalAdapter(self.table, self)
+    # The signal adapter subscribes to events from the table
+    # and emits signals whenever it is notified.
+
+    self.table.appendChildRowOf(row([]), [cell("Value for Column A"), cell("Value for Column B")])
+
+
+def cell(text):
+    return MantidQt.MantidWidgets.Batch.Cell(text)
+
+
+def row(path):
+    return MantidQt.MantidWidgets.Batch.RowLocation(path)
diff --git a/dev-docs/source/BatchWidget/API/CodeExamples/init_with_custom_subscriber.cpp b/dev-docs/source/BatchWidget/API/CodeExamples/init_with_custom_subscriber.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c21debf00ccff5cce1f88defda29145d0f5ee04d
--- /dev/null
+++ b/dev-docs/source/BatchWidget/API/CodeExamples/init_with_custom_subscriber.cpp
@@ -0,0 +1,31 @@
+#include "MantidQtWidgets/Common/Batch/JobTreeView.h"
+
+using namespace MantidWidgets::Common::Batch;
+
+class SimplePresenter : public JobTreeViewSubscriber {
+public:
+  SimplePresenter(JobTreeView *view) : m_view(view) {
+    m_view->subscribe(this); // Since we aren't using signal adapter
+                             // we must remember the call to subscribe.
+  }
+
+  void notifyCellChanged(RowLocation const &itemIndex, int column,
+                         std::string const &newValue) override {}
+  void notifyRowInserted(RowLocation const &newRowLocation) override {}
+  void notifyRemoveRowsRequested(
+      std::vector<RowLocation> const &locationsOfRowsToRemove) override {}
+  void notifyCopyRowsRequested() overrride {}
+  void notifyPasteRowsRequested() override {}
+  void notifyFilterReset() override {}
+
+private:
+  JobTreeView *m_view;
+};
+
+// Elsewhere - Inside initialization
+m_treeView = new JobTreeView(
+    {"Heading 1", "Heading 2"}, // The table column headings.
+    Cell(""), // The default style and content for the new 'empty' cells.
+    this      // The parent QObject
+    );
+m_childPresenter = SimplePresenter(m_treeView);
diff --git a/dev-docs/source/BatchWidget/JobTreeView.rst b/dev-docs/source/BatchWidget/API/JobTreeView.rst
similarity index 55%
rename from dev-docs/source/BatchWidget/JobTreeView.rst
rename to dev-docs/source/BatchWidget/API/JobTreeView.rst
index e18c38ead56e24a59000bfe94303d287ec67c525..eaee8f74e32a0c84c005c9ece5bb3d7e6a386b94 100644
--- a/dev-docs/source/BatchWidget/JobTreeView.rst
+++ b/dev-docs/source/BatchWidget/API/JobTreeView.rst
@@ -6,7 +6,7 @@ Job Tree View
 
 The :code:`JobTreeView` component provides an MVP style view interface for a hierarchical table
 with a spreadsheet-like appearance for configuring and indicating the status of multiple (batch)
-reduction jobs. It is currently used to implement the tree component of the BatchWidget.
+reduction jobs. It is currently used to implement the tree component of the Batch Widget.
 
 API Concepts
 ############
@@ -27,7 +27,7 @@ each element represents the index of the next node in the path relative to it's
 path. Some example nodes, their corresponding paths, and their representations are illustrated in
 the diagram below.
 
-.. image::  ../images/row_location_path.svg
+.. image::  ../../images/row_location_path.svg
    :align: center
    :width: 800px
 
@@ -63,6 +63,21 @@ Each row in the table can have 0..N cells. When interacting with the :code:`JobT
 sometimes need to be able to address and change the properties of an individual cell. To do this
 we use both a :code:`RowLocation` and a column index, usually actualized as an :code:`int`.
 
+Cells
+^^^^^
+
+In order to retrieve the view properties for one or more specific cells, the methods :code:`cellAt`
+and :code:`cellsAt` can be used to retrieve :code:`Cell` objects for the cell at a row and column
+index or all the cells for a particular row respectively.
+
+The :code:`Cell` class contains the per-cell view properties (such as the text it contains) in a
+view-implementation independent format.
+
+These cell objects intentionally have no link back to the view they originated from and so mutating
+them does not directly update the view. In order to update the cell or cells corresponding to a row,
+the methods :code:`setCellAt` or :code:`setCellsAt` should be used.
+
+This is illustrated in the `Change Cell Color Example`_ below.
 
 Subtrees
 ^^^^^^^^
@@ -76,14 +91,14 @@ paste.
 A subtree in this context refers to a set of one or more nodes within the tree where if the set has
 a size greater than one, each node is directly connected to at least one other node in the set.
 An example of a set of nodes which meets this constraint and a set of nodes which does not are
-illustrated in blue in the diagram below.
+outlined in blue in the diagram below.
 
-.. image::  ../images/subtree.svg
+.. image::  ../../images/subtree.svg
    :align: center
    :width: 800px
 
 The :code:`Subtree` type used to represent this concept in the API is defined in the header
-:code:`Row.h`. Refer to the documentation for the component :doc:`ExtractSubtrees` for more detail
+:code:`Row.h`. Refer to the documentation for the component :doc:`../Internals/ExtractSubtrees` for more detail
 on the internal representation of a subtree in this API.
 
 
@@ -99,7 +114,7 @@ Due to the interactive nature of some events (such as row insertion, cell modifi
 notification does not happen until after said event has taken place and the view has
 already been updated. Therefore, if a presenter determines that said action is on-reflection invalid
 it will be required to call a method which updates the view and rolls back the action.
-This is illustrated in the depth limit example below.
+This is illustrated in the `Depth Limit Example`_ below.
 
 Other events (those who's notification method name ends with :code:`Requested`) require the presenter
 to update the view and/or model and so the notification happens before the view has been updated.
@@ -114,102 +129,29 @@ Usage Examples
 Initializing a JobTreeView
 ^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. code-block:: py
-
-   from mantidqtpython import MantidQt
-
-   def empty_cell():
-     return MantidQt.MantidWidgets.Batch.Cell("")
-
-   # Inside the parent view
-   def setup(self):
-     self.table = MantidQt.MantidWidgets.Batch.JobTreeView(
-       ["Column 1", "Column 2"], # The table column headings
-       empty_cell(), # The default style and content for new 'empty' cells.
-       self # The parent QObject.
-       )
-     self.table_signals = # The signal adapter subscribes to events from the table and
-                          # emits signals whenever it is notified.
-       MantidQt.MantidWidgets.Batch.JobTreeViewSignalAdapter(self.table, self)
-
-     self.table.appendChildRowOf(row([]), [cell("Value for Column A"), cell("Value for Column B")])
+.. literalinclude:: CodeExamples/init.py
 
+.. literalinclude:: CodeExamples/init.cpp
+   :language: c++
 
-.. code-block:: c++
-
-  #include "MantidQtWidgets/Common/Batch/JobTreeView.h"
-
-  using namespace MantidWidgets::Common::Batch;
-
-  // Inside the parent view constructor
-  m_treeView = new JobTreeView(
-    {"Heading 1", "Heading 2"}, // The table column headings.
-    Cell(""), // The default style and content for the new 'empty' cells.
-    this // The parent QObject
-    );
-  m_treeViewSignals = // JobTreeViewSignalAdapter is also available from C++
-                      // Constructing a signal adapter with the view implicitly calls subscribe.
-    new JobTreeViewSignalAdapter(*m_treeView, this);
-  m_treeView->appendChildRowOf(RowLocation(), {Cell("Value for Column A"), Cell("Value for Column B")})
 
 Initializing a JobTreeView with your own subscriber
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. code-block:: c++
+.. literalinclude:: CodeExamples/init_with_custom_subscriber.cpp
+   :language: c++
+
 
-  #include "MantidQtWidgets/Common/Batch/JobTreeView.h"
-
-  using namespace MantidWidgets::Common::Batch;
-
-  class SimplePresenter : public JobTreeViewSubscriber {
-  public:
-    SimplePresenter(JobTreeView* view) : m_view(view) {
-      m_view->subscribe(this); // Since we aren't using signal adapter
-                               // we must remember the call to subscribe.
-    }
-
-    void notifyCellChanged(RowLocation const &itemIndex, int column,
-                           std::string const &newValue) override { /* ... */ }
-    void notifyRowInserted(RowLocation const &newRowLocation) override { /* ... */ }
-    void notifyRemoveRowsRequested(std::vector<RowLocation> const &locationsOfRowsToRemove) override { /* ... */ }
-    void notifyCopyRowsRequested() overrride { /* ... */ }
-    void notifyPasteRowsRequested() override { /* ... */}
-    void notifyFilterReset() override { /* ... */ }
-
-  private:
-    JobTreeView* m_view;
-  };
-
-  // Elsewhere - Inside initialization
-  m_treeView = new JobTreeView(
-    {"Heading 1", "Heading 2"}, // The table column headings.
-    Cell(""), // The default style and content for the new 'empty' cells.
-    this // The parent QObject
-    );
-  m_childPresenter = SimplePresenter(m_treeView);
+.. _Depth Limit Example:
 
 Limiting the depth of the tree
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-.. code-block:: py
-
-   from mantidqtpython import MantidQt
-
-   def empty_cell():
-     return MantidQt.MantidWidgets.Batch.Cell("")
+.. literalinclude:: CodeExamples/depth_limit_example.py
 
-   # Inside the parent view
-   def setup(self):
-     self.table = MantidQt.MantidWidgets.Batch.JobTreeView(
-       ["Column 1", "Column 2"], empty_cell(), self)
-     self.table_signals =
-       MantidQt.MantidWidgets.Batch.JobTreeViewSignalAdapter(self.table, self)
+.. _Change Cell Color Example:
 
-     self.table_signals.rowInserted.connect(self.on_row_inserted)
-     # The rowInserted signal is fired every time a user inserts a row.
-     # It is NOT fired if we manually insert a row.
+Changing the color of a cell
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-   def on_row_inserted(self, rowLocation):
-     if rowLocation.depth() > 2: # If the depth is more than two then
-                                 # we can safely 'rollback' the insertion.
-       self.table.removeRowAt(rowLocation)
+.. literalinclude:: CodeExamples/change_color.py
diff --git a/dev-docs/source/BatchWidget/ExtractSubtrees.rst b/dev-docs/source/BatchWidget/Internals/ExtractSubtrees.rst
similarity index 91%
rename from dev-docs/source/BatchWidget/ExtractSubtrees.rst
rename to dev-docs/source/BatchWidget/Internals/ExtractSubtrees.rst
index 5e7de28b9557f0fe13e60d89ccba13e8140e56b5..2cab39f5193e138ff1ab5bf2df175e5397c72dde 100644
--- a/dev-docs/source/BatchWidget/ExtractSubtrees.rst
+++ b/dev-docs/source/BatchWidget/Internals/ExtractSubtrees.rst
@@ -7,7 +7,7 @@ Extract Subtrees
 The :code:`ExtractSubtrees` component converts a set of row cell contents and a set of row
 locations into a structured set of subtrees, this is better described by the illustration below.
 
-.. image::  ../images/extract_subtree.svg
+.. image::  ../../images/extract_subtree.svg
    :align: center
    :width: 800px
 
@@ -19,7 +19,7 @@ The algorithm used to perform this conversion makes a simplifying assumption tha
 subtrees in the result all share a common parent. If this assumption is untrue then the input set
 is unsuitable and the algorithm will return an empty optional.
 
-.. image::  ../images/subtree_fail.svg
+.. image::  ../../images/subtree_fail.svg
    :align: center
    :width: 800px
 
diff --git a/dev-docs/source/BatchWidget/FindRootNodes.rst b/dev-docs/source/BatchWidget/Internals/FindRootNodes.rst
similarity index 89%
rename from dev-docs/source/BatchWidget/FindRootNodes.rst
rename to dev-docs/source/BatchWidget/Internals/FindRootNodes.rst
index f4ae949741694a12af4460fed1219406a60efd3d..0903fc57569e7141eed06928f7296aaece5c6e44 100644
--- a/dev-docs/source/BatchWidget/FindRootNodes.rst
+++ b/dev-docs/source/BatchWidget/Internals/FindRootNodes.rst
@@ -1,4 +1,4 @@
-.. _ExtractSubtrees:
+.. _FindRootNodes:
 
 ===============
 Find Root Nodes
@@ -9,7 +9,7 @@ lexicographically ordered set of row locations where each location corresponds t
 of a subtree.
 
 
-.. image::  ../images/find_subtree_roots.svg
+.. image::  ../../images/find_subtree_roots.svg
    :align: center
    :width: 800px
 
@@ -21,7 +21,7 @@ The algorithm used to perform this conversion makes a simplifying assumption tha
 subtrees in the result all share a common parent. If this assumption is untrue then the input set
 is unsuitable and the algorithm will return an empty optional.
 
-.. image::  ../images/subtree_fail.svg
+.. image::  ../../images/subtree_fail.svg
    :align: center
    :width: 800px
 
diff --git a/dev-docs/source/BatchWidget/Internals/StrictModelIndexing.rst b/dev-docs/source/BatchWidget/Internals/StrictModelIndexing.rst
new file mode 100644
index 0000000000000000000000000000000000000000..1ee5b01ee7518a66d3699344fe1ae54ff3f5b955
--- /dev/null
+++ b/dev-docs/source/BatchWidget/Internals/StrictModelIndexing.rst
@@ -0,0 +1,55 @@
+.. _StrictModelIndexing:
+
+==============================
+Model Indices in Job Tree View
+==============================
+
+The JobTreeView uses :code:`RowLocation` objects in it's API as an abstraction over
+:code:`QModelIndex`\ s which are used internally to access :code:`QStandardItem`\ s from the 'models'
+provided by Qt. As such code which simply uses the :code:`JobTreeView` does not need to know anything
+about :code:`QModelIndex`\ s.
+
+MVC Models
+^^^^^^^^^^
+
+Sections of Qt such as :code:`QTreeView` are designed as an MVC framework rather than an MVP
+framework, as such working with some sections of it's API become difficult when using MVP. Models in
+MVC are directly accessible from the view which is free to read the data directly from it. In MVP
+however, data access is marshalled through the presenter, models and presenters are not supposed to
+be coupled to any particular view implementation.
+
+The Main Model
+--------------
+
+The :code:`JobTreeView` solves this problem by keeping an internal instance of
+:code:`QStandardItemModel` a Qt 'model' which fulfils Qt's requirements for a 'model' and which acts
+as the view state. We refer to this instance as the 'main model'.
+
+Filtered Model
+--------------
+
+To take advantage of the filtering functionality offered by the :code:`QTreeView`, the
+:code:`JobTreeView` also manages an instance of :code:`QtFilterLeafNodes` a class derived from
+:code:`QSortFilterProxyModel` which is a filtered version of the 'main model'.
+
+Strongly Typed Indexes
+^^^^^^^^^^^^^^^^^^^^^^
+
+The :code:`QModelIndex`\ s into the filtered model cannot be used to directly access items in the
+main model. Likewise, the :code:`QModelIndex`\ s cannot be used to directly access items in the
+filtered model. Indexes must be explicitly converted between the two spaces.
+
+To make this less bugprone, the header file :code:`StrictQModelIndices.h` defines two types,
+:code:`QModelIndexForMainModel` and :code:`QModelIndexForFilteredModel`, functions which wish to
+constrain the indices they accept and/or return can now make that explicit and use the type system
+to catch errors.
+
+Converting Between Index Spaces
+-------------------------------
+
+The filtered model holds a subset of the items in the main model, therefore:
+
+* Conversion from a valid index into the filtered model to a valid index into the main model should
+  always be successful.
+* Conversion from a valid index into the main model to a valid index into the main model could be
+  unsuccessful.
diff --git a/dev-docs/source/BatchWidget/index.rst b/dev-docs/source/BatchWidget/index.rst
index e9c6a98348725a1b0bf9d5080d57ed0c11c1440b..afb6e93ff2bba6b4e86698e1b18b2e6737be38cb 100644
--- a/dev-docs/source/BatchWidget/index.rst
+++ b/dev-docs/source/BatchWidget/index.rst
@@ -8,12 +8,21 @@ The Batch Widget is a hierarchical grid-based widget designed for interfaces whi
 spreadsheet-like interface for configuring, running and indicating the status of multiple (batch)
 reduction jobs.
 
-.. contents:: Contents
-   :local:
+API Documentation
+^^^^^^^^^^^^^^^^^
 
 .. toctree::
    :maxdepth: 1
 
-   JobTreeView
-   ExtractSubtrees
-   FindRootNodes
+   API/JobTreeView
+
+
+Internals Documentation
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. toctree::
+   :maxdepth: 1
+
+   Internals/ExtractSubtrees
+   Internals/FindRootNodes
+   Internals/StrictModelIndexing
diff --git a/dev-docs/source/images/extract_subtree.svg b/dev-docs/source/images/extract_subtree.svg
index 43872dffd9ec1e34e33ca55bb5a70afaf5a1f86e..b1a892c753c4e69f8c58fa29f275eb861a8380c4 100644
--- a/dev-docs/source/images/extract_subtree.svg
+++ b/dev-docs/source/images/extract_subtree.svg
@@ -44,9 +44,9 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="1.979899"
-     inkscape:cx="238.08151"
-     inkscape:cy="141.65831"
+     inkscape:zoom="1.4"
+     inkscape:cx="229.81136"
+     inkscape:cy="83.30804"
      inkscape:document-units="mm"
      inkscape:current-layer="layer1"
      showgrid="false"
@@ -425,7 +425,7 @@
          x="59.699379"
          y="286.08673"
          style="font-size:1.92515373px;stroke-width:0.10313322"
-         id="tspan1070">root nodde of the subtree. The locations and </tspan><tspan
+         id="tspan1070">root node of the subtree. The locations and </tspan><tspan
          sodipodi:role="line"
          x="59.699379"
          y="288.35565"
@@ -440,7 +440,7 @@
          x="59.699379"
          y="292.89352"
          style="font-size:1.92515373px;stroke-width:0.10313322"
-         id="tspan1081">location</tspan></text>
+         id="tspan1081">correct, original location</tspan></text>
     <rect
        style="fill:none;stroke:#000000;stroke-width:0.27800006;stroke-miterlimit:4;stroke-dasharray:none"
        id="rect4836-36"
@@ -536,180 +536,180 @@
        id="rect4836-6"
        width="7.3369966"
        height="3.2129176"
-       x="64.995071"
-       y="259.32718" />
+       x="64.973427"
+       y="271.26877" />
     <rect
        style="fill:none;stroke:#000000;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
        id="rect4836-7-2"
        width="7.3369966"
        height="3.2646143"
-       x="64.995071"
-       y="262.5401" />
+       x="64.973427"
+       y="268.05588" />
     <rect
-       style="fill:none;stroke:#000000;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
+       style="fill:none;stroke:#000000;stroke-width:0.27579007;stroke-miterlimit:4;stroke-dasharray:none"
        id="rect4836-7-5-6"
        width="7.3369966"
-       height="3.2646143"
-       x="64.995071"
-       y="267.86969" />
+       height="3.2129173"
+       x="64.973427"
+       y="274.48169" />
     <text
        xml:space="preserve"
        style="font-style:normal;font-weight:normal;font-size:10.58333397px;line-height:6.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
-       x="65.601959"
-       y="261.50766"
+       x="65.580315"
+       y="273.44925"
        id="text4945-1"><tspan
          sodipodi:role="line"
          id="tspan4943-8"
-         x="65.601959"
-         y="261.50766"
+         x="65.580315"
+         y="273.44925"
          style="font-size:2.11666656px;line-height:171.97915649px;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none">[1, 0]</tspan></text>
     <text
        xml:space="preserve"
        style="font-style:normal;font-weight:normal;font-size:10.58333397px;line-height:6.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
-       x="65.525253"
-       y="264.92676"
+       x="65.503609"
+       y="270.44254"
        id="text4945-7-2-7"><tspan
          sodipodi:role="line"
          id="tspan4943-3-9-9"
-         x="65.525253"
-         y="264.92676"
+         x="65.503609"
+         y="270.44254"
          style="font-size:2.11666656px;line-height:171.97915649px;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none">[1]</tspan></text>
     <text
        xml:space="preserve"
        style="font-style:normal;font-weight:normal;font-size:10.58333397px;line-height:6.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
-       x="65.34269"
-       y="270.31516"
+       x="65.321045"
+       y="276.92715"
        id="text4945-7-2-3-2"><tspan
          sodipodi:role="line"
          id="tspan4943-3-9-1-0"
-         x="65.34269"
-         y="270.31516"
+         x="65.321045"
+         y="276.92715"
          style="font-size:2.11666656px;line-height:171.97915649px;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none">[1, 2]</tspan></text>
     <rect
-       style="fill:none;stroke:#000000;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
+       style="fill:none;stroke:#000000;stroke-width:0.27578944;stroke-miterlimit:4;stroke-dasharray:none"
        id="rect4836-7-5-0-23"
        width="7.3369966"
-       height="3.2646143"
-       x="64.995071"
-       y="271.13431" />
+       height="3.2129023"
+       x="65.145592"
+       y="262.44171" />
     <text
        xml:space="preserve"
        style="font-style:normal;font-weight:normal;font-size:10.58333397px;line-height:6.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
-       x="65.34269"
-       y="273.5798"
+       x="65.526619"
+       y="264.75513"
        id="text4945-7-2-3-9-7"><tspan
          sodipodi:role="line"
          id="tspan4943-3-9-1-3-5"
-         x="65.34269"
-         y="273.5798"
+         x="65.526619"
+         y="264.75513"
          style="font-size:2.11666656px;line-height:171.97915649px;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none">[0, 1]</tspan></text>
     <rect
        style="fill:none;stroke:#000000;stroke-width:0.27131361;stroke-miterlimit:4;stroke-dasharray:none"
        id="rect4836-7-5-0-2-9"
        width="7.3369966"
        height="3.1094632"
-       x="64.995071"
-       y="274.39893" />
+       x="65.145592"
+       y="259.32471" />
     <text
        xml:space="preserve"
        style="font-style:normal;font-weight:normal;font-size:10.58333397px;line-height:6.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
-       x="65.34269"
-       y="276.84442"
+       x="65.509911"
+       y="261.56976"
        id="text4945-7-2-3-9-6-2"><tspan
          sodipodi:role="line"
          id="tspan4943-3-9-1-3-1-2"
-         x="65.34269"
-         y="276.84442"
+         x="65.509911"
+         y="261.56976"
          style="font-size:2.11666656px;line-height:171.97915649px;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none">[0]</tspan></text>
     <rect
        style="fill:none;stroke:#000000;stroke-width:0.27800006;stroke-miterlimit:4;stroke-dasharray:none"
        id="rect4836-36-8"
        width="27.772625"
        height="3.2129004"
-       x="72.332069"
-       y="259.32718" />
+       x="72.310425"
+       y="271.26877" />
     <rect
        style="fill:none;stroke:#000000;stroke-width:0.27800006;stroke-miterlimit:4;stroke-dasharray:none"
        id="rect4836-7-7-9"
        width="27.772625"
        height="3.2129004"
-       x="72.332069"
-       y="262.5401" />
+       x="72.310425"
+       y="268.05588" />
     <rect
        style="fill:none;stroke:#000000;stroke-width:0.27800006;stroke-miterlimit:4;stroke-dasharray:none"
        id="rect4836-7-5-5-7"
        width="27.772625"
        height="3.2129004"
-       x="72.332069"
-       y="267.86969" />
+       x="72.310425"
+       y="274.48169" />
     <text
        xml:space="preserve"
        style="font-style:normal;font-weight:normal;font-size:10.58333492px;line-height:6.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
-       x="72.809669"
-       y="261.43008"
+       x="72.788025"
+       y="273.37167"
        id="text4945-3-3"><tspan
          sodipodi:role="line"
          id="tspan4943-5-6"
-         x="72.809669"
-         y="261.43008"
+         x="72.788025"
+         y="273.37167"
          style="font-size:2.11666656px;line-height:171.97915649px;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none">[1, 0] Cell Contents</tspan></text>
     <text
        xml:space="preserve"
        style="font-style:normal;font-weight:normal;font-size:10.58333492px;line-height:6.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
-       x="72.732964"
-       y="264.84918"
+       x="72.711319"
+       y="270.36496"
        id="text4945-7-2-6-1"><tspan
          sodipodi:role="line"
          id="tspan4943-3-9-2-2"
-         x="72.732964"
-         y="264.84918"
+         x="72.711319"
+         y="270.36496"
          style="font-size:2.11666656px;line-height:171.97915649px;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none">[1] Cell Contents</tspan></text>
     <text
        xml:space="preserve"
        style="font-style:normal;font-weight:normal;font-size:10.58333492px;line-height:6.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
-       x="72.5504"
-       y="270.28931"
+       x="72.528755"
+       y="276.90131"
        id="text4945-7-2-3-91-9"><tspan
          sodipodi:role="line"
          id="tspan4943-3-9-1-2-3"
-         x="72.5504"
-         y="270.28931"
+         x="72.528755"
+         y="276.90131"
          style="font-size:2.11666656px;line-height:171.97915649px;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none">[1, 2] Cell Contents</tspan></text>
     <rect
        style="fill:none;stroke:#000000;stroke-width:0.27800006;stroke-miterlimit:4;stroke-dasharray:none"
        id="rect4836-7-5-0-7-1"
        width="27.772625"
        height="3.2129004"
-       x="72.332069"
-       y="271.08261" />
+       x="72.48259"
+       y="262.44171" />
     <text
        xml:space="preserve"
        style="font-style:normal;font-weight:normal;font-size:10.58333492px;line-height:6.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
-       x="72.5504"
-       y="273.55396"
+       x="72.70092"
+       y="264.91302"
        id="text4945-7-2-3-9-0-9"><tspan
          sodipodi:role="line"
          id="tspan4943-3-9-1-3-9-4"
-         x="72.5504"
-         y="273.55396"
+         x="72.70092"
+         y="264.91302"
          style="font-size:2.11666656px;line-height:171.97915649px;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none">[0, 1] Cell Contents</tspan></text>
     <rect
-       style="fill:none;stroke:#000000;stroke-width:0.27800006;stroke-miterlimit:4;stroke-dasharray:none"
+       style="fill:none;stroke:#000000;stroke-width:0.27385628;stroke-miterlimit:4;stroke-dasharray:none"
        id="rect4836-7-5-0-2-3-7"
-       width="27.772625"
-       height="3.2129004"
-       x="72.332069"
-       y="274.2955" />
+       width="27.780136"
+       height="3.1169903"
+       x="72.48259"
+       y="259.32471" />
     <text
        xml:space="preserve"
        style="font-style:normal;font-weight:normal;font-size:10.58333492px;line-height:6.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none"
-       x="72.5504"
-       y="276.81857"
+       x="72.70092"
+       y="261.74435"
        id="text4945-7-2-3-9-6-6-8"><tspan
          sodipodi:role="line"
          id="tspan4943-3-9-1-3-1-0-4"
-         x="72.5504"
-         y="276.81857"
+         x="72.70092"
+         y="261.74435"
          style="font-size:2.11666656px;line-height:171.97915649px;stroke-width:0.278;stroke-miterlimit:4;stroke-dasharray:none">[0] Cell Contents</tspan></text>
     <rect
        style="fill:none;stroke:#000000;stroke-width:0.27800006;stroke-miterlimit:4;stroke-dasharray:none"