Index: src/sas/qtgui/Perspectives/Fitting/FittingOptions.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingOptions.py	(revision ff3b293197970c44a7188c9d3c2fd7fa7a83536e)
+++ src/sas/qtgui/Perspectives/Fitting/FittingOptions.py	(revision 8873ab7132159e0dd7fa868c07e4eee16ed4d9ff)
@@ -64,4 +64,6 @@
         default_index = self.cbAlgorithm.findText(default_name)
         self.cbAlgorithm.setCurrentIndex(default_index)
+        # previous algorithm choice
+        self.previous_index = default_index
 
         # Assign appropriate validators
@@ -121,5 +123,19 @@
 
         # Convert the name into widget instance
-        widget_to_activate = eval(widget_name)
+        try:
+            widget_to_activate = eval(widget_name)
+        except AttributeError:
+            # We don't yet have this optimizer.
+            # Show message
+            msg = "This algorithm has not yet been implemented in SasView.\n"
+            msg += "Please choose a different algorithm"
+            QtWidgets.QMessageBox.warning(self,
+                                        'Warning',
+                                        msg,
+                                        QtWidgets.QMessageBox.Ok)
+            # Move the index to previous position
+            self.cbAlgorithm.setCurrentIndex(self.previous_index)
+            return
+
         index_for_this_id = self.stackedWidget.indexOf(widget_to_activate)
 
@@ -133,4 +149,7 @@
         # OK has to be reinitialized to True
         self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(True)
+
+        # keep reference
+        self.previous_index = index
 
     def onApply(self):
@@ -143,5 +162,9 @@
             # e.g. 'samples' for 'dream' is 'self.samples_dream'
             widget_name = 'self.'+option+'_'+self.current_fitter_id
-            line_edit = eval(widget_name)
+            try:
+                line_edit = eval(widget_name)
+            except AttributeError:
+                # Skip bumps monitors
+                continue
             if line_edit is None or not isinstance(line_edit, QtWidgets.QLineEdit):
                 continue
@@ -165,6 +188,13 @@
                 return
             try:
-                new_value = widget.currentText() if isinstance(widget, QtWidgets.QComboBox) \
-                    else float(widget.text())
+                if isinstance(widget, QtWidgets.QComboBox):
+                    new_value = widget.currentText()
+                else:
+                    try:
+                        new_value = int(widget.text())
+                    except ValueError:
+                        new_value = float(widget.text())
+                #new_value = widget.currentText() if isinstance(widget, QtWidgets.QComboBox) \
+                #    else float(widget.text())
                 self.config.values[self.current_fitter_id][option] = new_value
             except ValueError:
Index: src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision 44decedba675106f665c7d21f373030dd758fce3)
+++ src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision 44decedba675106f665c7d21f373030dd758fce3)
@@ -24,6 +24,5 @@
 poly_header_tooltips = ['Select parameter for fitting',
                         'Enter polydispersity ratio (Std deviation/mean).\n'+
-                        'For angles this can be either std deviation or full width (for uniform distributions) in degrees',
-                        'STD: standard deviation from the mean value',
+                        'For angles this can be either std deviation or half width (for uniform distributions) in degrees',
                         'Enter minimum value for parameter',
                         'Enter maximum value for parameter',
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision d8d81eac092827346a21664178ff98dc3773a632)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision d8d81eac092827346a21664178ff98dc3773a632)
@@ -1085,7 +1085,16 @@
             if not self.rowHasConstraint(row):
                 return
+            constr = self.getConstraintForRow(row)
             func = self.getConstraintForRow(row).func
-            if func is not None:
-                self.communicate.statusBarUpdateSignal.emit("Active constrain: "+func)
+            if constr.func is not None:
+                # inter-parameter constraint
+                update_text = "Active constraint: "+func
+            elif constr.param == rows[0].data():
+                # current value constraint
+                update_text = "Value constrained to: " + str(constr.value)
+            else:
+                # ill defined constraint
+                return
+            self.communicate.statusBarUpdateSignal.emit(update_text)
 
     def replaceConstraintName(self, old_name, new_name=""):
@@ -1124,4 +1133,5 @@
             # Create default datasets if no data passed
             self.createDefaultDataset()
+            self.theory_item = None # ensure theory is recalc. before plot, see showTheoryPlot()
 
     def respondToModelStructure(self, model=None, structure_factor=None):
@@ -1835,10 +1845,13 @@
         self.cmdPlot.setText("Show Plot")
         # Force data recalculation so existing charts are updated
-        self.showPlot()
+        if not self.data_is_loaded:
+            self.showTheoryPlot()
+        else:
+            self.showPlot()
         # This is an important processEvent.
         # This allows charts to be properly updated in order
         # of plots being applied.
         QtWidgets.QApplication.processEvents()
-        self.recalculatePlotData()
+        self.recalculatePlotData() # recalc+plot theory again (2nd)
 
     def onSmearingOptionsUpdate(self):
@@ -1856,4 +1869,14 @@
         self.calculateQGridForModel()
 
+    def showTheoryPlot(self):
+        """
+        Show the current theory plot in MPL
+        """
+        # Show the chart if ready
+        if self.theory_item is None:
+            self.recalculatePlotData()
+        elif self.model_data:
+            self._requestPlots(self.model_data.filename, self.theory_item.model())
+
     def showPlot(self):
         """
@@ -1861,7 +1884,27 @@
         """
         # Show the chart if ready
-        data_to_show = self.data if self.data_is_loaded else self.model_data
-        if data_to_show is not None:
-            self.communicate.plotRequestedSignal.emit([data_to_show], self.tab_id)
+        data_to_show = self.data
+        # Any models for this page
+        current_index = self.all_data[self.data_index]
+        item = self._requestPlots(self.data.filename, current_index.model())
+        if item:
+            # fit+data has not been shown - show just data
+            self.communicate.plotRequestedSignal.emit([item, data_to_show], self.tab_id)
+
+    def _requestPlots(self, item_name, item_model):
+        """
+        Emits plotRequestedSignal for all plots found in the given model under the provided item name.
+        """
+        fitpage_name = "" if self.tab_id is None else "M"+str(self.tab_id)
+        plots = GuiUtils.plotsFromFilename(item_name, item_model)
+        # Has the fitted data been shown?
+        data_shown = False
+        item = None
+        for item, plot in plots.items():
+            if fitpage_name in plot.name:
+                data_shown = True
+                self.communicate.plotRequestedSignal.emit([item, plot], self.tab_id)
+        # return the last data item seen, if nothing was plotted; supposed to be just data)
+        return None if data_shown else item
 
     def onOptionsUpdate(self):
@@ -2093,4 +2136,7 @@
         self.kernel_module = self.models[model_name]()
 
+        # Change the model name to a monicker
+        self.kernel_module.name = self.modelName()
+
         # Explicitly add scale and background with default values
         temp_undo_state = self.undo_supported
@@ -2125,4 +2171,5 @@
             # Structure factor is the only selected model; build it and show all its params
             self.kernel_module = self.models[structure_factor]()
+            self.kernel_module.name = self.modelName()
             s_params = self.kernel_module._model_info.parameters
             s_params_orig = s_params
@@ -2135,4 +2182,6 @@
 
             self.kernel_module = MultiplicationModel(p_kernel, s_kernel)
+            # Modify the name to correspond to shown items
+            self.kernel_module.name = self.modelName()
             all_params = self.kernel_module._model_info.parameters.kernel_parameters
             all_param_names = [param.name for param in all_params]
@@ -2440,6 +2489,9 @@
         # Bring the GUI to normal state
         self.enableInteractiveElements()
-
+        if return_data is None:
+            self.calculateDataFailed("Results not available.")
+            return
         fitted_data = self.logic.new1DPlot(return_data, self.tab_id)
+
         residuals = self.calculateResiduals(fitted_data)
         self.model_data = fitted_data
Index: src/sas/qtgui/Perspectives/Fitting/UI/ComplexConstraintUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/ComplexConstraintUI.ui	(revision 305114c33963ce5b43f94d3b16fc71e316f72e3a)
+++ src/sas/qtgui/Perspectives/Fitting/UI/ComplexConstraintUI.ui	(revision 17381739dbc25805ef89bbec1e92e0915e6429a5)
@@ -7,6 +7,6 @@
     <x>0</x>
     <y>0</y>
-    <width>463</width>
-    <height>234</height>
+    <width>367</width>
+    <height>199</height>
    </rect>
   </property>
@@ -135,5 +135,5 @@
     <widget class="QLabel" name="lblWarning">
      <property name="text">
-      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#ff0000;&quot;&gt;Warning! Polydisperse parameter selected.&lt;br/&gt;&lt;/span&gt;Constraints involving polydisperse parameters only apply to&lt;br/&gt;starting values and are nor re-applied during size or angle polydispersity&lt;br/&gt;integrations. To do which requires creating a custom model.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#ff0000;&quot;&gt;Warning! Polydisperse parameter selected.&lt;br/&gt;&lt;/span&gt;Constraints involving polydisperse parameters only apply to&lt;br/&gt;starting values and are not re-applied during size or angle polydispersity&lt;br/&gt;integrations. To do so requires creating a custom model.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
      </property>
     </widget>
Index: src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui	(revision a2e8ea5835531d69e27d5e97068263c4672284f9)
+++ src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui	(revision fc5d2d7fa9cd52ca6b9a8d7082da6eddf35b1d34)
@@ -7,5 +7,5 @@
     <x>0</x>
     <y>0</y>
-    <width>566</width>
+    <width>651</width>
     <height>646</height>
    </rect>
Index: src/sas/qtgui/Perspectives/Fitting/UI/MultiConstraintUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/MultiConstraintUI.ui	(revision aa88b7608334fcb6430789a4ab5dddee40fb538a)
+++ src/sas/qtgui/Perspectives/Fitting/UI/MultiConstraintUI.ui	(revision 17381739dbc25805ef89bbec1e92e0915e6429a5)
@@ -10,6 +10,6 @@
     <x>0</x>
     <y>0</y>
-    <width>436</width>
-    <height>217</height>
+    <width>369</width>
+    <height>201</height>
    </rect>
   </property>
@@ -121,5 +121,5 @@
     <widget class="QLabel" name="lblWarning">
      <property name="text">
-      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#ff0000;&quot;&gt;Warning! Polydisperse parameter selected.&lt;br/&gt;&lt;/span&gt;Constraints involving polydisperse parameters only apply to&lt;br/&gt;starting values and are nor re-applied during size or angle polydispersity&lt;br/&gt;integrations. To do which requires creating a custom model.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; color:#ff0000;&quot;&gt;Warning! Polydisperse parameter selected.&lt;br/&gt;&lt;/span&gt;Constraints involving polydisperse parameters only apply to&lt;br/&gt;starting values and are not re-applied during size or angle polydispersity&lt;br/&gt;integrations. To do so requires creating a custom model.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
      </property>
     </widget>
Index: src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py	(revision 1a15adaa1bbde7cbb9a5f5ff55d61f53d3b88ca7)
+++ src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py	(revision 8faac15efe65037d4192289834f31929c1c24d83)
@@ -397,6 +397,5 @@
         header_tooltips = ['Select parameter for fitting',
                             'Enter polydispersity ratio (Std deviation/mean).\n'+
-                            'For angles this can be either std deviation or full width (for uniform distributions) in degrees',
-                            'STD: standard deviation from the mean value',
+                            'For angles this can be either std deviation or half width (for uniform distributions) in degrees',
                             'Enter minimum value for parameter',
                             'Enter maximum value for parameter',
@@ -620,5 +619,5 @@
         # Set to 0
         self.widget.lstParams.indexWidget(func_index).setCurrentIndex(0)
-        self.assertEqual(self.widget._model_model.rowCount(), last_row - 2) # 2 fewer rows than default
+        self.assertEqual(self.widget._model_model.rowCount(), last_row - 2)
 
     def testPlotTheory(self):
@@ -658,5 +657,5 @@
         self.assertEqual(spy.count(), 0)
 
-    def testPlotData(self):
+    def notestPlotData(self):
         """
         See that data item can produce a chart
