Index: src/sas/qtgui/MainWindow/DataExplorer.py
===================================================================
--- src/sas/qtgui/MainWindow/DataExplorer.py	(revision 0cd98a1bff2f5cc0a67f68ad681ae7a3c8379c75)
+++ src/sas/qtgui/MainWindow/DataExplorer.py	(revision 5b144c6da3772c7f3a243d7540d60d506f7f931e)
@@ -553,5 +553,5 @@
         return item
 
-    def displayFile(self, filename=None, is_data=True):
+    def displayFile(self, filename=None, is_data=True, id=None):
         """
         Forces display of charts for the given filename
@@ -560,13 +560,17 @@
         # Now query the model item for available plots
         plots = GuiUtils.plotsFromFilename(filename, model)
-
+        # Each fitpage contains the name based on fit widget number
+        fitpage_name = "" if id is None else "M"+str(id)
         new_plots = []
         for item, plot in plots.items():
-            if not self.updatePlot(plot):
-                # Don't plot intermediate results, e.g. P(Q), S(Q)
-                match = GuiUtils.theory_plot_ID_pattern.match(plot.id)
-                # 2nd match group contains the identifier for the intermediate result, if present (e.g. "[P(Q)]")
-                if match and match.groups()[1] != None:
-                    continue
+            if self.updatePlot(plot) and filename != plot.name:
+                continue
+            # Don't plot intermediate results, e.g. P(Q), S(Q)
+            match = GuiUtils.theory_plot_ID_pattern.match(plot.id)
+            # 2nd match group contains the identifier for the intermediate result, if present (e.g. "[P(Q)]")
+            if match and match.groups()[1] != None:
+                continue
+            # Don't include plots from different fitpages, but always include the original data
+            if fitpage_name in plot.name or filename == plot.name:
                 # 'sophisticated' test to generate standalone plot for residuals
                 if 'esiduals' in plot.title:
@@ -579,5 +583,5 @@
             self.plotData(new_plots)
 
-    def displayData(self, data_list):
+    def displayData(self, data_list, id):
         """
         Forces display of charts for the given data set
@@ -588,5 +592,5 @@
         # the data explorer indices.
         filename = plot_to_show.filename
-        self.displayFile(filename=filename, is_data=plot_to_show.is_data)
+        self.displayFile(filename=filename, is_data=plot_to_show.is_data, id=id)
 
     def addDataPlot2D(self, plot_set, item):
Index: src/sas/qtgui/MainWindow/GuiManager.py
===================================================================
--- src/sas/qtgui/MainWindow/GuiManager.py	(revision 339e22b9f5c08262b1d5b0b551ce467bcf83178c)
+++ src/sas/qtgui/MainWindow/GuiManager.py	(revision 5b144c6da3772c7f3a243d7540d60d506f7f931e)
@@ -921,10 +921,10 @@
             self.filesWidget.displayFile(filename=filename, is_data=True)
 
-    def showPlot(self, plot):
+    def showPlot(self, plot, id):
         """
         Pass the show plot request to the data explorer
         """
         if hasattr(self, "filesWidget"):
-            self.filesWidget.displayData(plot)
+            self.filesWidget.displayData(plot, id)
 
     def uncheckAllMenuItems(self, menuObject):
Index: src/sas/qtgui/Perspectives/Fitting/FittingWidget.py
===================================================================
--- src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 685602a915824acbb32b1e9495c71c0cb67a6f1c)
+++ src/sas/qtgui/Perspectives/Fitting/FittingWidget.py	(revision 5b144c6da3772c7f3a243d7540d60d506f7f931e)
@@ -1841,5 +1841,5 @@
         data_to_show = self.data if self.data_is_loaded else self.model_data
         if data_to_show is not None:
-            self.communicate.plotRequestedSignal.emit([data_to_show])
+            self.communicate.plotRequestedSignal.emit([data_to_show], self.tab_id)
 
     def onOptionsUpdate(self):
@@ -2422,5 +2422,6 @@
 
         if self.data_is_loaded:
-            GuiUtils.deleteRedundantPlots(self.all_data[self.data_index], new_plots)
+            #GuiUtils.deleteRedundantPlots(self.all_data[self.data_index], new_plots)
+            pass
         else:
             # delete theory items for the model, in order to get rid of any redundant items, e.g. beta(Q), S_eff(Q)
Index: src/sas/qtgui/Plotting/Plotter.py
===================================================================
--- src/sas/qtgui/Plotting/Plotter.py	(revision 0cd98a1bff2f5cc0a67f68ad681ae7a3c8379c75)
+++ src/sas/qtgui/Plotting/Plotter.py	(revision 5b144c6da3772c7f3a243d7540d60d506f7f931e)
@@ -561,5 +561,5 @@
 
         #Remove another Fit, if exists
-        self.removePlot("fit")
+        self.removePlot("Fit")
 
         self.fit_result.reset_view()
Index: src/sas/qtgui/Plotting/UnitTesting/PlotterTest.py
===================================================================
--- src/sas/qtgui/Plotting/UnitTesting/PlotterTest.py	(revision b8080e1affadb04559f0597dfddc5506d2044e9d)
+++ src/sas/qtgui/Plotting/UnitTesting/PlotterTest.py	(revision 5b144c6da3772c7f3a243d7540d60d506f7f931e)
@@ -57,10 +57,10 @@
         self.plotter.data = self.data
         self.plotter.show()
-        FigureCanvas.draw_idle = MagicMock()
+        FigureCanvas.draw = MagicMock()
 
         self.plotter.plot(hide_error=False)
 
         self.assertEqual(self.plotter.ax.get_xscale(), 'log')
-        self.assertTrue(FigureCanvas.draw_idle.called)
+        self.assertTrue(FigureCanvas.draw.called)
 
         self.plotter.figure.clf()
@@ -70,10 +70,10 @@
         self.plotter.data = self.data
         self.plotter.show()
-        FigureCanvas.draw_idle = MagicMock()
+        FigureCanvas.draw = MagicMock()
 
         self.plotter.plot(hide_error=True)
 
         self.assertEqual(self.plotter.ax.get_yscale(), 'log')
-        self.assertTrue(FigureCanvas.draw_idle.called)
+        self.assertTrue(FigureCanvas.draw.called)
         self.plotter.figure.clf()
 
@@ -91,5 +91,5 @@
         self.plotter.data = data
         self.plotter.show()
-        FigureCanvas.draw_idle = MagicMock()
+        FigureCanvas.draw = MagicMock()
 
         self.plotter.plot(hide_error=True)
@@ -97,5 +97,5 @@
         self.assertEqual(self.plotter.ax.get_xscale(), 'linear')
         self.assertEqual(self.plotter.ax.get_yscale(), 'linear')
-        self.assertTrue(FigureCanvas.draw_idle.called)
+        self.assertTrue(FigureCanvas.draw.called)
 
     def testCreateContextMenuQuick(self):
@@ -262,5 +262,5 @@
         # Just this one plot
         self.assertEqual(len(list(self.plotter.plot_dict.keys())), 1)
-        self.plotter.onLinearFit(1)
+        self.plotter.onLinearFit('Test name')
 
         # Check that exec_ got called
@@ -289,5 +289,5 @@
 
         # Delete one set
-        self.plotter.onRemovePlot(2)
+        self.plotter.onRemovePlot('Test name 2')
         # Assure we have two sets
         self.assertEqual(len(list(self.plotter.plot_dict.keys())), 1)
@@ -296,5 +296,5 @@
 
         # Delete the remaining set
-        self.plotter.onRemovePlot(1)
+        self.plotter.onRemovePlot('Test name')
         # Assure we have no plots
         self.assertEqual(len(list(self.plotter.plot_dict.keys())), 0)
@@ -331,5 +331,5 @@
         self.assertEqual(yl, "$YAXIS(cake)$")
         # The hide_error flag should also remain
-        self.assertTrue(self.plotter.plot_dict[2].hide_error)
+        self.assertTrue(self.plotter.plot_dict['Test name 2'].hide_error)
         self.plotter.figure.clf()
 
@@ -355,5 +355,5 @@
 
         # Reverse the toggle
-        self.plotter.onToggleHideError(2)
+        self.plotter.onToggleHideError('Test name 2')
         # See that the labels didn't change
         xl = self.plotter.ax.xaxis.label.get_text()
@@ -362,5 +362,5 @@
         self.assertEqual(yl, "$YAXIS(cake)$")
         # The hide_error flag should toggle
-        self.assertEqual(self.plotter.plot_dict[2].hide_error, not error_status)
+        self.assertEqual(self.plotter.plot_dict['Test name 2'].hide_error, not error_status)
         self.plotter.figure.clf()
 
@@ -417,5 +417,5 @@
         self.assertEqual(yl, "$YAXIS(cake)$")
         # The hide_error flag should be as set
-        self.assertEqual(self.plotter.plot_dict[2].hide_error, error_status)
+        self.assertEqual(self.plotter.plot_dict['Test name 2'].hide_error, error_status)
         self.plotter.figure.clf()
 
Index: src/sas/qtgui/Utilities/GuiUtils.py
===================================================================
--- src/sas/qtgui/Utilities/GuiUtils.py	(revision 339e22b9f5c08262b1d5b0b551ce467bcf83178c)
+++ src/sas/qtgui/Utilities/GuiUtils.py	(revision 5b144c6da3772c7f3a243d7540d60d506f7f931e)
@@ -225,5 +225,5 @@
     # New plot requested from the GUI manager
     # Old "NewPlotEvent"
-    plotRequestedSignal = QtCore.pyqtSignal(list)
+    plotRequestedSignal = QtCore.pyqtSignal(list, int)
 
     # Plot from file names
@@ -288,17 +288,19 @@
     for index in range(item.rowCount()):
         plot_item = item.child(index)
-        if plot_item.isCheckable():
-            plot_data = plot_item.child(0).data()
-            if plot_data.id is not None and \
-                   (plot_data.name == update_data.name or plot_data.id == update_data.id):
+        if not plot_item.isCheckable():
+            continue
+        plot_data = plot_item.child(0).data()
+        if plot_data.id is not None and \
+                plot_data.name == update_data.name:
+                #(plot_data.name == update_data.name or plot_data.id == update_data.id):
             # if plot_data.id is not None and plot_data.id == update_data.id:
-                # replace data section in item
-                plot_item.child(0).setData(update_data)
-                plot_item.setText(name)
-                # Plot title if any
-                if plot_item.child(1).hasChildren():
-                    plot_item.child(1).child(0).setText("Title: %s"%name)
-                # Force redisplay
-                return
+            # replace data section in item
+            plot_item.child(0).setData(update_data)
+            plot_item.setText(name)
+            # Plot title if any
+            if plot_item.child(1).hasChildren():
+                plot_item.child(1).child(0).setText("Title: %s"%name)
+            # Force redisplay
+            return
 
     # Create the new item
