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 50ac4a6f7a562553af0ef076acd28d4fb81a5f6e..58f3fb458c7fe7560d8ffe55eae0fcdab2573f1a 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
@@ -110,7 +110,7 @@ class GroupingTabPresenter(object):
             for pair in pairs:
                 self._model.add_pair(pair)
         except ValueError as error:
-            self._view.display_warning_box(error)
+            self._view.display_warning_box(str(error))
 
         self.grouping_table_widget.update_view_from_model()
         self.pairing_table_widget.update_view_from_model()
diff --git a/scripts/Muon/GUI/Common/grouping_table_widget/grouping_table_widget_presenter.py b/scripts/Muon/GUI/Common/grouping_table_widget/grouping_table_widget_presenter.py
index f3212e7b4d1a5af19595fc68b7d7def09760ea26..bd10dde2469b1dab70460113b7123df6a9ed8af4 100644
--- a/scripts/Muon/GUI/Common/grouping_table_widget/grouping_table_widget_presenter.py
+++ b/scripts/Muon/GUI/Common/grouping_table_widget/grouping_table_widget_presenter.py
@@ -50,7 +50,6 @@ class GroupingTablePresenter(object):
         return True
 
     def validate_detector_ids(self, text):
-        # detector_list = run_utils.run_string_to_list(text)
         if re.match(run_utils.run_string_regex, text) and max(run_utils.run_string_to_list(text)) <= self._model._data.num_detectors:
             return True
         self._view.warning_popup("Invalid detector list.")
@@ -120,7 +119,6 @@ class GroupingTablePresenter(object):
             try:
                 self.update_model_from_view()
             except ValueError as error:
-                self._model.remove_pairs_with_removed_name(self._view.get_table_item_text(row, 0))
                 self._view.warning_popup(error)
 
         self.update_view_from_model()
diff --git a/scripts/Muon/GUI/Common/muon_data_context.py b/scripts/Muon/GUI/Common/muon_data_context.py
index c8f79d7e2abb755e842f1f8c4e4d0728873972a4..aa8baa7316afec818162c7db3954937b4d63c0f9 100644
--- a/scripts/Muon/GUI/Common/muon_data_context.py
+++ b/scripts/Muon/GUI/Common/muon_data_context.py
@@ -157,7 +157,7 @@ class MuonDataContext(object):
         if self.check_group_contains_valid_detectors(group):
             self._groups[group.name] = group
         else:
-            raise ValueError('Detectors in group {} not in instrument'.format(group.name))
+            raise ValueError('Invalid detectors in group {}'.format(group.name))
 
     def add_pair(self, pair):
         assert isinstance(pair, MuonPair)
@@ -303,7 +303,7 @@ class MuonDataContext(object):
             self.add_pair(pair)
 
     def check_group_contains_valid_detectors(self, group):
-        if max(group.detectors) > self.num_detectors:
+        if max(group.detectors) > self.num_detectors or min(group.detectors) < 1:
             return False
         else:
             return True
diff --git a/scripts/test/Muon/grouping_tab/grouping_tab_presenter_test.py b/scripts/test/Muon/grouping_tab/grouping_tab_presenter_test.py
index e0ee8a70876847539681427665784becbc7d9cc3..29dfd74fd746f3b8da998ed2832eea723af3e1ba 100644
--- a/scripts/test/Muon/grouping_tab/grouping_tab_presenter_test.py
+++ b/scripts/test/Muon/grouping_tab/grouping_tab_presenter_test.py
@@ -45,6 +45,8 @@ class GroupingTabPresenterTest(unittest.TestCase):
                                               self.grouping_table_widget,
                                               self.pairing_table_widget)
 
+        self.view.display_warning_box = mock.MagicMock()
+
     def add_three_groups(self):
         testgroup1 = MuonGroup(group_name="fwd", detector_ids=[1, 2, 3, 4, 5])
         testgroup2 = MuonGroup(group_name="bwd", detector_ids=[6, 7, 8, 9, 10])
@@ -122,6 +124,23 @@ class GroupingTabPresenterTest(unittest.TestCase):
             self.assertEqual(self.pairing_table_view.pairing_table.cellWidget(0, 1).currentText(), "grp1")
             self.assertEqual(self.pairing_table_view.pairing_table.cellWidget(0, 2).currentText(), "grp2")
 
+    def test_loading_does_not_insert_invalid_groups(self):
+        self.view.show_file_browser_and_return_selection = mock.Mock(return_value="grouping.xml")
+        groups = [MuonGroup(group_name="grp1", detector_ids=[1, 2, 3, 4, 5]),
+                  MuonGroup(group_name="grp2", detector_ids=[6, 7, 8, 9, 1000])]
+        pairs = [MuonPair(pair_name="pair1", forward_group_name="grp1", backward_group_name="grp2")]
+        with mock.patch(
+                "Muon.GUI.Common.grouping_tab_widget.grouping_tab_widget_presenter.xml_utils.load_grouping_from_XML") as mock_load:
+            # mock the loading to return set groups/pairs
+            mock_load.return_value = (groups, pairs, 'description')
+            self.view.load_grouping_button.clicked.emit(True)
+
+            self.view.display_warning_box.assert_called_once_with('Invalid detectors in group grp2')
+            six.assertCountEqual(self, self.model.group_names, ["grp1"])
+            six.assertCountEqual(self, self.model.pair_names, [])
+            self.assertEqual(self.grouping_table_view.num_rows(), 1)
+            self.assertEqual(self.pairing_table_view.num_rows(), 0)
+
     def test_that_save_grouping_triggers_the_correct_function(self):
         # Save functionality is tested elsewhere
         self.view.show_file_save_browser_and_return_selection = mock.Mock(return_value="grouping.xml")
diff --git a/scripts/test/Muon/grouping_tab/grouping_table_presenter_test.py b/scripts/test/Muon/grouping_tab/grouping_table_presenter_test.py
index e999fb2fa2de06fa0305b8f7cb7ce497da360739..6a359d82cd6d80032d4b5e311c6a34411f2f3900 100644
--- a/scripts/test/Muon/grouping_tab/grouping_table_presenter_test.py
+++ b/scripts/test/Muon/grouping_tab/grouping_table_presenter_test.py
@@ -295,6 +295,17 @@ class GroupingTablePresenterTest(unittest.TestCase):
 
         self.assertEqual(self.view.get_table_item_text(0, 2), "1")
 
+    def test_modifying_detector_ids_to_non_existent_detector_fails(self):
+        self.presenter.handle_add_group_button_clicked()
+        self.view.grouping_table.item(0, 1).setText("1000")
+
+        self.view.warning_popup.assert_called_once_with('Invalid detector list.')
+
+    def test_modifying_detector_ids_to_negative_detectors_fails(self):
+        self.presenter.handle_add_group_button_clicked()
+        self.view.grouping_table.item(0, 1).setText("-10-10")
+
+        self.view.warning_popup.assert_called_once_with('Invalid detector list.')
 
 if __name__ == '__main__':
     unittest.main(buffer=False, verbosity=2)