Index: src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py
===================================================================
--- src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py	(revision 6a3e1fed96400e06c3fff6a0cf0316fe8169b0d5)
+++ src/sas/qtgui/Perspectives/Inversion/InversionPerspective.py	(revision f1ec9019e6bd28d9be1b32c5e6009d38039117a0)
@@ -38,4 +38,7 @@
 
     name = "Inversion"
+    estimateSignal = QtCore.pyqtSignal(tuple)
+    estimateNTSignal = QtCore.pyqtSignal(tuple)
+    calculateSignal = QtCore.pyqtSignal(tuple)
 
     def __init__(self, parent=None, data=None):
@@ -76,4 +79,8 @@
             for datum in data_list:
                 self._data_list[datum] = self._calculator.clone()
+
+        # dict of models for quick update after calculation
+        # {item:model}
+        self._models = {}
 
         # plots for current data
@@ -132,6 +139,6 @@
         """Connect the use controls to their appropriate methods"""
         self.dataList.currentIndexChanged.connect(self.displayChange)
-        #self.calculateAllButton.clicked.connect(self.startThreadAll)
-        #self.calculateThisButton.clicked.connect(self.startThread)
+        self.calculateAllButton.clicked.connect(self.startThreadAll)
+        self.calculateThisButton.clicked.connect(self.startThread)
         self.removeButton.clicked.connect(self.removeData)
         self.helpButton.clicked.connect(self.help)
@@ -141,26 +148,31 @@
         self.noOfTermsSuggestionButton.clicked.connect(self.acceptNoTerms)
         self.explorerButton.clicked.connect(self.openExplorerWindow)
-        self.backgroundInput.textChanged.connect(
+
+        self.backgroundInput.editingFinished.connect(
             lambda: self._calculator.set_est_bck(int(is_float(
-                str(self.backgroundInput.text())))))
-        self.minQInput.textChanged.connect(
+                self.backgroundInput.text()))))
+        self.minQInput.editingFinished.connect(
             lambda: self._calculator.set_qmin(is_float(
-                str(self.minQInput.text()))))
-        self.regularizationConstantInput.textChanged.connect(
+                self.minQInput.text())))
+        self.regularizationConstantInput.editingFinished.connect(
             lambda: self._calculator.set_alpha(is_float(
-                str(self.regularizationConstantInput.text()))))
-        self.maxDistanceInput.textChanged.connect(
+                self.regularizationConstantInput.text())))
+        self.maxDistanceInput.editingFinished.connect(
             lambda: self._calculator.set_dmax(is_float(
-                str(self.maxDistanceInput.text()))))
-        self.maxQInput.textChanged.connect(
+                self.maxDistanceInput.text())))
+        self.maxQInput.editingFinished.connect(
             lambda: self._calculator.set_qmax(is_float(
-                str(self.maxQInput.text()))))
-        self.slitHeightInput.textChanged.connect(
+                self.maxQInput.text())))
+        self.slitHeightInput.editingFinished.connect(
             lambda: self._calculator.set_slit_height(is_float(
-                str(self.slitHeightInput.text()))))
-        self.slitWidthInput.textChanged.connect(
+                self.slitHeightInput.text())))
+        self.slitWidthInput.editingFinished.connect(
             lambda: self._calculator.set_slit_width(is_float(
-                str(self.slitHeightInput.text()))))
+                self.slitHeightInput.text())))
+
         self.model.itemChanged.connect(self.model_changed)
+        self.estimateNTSignal.connect(self._estimateNTUpdate)
+        self.estimateSignal.connect(self._estimateUpdate)
+        self.calculateSignal.connect(self._calculateUpdate)
 
     def setupMapper(self):
@@ -208,7 +220,7 @@
         # Main Buttons
         self.mapper.addMapping(self.removeButton, WIDGETS.W_REMOVE)
-        #self.mapper.addMapping(self.calculateAllButton, WIDGETS.W_CALCULATE_ALL)
-        #self.mapper.addMapping(self.calculateThisButton,
-        #                       WIDGETS.W_CALCULATE_VISIBLE)
+        self.mapper.addMapping(self.calculateAllButton, WIDGETS.W_CALCULATE_ALL)
+        self.mapper.addMapping(self.calculateThisButton,
+                               WIDGETS.W_CALCULATE_VISIBLE)
         self.mapper.addMapping(self.helpButton, WIDGETS.W_HELP)
 
@@ -269,6 +281,4 @@
         self.removeButton.setEnabled(self.logic.data_is_loaded)
         self.explorerButton.setEnabled(self.logic.data_is_loaded)
-        #self.calculateAllButton.setEnabled(self.logic.data_is_loaded)
-        #self.calculateThisButton.setEnabled(self.logic.data_is_loaded)
 
     def populateDataComboBox(self, filename, data_ref):
@@ -291,6 +301,8 @@
 
     def displayChange(self):
-        variant_ref = self.dataList.itemData(self.dataList.currentIndex())
-        self.setCurrentData(variant_ref)
+        ref_item = self.dataList.itemData(self.dataList.currentIndex())
+        self._model_item = ref_item
+        self.setCurrentData(ref_item)
+        self.setCurrentModel(ref_item)
 
     def removeData(self):
@@ -304,4 +316,9 @@
     ######################################################################
     # GUI Interaction Events
+
+    def setCurrentModel(self, ref_item):
+        '''update the current model with stored values'''
+        if ref_item in self._models:
+            self.model = self._models[ref_item]
 
     def update_calculator(self):
@@ -394,4 +411,6 @@
             self.model.setItem(WIDGETS.W_QMIN, QtGui.QStandardItem("{:.4g}".format(qmin)))
             self.model.setItem(WIDGETS.W_QMAX, QtGui.QStandardItem("{:.4g}".format(qmax)))
+            self._models[data] = self.model
+            self.model_item = data
 
         self.enableButtons()
@@ -417,7 +436,4 @@
         self.pr_plot = self.pr_plot_list[data_ref]
         self.data_plot = self.data_plot_list[data_ref]
-        # Rerun the calculations for the current set
-        self.startThread()
-        self.model_changed()
 
     ######################################################################
@@ -448,5 +464,6 @@
         self.calc_thread = CalcPr(pr, nfunc,
                                   error_func=self._threadError,
-                                  completefn=self._completed, updatefn=None)
+                                  completefn=self._calculateCompleted,
+                                  updatefn=None)
         self.calc_thread.queue()
         self.calc_thread.ready(2.5)
@@ -454,5 +471,5 @@
     def performEstimateNT(self):
         """
-            Perform parameter estimation
+        Perform parameter estimation
         """
         from .Thread import EstimateNT
@@ -468,4 +485,5 @@
         pr.slit_width = 0.0
         nfunc = self.getNFunc()
+
         self.estimation_thread = EstimateNT(pr, nfunc,
                                             error_func=self._threadError,
@@ -500,4 +518,8 @@
 
     def _estimateCompleted(self, alpha, message, elapsed):
+        ''' Send a signal to the main thread for model update'''
+        self.estimateSignal.emit((alpha, message, elapsed))
+
+    def _estimateUpdate(self, output_tuple):
         """
         Parameter estimation completed,
@@ -507,4 +529,5 @@
         :param elapsed: computation time
         """
+        alpha, message, elapsed = output_tuple
         # Save useful info
         self.model.setItem(WIDGETS.W_COMP_TIME, QtGui.QStandardItem(str(elapsed)))
@@ -516,4 +539,8 @@
 
     def _estimateNTCompleted(self, nterms, alpha, message, elapsed):
+        ''' Send a signal to the main thread for model update'''
+        self.estimateNTSignal.emit((nterms, alpha, message, elapsed))
+
+    def _estimateNTUpdate(self, output_tuple):
         """
         Parameter estimation completed,
@@ -523,6 +550,6 @@
         :param nterms: estimated number of terms
         :param elapsed: computation time
-
-        """
+        """
+        nterms, alpha, message, elapsed = output_tuple
         # Save useful info
         self.noOfTermsSuggestionButton.setText("{:n}".format(nterms))
@@ -531,9 +558,12 @@
         self.regConstantSuggestionButton.setEnabled(True)
         self.model.setItem(WIDGETS.W_COMP_TIME, QtGui.QStandardItem(str(elapsed)))
-        #self.PrTabWidget.setCurrentIndex(0)
         if message:
             logging.info(message)
 
-    def _completed(self, out, cov, pr, elapsed):
+    def _calculateCompleted(self, out, cov, pr, elapsed):
+        ''' Send a signal to the main thread for model update'''
+        self.calculateSignal.emit((out, cov, pr, elapsed))
+
+    def _calculateUpdate(self, output_tuple):
         """
         Method called with the results when the inversion is done
@@ -543,6 +573,6 @@
         :param pr: Invertor instance
         :param elapsed: time spent computing
-
-        """
+        """
+        out, cov, pr, elapsed = output_tuple
         # Save useful info
         cov = np.ascontiguousarray(cov)
@@ -572,4 +602,7 @@
         # Append data to data list
         self._data_list[self._data] = self._calculator.clone()
+
+        # Update model dict
+        self._models[self.model_item] = self.model
 
         # Create new P(r) and fit plots
Index: src/sas/qtgui/Perspectives/Inversion/UI/TabbedInversionUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Inversion/UI/TabbedInversionUI.ui	(revision 6a3e1fed96400e06c3fff6a0cf0316fe8169b0d5)
+++ src/sas/qtgui/Perspectives/Inversion/UI/TabbedInversionUI.ui	(revision f1ec9019e6bd28d9be1b32c5e6009d38039117a0)
@@ -8,5 +8,5 @@
     <y>0</y>
     <width>458</width>
-    <height>679</height>
+    <height>695</height>
    </rect>
   </property>
@@ -565,8 +565,19 @@
    </item>
    <item row="2" column="0">
-    <layout class="QHBoxLayout" name="horizontalLayout_8">
-     <property name="sizeConstraint">
-      <enum>QLayout::SetDefaultConstraint</enum>
-     </property>
+    <layout class="QHBoxLayout" name="horizontalLayout_5">
+     <item>
+      <widget class="QPushButton" name="calculateThisButton">
+       <property name="text">
+        <string>Calculate</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="calculateAllButton">
+       <property name="text">
+        <string>Calculate All</string>
+       </property>
+      </widget>
+     </item>
      <item>
       <spacer name="horizontalSpacer">
@@ -579,5 +590,5 @@
        <property name="sizeHint" stdset="0">
         <size>
-         <width>40</width>
+         <width>158</width>
          <height>20</height>
         </size>
