return {"cnf": cnf}
 
 
-def renumber_vars(root, parent=None):
+def renumber_vars(root, parent=None, toplevel=False):
     """
-    renumber_vars -- Number cnfvars linearly.
+    renumber_vars -- Number cnfvars linearly. If *parent* is specified,
+    numbering will start at this offset. Also, the VAR *root* will be assigned
+    this number as a parent lineno unless *toplevel* is set (the root var in
+    a CNF tree obviously can’t have a parent).
+
+    The *toplevel* parameter is useful when renumbering an existing variable
+    starting at a given offset without at the same time having that offset
+    assigned as a parent.
     """
     if isinstance(root, dict):
-        root = root["cnf"]
+        root = cnf_root (root)
     i = parent or 0
     for var in root:
         i += 1
         var["number"] = i
-        if parent is not None:
+        if toplevel is False and parent is not None:
             var["parent"] = parent
         children = var.get("children", None)
         if children is not None:
-            i = renumber_vars(children, i)
+            i = renumber_vars(children, parent=i, toplevel=False)
     return i
 
 #