diff --git a/scripts/Muon/GUI/Common/grouping_tab_widget/grouping_tab_widget_presenter.py b/scripts/Muon/GUI/Common/grouping_tab_widget/grouping_tab_widget_presenter.py
index 58f3fb458c7fe7560d8ffe55eae0fcdab2573f1a..a17f95fe41f7ca9b1ffe0c0da6c46d2af43fa163 100644
--- a/scripts/Muon/GUI/Common/grouping_tab_widget/grouping_tab_widget_presenter.py
+++ b/scripts/Muon/GUI/Common/grouping_tab_widget/grouping_tab_widget_presenter.py
@@ -5,8 +5,8 @@ from Muon.GUI.Common.observer_pattern import Observer, Observable
 import Muon.GUI.Common.utilities.muon_file_utils as file_utils
 import Muon.GUI.Common.utilities.xml_utils as xml_utils
 import Muon.GUI.Common.utilities.algorithm_utils as algorithm_utils
-from ui.sans_isis.work_handler import WorkHandler
-from sans.gui_logic.presenter.work_handler_listener_wrapper import GenericWorkHandlerListener
+from Muon.GUI.Common import thread_model
+from Muon.GUI.Common.thread_model_wrapper import ThreadModelWrapper
 
 
 class GroupingTabPresenter(object):
@@ -36,9 +36,6 @@ class GroupingTabPresenter(object):
         self._view.on_save_grouping_button_clicked(self.handle_save_grouping_file)
         self._view.on_default_grouping_button_clicked(self.handle_default_grouping_button_clicked)
 
-        # multi-threading
-        self.thread_manager = WorkHandler()
-
         # monitors for loaded data changing
         self.loadObserver = GroupingTabPresenter.LoadObserver(self)
         self.instrumentObserver = GroupingTabPresenter.InstrumentObserver(self)
@@ -128,13 +125,16 @@ class GroupingTabPresenter(object):
         self.grouping_table_widget.enable_editing()
         self.pairing_table_widget.enable_editing()
 
-    def calculate_all_data(self, arg):
+    def calculate_all_data(self):
         self._model.show_all_groups_and_pairs()
 
     def handle_update_all_clicked(self):
-        self.disable_editing()
-        self.listener = GenericWorkHandlerListener(self.enable_editing, self.enable_editing)
-        self.thread_manager.process(self.listener, self.calculate_all_data, 0, [1])
+
+        self.update_thread = self.create_update_thread()
+        self.update_thread.threadWrapperSetUp(self.disable_editing,
+                                              self.enable_editing,
+                                              self._view.display_warning_box)
+        self.update_thread.start()
 
     def handle_default_grouping_button_clicked(self):
         self._model.reset_groups_and_pairs_to_default()
@@ -170,6 +170,9 @@ class GroupingTabPresenter(object):
         if filename != "":
             xml_utils.save_grouping_to_XML(self._model.groups, self._model.pairs, filename, description=self._view.get_description_text())
 
+    def create_update_thread(self):
+        self._update_model = ThreadModelWrapper(self.calculate_all_data)
+        return thread_model.ThreadModel(self._update_model)
     # ------------------------------------------------------------------------------------------------------------------
     # Observer / Observable
     # ------------------------------------------------------------------------------------------------------------------
diff --git a/scripts/Muon/GUI/Common/muon_context.py b/scripts/Muon/GUI/Common/muon_context.py
index 476e1cacd7026ca1ef6754a4cec01e522a64b932..7e7cb89b3db3fd96da9e15afb3a922356c632828 100644
--- a/scripts/Muon/GUI/Common/muon_context.py
+++ b/scripts/Muon/GUI/Common/muon_context.py
@@ -11,4 +11,4 @@ class MuonContext(object):
 
     @data_context.setter
     def data_context(self, value):
-        self._data_context = value
+        self._data_context = value
\ No newline at end of file
diff --git a/scripts/Muon/GUI/Common/thread_model_wrapper.py b/scripts/Muon/GUI/Common/thread_model_wrapper.py
new file mode 100644
index 0000000000000000000000000000000000000000..1f0e26f75f731044e9e6bcc717d63d7ada4d186b
--- /dev/null
+++ b/scripts/Muon/GUI/Common/thread_model_wrapper.py
@@ -0,0 +1,23 @@
+# Mantid Repository : https://github.com/mantidproject/mantid
+#
+# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
+#     NScD Oak Ridge National Laboratory, European Spallation Source
+#     & Institut Laue - Langevin
+# SPDX - License - Identifier: GPL - 3.0 +
+
+
+class ThreadModelWrapper(object):
+    def __init__(self, function=None):
+        self.callback = function
+
+    def setInputs(self):
+        pass
+
+    def cancel(self):
+        pass
+
+    def output(self):
+        pass
+
+    def execute(self):
+        self.callback()