diff --git a/mininet/topolib.py b/mininet/topolib.py
new file mode 100644
index 0000000000000000000000000000000000000000..ad012670098e57d1a8e2fec429ba508faf606367
--- /dev/null
+++ b/mininet/topolib.py
@@ -0,0 +1,31 @@
+"Library of potentially useful topologies for Mininet"
+
+from mininet.topo import Topo, Node
+
+class TreeTopo( Topo ):
+    "Topology for a tree network with a given depth and fanout."
+
+    def __init__( self, depth=1, fanout=2 ):
+        super( TreeTopo, self ).__init__()
+        # Build topology
+        self.addTree( 1, depth, fanout )
+        # Consider all switches and hosts 'on'
+        self.enable_all()
+
+    # It is OK that i is "unused" in the for loop.
+    # pylint: disable-msg=W0612
+
+    def addTree( self, n, depth, fanout ):
+        """Add a subtree starting with node n.
+           returns: last node added"""
+        me = n
+        isSwitch = depth > 0
+        self._add_node( me, Node( is_switch=isSwitch ) )
+        if isSwitch:
+            for i in range( 0, fanout ):
+                child = n + 1
+                self._add_edge( me, child )
+                n = self.addTree( child, depth-1, fanout )
+        return n
+
+    # pylint: enable-msg=W0612