diff --git a/group-connectivity.h b/group-connectivity.h
index d6f9871a55aba65fc5e67be71d73d265693f9f1f..af2ccb972a82225d065012bd0f8d5ff973cb1419 100644
--- a/group-connectivity.h
+++ b/group-connectivity.h
@@ -24,6 +24,10 @@ MakeRing(Z2_2, 4, a^b, a, a&b, 3);
 
 #include <vector>
 
+typedef int EdgeId;
+typedef int DirectedEdgeId;
+typedef std::pair<DirectedEdgeId, DirectedEdgeId> TwoCut;
+
 struct AbstractTester {
   bool isConnected;
 #if SAVE_MEMORY
@@ -33,12 +37,10 @@ struct AbstractTester {
 #endif
   ClassesType classes;
 
-  typedef int EdgeId;
-  typedef int DirectedEdgeId;
-
   virtual void init(
     int edges,
     std::vector<EdgeId> spanningTree,
+    std::vector<TwoCut> twoCuts,
     std::vector< std::vector<DirectedEdgeId> > elementaryCycles
   ) =0;
   virtual std::vector<size_t> getClasses() =0;
@@ -47,6 +49,7 @@ struct AbstractTester {
   virtual ~AbstractTester() {}
 };
 
+
 template < typename Ring_ >
 struct Tester : public AbstractTester {
   typedef Ring_ Ring;
@@ -73,6 +76,7 @@ struct Tester : public AbstractTester {
   virtual void init(
     int edges_,
     std::vector<EdgeId> spanningTree,
+    std::vector<TwoCut> twoCuts,
     std::vector< std::vector<DirectedEdgeId> > elementaryCycles
   ) {
     edges = edges_;
diff --git a/groupConnectivity.pyx b/groupConnectivity.pyx
index 44d8f874c9034deb8e6b83ff99d27c400e3bdd6c..2cb25061d003ddf3dc8a1f1a715b64719bdb3c2c 100644
--- a/groupConnectivity.pyx
+++ b/groupConnectivity.pyx
@@ -1,5 +1,6 @@
 from libcpp.vector cimport vector
-from libcpp cimport bool, pair
+from libcpp cimport bool
+from libcpp.utility cimport pair
 from sage.graphs.graph import Graph
 
 cdef extern from "group-connectivity.h" namespace "Ring":
@@ -11,8 +12,12 @@ cdef extern from "group-connectivity.h" namespace "Ring":
     pass
 
 cdef extern from "group-connectivity.h":
+  ctypedef int EdgeId
+  ctypedef int DirectedEdgeId
+  ctypedef pair[DirectedEdgeId, DirectedEdgeId] TwoCut
+
   cdef cppclass AbstractTester:
-    void init(int, vector[int], vector[vector[int]])
+    void init(int, vector[EdgeId], vector[TwoCut], vector[vector[DirectedEdgeId]])
     vector[size_t] getClasses()
     bool run()
 
@@ -51,11 +56,13 @@ def testGroupConnectivity(G, group = "Z4", getClasses = False, debug = False):
     for (u, v, l) in set(G.edge_iterator()) - set(spanningTree.edge_iterator())
   ]
 
+  spanningTreeEdges = [ l for (_, _, l) in spanningTree.edge_iterator() ]
+
   if debug:
-    print "Spanning Tree: ", [ l for (_, _, l) in spanningTree.edge_iterator() ]
+    print "Spanning Tree: ", spanningTreeEdges
     print "Elementary cycles: ", elemCycles
 
-  tester.init(G.num_edges(), [ l for (_, _, l) in spanningTree.edge_iterator() ], elemCycles)
+  tester.init(G.num_edges(), spanningTreeEdges, [], elemCycles)
   ret = tester.run()
 
   if getClasses: