Index: src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision 700b03b495958037c52731b1dc70ade68dd08917)
+++ src/sas/qtgui/Perspectives/Fitting/FittingUtilities.py	(revision c7809a9a1c19a87301ad7d33085775815822d0c1)
@@ -160,5 +160,5 @@
         item4 = QtGui.QStandardItem(str(param.limits[0]))
         item5 = QtGui.QStandardItem(str(param.limits[1]))
-        item6 = QtGui.QStandardItem(param.units)
+        item6 = QtGui.QStandardItem(str(param.units))
         item6.setEditable(False)
         item.append([item1, item2, item4, item5, item6])
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 700b03b495958037c52731b1dc70ade68dd08917)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision c7809a9a1c19a87301ad7d33085775815822d0c1)
@@ -2068,13 +2068,19 @@
 
         self.kernel_module = MultiplicationModel(p_kernel, s_kernel)
+        all_params = self.kernel_module._model_info.parameters.kernel_parameters
+        all_param_names = [param.name for param in all_params]
 
         # 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:])
+
+        if "radius_effective_mode" in all_param_names:
+            # for this version of sasmodels we do NOT kill radius_effective
+            s_params = modelinfo.ParameterTable(all_params[p_pars_len:p_pars_len+s_pars_len])
+            s_params_orig = modelinfo.ParameterTable(s_kernel._model_info.parameters.kernel_parameters)
+        else:
+            # kill radius_effective
+            s_pars_len -= 1
+            s_params = modelinfo.ParameterTable(all_params[p_pars_len+1:p_pars_len+s_pars_len])
+            s_params_orig = modelinfo.ParameterTable(s_kernel._model_info.parameters.kernel_parameters[1:])
 
         # Get new rows for QModel
@@ -2082,5 +2088,8 @@
         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:]
+        # TODO: merge the rest of this implementation in
+        # These parameters are not part of P(Q) nor S(Q), but are added only to the product model (e.g. specifying
+        # structure factor calculation mode)
+        # product_params = all_params[p_pars_len+s_pars_len:]
 
         # Add heading row
@@ -2344,4 +2353,18 @@
             GuiUtils.deleteRedundantPlots(self.all_data[self.data_index], new_plots)
 
+        # TODO: merge rest of beta approx implementation in
+        # TODO: refactor
+        # deal with constrained radius_effective
+        # for row in range(self._model_model.rowCount()):
+        #     if self._model_model.item(row, 0).text() == "radius_effective_mode":
+        #         if GuiUtils.toDouble(self._model_model.item(row, 1).text()) == 0:
+        #             return
+        # radius_effective = intermediate_ER()
+        # if radius_effective:
+        #     for row in range(self._model_model.rowCount()):
+        #         if self._model_model.item(row, 0).text() == "radius_effective":
+        #             self._model_model.item(row, 1).setText(str(radius_effective))
+        #             break
+
         for plot in new_plots:
             if hasattr(plot, "id") and "esidual" in plot.id:
