diff --git a/stmts.py b/stmts.py
index feb5b751655d01f29892718cbdd439d1c84f3eae_c3RtdHMucHk=..e31e4c6c6aae1c080f6e7f39f880100ed725fa40_c3RtdHMucHk= 100644
--- a/stmts.py
+++ b/stmts.py
@@ -628,7 +628,7 @@
             self.undo_manager.add_operation(RemoveGroupOperation(vref))
 
     def remove_groups(self):
-        for vref in self.groupby:
+        for vref in self.groupby[:]:
             self.remove_group_var(vref)
             
     def add_sort_var(self, var, asc=True):
@@ -656,7 +656,7 @@
 
     def remove_sort_terms(self):
         if self.orderby:
-            for term in self.orderby:
+            for term in self.orderby[:]:
                 self.remove_sort_term(term)
         
     def remove_sort_term(self, term):
diff --git a/test/unittest_nodes.py b/test/unittest_nodes.py
index feb5b751655d01f29892718cbdd439d1c84f3eae_dGVzdC91bml0dGVzdF9ub2Rlcy5weQ==..e31e4c6c6aae1c080f6e7f39f880100ed725fa40_dGVzdC91bml0dGVzdF9ub2Rlcy5weQ== 100644
--- a/test/unittest_nodes.py
+++ b/test/unittest_nodes.py
@@ -143,6 +143,17 @@
         tree.recover()
         tree.check_references()
         self.assertEquals(tree.as_string(), 'Any X GROUPBY X')
+
+    def test_select_remove_groups(self):
+        tree = self._parse('Any X,Y GROUPBY X,Y')
+        tree.save_state()
+        select = tree.children[0]
+        select.remove_groups()
+        tree.check_references()
+        self.assertEquals(tree.as_string(), 'Any X,Y')
+        tree.recover()
+        tree.check_references()
+        self.assertEquals(tree.as_string(), 'Any X,Y GROUPBY X,Y')
                              
     def test_select_base_1(self):
         tree = self._parse("Any X WHERE X is Person")