Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 6964d440b3929d111f810b55d203c17e2f424e4b)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision c1e380e47ece53d12ace33cda4662184d4376c2d)
@@ -40,4 +40,12 @@
 CATEGORY_STRUCTURE = "Structure Factor"
 STRUCTURE_DEFAULT = "None"
+
+# Mapping between column index and relevant parameter name extension
+POLY_COLUMN_DICT = {
+    1: 'width',
+    2: 'min',
+    3: 'max',
+    4: 'npts',
+    5: 'nsigmas'}
 
 class FittingWidget(QtGui.QWidget, Ui_FittingWidgetUI):
@@ -239,5 +247,5 @@
         self.setTableProperties(self.lstPoly)
         # Delegates for custom editing and display
-        self.lstPoly.setItemDelegate(PolyViewDelegate(self))
+        # self.lstPoly.setItemDelegate(PolyViewDelegate(self))
 
         # Magnetism model displayed in magnetism list
@@ -469,4 +477,8 @@
         model_row = item.row()
         name_index = self._poly_model.index(model_row, 0)
+        parameter_name = str(name_index.data().toString()).lower() # "distribution of sld" etc.
+        if "distribution of" in parameter_name:
+            parameter_name = parameter_name[16:]
+
         # Extract changed value. Assumes proper validation by QValidator/Delegate
         # TODO: abstract away hardcoded column numbers
@@ -475,4 +487,11 @@
             value = item.checkState()
             # TODO: add the param to self.params_for_fitting
+            parameter_name = parameter_name+'.width'
+            if value == QtCore.Qt.Checked:
+                self.parameters_to_fit.append(parameter_name)
+            else:
+                if parameter_name in self.parameters_to_fit:
+                    self.parameters_to_fit.remove(parameter_name)
+            return
         elif model_column == 6:
             value = item.text()
@@ -485,12 +504,10 @@
                 return
 
-        parameter_name = str(self._poly_model.data(name_index).toPyObject()) # "distribution of sld" etc.
-        if "Distribution of" in parameter_name:
-            parameter_name = parameter_name[16:]
-        property_name = str(self._poly_model.headerData(model_column, 1).toPyObject()) # Value, min, max, etc.
+        property_name = str(self._poly_model.headerData(model_column, 1).toPyObject()).lower() # Value, min, max, etc.
         # print "%s(%s) => %d" % (parameter_name, property_name, value)
 
         # Update the sasmodel
-        #self.kernel_module.params[parameter_name] = value
+        # PD[ratio] -> width, npts -> npts, nsigs -> nsigmas
+        self.kernel_module.setParam(parameter_name + '.' + POLY_COLUMN_DICT[model_column], value)
 
         # Reload the main model - may not be required if no variable is shown in main view
@@ -521,4 +538,6 @@
         qmax = self.q_range_max
         params_to_fit = self.parameters_to_fit
+
+        print "OPTIMIZING: ", params_to_fit
 
         # Potential weights added directly to data
@@ -963,7 +982,4 @@
         status = item.checkState()
 
-        def isChecked(row):
-            return self._model_model.item(row, 0).checkState() == QtCore.Qt.Checked
-
         def isCheckable(row):
             return self._model_model.item(row, 0).isCheckable()
@@ -979,7 +995,22 @@
 
         # update the list of parameters to fit
-        self.parameters_to_fit = [str(self._model_model.item(row_index, 0).text())
-                                  for row_index in xrange(self._model_model.rowCount())
-                                  if isChecked(row_index)]
+        main_params = self.checkedListFromModel(self._model_model)
+        poly_params = self.checkedListFromModel(self._poly_model)
+        # Retrieve poly params names
+        poly_params = [param[16:]+'.width' for param in poly_params]
+        # TODO : add magnetic params
+
+        self.parameters_to_fit = main_params + poly_params
+
+    def checkedListFromModel(self, model):
+        """
+        Returns list of checked parameters for given model
+        """
+        def isChecked(row):
+            return model.item(row, 0).checkState() == QtCore.Qt.Checked
+
+        return [str(model.item(row_index, 0).text())
+                for row_index in xrange(model.rowCount())
+                if isChecked(row_index)]
 
     def nameForFittedData(self, name):
@@ -1077,8 +1108,9 @@
         calc_thread = threads.deferToThread(method.compute)
         calc_thread.addCallback(self.methodCompleteForData())
-        calc_thread.addErrback(self.calculateDataFailed())
+        calc_thread.addErrback(self.calculateDataFailed)
 
     def calculateDataFailed(self):
         """
+        Thread returned error
         """
         print "Calculate Data failed."
@@ -1128,6 +1160,7 @@
     def calcException(self, etype, value, tb):
         """
-        Something horrible happened in the deferred.
-        """
+        Thread threw an exception.
+        """
+        # TODO: remimplement thread cancellation
         logging.error("".join(traceback.format_exception(etype, value, tb)))
 
@@ -1164,15 +1197,19 @@
                 continue
 
+            # Values from the sasmodel
+            width = self.kernel_module.getParam(param.name+'.width')
+            npts = self.kernel_module.getParam(param.name+'.npts')
+            nsigs = self.kernel_module.getParam(param.name+'.nsigmas')
             # Potential multishell params
-            checked_list = ["Distribution of "+param.name, str(param.default),
+            checked_list = ["Distribution of "+param.name, str(width),
                             str(param.limits[0]), str(param.limits[1]),
-                            "35", "3", "gaussian"]
+                            str(npts), str(nsigs), ""]
             FittingUtilities.addCheckedListToModel(self._poly_model, checked_list)
 
             #TODO: Need to find cleaner way to input functions
-            #func = QtGui.QComboBox()
-            #func.addItems(['rectangle', 'array', 'lognormal', 'gaussian', 'schulz',])
-            #func_index = self.lstPoly.model().index(row, 6)
-            #self.lstPoly.setIndexWidget(func_index, func)
+            func = QtGui.QComboBox()
+            func.addItems(['rectangle', 'array', 'lognormal', 'gaussian', 'schulz',])
+            func_index = self.lstPoly.model().index(row, 6)
+            self.lstPoly.setIndexWidget(func_index, func)
 
         FittingUtilities.addPolyHeadersToModel(self._poly_model)
Index: src/sas/qtgui/Perspectives/Fitting/OptionsWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/OptionsWidget.py	(revision dc5ef150e8b37e01a3b7e253eb5b66d3b82de99c)
+++ src/sas/qtgui/Perspectives/Fitting/OptionsWidget.py	(revision c1e380e47ece53d12ace33cda4662184d4376c2d)
@@ -84,4 +84,5 @@
         self.txtMinRange.setText(str(QMIN_DEFAULT))
         self.txtNpts.setText(str(NPTS_DEFAULT))
+        self.txtNptsFit.setText(str(NPTS_DEFAULT))
         self.model.blockSignals(False)
 
@@ -125,5 +126,5 @@
         Callback for resetting qmin/qmax
         """
-        pass
+        self.updateQRange(QMIN_DEFAULT, QMAX_DEFAULT, NPTS_DEFAULT)
 
     def onWeightingChoice(self, button):
Index: src/sas/qtgui/Perspectives/Fitting/UI/OptionsWidgetUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/OptionsWidgetUI.ui	(revision 180bd545166c0e0d674354e554dec53998b492c6)
+++ src/sas/qtgui/Perspectives/Fitting/UI/OptionsWidgetUI.ui	(revision c1e380e47ece53d12ace33cda4662184d4376c2d)
@@ -31,5 +31,9 @@
         </item>
         <item row="0" column="1">
-         <widget class="QLineEdit" name="txtMinRange"/>
+         <widget class="QLineEdit" name="txtMinRange">
+          <property name="toolTip">
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Minimum value of Q.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          </property>
+         </widget>
         </item>
         <item row="0" column="2">
@@ -49,5 +53,9 @@
         </item>
         <item row="1" column="1">
-         <widget class="QLineEdit" name="txtMaxRange"/>
+         <widget class="QLineEdit" name="txtMaxRange">
+          <property name="toolTip">
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Maximum value of Q.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+          </property>
+         </widget>
         </item>
         <item row="1" column="2">
@@ -76,4 +84,7 @@
       <item row="0" column="2">
        <widget class="QPushButton" name="cmdReset">
+        <property name="toolTip">
+         <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Reset the Q range to the default.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        </property>
         <property name="text">
          <string>Reset</string>
@@ -107,8 +118,15 @@
         </item>
         <item row="0" column="1">
-         <widget class="QLineEdit" name="txtNpts"/>
+         <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>
@@ -125,4 +143,7 @@
         <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>
Index: src/sas/qtgui/Perspectives/Invariant/UI/InvariantDetailsUI.py
===================================================================
--- src/sas/qtgui/Perspectives/Invariant/UI/InvariantDetailsUI.py	(revision 83eb5208b8acb86b064162274de583670f72da47)
+++ src/sas/qtgui/Perspectives/Invariant/UI/InvariantDetailsUI.py	(revision c1e380e47ece53d12ace33cda4662184d4376c2d)
Index: src/sas/qtgui/Perspectives/Invariant/UI/TabbedInvariantUI.py
===================================================================
--- src/sas/qtgui/Perspectives/Invariant/UI/TabbedInvariantUI.py	(revision 83eb5208b8acb86b064162274de583670f72da47)
+++ src/sas/qtgui/Perspectives/Invariant/UI/TabbedInvariantUI.py	(revision c1e380e47ece53d12ace33cda4662184d4376c2d)
