Index: src/sas/qtgui/Perspectives/Fitting/FittingLogic.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingLogic.py	(revision b4d05bdc03c6c40fee47932a9a2d20921b1bbe4e)
+++ src/sas/qtgui/Perspectives/Fitting/FittingLogic.py	(revision 40975f849bc0a8b9f323eb167f30657f2f5204b5)
@@ -167,5 +167,5 @@
         data, update_chisqr, source, \
         unsmeared_output, unsmeared_data, unsmeared_error, \
-        pq_values, sq_values = return_data
+        intermediate_results = return_data
 
         return self._create1DPlot(tab_id, x, y, model, data)
@@ -224,15 +224,10 @@
         data, update_chisqr, source, \
         unsmeared_output, unsmeared_data, unsmeared_error, \
-        pq_values, sq_values = return_data
-
-        pq_plot = None
-        sq_plot = None
-
-        if pq_values is not None:
-            pq_plot = self._create1DPlot(tab_id, x, pq_values, model, data, component="P(Q)")
-        if sq_values is not None:
-            sq_plot = self._create1DPlot(tab_id, x, sq_values, model, data, component="S(Q)")
-
-        return pq_plot, sq_plot
+        intermediate_results = return_data
+
+        plots = []
+        for name, result in intermediate_results.items():
+            plots.append(self._create1DPlot(tab_id, x, result, model, data, component=name))
+        return plots
 
     def computeDataRange(self):
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 66d43707875dcce0f7f6ea2e13982c1815570f09)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 40975f849bc0a8b9f323eb167f30657f2f5204b5)
@@ -2346,15 +2346,9 @@
 
         # Create plots for intermediate product data
-        pq_data, sq_data = self.logic.new1DProductPlots(return_data, self.tab_id)
-        if pq_data is not None:
-            pq_data.symbol = "Line"
-            self.createNewIndex(pq_data)
-            # self.communicate.plotUpdateSignal.emit([pq_data])
-            new_plots.append(pq_data)
-        if sq_data is not None:
-            sq_data.symbol = "Line"
-            self.createNewIndex(sq_data)
-            # self.communicate.plotUpdateSignal.emit([sq_data])
-            new_plots.append(sq_data)
+        plots = self.logic.new1DProductPlots(return_data, self.tab_id)
+        for plot in plots:
+            plot.symbol = "Line"
+            self.createNewIndex(plot)
+            new_plots.append(plot)
 
         # Update/generate plots
Index: src/sas/qtgui/Perspectives/Fitting/ModelThread.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/ModelThread.py	(revision 2df558ebcc19b99ebc1900efaa872a981b31a67d)
+++ src/sas/qtgui/Perspectives/Fitting/ModelThread.py	(revision 40975f849bc0a8b9f323eb167f30657f2f5204b5)
@@ -215,22 +215,35 @@
             output[index] = self.model.evalDistribution(self.data.x[index])
 
-        sq_values = None
-        pq_values = None
-        s_model = None
-        p_model = None
-        if isinstance(self.model, MultiplicationModel):
-            s_model = self.model.s_model
-            p_model = self.model.p_model
-        elif hasattr(self.model, "calc_composition_models"):
-            results = self.model.calc_composition_models(self.data.x[index])
-            if results is not None:
-                pq_values, sq_values = results
-
-        if pq_values is None or sq_values is None:
-            if p_model is not None and s_model is not None:
-                sq_values = numpy.zeros((len(self.data.x)))
-                pq_values = numpy.zeros((len(self.data.x)))
-                sq_values[index] = s_model.evalDistribution(self.data.x[index])
-                pq_values[index] = p_model.evalDistribution(self.data.x[index])
+        results_eval = {}
+        intermediate_results = getattr(self.model, "_intermediate_results", None)
+        if callable(intermediate_results):
+            # support for future sasmodels (beta approx support) - it returns a dict of intermediate results, keyed by
+            # name
+            results_eval = intermediate_results()
+        else:
+            sq_values = None
+            pq_values = None
+            s_model = None
+            p_model = None
+            if isinstance(self.model, MultiplicationModel):
+                s_model = self.model.s_model
+                p_model = self.model.p_model
+            elif hasattr(self.model, "calc_composition_models"):
+                results = self.model.calc_composition_models(self.data.x[index])
+                if results is not None:
+                    pq_values, sq_values = results
+
+            if pq_values is None or sq_values is None:
+                if p_model is not None and s_model is not None:
+                    sq_values = numpy.zeros((len(self.data.x)))
+                    pq_values = numpy.zeros((len(self.data.x)))
+                    sq_values[index] = s_model.evalDistribution(self.data.x[index])
+                    pq_values[index] = p_model.evalDistribution(self.data.x[index])
+
+            if pq_values is not None and sq_values is not None:
+                results_eval = {
+                    "P(Q)": pq_values,
+                    "S(Q)": sq_values
+                }
 
         elapsed = time.time() - self.starttime
@@ -248,5 +261,5 @@
                     self.source,
                     unsmeared_output, unsmeared_data, unsmeared_error,
-                    pq_values, sq_values)
+                    results_eval)
         else:
             self.completefn((self.data.x[index], output[index],
@@ -261,5 +274,5 @@
                         self.source,
                         unsmeared_output, unsmeared_data, unsmeared_error,
-                        pq_values, sq_values))
+                        results_eval))
 
     def results(self):
