diff --git a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_presenter.py b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_presenter.py
index fbf22015c723ca14220474766a0575caf049c33c..024f708d4a67c1c80f887cd8983f627b003e3598 100644
--- a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_presenter.py
+++ b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_presenter.py
@@ -8,6 +8,7 @@
 from Engineering.gui.engineering_diffraction.tabs.common import create_error_message
 from mantid.simpleapi import logger
 from mantidqt.utils.asynchronous import AsyncTask
+from mantidqt.utils.observer_pattern import GenericObservable
 
 
 class FittingDataPresenter(object):
@@ -23,6 +24,12 @@ class FittingDataPresenter(object):
         self.view.set_enable_button_connection(self._enable_load_button)
         self.view.set_on_remove_selected_clicked(self._remove_selected_tracked_workspaces)
         self.view.set_on_remove_all_clicked(self._remove_all_tracked_workspaces)
+        self.view.set_on_table_cell_changed(self._handle_table_cell_changed)
+
+        # Observable Setup
+        self.plot_added_notifier = GenericObservable()
+        self.plot_removed_notifier = GenericObservable()
+        self.all_plots_removed_notifier = GenericObservable()
 
     def on_load_clicked(self):
         if self._validate():
@@ -31,7 +38,8 @@ class FittingDataPresenter(object):
 
     def remove_workspace(self, ws_name):
         if ws_name in self.get_loaded_workspaces():
-            self.get_loaded_workspaces().pop(ws_name)
+            removed = self.get_loaded_workspaces().pop(ws_name)
+            self.plot_removed_notifier.notify_subscribers(removed)
             self._repopulate_table()
 
     def rename_workspace(self, old_name, new_name):
@@ -42,6 +50,7 @@ class FittingDataPresenter(object):
 
     def clear_workspaces(self):
         self.get_loaded_workspaces().clear()
+        self.all_plots_removed_notifier.notify_subscribers()
         self.row_numbers.clear()
         self._repopulate_table()
 
@@ -89,13 +98,22 @@ class FittingDataPresenter(object):
         row_numbers = self._remove_selected_table_rows()
         for row_no in row_numbers:
             ws_name = self.row_numbers.pop(row_no)
-            self.get_loaded_workspaces().pop(ws_name)
+            removed = self.get_loaded_workspaces().pop(ws_name)
+            self.plot_removed_notifier.notify_subscribers(removed)
         self._repopulate_table()
 
     def _remove_all_tracked_workspaces(self):
         self.clear_workspaces()
         self._remove_all_table_rows()
 
+    def _handle_table_cell_changed(self, row, col):
+        if col == 2 and row in self.row_numbers:  # Is from the plot check column
+            ws = self.model.get_loaded_workspaces()[self.row_numbers[row]]
+            if self.view.get_table_item(row, col).checkState() == 2:  # Plot Box is checked
+                self.plot_added_notifier.notify_subscribers(ws)
+            else:  # Plot box is unchecked
+                self.plot_removed_notifier.notify_subscribers(ws)
+
     def _enable_load_button(self, enabled):
         self.view.set_load_button_enabled(enabled)
 
diff --git a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_view.py b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_view.py
index b07a1349cb67e5bfbc96a2d7eb278a4f01f48204..e2a384439f5e90796ad348e272473591c69ce669 100644
--- a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_view.py
+++ b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_view.py
@@ -87,6 +87,9 @@ class FittingDataView(QtWidgets.QWidget, Ui_data):
     def get_selected_rows(self):
         return set(index.row() for index in self.table_selection.selectedIndexes())
 
+    def get_table_item(self, row, col):
+        return self.table_selection.item(row, col)
+
     # =================
     # State Getters
     # =================
diff --git a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/test/test_data_presenter.py b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/test/test_data_presenter.py
index aec6e02de3dff8a8b4108915716a4fafef3c104d..6ab9c13b0efb6b8422ab57819b048557ad7f494e 100644
--- a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/test/test_data_presenter.py
+++ b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/test/test_data_presenter.py
@@ -111,11 +111,13 @@ class FittingDataPresenterTest(unittest.TestCase):
         model_dict = {"name1": "ws1", "name2": "ws2"}
         self.model.get_loaded_workspaces.return_value = model_dict
         self.presenter.row_numbers = {"name1": 0, "name2": 1}
+        self.presenter.plot_removed_notifier = mock.MagicMock()
 
         self.presenter.remove_workspace("name1")
 
         self.assertEqual({"name2": "ws2"}, model_dict)
         self.assertEqual({"name2": 0}, self.presenter.row_numbers)
+        self.assertEqual(1, self.presenter.plot_removed_notifier.notify_subscribers.call_count)
 
     def test_remove_workspace_not_tracked(self):
         model_dict = {"name1": "ws1", "name2": "ws2"}
@@ -152,11 +154,13 @@ class FittingDataPresenterTest(unittest.TestCase):
         model_dict = {"name1": "ws1", "name2": "ws2"}
         self.model.get_loaded_workspaces.return_value = model_dict
         self.presenter.row_numbers = {"name1": 0, "name2": 1}
+        self.presenter.all_plots_removed_notifier = mock.MagicMock()
 
         self.presenter.clear_workspaces()
 
         self.assertEqual({}, model_dict)
         self.assertEqual({}, self.presenter.row_numbers)
+        self.assertEqual(1, self.presenter.all_plots_removed_notifier.notify_subscribers.call_count)
 
     def test_replace_workspace_tracked(self):
         model_dict = {"name1": "ws1", "name2": "ws2"}
@@ -183,9 +187,11 @@ class FittingDataPresenterTest(unittest.TestCase):
         self.presenter.row_numbers = data_presenter.TwoWayRowDict()
         self.presenter.row_numbers["name1"] = 0
         self.presenter.row_numbers["name2"] = 1
-        model_dict = {"name1": "ws1", "name2": "ws2"}
+        self.presenter.row_numbers["name3"] = 2
+        model_dict = {"name1": "ws1", "name2": "ws2", "name3": "ws3"}
         self.model.get_loaded_workspaces.return_value = model_dict
-        self.view.remove_selected.return_value = [0]
+        self.view.remove_selected.return_value = [0, 2]
+        self.presenter.plot_removed_notifier = mock.MagicMock()
 
         self.presenter._remove_selected_tracked_workspaces()
 
@@ -194,6 +200,60 @@ class FittingDataPresenterTest(unittest.TestCase):
         test_dict["name2"] = 0
         self.assertEqual(self.presenter.row_numbers, test_dict)
         self.assertEqual(model_dict, {"name2": "ws2"})
+        self.assertEqual(2, self.presenter.plot_removed_notifier.notify_subscribers.call_count)
+
+    def test_handle_table_cell_changed_checkbox_ticked(self):
+        mocked_table_item = mock.MagicMock()
+        mocked_table_item.checkState.return_value = 2
+        self.view.get_table_item.return_value = mocked_table_item
+        self.presenter.row_numbers = data_presenter.TwoWayRowDict()
+        self.presenter.row_numbers["name1"] = 0
+        self.presenter.row_numbers["name2"] = 1
+        model_dict = {"name1": "ws1", "name2": "ws2"}
+        self.model.get_loaded_workspaces.return_value = model_dict
+        self.presenter.plot_added_notifier = mock.MagicMock()
+        self.presenter.plot_removed_notifier = mock.MagicMock()
+
+        self.presenter._handle_table_cell_changed(0, 2)
+
+        self.assertEqual(1, self.presenter.plot_added_notifier.notify_subscribers.call_count)
+        self.presenter.plot_added_notifier.notify_subscribers.assert_any_call("ws1")
+        self.assertEqual(0, self.presenter.plot_removed_notifier.notify_subscribers.call_count)
+
+    def test_handle_table_cell_changed_checkbox_unticked(self):
+        mocked_table_item = mock.MagicMock()
+        mocked_table_item.checkState.return_value = 0
+        self.view.get_table_item.return_value = mocked_table_item
+        self.presenter.row_numbers = data_presenter.TwoWayRowDict()
+        self.presenter.row_numbers["name1"] = 0
+        self.presenter.row_numbers["name2"] = 1
+        model_dict = {"name1": "ws1", "name2": "ws2"}
+        self.model.get_loaded_workspaces.return_value = model_dict
+        self.presenter.plot_added_notifier = mock.MagicMock()
+        self.presenter.plot_removed_notifier = mock.MagicMock()
+
+        self.presenter._handle_table_cell_changed(0, 2)
+
+        self.assertEqual(0, self.presenter.plot_added_notifier.notify_subscribers.call_count)
+        self.assertEqual(1, self.presenter.plot_removed_notifier.notify_subscribers.call_count)
+        self.presenter.plot_removed_notifier.notify_subscribers.assert_any_call("ws1")
+
+    def test_handle_table_cell_changed_other_element(self):
+        mocked_table_item = mock.MagicMock()
+        mocked_table_item.checkState.return_value = 2
+        self.view.get_table_item.return_value = mocked_table_item
+        self.presenter.row_numbers = data_presenter.TwoWayRowDict()
+        self.presenter.row_numbers["name1"] = 0
+        self.presenter.row_numbers["name2"] = 1
+        model_dict = {"name1": "ws1", "name2": "ws2"}
+        self.model.get_loaded_workspaces.return_value = model_dict
+        self.presenter.plot_added_notifier = mock.MagicMock()
+        self.presenter.plot_removed_notifier = mock.MagicMock()
+
+        self.presenter._handle_table_cell_changed(1, 1)
+
+        self.assertEqual(0, self.presenter.plot_added_notifier.notify_subscribers.call_count)
+        self.assertEqual(0, self.presenter.plot_removed_notifier.notify_subscribers.call_count)
 
 
 if __name__ == '__main__':
diff --git a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/presenter.py b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/presenter.py
index dbaaac5df17c0edc5c1738c87f391d844ac1a621..b4ccf0c84e1a963d24538adc56e9de36ec617231 100644
--- a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/presenter.py
+++ b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/presenter.py
@@ -15,3 +15,10 @@ class FittingPresenter(object):
 
         self.data_widget = FittingDataWidget(self.view, view=self.view.get_data_widget())
         self.plot_widget = FittingPlotWidget(self.view, view=self.view.get_plot_widget())
+
+        self.data_widget.presenter.plot_removed_notifier.add_subscriber(
+            self.plot_widget.workspace_removed_observer)
+        self.data_widget.presenter.plot_added_notifier.add_subscriber(
+            self.plot_widget.workspace_added_observer)
+        self.data_widget.presenter.all_plots_removed_notifier.add_subscriber(
+            self.plot_widget.all_workspaces_removed_observer)