Index: src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py
===================================================================
--- src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py	(revision 441a03fa6eb28d0f84c865224e86f1eee464c385)
+++ src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py	(revision edd6720377108f9525c65d92fae1a8420ca0902c)
@@ -28,8 +28,7 @@
 BACKGROUND_INPUT = 0.0
 MAX_DIST = 140.0
-DICT_KEYS = ["Calculator", "PrPlot", "DataPlot", "DMaxWindow", "NFuncEst"]
-
-
-# TODO: Explore window not working
+DICT_KEYS = ["Calculator", "PrPlot", "DataPlot"]
+
+
 # TODO: Update help with batch capabilities
 # TODO: Method to export results in some meaningful way
@@ -61,6 +60,4 @@
         # current QStandardItem showing on the panel
         self._data = None
-        # current Data1D as referenced by self._data
-        self._data_set = None
         # Reference to Dmax window for self._data
         self.dmaxWindow = None
@@ -78,4 +75,5 @@
         self.calc_thread = None
         self.estimation_thread = None
+        self.estimation_thread_nt = None
 
         # Mapping for all data items
@@ -303,9 +301,8 @@
             self.regConstantSuggestionButton.text()))
 
-    def displayChange(self):
+    def displayChange(self, data_index=0):
         """Switch to another item in the data list"""
-        ref_item = self.dataList.itemData(self.dataList.currentIndex())
-        self.updateDataList(ref_item)
-        self.setCurrentData(ref_item)
+        self.updateDataList(self._data)
+        self.setCurrentData(self.dataList.itemData(data_index))
 
     ######################################################################
@@ -314,7 +311,7 @@
     def update_calculator(self):
         """Update all p(r) params"""
-        self._calculator.set_x(self._data_set.x)
-        self._calculator.set_y(self._data_set.y)
-        self._calculator.set_err(self._data_set.dy)
+        self._calculator.set_x(self.logic.data.x)
+        self._calculator.set_y(self.logic.data.y)
+        self._calculator.set_err(self.logic.data.dy)
         self.set_background(self.backgroundInput.text())
 
@@ -342,5 +339,5 @@
             self.dmaxWindow.nfunc = self.getNFunc()
             self.dmaxWindow.modelChanged()
-        self.mapper.toFirst()
+        self.mapper.toLast()
 
     def help(self):
@@ -359,9 +356,10 @@
         Toggle the background between manual and estimated
         """
-        sender = self.sender()
-        if sender is self.estimateBgd:
+        if self.estimateBgd.isChecked():
+            self.manualBgd.setChecked(False)
             self.backgroundInput.setEnabled(False)
             self._calculator.set_est_bck = True
-        elif sender is self.manualBgd:
+        elif self.manualBgd.isChecked():
+            self.estimateBgd.setChecked(False)
             self.backgroundInput.setEnabled(True)
             self._calculator.set_est_bck = False
@@ -395,9 +393,7 @@
             if data in self._data_list.keys():
                 # Don't add data if it's already in
-                return
+                continue
             # Create initial internal mappings
-            self._data_set = GuiUtils.dataFromItem(data)
-            self.logic = InversionLogic(self._data_set)
-            self.populateDataComboBox(self._data_set.filename, data)
+            self.logic.data = GuiUtils.dataFromItem(data)
             # Estimate q range
             qmin, qmax = self.logic.computeDataRange()
@@ -405,8 +401,7 @@
             self._calculator.set_qmax(qmax)
             self.updateDataList(data)
-            self.setCurrentData(data)
-            # Estimate initial values from data
-            self.performEstimate()
-        self.updateGuiValues()
+            self.populateDataComboBox(self.logic.data.filename, data)
+        self.dataList.setCurrentIndex(len(self.dataList) - 1)
+        self.setCurrentData(data)
 
     def updateDataList(self, dataRef):
@@ -417,7 +412,5 @@
             DICT_KEYS[0]: self._calculator,
             DICT_KEYS[1]: self.pr_plot,
-            DICT_KEYS[2]: self.data_plot,
-            DICT_KEYS[3]: self.dmaxWindow,
-            DICT_KEYS[4]: self.nTermsSuggested
+            DICT_KEYS[2]: self.data_plot
         }
 
@@ -427,5 +420,6 @@
             nfunc = int(self.noOfTermsInput.text())
         except ValueError:
-            logging.error("Incorrect number of terms specified: %s" %self.noOfTermsInput.text())
+            logging.error("Incorrect number of terms specified: %s"
+                          %self.noOfTermsInput.text())
             self.noOfTermsInput.setText(str(NUMBER_OF_TERMS))
             nfunc = NUMBER_OF_TERMS
@@ -441,12 +435,9 @@
         # Data references
         self._data = data_ref
-        self._data_set = GuiUtils.dataFromItem(data_ref)
+        self.logic.data = GuiUtils.dataFromItem(data_ref)
         self._calculator = self._data_list[data_ref].get(DICT_KEYS[0])
         self.pr_plot = self._data_list[data_ref].get(DICT_KEYS[1])
         self.data_plot = self._data_list[data_ref].get(DICT_KEYS[2])
-        self.dmaxWindow = self._data_list[data_ref].get(DICT_KEYS[3])
-        self.nTermsSuggested = self._data_list[data_ref].get(DICT_KEYS[4])
-        self.logic.set_data = self._data_set
-        self.updateGuiValues()
+        self.performEstimate()
 
     def updateGuiValues(self):
@@ -456,5 +447,4 @@
         elapsed = self._calculator.elapsed
         alpha = self._calculator.suggested_alpha
-        nterms = self._calculator.nfunc
         self.model.setItem(WIDGETS.W_QMIN,
                            QtGui.QStandardItem("{:.4g}".format(pr.get_qmin())))
@@ -496,5 +486,5 @@
         """Remove the existing data reference from the P(r) Persepective"""
         if self.dmaxWindow is not None:
-            self.dmaxWindow.done()
+            self.dmaxWindow.close()
             self.dmaxWindow = None
         self.dataList.removeItem(self.dataList.currentIndex())
@@ -502,10 +492,8 @@
         # Last file removed
         if len(self._data_list) == 0:
-            self._data = None
-            self._data_set = None
             self.pr_plot = None
             self.data_plot = None
             self._calculator = Invertor()
-            self.logic.data = self._data_set
+            self.logic.data = None
             self.nTermsSuggested = NUMBER_OF_TERMS
             self.noOfTermsSuggestionButton.setText("{:n}".format(
@@ -513,5 +501,5 @@
             self.regConstantSuggestionButton.setText("{:-3.2g}".format(
                 REGULARIZATION))
-            self.enableButtons()
+            self.updateGuiValues()
             self.setupModel()
         else:
@@ -553,8 +541,10 @@
         from .Thread import EstimateNT
 
+        self.update_calculator()
+
         # If a thread is already started, stop it
-        if (self.estimation_thread is not None and
-                self.estimation_thread.isrunning()):
-            self.estimation_thread.stop()
+        if (self.estimation_thread_nt is not None and
+                self.estimation_thread_nt.isrunning()):
+            self.estimation_thread_nt.stop()
         pr = self._calculator.clone()
         # Skip the slit settings for the estimation
@@ -564,10 +554,10 @@
         nfunc = self.getNFunc()
 
-        self.estimation_thread = EstimateNT(pr, nfunc,
+        self.estimation_thread_nt = EstimateNT(pr, nfunc,
                                             error_func=self._threadError,
                                             completefn=self._estimateNTCompleted,
                                             updatefn=None)
-        self.estimation_thread.queue()
-        self.estimation_thread.ready(2.5)
+        self.estimation_thread_nt.queue()
+        self.estimation_thread_nt.ready(2.5)
 
     def performEstimate(self):
@@ -576,6 +566,4 @@
         """
         from .Thread import EstimatePr
-
-        self.startThread()
 
         # If a thread is already started, stop it
@@ -583,7 +571,6 @@
                 self.estimation_thread.isrunning()):
             self.estimation_thread.stop()
-        pr = self._calculator.clone()
-        nfunc = self.getNFunc()
-        self.estimation_thread = EstimatePr(pr, nfunc,
+        self.estimation_thread = EstimatePr(self._calculator.clone(),
+                                            self.getNFunc(),
                                             error_func=self._threadError,
                                             completefn=self._estimateCompleted,
