Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 6889ba2cc6f47e1e1ce87345d09357f43866e1da)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 557fc4986b5386dbacaf9df7dc949c147e2619cd)
@@ -1377,6 +1377,7 @@
         self.communicate.statusBarUpdateSignal.emit('Fitting started...')
         self.fit_started = True
+
         # Disable some elements
-        self.setFittingStarted()
+        self.disableInteractiveElements()
 
     def stopFit(self):
@@ -1387,7 +1388,6 @@
             return
         self.calc_fit.stop()
-        #self.fit_started=False
         #re-enable the Fit button
-        self.setFittingStopped()
+        self.enableInteractiveElements()
 
         msg = "Fitting cancelled."
@@ -1403,5 +1403,5 @@
         """
         """
-        self.setFittingStopped()
+        self.enableInteractiveElements()
         msg = "Fitting failed with: "+ str(reason)
         self.communicate.statusBarUpdateSignal.emit(msg)
@@ -1420,5 +1420,5 @@
         """
         #re-enable the Fit button
-        self.setFittingStopped()
+        self.enableInteractiveElements()
 
         if len(result) == 0:
@@ -1492,5 +1492,5 @@
         """
         #re-enable the Fit button
-        self.setFittingStopped()
+        self.enableInteractiveElements()
 
         if len(result) == 0:
@@ -2363,4 +2363,6 @@
         weight = FittingUtilities.getWeight(data=data, is2d=self.is2D, flag=self.weighting)
 
+        # Disable buttons/table
+        self.disableInteractiveElements()
         # Awful API to a backend method.
         calc_thread = self.methodCalculateForData()(data=data,
@@ -2404,4 +2406,6 @@
         Thread returned error
         """
+        # Bring the GUI to normal state
+        self.enableInteractiveElements()
         print("Calculate Data failed with ", reason)
 
@@ -2416,4 +2420,7 @@
         Plot the current 1D data
         """
+        # Bring the GUI to normal state
+        self.enableInteractiveElements()
+
         fitted_data = self.logic.new1DPlot(return_data, self.tab_id)
         residuals = self.calculateResiduals(fitted_data)
@@ -2445,4 +2452,7 @@
         Plot the current 2D data
         """
+        # Bring the GUI to normal state
+        self.enableInteractiveElements()
+
         fitted_data = self.logic.new2DPlot(return_data)
         residuals = self.calculateResiduals(fitted_data)
@@ -2515,4 +2525,6 @@
         Thread threw an exception.
         """
+        # Bring the GUI to normal state
+        self.enableInteractiveElements()
         # TODO: remimplement thread cancellation
         logger.error("".join(traceback.format_exception(etype, value, tb)))
@@ -2892,7 +2904,37 @@
         self.setMagneticModel()
 
-    def setFittingStarted(self):
-        """
-        Set buttion caption on fitting start
+    def setInteractiveElements(self, enabled=True):
+        """
+        Switch interactive GUI elements on/off
+        """
+        assert isinstance(enabled, bool)
+
+        self.lstParams.setEnabled(enabled)
+        self.lstPoly.setEnabled(enabled)
+        self.lstMagnetic.setEnabled(enabled)
+
+        self.cbCategory.setEnabled(enabled)
+        self.cbModel.setEnabled(enabled)
+        self.cbStructureFactor.setEnabled(enabled)
+
+        self.chkPolydispersity.setEnabled(enabled)
+        self.chkMagnetism.setEnabled(enabled)
+        self.chk2DView.setEnabled(enabled)
+
+    def enableInteractiveElements(self):
+        """
+        Set buttion caption on fitting/calculate finish
+        Enable the param table(s)
+        """
+        # Notify the user that fitting is available
+        self.cmdFit.setStyleSheet('QPushButton {color: black;}')
+        self.cmdFit.setText("Fit")
+        self.fit_started = False
+        self.setInteractiveElements(True)
+
+    def disableInteractiveElements(self):
+        """
+        Set buttion caption on fitting/calculate start
+        Disable the param table(s)
         """
         # Notify the user that fitting is being run
@@ -2900,13 +2942,5 @@
         self.cmdFit.setStyleSheet('QPushButton {color: red;}')
         self.cmdFit.setText('Stop fit')
-
-    def setFittingStopped(self):
-        """
-        Set button caption on fitting stop
-        """
-        # Notify the user that fitting is available
-        self.cmdFit.setStyleSheet('QPushButton {color: black;}')
-        self.cmdFit.setText("Fit")
-        self.fit_started = False
+        self.setInteractiveElements(False)
 
     def readFitPage(self, fp):
