Index: src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision dc5ef150e8b37e01a3b7e253eb5b66d3b82de99c)
+++ src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision fd1ae6d13fef2c7657b038fea72a31b9f60b243a)
@@ -132,5 +132,5 @@
     model.setHeaderData(2, QtCore.Qt.Horizontal, QtCore.QVariant("Min"))
     model.setHeaderData(3, QtCore.Qt.Horizontal, QtCore.QVariant("Max"))
-    model.setHeaderData(4, QtCore.Qt.Horizontal, QtCore.QVariant("[Units]"))
+    model.setHeaderData(4, QtCore.Qt.Horizontal, QtCore.QVariant("Units"))
 
 def addErrorHeadersToModel(model):
@@ -143,5 +143,5 @@
     model.setHeaderData(3, QtCore.Qt.Horizontal, QtCore.QVariant("Min"))
     model.setHeaderData(4, QtCore.Qt.Horizontal, QtCore.QVariant("Max"))
-    model.setHeaderData(5, QtCore.Qt.Horizontal, QtCore.QVariant("[Units]"))
+    model.setHeaderData(5, QtCore.Qt.Horizontal, QtCore.QVariant("Units"))
 
 def addPolyHeadersToModel(model):
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 6066a3f03117feca1183eb9b58d642733e90d66e)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision fd1ae6d13fef2c7657b038fea72a31b9f60b243a)
@@ -395,9 +395,23 @@
         self.has_error_column = False
 
+        self.respondToModelStructure(model=model, structure_factor=None)
+
+    def onSelectStructureFactor(self):
+        """
+        Select Structure Factor from list
+        """
+        model = str(self.cbModel.currentText())
+        category = str(self.cbCategory.currentText())
+        structure = str(self.cbStructureFactor.currentText())
+        if category == CATEGORY_STRUCTURE:
+            model = None
+        self.respondToModelStructure(model=model, structure_factor=structure)
+
+    def respondToModelStructure(self, model=None, structure_factor=None):
         # Set enablement on calculate/plot
         self.cmdPlot.setEnabled(True)
 
-        # SasModel -> QModel
-        self.SASModelToQModel(model)
+        # kernel parameters -> model_model
+        self.SASModelToQModel(model, structure_factor)
 
         if self.data_is_loaded:
@@ -409,17 +423,4 @@
             self.createDefaultDataset()
 
-        # Update state stack
-        self.updateUndo()
-
-    def onSelectStructureFactor(self):
-        """
-        Select Structure Factor from list
-        """
-        model = str(self.cbModel.currentText())
-        category = str(self.cbCategory.currentText())
-        structure = str(self.cbStructureFactor.currentText())
-        if category == CATEGORY_STRUCTURE:
-            model = None
-        self.SASModelToQModel(model, structure_factor=structure)
         # Update state stack
         self.updateUndo()
@@ -836,9 +837,48 @@
         Setting model parameters into table based on selected category
         """
-        # TODO - modify for structure factor-only choice
-
         # Crete/overwrite model items
         self._model_model.clear()
 
+        # First, add parameters from the main model
+        if model_name is not None:
+            self.fromModelToQModel(model_name)
+
+        # Then, add structure factor derived parameters
+        if structure_factor is not None and structure_factor != "None":
+            if model_name is None:
+                # Instantiate the current sasmodel for SF-only models
+                self.kernel_module = self.models[structure_factor]()
+            self.fromStructureFactorToQModel(structure_factor)
+        else:
+            # Allow the SF combobox visibility for the given sasmodel
+            self.enableStructureFactorControl(structure_factor)
+
+        # Then, add multishells
+        if model_name is not None:
+            # Multishell models need additional treatment
+            self.addExtraShells()
+
+        # Add polydispersity to the model
+        self.setPolyModel()
+        # Add magnetic parameters to the model
+        self.setMagneticModel()
+
+        # Adjust the table cells width
+        self.lstParams.resizeColumnToContents(0)
+        self.lstParams.setSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding)
+
+        # Now we claim the model has been loaded
+        self.model_is_loaded = True
+
+        # (Re)-create headers
+        FittingUtilities.addHeadersToModel(self._model_model)
+
+        # Update Q Ranges
+        self.updateQRange()
+
+    def fromModelToQModel(self, model_name):
+        """
+        Setting model parameters into QStandardItemModel based on selected _model_
+        """
         kernel_module = generate.load_kernel_module(model_name)
         self.model_parameters = modelinfo.make_parameter_table(getattr(kernel_module, 'parameters', []))
@@ -858,35 +898,16 @@
         self._last_model_row = self._model_model.rowCount()
 
-        FittingUtilities.addHeadersToModel(self._model_model)
-
-        # Add structure factor
-        if structure_factor is not None and structure_factor != "None":
-            structure_module = generate.load_kernel_module(structure_factor)
-            structure_parameters = modelinfo.make_parameter_table(getattr(structure_module, 'parameters', []))
-            new_rows = FittingUtilities.addSimpleParametersToModel(structure_parameters, self.is2D)
-            for row in new_rows:
-                self._model_model.appendRow(row)
-            # Update the counter used for multishell display
-            self._last_model_row = self._model_model.rowCount()
-        else:
-            self.addStructureFactor()
-
-        # Multishell models need additional treatment
-        self.addExtraShells()
-
-        # Add polydispersity to the model
-        self.setPolyModel()
-        # Add magnetic parameters to the model
-        self.setMagneticModel()
-
-        # Adjust the table cells width
-        self.lstParams.resizeColumnToContents(0)
-        self.lstParams.setSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Expanding)
-
-        # Now we claim the model has been loaded
-        self.model_is_loaded = True
-
-        # Update Q Ranges
-        self.updateQRange()
+    def fromStructureFactorToQModel(self, structure_factor):
+        """
+        Setting model parameters into QStandardItemModel based on selected _structure factor_
+        """
+        structure_module = generate.load_kernel_module(structure_factor)
+        structure_parameters = modelinfo.make_parameter_table(getattr(structure_module, 'parameters', []))
+
+        new_rows = FittingUtilities.addSimpleParametersToModel(structure_parameters, self.is2D)
+        for row in new_rows:
+            self._model_model.appendRow(row)
+        # Update the counter used for multishell display
+        self._last_model_row = self._model_model.rowCount()
 
     def updateParamsFromModel(self, item):
@@ -1159,9 +1180,9 @@
         FittingUtilities.addHeadersToModel(self._magnet_model)
 
-    def addStructureFactor(self):
+    def enableStructureFactorControl(self, structure_factor):
         """
         Add structure factors to the list of parameters
         """
-        if self.kernel_module.is_form_factor:
+        if self.kernel_module.is_form_factor or structure_factor == 'None':
             self.enableStructureCombo()
         else:
Index: src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py	(revision dc5ef150e8b37e01a3b7e253eb5b66d3b82de99c)
+++ src/sas/qtgui/Perspectives/Fitting/UnitTesting/FittingWidgetTest.py	(revision fd1ae6d13fef2c7657b038fea72a31b9f60b243a)
@@ -219,12 +219,21 @@
         self.assertEqual(self.widget.cbStructureFactor.currentText(), STRUCTURE_DEFAULT)
 
-
-        # TODO once functionality fixed
-        ## Switch category to structure factor
-        #structure_index=self.widget.cbCategory.findText(CATEGORY_STRUCTURE)
-        #self.widget.cbCategory.setCurrentIndex(structure_index)
-        ## Choose the last factor
-        #last_index = self.widget.cbStructureFactor.count()
-        #self.widget.cbStructureFactor.setCurrentIndex(last_index-1)
+        # Switch category to structure factor
+        structure_index=self.widget.cbCategory.findText(CATEGORY_STRUCTURE)
+        self.widget.cbCategory.setCurrentIndex(structure_index)
+        # Observe the correct enablement
+        self.assertTrue(self.widget.cbStructureFactor.isEnabled())
+        self.assertFalse(self.widget.cbModel.isEnabled())
+        self.assertEqual(self.widget._model_model.rowCount(), 0)
+
+        # Choose the last factor
+        last_index = self.widget.cbStructureFactor.count()
+        self.widget.cbStructureFactor.setCurrentIndex(last_index-1)
+        # Do we have all the rows?
+        self.assertEqual(self.widget._model_model.rowCount(), 4)
+
+        # Are the command buttons properly enabled?
+        self.assertTrue(self.widget.cmdPlot.isEnabled())
+        self.assertFalse(self.widget.cmdFit.isEnabled())
 
     def testReadCategoryInfo(self):
