Index: src/sas/qtgui/MainWindow/DataExplorer.py
===================================================================
--- src/sas/qtgui/MainWindow/DataExplorer.py	(revision a24eacf3b3a9ca51fe5e34059e28454573779b5f)
+++ src/sas/qtgui/MainWindow/DataExplorer.py	(revision 6b5029659d0f8848859513403a8ef38c0481f7db)
@@ -394,4 +394,47 @@
         # Notify the GuiManager about the send request
         self._perspective().setData(data_item=selected_items, is_batch=self.chkBatch.isChecked())
+
+    def freezeCheckedData(self):
+        """
+        Convert checked results (fitted model, residuals) into separate dataset.
+        """
+        outer_index = -1
+        theories_copied = 0
+        orig_model_size = self.model.rowCount()
+        while outer_index < orig_model_size:
+            outer_index += 1
+            outer_item = self.model.item(outer_index)
+            if not outer_item:
+                continue
+            if not outer_item.isCheckable():
+                continue
+            # Look for checked inner items
+            inner_index = -1
+            while inner_index < outer_item.rowCount():
+               inner_item = outer_item.child(inner_index)
+               inner_index += 1
+               if not inner_item:
+                   continue
+               if not inner_item.isCheckable():
+                   continue
+               if inner_item.checkState() != QtCore.Qt.Checked:
+                   continue
+               self.model.beginResetModel()
+               theories_copied += 1
+               new_item = self.cloneTheory(inner_item)
+               self.model.appendRow(new_item)
+               self.model.endResetModel()
+
+        freeze_msg = ""
+        if theories_copied == 0:
+            return
+        elif theories_copied == 1:
+            freeze_msg = "1 theory copied to a separate data set"
+        elif theories_copied > 1:
+            freeze_msg = "%i theories copied to separate data sets" % theories_copied
+        else:
+            freeze_msg = "Unexpected number of theories copied: %i" % theories_copied
+            raise AttributeError(freeze_msg)
+        self.communicator.statusBarUpdateSignal.emit(freeze_msg)
 
     def freezeTheory(self, event):
Index: src/sas/qtgui/MainWindow/GuiManager.py
===================================================================
--- src/sas/qtgui/MainWindow/GuiManager.py	(revision aa1db44bef6b137ed4ef0e1b1e13a6c94ba6a928)
+++ src/sas/qtgui/MainWindow/GuiManager.py	(revision 6b5029659d0f8848859513403a8ef38c0481f7db)
@@ -438,4 +438,5 @@
         self._workspace.actionImage_Viewer.triggered.connect(self.actionImage_Viewer)
         self._workspace.actionOrientation_Viewer.triggered.connect(self.actionOrientation_Viewer)
+        self._workspace.actionFreeze_Theory.triggered.connect(self.actionFreeze_Theory)
         # Fitting
         self._workspace.actionNew_Fit_Page.triggered.connect(self.actionNew_Fit_Page)
@@ -683,4 +684,10 @@
         self._workspace.addDockWidget(Qt.RightDockWidgetArea, self.ipDockWidget)
 
+    def actionFreeze_Theory(self):
+        """
+        Convert a child index with data into a separate top level dataset
+        """
+        self.filesWidget.freezeCheckedData()
+
     def actionOrientation_Viewer(self):
         """
Index: src/sas/qtgui/MainWindow/UI/MainWindowUI.ui
===================================================================
--- src/sas/qtgui/MainWindow/UI/MainWindowUI.ui	(revision aa1db44bef6b137ed4ef0e1b1e13a6c94ba6a928)
+++ src/sas/qtgui/MainWindow/UI/MainWindowUI.ui	(revision 6b5029659d0f8848859513403a8ef38c0481f7db)
@@ -64,4 +64,6 @@
     <addaction name="actionReport"/>
     <addaction name="actionReset"/>
+    <addaction name="separator"/>
+    <addaction name="actionFreeze_Theory"/>
    </widget>
    <widget class="QMenu" name="menuView">
@@ -535,4 +537,9 @@
    </property>
   </action>
+  <action name="actionFreeze_Theory">
+   <property name="text">
+    <string>Freeze Theory</string>
+   </property>
+  </action>
  </widget>
  <resources/>
