diff --git a/src/mio.py b/src/mio.py
index aab2f3ddfc93fbbaf1c9ab6ebc7f94f7457f7306..dfa02c160e799553fdc0f5ea922f1a7e0c28a15d 100755
--- a/src/mio.py
+++ b/src/mio.py
@@ -23,7 +23,7 @@ if not hasattr(__builtins__, "True"):
 def parse_with_path(path, filename, repository):
     f = mio.filecache.loadfile(path, filename)
     tree = mio.parser.parse(f.filename, url=f.key)
-
+    
     if tree._tag == "comps":
         # Transform comps to canonical form
         tree = mio.transform.from_fedora(tree)
@@ -85,6 +85,7 @@ def find_and_parse(target, builder, url=None):
         except ValueError, e:
             pass
         except DuplicateGroupException, e:
+            print e
             traceback.print_exc()
             print "Failed to locate: %s" % target
             sys.exit(1)
diff --git a/src/mio/transform.py b/src/mio/transform.py
index 2da67f99c76dd7dbeb04f41ead467300c0319142..a7846d2340068f2e3a2dd05fba09c16f4cd14c7a 100755
--- a/src/mio/transform.py
+++ b/src/mio/transform.py
@@ -1,5 +1,6 @@
 import mio.parser
 import copy
+import itertools
 
 def from_fedora(tree):
     result = mio.parser.Node("mio", tree._line)
@@ -61,6 +62,43 @@ def from_fedora(tree):
         result._add(mandatory)
         result._add(default)
         result._add(optional)
+
+    for e in tree._environment_:
+        ename = e._id_[0]._char[0]
+        # print ename
+        # print unicode(e).encode('ascii', 'replace')
+        mandatory = mio.parser.Node("group", e._line,
+                                    { "name": "@%s/mandatory" % ename })
+        default = mio.parser.Node("group", e._line,
+                                  { "name": "@%s" % ename })
+        default._add(mio.parser.Node("dependency", e._line,
+                                     { "name": "@%s/mandatory" % ename }))
+        optional = mio.parser.Node("group", e._line,
+                                   { "name": "@%s/optional" % ename })
+        optional._add(mio.parser.Node("dependency", e._line,
+                                     { "name": "@%s" % ename }))
+        for r in e._grouplist_._groupid_:
+            mandatory._add(mio.parser.Node("dependency", r._line,
+                                           { "name":
+                                             "@%s/mandatory" % r._char[0] }))
+            default._add(mio.parser.Node("dependency", r._line,
+                                         { "name":
+                                           "@%s" % r._char[0] }))
+            optional._add(mio.parser.Node("dependency", r._line,
+                                         { "name":
+                                           "@%s/optional" % r._char[0] }))
+        for r in e._optionlist_._groupid_:
+            if r.default[0] != None:
+                default._add(mio.parser.Node("dependency", r._line,
+                                             { "name":
+                                               "@%s" % r._char[0] }))
+            optional._add(mio.parser.Node("dependency", r._line,
+                                         { "name":
+                                           "@%s/optional" % r._char[0] }))
+        result._add(mandatory)
+        result._add(default)
+        result._add(optional)
+
     return result
 
 def from_hostinfo(tree):