diff --git a/groupConnectivity.pyx b/groupConnectivity.pyx
index f405d70b38fecf256c36ff3a6bd3b533ad77fcf0..28c4cc88b3b322fe79699264227ed5af94f84ada 100644
--- a/groupConnectivity.pyx
+++ b/groupConnectivity.pyx
@@ -38,9 +38,21 @@ def pathToEdges(G, path):
   return ret
 
 
+def theOtherNeighbour(G, v, w):
+  """
+  Given vertex v of degree 2 returns neighbour
+  of v not equal to w.
+  """
+  N = G.neighbors(v)
+  if N[0] == w:
+    return N[1]
+  else:
+    return N[0]
+
+
 def testGroupConnectivity(G, group = "Z4", getClasses = False,
                           useTwoCuts = True, useDoubleSubdivisions = True,
-                          debug = False):
+                          useSubgraphs = True, debug = False):
   cdef AbstractTester* tester = NULL
   if group == "Z4":
     tester = new Tester[Z4[int]]()
@@ -51,6 +63,20 @@ def testGroupConnectivity(G, group = "Z4", getClasses = False,
 
   assert(tester != NULL)
 
+  if useSubgraphs and group in ["Z4", "Z2_2"] and not getClasses:
+    for v in G.vertex_iterator():
+      degs = sorted(G.degree(G.neighbors(v)))
+      if degs[-1] <= 2:
+        return False
+      if len(degs) == 3 and degs[0] <= 2 and degs[1] <= 2:
+        N = [ theOtherNeighbour(G, w, v) for w in G.neighbors(v) if G.degree(w) <= 2 ]
+        if G.degree(N) == [ 2, 2 ]:
+          return False
+    for (u, v, _) in G.edge_iterator():
+      if sorted(G.degree(G.neighbors(u))) == [ 2, 2, 3 ] and \
+         sorted(G.degree(G.neighbors(v))) == [ 2, 2, 3 ]:
+        return False
+
   if useTwoCuts:
     G.relabel()