diff --git a/groupConnectivity.pyx b/groupConnectivity.pyx
index 28c4cc88b3b322fe79699264227ed5af94f84ada..69b87ef036891db9f8319b507dd56aa78c977963 100644
--- a/groupConnectivity.pyx
+++ b/groupConnectivity.pyx
@@ -163,6 +163,40 @@ def subdivisionIterator(G, edges = None):
       yield L
 
 
+def guidedSubdivisionIterator(G, edges = None, guide = lambda H: (True, None)):
+  class DeadEnd(Exception):
+    pass
+
+  if edges is None:
+    edges = G.edges()
+
+  def impl(G, edges):
+    if len(edges) == 0:
+      cont, val = guide(G)
+      if not cont:
+        raise DeadEnd()
+      yield val
+      return
+
+    for i in range(0, 3):
+      H = G.copy()
+      H.subdivide_edge(edges[0], i)
+      try:
+        for L in impl(H, edges[1:]):
+          yield L
+      except DeadEnd:
+        if i == 0:
+          raise
+        else:
+          break
+
+  try:
+    for L in impl(G, edges):
+      yield L
+  except DeadEnd:
+    pass
+
+
 def generateSubdivisions(file, G, edges = None,
                          function = lambda H: H.graph6_string(),
                          parallel = 0, chunksize = 1, in_flight = None):