Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 5fb714bc8d76b96b914937e72cffc3f835224dd1)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 5fb714bc8d76b96b914937e72cffc3f835224dd1)
@@ -1507,4 +1507,6 @@
         # update charts
         self.onPlot()
+        #self.recalculatePlotData()
+
 
         # Read only value - we can get away by just printing it here
@@ -1594,4 +1596,5 @@
             param_repr = GuiUtils.formatNumber(param_dict[param_name][0], high=True)
             self._model_model.item(row, 1).setText(param_repr)
+            self.kernel_module.setParam(param_name, param_dict[param_name][0])
             if self.has_error_column:
                 error_repr = GuiUtils.formatNumber(param_dict[param_name][1], high=True)
@@ -1635,8 +1638,4 @@
             poly_item.insertColumn(2, [QtGui.QStandardItem("")])
 
-        # block signals temporarily, so we don't end up
-        # updating charts with every single model change on the end of fitting
-        self._model_model.blockSignals(True)
-
         if not self.has_error_column:
             # create top-level error column
@@ -1645,9 +1644,5 @@
             self.iterateOverModel(createErrorColumn)
 
-            # we need to enable signals for this, otherwise the final column mysteriously disappears (don't ask, I don't
-            # know)
-            self._model_model.blockSignals(False)
             self._model_model.insertColumn(2, error_column)
-            self._model_model.blockSignals(True)
 
             FittingUtilities.addErrorHeadersToModel(self._model_model)
@@ -1658,8 +1653,10 @@
             self.has_error_column = True
 
+        # block signals temporarily, so we don't end up
+        # updating charts with every single model change on the end of fitting
+        self._model_model.itemChanged.disconnect()
         self.iterateOverModel(updateFittedValues)
         self.iterateOverModel(updatePolyValues)
-
-        self._model_model.blockSignals(False)
+        self._model_model.itemChanged.connect(self.onMainParamsChange)
 
         # Adjust the table cells width.
@@ -1696,8 +1693,8 @@
             param_repr = GuiUtils.formatNumber(param_dict[param_name][0], high=True)
             self._poly_model.item(row_i, 1).setText(param_repr)
+            self.kernel_module.setParam(param_name, param_dict[param_name][0])
             if self.has_poly_error_column:
                 error_repr = GuiUtils.formatNumber(param_dict[param_name][1], high=True)
                 self._poly_model.item(row_i, 2).setText(error_repr)
-
 
         def createErrorColumn(row_i):
@@ -1720,7 +1717,7 @@
         # block signals temporarily, so we don't end up
         # updating charts with every single model change on the end of fitting
-        self._poly_model.blockSignals(True)
+        self._poly_model.itemChanged.disconnect()
         self.iterateOverPolyModel(updateFittedValues)
-        self._poly_model.blockSignals(False)
+        self._poly_model.itemChanged.connect(self.onPolyModelChange)
 
         if self.has_poly_error_column:
@@ -1732,7 +1729,5 @@
 
         # switch off reponse to model change
-        self._poly_model.blockSignals(True)
         self._poly_model.insertColumn(2, error_column)
-        self._poly_model.blockSignals(False)
         FittingUtilities.addErrorPolyHeadersToModel(self._poly_model)
 
@@ -1767,4 +1762,5 @@
             param_repr = GuiUtils.formatNumber(param_dict[param_name][0], high=True)
             self._magnet_model.item(row, 1).setText(param_repr)
+            self.kernel_module.setParam(param_name, param_dict[param_name][0])
             if self.has_magnet_error_column:
                 error_repr = GuiUtils.formatNumber(param_dict[param_name][1], high=True)
@@ -1786,7 +1782,7 @@
         # block signals temporarily, so we don't end up
         # updating charts with every single model change on the end of fitting
-        self._magnet_model.blockSignals(True)
+        self._magnet_model.itemChanged.disconnect()
         self.iterateOverMagnetModel(updateFittedValues)
-        self._magnet_model.blockSignals(False)
+        self._magnet_model.itemChanged.connect(self.onMagnetModelChange)
 
         if self.has_magnet_error_column:
@@ -1798,7 +1794,5 @@
 
         # switch off reponse to model change
-        self._magnet_model.blockSignals(True)
         self._magnet_model.insertColumn(2, error_column)
-        self._magnet_model.blockSignals(False)
         FittingUtilities.addErrorHeadersToModel(self._magnet_model)
 
@@ -1812,6 +1806,6 @@
         self.cmdPlot.setText("Show Plot")
         # Force data recalculation so existing charts are updated
+        self.showPlot()
         self.recalculatePlotData()
-        self.showPlot()
 
     def onSmearingOptionsUpdate(self):
Index: src/sas/qtgui/Plotting/Plotter.py
===================================================================
--- src/sas/qtgui/Plotting/Plotter.py	(revision b764ae5882f084a8b74c7cf664276c13fb07c29e)
+++ src/sas/qtgui/Plotting/Plotter.py	(revision c2f3ca2c72aeba33d19dcf49f5793abf90fa7a3b)
@@ -30,5 +30,7 @@
         # Dictionary of {plot_id:Data1d}
         self.plot_dict = {}
-
+        # Dictionaty of {plot_id:line}
+
+        self.plot_lines = {}
         # Window for text add
         self.addText = AddText(self)
@@ -182,4 +184,6 @@
         self.plot_dict[self._data.id] = self.data
 
+        self.plot_lines[self._data.id] = line
+
         # Now add the legend with some customizations.
 
@@ -196,5 +200,5 @@
 
         # refresh canvas
-        self.canvas.draw_idle()
+        self.canvas.draw()
         # This is an important processEvent.
         # This allows charts to be properly updated in order
@@ -416,4 +420,5 @@
         This effectlvely refreshes the chart with changes to one of its plots
         """
+        import logging
         self.removePlot(id)
         self.plot(data=new_plot)
@@ -470,5 +475,5 @@
         """
         selected_plot = self.plot_dict[id]
-
+        selected_line = self.plot_lines[id]
         # Old style color - single integer for enum color
         # New style color - #hhhhhh
