diff --git a/tools/test/topos/tower b/tools/test/topos/tower
deleted file mode 100755
index 8244bae..0000000
--- a/tools/test/topos/tower
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/bash
-cd ~/topos && sudo mn --custom tower.py --topo tower --controller remote,${1:-192.168.56.101} --mac
diff --git a/tools/test/topos/tower.json b/tools/test/topos/tower.json
new file mode 100644
index 0000000..7f7d426
--- /dev/null
+++ b/tools/test/topos/tower.json
@@ -0,0 +1,13 @@
+{
+  "devices": {
+    "of:0000000000000001": { "basic": { "name": "Spine-1" }},
+    "of:0000000000000002": { "basic": { "name": "Spine-2" }},
+    "of:0000000000000003": { "basic": { "name": "Leaf-1" }},
+    "of:0000000000000004": { "basic": { "name": "Leaf-2" }},
+    "of:0000000000000005": { "basic": { "name": "Leaf-3" }},
+    "of:0000000000000006": { "basic": { "name": "Leaf-4" }}
+  },
+
+  "hosts": {
+  }
+}
diff --git a/tools/test/topos/tower.py b/tools/test/topos/tower.py
index b75bfe4..22d515b 100755
--- a/tools/test/topos/tower.py
+++ b/tools/test/topos/tower.py
@@ -1,55 +1,42 @@
 #!/usr/bin/env python
 
+"""
+"""
 from mininet.topo import Topo
-from mininet.cli import CLI
-from mininet.net import Mininet
-from mininet.node import RemoteController, OVSKernelSwitch
-from mininet.log import setLogLevel
 
+class Tower( Topo ):
+    "Internet Topology Zoo Specimen."
 
-class TowerTopo( Topo ):
-    """Create a tower topology"""
+    def addSwitch( self, name, **opts ):
+        kwargs = { 'protocols' : 'OpenFlow13' }
+        kwargs.update( opts )
+        return super(Tower, self).addSwitch( name, **kwargs )
 
-    def build( self, k=4, h=6 ):
+    def __init__( self ):
+        "Create a topology."
+
+        # Initialize Topology
+        Topo.__init__( self )
+
         spines = []
-        leaves = []
-        hosts = []
 
         # Create the two spine switches
-        spines.append(self.addSwitch('s1'))
-        spines.append(self.addSwitch('s2'))
+        spines.append(self.addSwitch( 's1' ))
+        spines.append(self.addSwitch( 's2' ))
 
-        # Create two links between the spine switches
-        self.addLink(spines[0], spines[1])
-        #TODO add second link between spines when multi-link topos are supported
-        #self.addLink(spines[0], spines[1])
-        
         # Now create the leaf switches, their hosts and connect them together
-        i = 1
-        c = 0
-        while i <= k:
-            leaves.append(self.addSwitch('s1%d' % i))
+        for i in range(4):
+            sn = i + 1
+            leaf = self.addSwitch( 's1%d' % sn )
             for spine in spines:
-                self.addLink(leaves[i-1], spine)
+                self.addLink(leaf, spine)
 
-            j = 1
-            while j <= h:
-                hosts.append(self.addHost('h%d%d' % (i, j)))
-                self.addLink(hosts[c], leaves[i-1])
-                j+=1
-                c+=1
+            for j in range(5):
+                host = self.addHost( 'h%d%d' % (sn, j + 1) )
+                self.addLink( host, leaf )
 
-            i+=1
-
-topos = { 'tower': TowerTopo }
-
-def run():
-    topo = TowerTopo()
-    net = Mininet( topo=topo, controller=RemoteController, autoSetMacs=True )
-    net.start()
-    CLI( net )
-    net.stop()
+topos = { 'tower': ( lambda: Tower() ) }
 
 if __name__ == '__main__':
-    setLogLevel( 'info' )
-    run()
+    from onosnet import run
+    run( Tower() )
diff --git a/tools/test/topos/tower.recipe b/tools/test/topos/tower.recipe
new file mode 100644
index 0000000..d6ba508
--- /dev/null
+++ b/tools/test/topos/tower.recipe
@@ -0,0 +1,14 @@
+# Default US MPLS topology recipe
+export OTD=6
+export OTL=16
+export OTH=20
+
+
+# Variables for the pingall scenario.
+export OPALL=380
+
+# Variables for link-up-down-up scenario.
+export OPS=h11
+export OPD=h21
+export OPL1="s1 s12"
+export OPL2="s2 s12"
\ No newline at end of file
