Index: src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision 00b7ddf001d6174678202ae0a8cb46f506e0c637)
+++ src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision 700b03b495958037c52731b1dc70ade68dd08917)
@@ -124,7 +124,9 @@
     return item
 
-def addSimpleParametersToModel(parameters, is2D):
+def addSimpleParametersToModel(parameters, is2D, parameters_original=None):
     """
     Update local ModelModel with sasmodel parameters
+    parameters_original: list of parameters before any tagging on their IDs, e.g. for product model
+    (so that those are the display names; see below)
     """
     if is2D:
@@ -132,9 +134,23 @@
     else:
         params = parameters.iq_parameters
+
+    if parameters_original:
+        # 'parameters_original' contains the parameters as they are to be DISPLAYED, while 'parameters'
+        # contains the parameters as they were renamed; this is for handling name collisions in product model.
+        # The 'real name' of the parameter will be stored in the item's user data.
+        if is2D:
+            params_orig = [p for p in parameters_original.kernel_parameters if p.type != 'magnetic']
+        else:
+            params_orig = parameters_original.iq_parameters
+    else:
+        # no difference in names anyway
+        params_orig = params
+
     item = []
-    for param in params:
+    for param, param_orig in zip(params, params_orig):
         # Create the top level, checkable item
-        item_name = param.name
+        item_name = param_orig.name
         item1 = QtGui.QStandardItem(item_name)
+        item1.setData(param.name, QtCore.Qt.UserRole)
         item1.setCheckable(True)
         item1.setEditable(False)
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 00b7ddf001d6174678202ae0a8cb46f506e0c637)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 700b03b495958037c52731b1dc70ade68dd08917)
@@ -2060,13 +2060,27 @@
         """
         structure_module = generate.load_kernel_module(structure_factor)
-        structure_parameters = modelinfo.make_parameter_table(getattr(structure_module, 'parameters', []))
-
-        structure_kernel = self.models[structure_factor]()
-        form_kernel = self.kernel_module
-
-        self.kernel_module = MultiplicationModel(form_kernel, structure_kernel)
+
+        s_kernel = self.models[structure_factor]()
+        p_kernel = self.kernel_module
+
+        p_pars_len = len(p_kernel._model_info.parameters.kernel_parameters)
+        s_pars_len = len(s_kernel._model_info.parameters.kernel_parameters) - 1 # no radius_effective
+
+        self.kernel_module = MultiplicationModel(p_kernel, s_kernel)
+
+        # S(Q) params from the product model are not necessarily the same as those from the S(Q) model; any conflicting
+        # names with P(Q) params will cause a rename; we also lose radius_effective (for now...)
+        s_params = modelinfo.ParameterTable(
+            self.kernel_module._model_info.parameters.kernel_parameters[p_pars_len:p_pars_len+s_pars_len])
+
+        # These are the parameters before rename; ignore the first one, as it is radius_effective, which is removed
+        # from the product model to be handled internally (for now...)
+        s_params_orig = modelinfo.ParameterTable(s_kernel._model_info.parameters.kernel_parameters[1:])
 
         # Get new rows for QModel
-        new_rows = FittingUtilities.addSimpleParametersToModel(structure_parameters, self.is2D)
+        # Any renamed parameters are stored as data in the relevant item, for later handling
+        new_rows = FittingUtilities.addSimpleParametersToModel(s_params, self.is2D, s_params_orig)
+
+        # TODO: deal with new parameter(s) added to product model, in kernel_parameters[p_pars_len+s_pars_len:]
 
         # Add heading row
@@ -2108,4 +2122,5 @@
         model_row = item.row()
         name_index = self._model_model.index(model_row, 0)
+        name_item = self._model_model.itemFromIndex(name_index)
 
         # Extract changed value.
@@ -2116,5 +2131,9 @@
             return
 
-        parameter_name = str(self._model_model.data(name_index)) # sld, background etc.
+        # if the item has user data, this is the actual parameter name (e.g. to handle duplicate names)
+        if name_item.data(QtCore.Qt.UserRole):
+            parameter_name = str(name_item.data(QtCore.Qt.UserRole))
+        else:
+            parameter_name = str(self._model_model.data(name_index))
 
         # Update the parameter value - note: this supports +/-inf as well
