Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 54492dc5d508331a71da944766e02b5639ff85d4)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 906e0c71df33eebcbe340d616cf9ca363fdf31c3)
@@ -1124,6 +1124,8 @@
             parameter_name = parameter_name.rsplit()[-1]
 
+        delegate = self.lstPoly.itemDelegate()
+
         # Extract changed value.
-        if model_column == self.lstPoly.itemDelegate().poly_parameter:
+        if model_column == delegate.poly_parameter:
             # Is the parameter checked for fitting?
             value = item.checkState()
@@ -1135,6 +1137,6 @@
                     self.parameters_to_fit.remove(parameter_name)
             self.cmdFit.setEnabled(self.parameters_to_fit != [] and self.logic.data_is_loaded)
-            return
-        elif model_column in [self.lstPoly.itemDelegate().poly_min, self.lstPoly.itemDelegate().poly_max]:
+
+        elif model_column in [delegate.poly_min, delegate.poly_max]:
             try:
                 value = GuiUtils.toDouble(item.text())
@@ -1144,8 +1146,14 @@
 
             current_details = self.kernel_module.details[parameter_name]
-            current_details[model_column-1] = value
-        elif model_column == self.lstPoly.itemDelegate().poly_function:
+            if self.has_poly_error_column:
+                # err column changes the indexing
+                current_details[model_column-2] = value
+            else:
+                current_details[model_column-1] = value
+
+        elif model_column == delegate.poly_function:
             # name of the function - just pass
-            return
+            pass
+
         else:
             try:
@@ -1157,9 +1165,14 @@
             # Update the sasmodel
             # PD[ratio] -> width, npts -> npts, nsigs -> nsigmas
-            self.kernel_module.setParam(parameter_name + '.' + \
-                                        self.lstPoly.itemDelegate().columnDict()[model_column], value)
+            self.kernel_module.setParam(parameter_name + '.' + delegate.columnDict()[model_column], value)
 
             # Update plot
             self.updateData()
+
+        # update in param model
+        if model_column in [delegate.poly_pd, delegate.poly_error, delegate.poly_min, delegate.poly_max]:
+            row = self.getRowFromName(parameter_name)
+            param_item = self._model_model.item(row)
+            param_item.child(0).child(0, model_column).setText(item.text())
 
     def onMagnetModelChange(self, item):
@@ -1544,4 +1557,8 @@
             param_repr = GuiUtils.formatNumber(param_dict[param_name][0], high=True)
             self._model_model.item(row, 0).child(0).child(0,1).setText(param_repr)
+            # modify the param error
+            if self.has_error_column:
+                error_repr = GuiUtils.formatNumber(param_dict[param_name][1], high=True)
+                self._model_model.item(row, 0).child(0).child(0,2).setText(error_repr)
 
         def createErrorColumn(row):
@@ -1558,21 +1575,43 @@
             error_column.append(item)
 
+        def createPolyErrorColumn(row):
+            # Utility function for error column update in the polydispersity sub-rows
+            # NOTE: only creates empty items; updatePolyValues adds the error value
+            item = self._model_model.item(row, 0)
+            if not item.hasChildren():
+                return
+            poly_item = item.child(0)
+            if not poly_item.hasChildren():
+                return
+            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
+            error_column = []
+            self.lstParams.itemDelegate().addErrorColumn()
+            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)
+
+            # create error column in polydispersity sub-rows
+            self.iterateOverModel(createPolyErrorColumn)
+
+            self.has_error_column = True
+
         self.iterateOverModel(updateFittedValues)
         self.iterateOverModel(updatePolyValues)
+
         self._model_model.blockSignals(False)
 
-        if self.has_error_column:
-            return
-
-        error_column = []
-        self.lstParams.itemDelegate().addErrorColumn()
-        self.iterateOverModel(createErrorColumn)
-
-        # switch off reponse to model change
-        self._model_model.insertColumn(2, error_column)
-        FittingUtilities.addErrorHeadersToModel(self._model_model)
         # Adjust the table cells width.
         # TODO: find a way to dynamically adjust column width while resized expanding
@@ -1581,6 +1620,4 @@
         self.lstParams.resizeColumnToContents(5)
         self.lstParams.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Expanding)
-
-        self.has_error_column = True
 
     def iterateOverPolyModel(self, func):
@@ -2432,5 +2469,9 @@
                 return
             # Modify the param value
-            self._model_model.item(row, 0).child(0).child(0,4).setText(combo_string)
+            if self.has_error_column:
+                # err column changes the indexing
+                self._model_model.item(row, 0).child(0).child(0,5).setText(combo_string)
+            else:
+                self._model_model.item(row, 0).child(0).child(0,4).setText(combo_string)
 
         if combo_string == 'array':
Index: src/sas/qtgui/Perspectives/Fitting/ViewDelegate.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/ViewDelegate.py	(revision 97df8a93fcfe23a3b54f1f4b5365775da012c4a2)
+++ src/sas/qtgui/Perspectives/Fitting/ViewDelegate.py	(revision 906e0c71df33eebcbe340d616cf9ca363fdf31c3)
@@ -129,4 +129,5 @@
         self.poly_parameter = 0
         self.poly_pd = 1
+        self.poly_error = None
         self.poly_min = 2
         self.poly_max = 3
@@ -153,4 +154,5 @@
         self.poly_parameter = 0
         self.poly_pd = 1
+        self.poly_error = 2
         self.poly_min = 3
         self.poly_max = 4
