Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 224113016392685e3f7af17220091d29d434e19e)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 00b3b40a41d26d36637a576b838e176e2d2d8347)
@@ -370,7 +370,5 @@
 
         # Update state stack
-        if self.undo_supported:
-            state = self.currentState()
-            self.pushFitPage(state)
+        self.updateUndo()
 
     def onSelectStructureFactor(self):
@@ -429,7 +427,12 @@
         name_index = self._poly_model.index(model_row, 0)
         # Extract changed value. Assumes proper validation by QValidator/Delegate
-        # Checkbox in column 0
+        # TODO: abstract away hardcoded column numbers
         if model_column == 0:
+            # Is the parameter checked for fitting?
             value = item.checkState()
+            # TODO: add the param to self.params_for_fitting
+        elif model_column == 6:
+            value = item.text()
+            # TODO: Modify Npts/Nsigs based on function choice
         else:
             try:
@@ -866,12 +869,14 @@
             return
         parameter_name = str(self._model_model.data(name_index).toPyObject()) # sld, background etc.
-        property_name = str(self._model_model.headerData(1, model_column).toPyObject()) # Value, min, max, etc.
-
+        property_index = self._model_model.headerData(1, model_column).toInt()[0]-1 # Value, min, max, etc.
+
+        # Update the parameter value - note: this supports +/-inf as well
         self.kernel_module.params[parameter_name] = value
 
-        # TODO: update min/max based on property_name
         # min/max to be changed in self.kernel_module.details[parameter_name] = ['Ang', 0.0, inf]
-        # magnetic params in self.kernel_module.details['M0:parameter_name'] = value
-        # multishell params in self.kernel_module.details[??] = value
+        self.kernel_module.details[parameter_name][property_index] = value
+
+        # TODO: magnetic params in self.kernel_module.details['M0:parameter_name'] = value
+        # TODO: multishell params in self.kernel_module.details[??] = value
 
         # Force the chart update when actual parameters changed
@@ -880,7 +885,5 @@
 
         # Update state stack
-        if self.undo_supported:
-            state = self.currentState()
-            self.pushFitPage(state)
+        self.updateUndo()
 
     def checkboxSelected(self, item):
@@ -943,10 +946,5 @@
         Update a QStandardModelIndex containing model data
         """
-        if fitted_data.name is None:
-            name = self.nameForFittedData(self.logic.data.filename)
-            fitted_data.title = name
-            fitted_data.name = name
-        else:
-            name = fitted_data.name
+        name = self.nameFromData(fitted_data)
         # Make this a line if no other defined
         if hasattr(fitted_data, 'symbol') and fitted_data.symbol is None:
@@ -959,6 +957,15 @@
         Create a QStandardModelIndex containing model data
         """
+        name = self.nameFromData(fitted_data)
+        # Notify the GUI manager so it can create the theory model in DataExplorer
+        new_item = GuiUtils.createModelItemWithPlot(QtCore.QVariant(fitted_data), name=name)
+        self.communicate.updateTheoryFromPerspectiveSignal.emit(new_item)
+
+    def nameFromData(self, fitted_data):
+        """
+        Return name for the dataset. Terribly impure function.
+        """
         if fitted_data.name is None:
-            name = self.nameForFittedData(self.kernel_module.name)
+            name = self.nameForFittedData(self.logic.data.filename)
             fitted_data.title = name
             fitted_data.name = name
@@ -966,7 +973,5 @@
         else:
             name = fitted_data.name
-        # Notify the GUI manager so it can create the theory model in DataExplorer
-        new_item = GuiUtils.createModelItemWithPlot(QtCore.QVariant(fitted_data), name=name)
-        self.communicate.updateTheoryFromPerspectiveSignal.emit(new_item)
+        return name
 
     def methodCalculateForData(self):
@@ -1258,4 +1263,12 @@
         # TODO: add polidyspersity and magnetism
 
+
+    def updateUndo(self):
+        """
+        Create a new state page and add it to the stack
+        """
+        if self.undo_supported:
+            self.pushFitPage(self.currentState())
+
     def currentState(self):
         """
Index: src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui	(revision f7f579668e22fbdf094f67ed99f23bd76bd99e42)
+++ src/sas/qtgui/Perspectives/Fitting/UI/FittingWidgetUI.ui	(revision 00b3b40a41d26d36637a576b838e176e2d2d8347)
@@ -394,5 +394,18 @@
          <layout class="QGridLayout" name="gridLayout_9">
           <item row="0" column="0">
-           <widget class="QTableView" name="lstPoly"/>
+           <widget class="QTableView" name="lstPoly">
+            <property name="editTriggers">
+             <set>QAbstractItemView::AllEditTriggers</set>
+            </property>
+            <property name="alternatingRowColors">
+             <bool>true</bool>
+            </property>
+            <property name="selectionMode">
+             <enum>QAbstractItemView::MultiSelection</enum>
+            </property>
+            <property name="selectionBehavior">
+             <enum>QAbstractItemView::SelectRows</enum>
+            </property>
+           </widget>
           </item>
          </layout>
Index: src/sas/qtgui/Perspectives/Fitting/ViewDelegate.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/ViewDelegate.py	(revision 601178841ff508ca14f3d81fe3e15aa674294647)
+++ src/sas/qtgui/Perspectives/Fitting/ViewDelegate.py	(revision 00b3b40a41d26d36637a576b838e176e2d2d8347)
@@ -22,12 +22,4 @@
 POLY_FUNCTION=6
 
-class CustomLineEdit(QtGui.QLineEdit):
-    editingFinished = QtCore.pyqtSignal()
-    def __init__(self, parent=None, old_value=None):
-        super(CustomLineEdit, self).__init__(parent)
-        self.setAutoFillBackground(True)
-        self.old_value = old_value
-    def focusOutEvent(self, event):
-        self.editingFinished.emit()
 
 class ModelViewDelegate(QtGui.QStyledItemDelegate):
@@ -81,49 +73,35 @@
             editor.setValidator(validator)
             return editor
-        elif index.column() in (PARAM_MIN, PARAM_MAX):
-            # Save current value in case we need to revert
-            #self._old_value = index.data().toFloat()[0]
-            self._old_value = index.data().toString()
-            editor = CustomLineEdit(widget, old_value=self._old_value)
-            editor.editingFinished.connect(self.commitAndCloseEditor)
-            return editor
 
         return super(ModelViewDelegate, self).createEditor(widget, option, index)
 
-    #def setEditorData(self, editor, index):
-    #    if index.column() == MIN:
-    #        #value = index.data().toString()[0]
-    #        value = index.model().data(index, QtCore.Qt.DisplayRole).toString()
-    #        print "VALUE = ", value
-    #        editor.setText('['+value+']')
-    #        return editor
-
-    #    return super(ModelViewDelegate, self).setEditorData(editor, index)
-
-    def commitAndCloseEditor(self):
-            editor = self.sender()
-            content = editor.text()
+    def setModelData(self, editor, model, index):
+        """
+        Overwrite generic model update method for certain columns
+        """
+        if index.column() in (PARAM_MIN, PARAM_MAX):
             try:
-                value_float = float(content)
+                value_float = float(editor.text())
             except ValueError:
-                # TODO: Notify the user
-                # <scary popup>
-                # Do nothing
+                # TODO: present the failure to the user
+                # balloon popup? tooltip? cell background colour flash?
                 return
-            self.commitData.emit(editor)
-            self.closeEditor.emit(editor, QtGui.QAbstractItemDelegate.NoHint)
+        QtGui.QStyledItemDelegate.setModelData(self, editor, model, index)
 
 
 class PolyViewDelegate(QtGui.QStyledItemDelegate):
     """
-    Custom delegate for appearance and behavior control of the polydisperisty view
+    Custom delegate for appearance and behavior control of the polydispersity view
     """
-    def createEditor(self, parent, option, index):
-        # TODO: set it to correct index on creation
+    def createEditor(self, widget, option, index):
+        # Remember the current choice
+        current_text = index.data().toString()
         if index.column() == POLY_FUNCTION:
-            editor = QtGui.QComboBox(parent)
+            editor = QtGui.QComboBox(widget)
             for function in POLYDISPERSE_FUNCTIONS:
                 editor.addItem(function)
+            current_index = editor.findText(current_text)
+            editor.setCurrentIndex(current_index if current_index>-1 else 0)
             return editor
         else:
-            QtGui.QStyledItemDelegate.createEditor(self, parent, option, index)
+            QtGui.QStyledItemDelegate.createEditor(self, widget, option, index)
