Index: src/sas/qtgui/Perspectives/Fitting/ConstraintWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/ConstraintWidget.py	(revision 33c05617b6994eece5b1e65f5d0efaddeb6ae238)
+++ src/sas/qtgui/Perspectives/Fitting/ConstraintWidget.py	(revision 14e1ff0d1f5ac266749e22c8f7fa56d727ccfea8)
@@ -128,4 +128,8 @@
         self.is_chain_fitting = False
 
+        # Is the fit job running?
+        self.is_running = False
+        self.calc_fit = None
+
         # Remember previous content of modified cell
         self.current_cell = ""
@@ -257,4 +261,14 @@
         Perform the constrained/simultaneous fit
         """
+        # Stop if we're running
+        if self.is_running:
+            self.is_running = False
+            #re-enable the Fit button
+            self.cmdFit.setStyleSheet('QPushButton {color: black;}')
+            self.cmdFit.setText("Fit")
+            # stop the fitpages
+            self.calc_fit.stop()
+            return
+
         # Find out all tabs to fit
         tabs_to_fit = self.getTabsForFit()
@@ -310,5 +324,5 @@
 
         # new fit thread object
-        calc_fit = FitThread(handler=handler,
+        self.calc_fit = FitThread(handler=handler,
                              fn=sim_fitter_list,
                              batch_inputs=batch_inputs,
@@ -321,18 +335,17 @@
         if LocalConfig.USING_TWISTED:
             # start the trhrhread with twisted
-            calc_thread = threads.deferToThread(calc_fit.compute)
-            calc_thread.addCallback(completefn)
-            calc_thread.addErrback(self.onFitFailed)
+            self.calc_fit = threads.deferToThread(self.calc_fit.compute)
+            self.calc_fit.addCallback(completefn)
+            self.calc_fit.addErrback(self.onFitFailed)
         else:
             # Use the old python threads + Queue
-            calc_fit.queue()
-            calc_fit.ready(2.5)
-
-
-        #disable the Fit button
+            self.calc_fit.queue()
+            self.calc_fit.ready(2.5)
+
+        # modify the Fit button
         self.cmdFit.setStyleSheet('QPushButton {color: red;}')
-        self.cmdFit.setText('Running...')
+        self.cmdFit.setText('Stop fit')
         self.parent.communicate.statusBarUpdateSignal.emit('Fitting started...')
-        self.cmdFit.setEnabled(False)
+        self.is_running = True
 
     def onHelp(self):
@@ -457,5 +470,4 @@
         self.cmdFit.setStyleSheet('QPushButton {color: black;}')
         self.cmdFit.setText("Fit")
-        self.cmdFit.setEnabled(True)
 
         # Notify the parent about completed fitting
@@ -503,5 +515,4 @@
         self.cmdFit.setStyleSheet('QPushButton {color: black;}')
         self.cmdFit.setText("Fit")
-        self.cmdFit.setEnabled(True)
 
         # Notify the parent about completed fitting
@@ -538,5 +549,4 @@
         self.cmdFit.setStyleSheet('QPushButton {color: black;}')
         self.cmdFit.setText("Fit")
-        self.cmdFit.setEnabled(True)
 
         # Notify the parent about completed fitting
@@ -958,2 +968,17 @@
         if isBatch:
             self.chkChain.setChecked(is_chain)
+
+    def getReport(self):
+        """
+        Wrapper for non-existent functionality.
+        Tell the user to use the reporting tool
+        on separate fit pages.
+        """
+        msg = "Please use Report Results directly on fit pages"
+        msg += " involved in the Constrained and Simultaneous fitting process."
+        msgbox = QtWidgets.QMessageBox(self)
+        msgbox.setIcon(QtWidgets.QMessageBox.Warning)
+        msgbox.setText(msg)
+        msgbox.setWindowTitle("Fit Report")
+        _ = msgbox.exec_()
+        return
Index: src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py	(revision fb39f28c433f7a3a0fdc7f92679a4e16ddee5bc2)
+++ src/sas/qtgui/Perspectives/Fitting/FittingPerspective.py	(revision 14e1ff0d1f5ac266749e22c8f7fa56d727ccfea8)
@@ -406,6 +406,4 @@
                 tab_object.enableInteractiveElements()
 
-        pass
-
     def getCurrentStateAsXml(self):
         """
Index: src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision cf9f39e5e737436edc70fa14348eedd3e53ad0fd)
+++ src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision b38c8c8f05adbc2cb9e1f8fcd83afd1c3c4df2ab)
@@ -729,4 +729,6 @@
     output_string = "sasview_parameter_values:"
     for parameter in parameters:
+        # recast tuples into strings
+        parameter = [str(p) for p in parameter]
         output_string += ",".join([p for p in parameter if p is not None])
         output_string += ":"
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 1d6899fc6a5c8ac14612ce6354a91fc3d3db92f3)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision d4c924228402cc96248fe03ca4161dd245fdeeae)
@@ -522,5 +522,4 @@
         self.cmdFit.setEnabled(False)
         self.cmdPlot.setEnabled(False)
-        self.options_widget.cmdComputePoints.setVisible(False) # probably redundant
         self.chkPolydispersity.setEnabled(True)
         self.chkPolydispersity.setCheckState(False)
@@ -2863,4 +2862,8 @@
         self.createNewIndex(weighted_data)
 
+        # Plot residuals if actual data
+        if not self.data_is_loaded:
+            return
+
         # Calculate difference between return_data and logic.data
         self.chi2 = FittingUtilities.calculateChi2(weighted_data, self.data)
@@ -2868,8 +2871,4 @@
         chi2_repr = "---" if self.chi2 is None else GuiUtils.formatNumber(self.chi2, high=True)
         self.lblChi2Value.setText(chi2_repr)
-
-        # Plot residuals if actual data
-        if not self.data_is_loaded:
-            return
 
         residuals_plot = FittingUtilities.plotResiduals(self.data, weighted_data)
Index: src/sas/qtgui/Perspectives/Fitting/OptionsWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/OptionsWidget.py	(revision b764ae5882f084a8b74c7cf664276c13fb07c29e)
+++ src/sas/qtgui/Perspectives/Fitting/OptionsWidget.py	(revision 17e6a2b1ddaf02c92de000d39b51da0de039314b)
@@ -88,6 +88,6 @@
         self.model.blockSignals(True)
         self.updateQRange(self.qmin, self.qmax, self.npts)
-        self.txtMaxRange.setText(str(self.qmax))
-        self.txtMinRange.setText(str(self.qmin))
+        self.txtMaxRange.setText(GuiUtils.formatNumber(self.qmax, high=True))
+        self.txtMinRange.setText(GuiUtils.formatNumber(self.qmin, high=True))
         self.txtNpts.setText(str(self.npts))
         self.txtNptsFit.setText(str(self.npts))
@@ -181,6 +181,8 @@
         Update the local model based on calculated values
         """
-        self.model.item(MODEL.index('MIN_RANGE')).setText(str(q_range_min))
-        self.model.item(MODEL.index('MAX_RANGE')).setText(str(q_range_max))
+        qmax = GuiUtils.formatNumber(self.qmax, high=True)
+        qmin = GuiUtils.formatNumber(self.qmin, high=True)
+        self.model.item(MODEL.index('MIN_RANGE')).setText(qmin)
+        self.model.item(MODEL.index('MAX_RANGE')).setText(qmax)
         self.model.item(MODEL.index('NPTS')).setText(str(npts))
         self.qmin, self.qmax, self.npts = q_range_min, q_range_max, npts
Index: src/sas/qtgui/Perspectives/Fitting/UI/OptionsWidgetUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/OptionsWidgetUI.ui	(revision 309fa1bc1122d4205485434154892a4b1021a687)
+++ src/sas/qtgui/Perspectives/Fitting/UI/OptionsWidgetUI.ui	(revision 17e6a2b1ddaf02c92de000d39b51da0de039314b)
@@ -122,66 +122,4 @@
       <item row="0" column="0">
        <layout class="QGridLayout" name="gridLayout_15">
-        <item row="0" column="0">
-         <widget class="QLabel" name="label_21">
-          <property name="text">
-           <string>Npts</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1">
-         <widget class="QLineEdit" name="txtNpts">
-          <property name="toolTip">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Total number of data points.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="2">
-         <widget class="QCheckBox" name="chkLogData">
-          <property name="toolTip">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to use log spaced points.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-          </property>
-          <property name="text">
-           <string>Log spaced points</string>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="0">
-         <widget class="QLabel" name="label_22">
-          <property name="text">
-           <string>Npts(Fit)</string>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="1">
-         <widget class="QLineEdit" name="txtNptsFit">
-          <property name="toolTip">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Number of points selected for fitting.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-          </property>
-          <property name="readOnly">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="0">
-         <widget class="QLabel" name="label_24">
-          <property name="text">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Ï&lt;span style=&quot; vertical-align:super;&quot;&gt;2&lt;/span&gt;/Npts&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="1">
-         <widget class="QLineEdit" name="txtChi2">
-          <property name="readOnly">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="3">
-         <widget class="QPushButton" name="cmdComputePoints">
-          <property name="text">
-           <string>Compute</string>
-          </property>
-         </widget>
-        </item>
         <item row="1" column="2">
          <spacer name="horizontalSpacer_9">
@@ -197,4 +135,45 @@
          </spacer>
         </item>
+        <item row="0" column="1">
+         <widget class="QLineEdit" name="txtNpts">
+          <property name="toolTip">
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Total number of data points.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0">
+         <widget class="QLabel" name="label_22">
+          <property name="text">
+           <string>Npts(Fit)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1">
+         <widget class="QLineEdit" name="txtNptsFit">
+          <property name="toolTip">
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Number of points selected for fitting.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          </property>
+          <property name="readOnly">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="2">
+         <widget class="QCheckBox" name="chkLogData">
+          <property name="toolTip">
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Check to use log spaced points.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          </property>
+          <property name="text">
+           <string>Log spaced points</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="0">
+         <widget class="QLabel" name="label_21">
+          <property name="text">
+           <string>Npts</string>
+          </property>
+         </widget>
+        </item>
        </layout>
       </item>
Index: src/sas/qtgui/Plotting/Plotter.py
===================================================================
--- src/sas/qtgui/Plotting/Plotter.py	(revision d9e7792d23c19681d00cd70a583336b5a4fcfbdd)
+++ src/sas/qtgui/Plotting/Plotter.py	(revision 4c11b2affd3ab5694f39a6263f64acf8a2085781)
@@ -420,4 +420,10 @@
         This effectlvely refreshes the chart with changes to one of its plots
         """
+
+        # Pull the current transform settings from the old plot
+        selected_plot = self.plot_dict[id]
+        new_plot.xtransform = selected_plot.xtransform
+        new_plot.ytransform = selected_plot.ytransform
+
         self.removePlot(id)
         self.plot(data=new_plot)
