diff --git a/src/mio.py b/src/mio.py
index 24b25d61b864b2e87ddc8054002cb72021d7573e..7b037c4d3a75a0c5b802fb3417ea1e0d21c0b522 100755
--- a/src/mio.py
+++ b/src/mio.py
@@ -173,6 +173,10 @@ if __name__ == '__main__':
                            action="append", default=[],
                            metavar="TARGET",
                            help="test TARGET")
+    optParser.add_argument("--dependency-tree",
+                           action="append", default=[],
+                           metavar="TARGET",
+                           help="print dependency tree for TARGET")
     optParser.add_argument("-v","--verbose",
                            action="count",
                            dest="verbose", default=0,
@@ -301,6 +305,29 @@ if __name__ == '__main__':
             pass
         pass
 
+    if options.dependency_tree:
+        def dump_tree(name, indent=0):
+            print('%s%s' % ('  '*indent, name))
+            tree = rules.get(name)
+            for s in tree._symlink_:
+                print('%s* %s' % ('  '*(indent+1), s.name[0]))
+                print('%s-> %s' % ('  '*(indent+2), s.value[0]))
+                pass
+            for f in tree._file_:
+                print('%s* %s' % ('  '*(indent+1), f.name[0]))
+                if f.source[0]:
+                    print('%s= %s' % ('  '*(indent+2), f.source[0]))
+                    pass
+                pass
+            for d in tree._dependency_:
+                dump_tree(d.name[0], indent+1)
+                pass
+            pass
+        for target in options.dependency_tree:
+            dump_tree(target)
+            pass
+        pass
+
     if options.test:
         installer = mio.installer.Installer(rules)
         for g in options.test: