return cnf
 
 
+def normalize_cnf (cnf):
+    """
+    Ensure the output conforms to set_cnf()’s expectations.
+    """
+    if isinstance (cnf, list) is False:
+        raise MalformedCNF ("expected list of CNF_VARs, got [%s]" % type (cnf))
+    def norm (var):
+        vvar = \
+            { "number"   : var ["number"]
+            , "varname"  : var ["varname"].upper ()
+            , "instance" : var ["instance"]
+            , "data"     : var ["data"]
+            }
+
+        children = var.get ("children", None)
+        if children is not None:
+            vvar ["children"] = normalize_cnf (children)
+
+        return vvar
+
+    return [ norm (var) for var in cnf ]
+
+
 def print_cnf_raw(root, out=None):
     if root is not None:
         out.write(root)
 
 def print_cnf(root, out=None, renumber=False):
     if root is not None:
-        output_cnf(root, out or sys.stdout, renumber=renumber)
+        output_cnf(root, out or sys.stdout, renumber=renumber, bytes=False)
 
 
 def write_cnf(*argv, **kw_argv):
     if renumber is True:
         _count = renumber_vars(root)
     if is_cnf(root) is True:
+        root ["cnf"] = normalize_cnf(cnf_root (root))
         data = json.dumps(root)
         out.write(data)
         out.write("\n")