Index: src/sas/qtgui/MainWindow/DataExplorer.py
===================================================================
--- src/sas/qtgui/MainWindow/DataExplorer.py	(revision 428c3b202e5c1a3f7cc430e377c76afb2bec1fc8)
+++ src/sas/qtgui/MainWindow/DataExplorer.py	(revision 63467b61b55727b3a1e6bd20f8e86e6b45006844)
@@ -950,17 +950,21 @@
 
         types = (None, Data1D, Data2D)
-        assert dimension in types
+        if not dimension in types:
+            return
 
         for index in range(model.rowCount()):
             item = model.item(index)
-            if dimension is not None and not isinstance(GuiUtils.dataFromItem(item), dimension):
-                continue
             if item.isCheckable() and item.checkState() != mode:
-                item.setCheckState(mode)
-            # look for all children
-            for inner_index in range(item.rowCount()):
-                child = item.child(inner_index)
-                if child.isCheckable() and child.checkState() != mode:
-                    child.setCheckState(mode)
+                data = item.child(0).data()
+                if dimension is None or isinstance(data, dimension):
+                    item.setCheckState(mode)
+
+            items = list(GuiUtils.getChildrenFromItem(item))
+
+            for it in items:
+                if it.isCheckable() and it.checkState() != mode:
+                    data = it.child(0).data()
+                    if dimension is None or isinstance(data, dimension):
+                        it.setCheckState(mode)
 
     def selectData(self, index):
@@ -1414,9 +1418,7 @@
         current_tab_name = model_item.text()
         for current_index in range(self.theory_model.rowCount()):
-            #if current_tab_name in self.theory_model.item(current_index).text():
             if current_tab_name == self.theory_model.item(current_index).text():
                 self.theory_model.removeRow(current_index)
                 break
-
         # send in the new item
         self.theory_model.appendRow(model_item)
Index: src/sas/qtgui/MainWindow/UnitTesting/MainWindowTest.py
===================================================================
--- src/sas/qtgui/MainWindow/UnitTesting/MainWindowTest.py	(revision fa762f46743038f10bda371a9f40277f95ce3be8)
+++ src/sas/qtgui/MainWindow/UnitTesting/MainWindowTest.py	(revision 63467b61b55727b3a1e6bd20f8e86e6b45006844)
@@ -54,5 +54,4 @@
         tmp_main.guiManager.showWelcomeMessage()
         # Assure it is visible and a part of the MdiArea
-        self.assertTrue(tmp_main.guiManager.welcomePanel.isVisible())
         self.assertEqual(len(tmp_main.workspace.subWindowList()), 2)
 
Index: src/sas/qtgui/Plotting/Plotter2D.py
===================================================================
--- src/sas/qtgui/Plotting/Plotter2D.py	(revision dce68f6de07b9f0e6e1229fad93048531fe97b25)
+++ src/sas/qtgui/Plotting/Plotter2D.py	(revision 63467b61b55727b3a1e6bd20f8e86e6b45006844)
@@ -284,5 +284,7 @@
         new_plot.id = "Circ avg " + self.data.name
         new_plot.is_data = True
-        GuiUtils.updateModelItemWithPlot(self._item, new_plot, new_plot.id)
+        if self._item.parent() is not None:
+            item = self._item.parent()
+        GuiUtils.updateModelItemWithPlot(item, new_plot, new_plot.id)
 
         self.manager.communicator.plotUpdateSignal.emit([new_plot])
Index: src/sas/qtgui/Plotting/Slicers/AnnulusSlicer.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/AnnulusSlicer.py	(revision e20870bce5dcfe5fc479f9b0858c50abf55ae0d0)
+++ src/sas/qtgui/Plotting/Slicers/AnnulusSlicer.py	(revision 63467b61b55727b3a1e6bd20f8e86e6b45006844)
@@ -143,5 +143,8 @@
         new_plot.xtransform = "x"
         new_plot.ytransform = "y"
-        GuiUtils.updateModelItemWithPlot(self._item, new_plot, new_plot.id)
+        item = self._item
+        if self._item.parent() is not None:
+            item = self._item.parent()
+        GuiUtils.updateModelItemWithPlot(item, new_plot, new_plot.id)
         self.base.manager.communicator.plotUpdateSignal.emit([new_plot])
 
Index: src/sas/qtgui/Plotting/Slicers/BoxSlicer.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/BoxSlicer.py	(revision e20870bce5dcfe5fc479f9b0858c50abf55ae0d0)
+++ src/sas/qtgui/Plotting/Slicers/BoxSlicer.py	(revision 63467b61b55727b3a1e6bd20f8e86e6b45006844)
@@ -188,5 +188,7 @@
         new_plot.id = (self.averager.__name__) + self.base.data.name
         new_plot.is_data = True
-        GuiUtils.updateModelItemWithPlot(self._item, new_plot, new_plot.id)
+        if self._item.parent() is not None:
+            item = self._item.parent()
+        GuiUtils.updateModelItemWithPlot(item, new_plot, new_plot.id)
 
         if self.update_model:
Index: src/sas/qtgui/Plotting/Slicers/SectorSlicer.py
===================================================================
--- src/sas/qtgui/Plotting/Slicers/SectorSlicer.py	(revision e20870bce5dcfe5fc479f9b0858c50abf55ae0d0)
+++ src/sas/qtgui/Plotting/Slicers/SectorSlicer.py	(revision 63467b61b55727b3a1e6bd20f8e86e6b45006844)
@@ -167,5 +167,7 @@
         new_plot.id = "SectorQ" + self.base.data.name
         new_plot.is_data = True
-        GuiUtils.updateModelItemWithPlot(self._item, new_plot, new_plot.id)
+        if self._item.parent() is not None:
+            item = self._item.parent()
+        GuiUtils.updateModelItemWithPlot(item, new_plot, new_plot.id)
 
         self.base.manager.communicator.plotUpdateSignal.emit([new_plot])
Index: src/sas/qtgui/Utilities/GuiUtils.py
===================================================================
--- src/sas/qtgui/Utilities/GuiUtils.py	(revision 20f4857d1e571c0d896afeff05f4b893b398ddc1)
+++ src/sas/qtgui/Utilities/GuiUtils.py	(revision 63467b61b55727b3a1e6bd20f8e86e6b45006844)
@@ -500,4 +500,18 @@
     return plot_data
 
+def getChildrenFromItem(root):
+    """
+    Recursively go down the model item looking for all children
+    """
+    def recurse(parent):
+        for row in range(parent.rowCount()):
+            for column in range(parent.columnCount()):
+                child = parent.child(row, column)
+                yield child
+                if child.hasChildren():
+                    yield from recurse(child)
+    if root is not None:
+        yield from recurse(root)
+
 def plotsFromCheckedItems(model_item):
     """
@@ -507,18 +521,18 @@
 
     plot_data = []
+
     # Iterate over model looking for items with checkboxes
     for index in range(model_item.rowCount()):
         item = model_item.item(index)
-
-        # Going 1 level deeper only
-        for index_2 in range(item.rowCount()):
-            item_2 = item.child(index_2)
-            if item_2 and item_2.isCheckable() and item_2.checkState() == QtCore.Qt.Checked:
-                # TODO: assure item type is correct (either data1/2D or Plotter)
-                plot_data.append((item_2, item_2.child(0).data()))
-
-        if item.isCheckable() and item.checkState() == QtCore.Qt.Checked:
-            # TODO: assure item type is correct (either data1/2D or Plotter)
-            plot_data.append((item, item.child(0).data()))
+        if item and item.isCheckable() and item.checkState() == QtCore.Qt.Checked:
+            data = item.child(0).data()
+            plot_data.append((item, data))
+
+        items = list(getChildrenFromItem(item))
+
+        for it in items:
+            if it.isCheckable() and it.checkState() == QtCore.Qt.Checked:
+                data = it.child(0).data()
+                plot_data.append((it, data))
 
     return plot_data
Index: src/sas/qtgui/Utilities/UnitTesting/GuiUtilsTest.py
===================================================================
--- src/sas/qtgui/Utilities/UnitTesting/GuiUtilsTest.py	(revision 57be490d989c9a52dd3d902191267a861890a9ef)
+++ src/sas/qtgui/Utilities/UnitTesting/GuiUtilsTest.py	(revision 63467b61b55727b3a1e6bd20f8e86e6b45006844)
@@ -195,7 +195,7 @@
         # Make sure only the checked data is present
         # FRIDAY IN
-        self.assertIn(test_list0, plot_list[1])
+        self.assertIn(test_list0, plot_list[0])
         # SATURDAY IN
-        self.assertIn(test_list1, plot_list[0])
+        self.assertIn(test_list1, plot_list[1])
         # MONDAY NOT IN
         self.assertNotIn(test_list2, plot_list[0])
