diff --git a/group-connectivity.h b/group-connectivity.h
index 6a193410ac2b5f1422ef217bf27a983bd1ea828f..024d7c619a0ad1dc74690a1e71dc4ca078272532 100644
--- a/group-connectivity.h
+++ b/group-connectivity.h
@@ -34,6 +34,7 @@ struct AbstractTester {
     std::vector<EdgeId> spanningTree,
     std::vector< std::vector<DirectedEdgeId> > elementaryCycles
   ) =0;
+  virtual std::vector<size_t> getClasses() =0;
   virtual bool run() =0;
 
   virtual ~AbstractTester() {}
@@ -125,6 +126,11 @@ struct Tester : public AbstractTester {
   }
 
 
+  virtual std::vector<size_t> getClasses() {
+    return classes;
+  }
+
+
   virtual bool run() {
     Mapping forb(edges, 0);
     
diff --git a/groupConnectivity.pyx b/groupConnectivity.pyx
index a732146ede3339cba254901afbcef27a040e0c82..44d8f874c9034deb8e6b83ff99d27c400e3bdd6c 100644
--- a/groupConnectivity.pyx
+++ b/groupConnectivity.pyx
@@ -12,10 +12,8 @@ cdef extern from "group-connectivity.h" namespace "Ring":
 
 cdef extern from "group-connectivity.h":
   cdef cppclass AbstractTester:
-    bool isConnected
-    vector[size_t] classes
-
     void init(int, vector[int], vector[vector[int]])
+    vector[size_t] getClasses()
     bool run()
 
   cdef cppclass Tester[T](AbstractTester):
@@ -31,7 +29,7 @@ def pathToEdges(G, path):
     u = v
   return ret
 
-def testGroupConnectivity(G, group = "Z4", debug = False):
+def testGroupConnectivity(G, group = "Z4", getClasses = False, debug = False):
   cdef AbstractTester* tester = NULL
   if group == "Z4":
     tester = new Tester[Z4[int]]()
@@ -59,11 +57,14 @@ def testGroupConnectivity(G, group = "Z4", debug = False):
 
   tester.init(G.num_edges(), [ l for (_, _, l) in spanningTree.edge_iterator() ], elemCycles)
   ret = tester.run()
-  classes = tester.classes
-
-  del tester
 
-  return (ret, classes)
+  if getClasses:
+    classes = tester.getClasses()
+    del tester
+    return (ret, classes)
+  else:
+    del tester
+    return ret
 
 def subdivisionIterator(G, edges = None):
   if edges is None:
diff --git a/timit.md b/timit.md
index c2b38c1991a8b42d8980649e990f38823da83049..b108ebef8076e62c3d42585cd1a59664ad4eaf1a 100644
--- a/timit.md
+++ b/timit.md
@@ -7,8 +7,8 @@ Command:
   graphs.CubeGraph(3).edges()[0:2],
   function = lambda H: "%-20s Z4: %-5s Z2_2: %s" % (
     H.graph6_string(),
-    groupConnectivity.testGroupConnectivity(H, "Z4")[0],
-    groupConnectivity.testGroupConnectivity(H, "Z2_2")[0]
+    groupConnectivity.testGroupConnectivity(H, "Z4"),
+    groupConnectivity.testGroupConnectivity(H, "Z2_2")
   )
 )
 ``