diff --git a/examples/linearbandwidth.py b/examples/linearbandwidth.py
index 0230b3361b5d23f3ef3636913a67634cc4facf3a..79a13c3aaff0b154d4d59943d7be5f5956015c95 100755
--- a/examples/linearbandwidth.py
+++ b/examples/linearbandwidth.py
@@ -4,85 +4,92 @@
 Test bandwidth (using iperf) on linear networks of varying size, 
 using both kernel and user datapaths.
 
-Each network has N switches and N+1 hosts, connected as follows:
+We construct a network of N switches and N+1 hosts, connected as follows:
 
-h0 <-> s0 <-> s1 .. sN-1
+hN <-> s0 <-> s1 .. sN-1
         |      |     |
-        h1     h2    hN
+        hN+1   hN+2  hN+N
         
 Note: by default, the reference controller only supports 16
 switches, so this test WILL NOT WORK unless you have recompiled
 your controller to support 100 switches (or more.)
 """
-   
-from mininet.mininet import init, Network, defaultNames, Host, Switch
-from mininet.mininet import createLink, flush, iperf, pingTestVerbose, Cli
 
-class LinearNet( Network ):
-   def __init__( self, switchCount, **kwargs ):
-      self.switchCount = switchCount
-      Network.__init__( self, **kwargs )
-   def makeNet( self, controller ):
-      snames, hnames, dpnames = defaultNames()
-      previous = None
-      hosts = []
-      switches = []
-      def newHost( switch ):
-         host = Host( hnames.next() )
-         createLink( host, switch )
-         print host.name, ; flush()
-         return [ host ]
-      print "*** Creating linear network of size", self.switchCount
-      for s in range( 0, self.switchCount ):
-         dp = dpnames.next() if self.kernel else None
-         switch = Switch( snames.next(), dp )
-         switches += [ switch ]
-         print switch.name, ; flush()
-         if not self.kernel: createLink( controller, switch )
-         if s == 0: hosts += newHost( switch )
-         hosts += newHost( switch)
-         if previous is not None: createLink( previous, switch)
-         previous = switch
-      return switches, hosts
+import sys
+flush = sys.stdout.flush
    
+from mininet.net import init, Mininet
+from mininet.node import Host, KernelSwitch, UserSwitch
+from mininet.topo import Topo, Node
+from mininet.log import lg
+
+class LinearTopo( Topo ):
+    "Topology for a string of N switches and 1+N hosts."
+
+    def __init__( self, N ):
+    
+        # Add default members to class.
+        super( LinearTopo, self ).__init__()
+        
+        # Create switch and host nodes
+        switches = range( 0, N )
+        hosts = range( N, 2*N + 1 )
+        for id in switches:
+            self._add_node( id, Node( is_switch=True ) )
+        for id in hosts:
+            self._add_node( id, Node( is_switch=False ) )
+
+        # Connect switches
+        for s in switches[ :-1 ]:
+            self._add_edge( s, s + 1 )
+            
+        # Connect hosts
+        self._add_edge( hosts[ 0 ], switches[ 0 ] )
+        for s in switches:
+            self._add_edge( s, s + N + 1)
+            
+        # Consider all switches and hosts 'on'
+        self.enable_all()
+
 def linearBandwidthTest( lengths ):
 
-   "Check bandwidth at various lengths along a switch chain."
-   
-   datapaths = [ 'kernel', 'user' ]
-   results = {}
-   switchCount = max( lengths )
-   
-   for datapath in datapaths:
-      k = datapath == 'kernel'
-      results[ datapath ] = []
-      network = LinearNet( switchCount, kernel=k)
-      network.start()
-      for n in lengths:
-         def test( controllers, switches, hosts ):
+    "Check bandwidth at various lengths along a switch chain."
+
+    datapaths = [ 'kernel', 'user' ]
+    results = {}
+    switchCount = max( lengths )
+
+    for datapath in datapaths:
+        Switch = KernelSwitch if datapath == 'kernel' else UserSwitch
+        results[ datapath ] = []
+        net = Mininet( topo=LinearTopo( switchCount ), switch=Switch )
+        net.start()
+        print "*** testing basic connectivity"
+        net.ping( [ net.hosts[ 0 ], net.hosts[ -1 ] ] )
+        print "*** testing bandwidth"
+        for n in lengths:
             print "testing h0 <-> h" + `n`, ; flush()
-            result = iperf( [ hosts[ 0 ], hosts[ n ] ] )
-            print result ; flush()
-            return result
-         bandwidth = network.runTest( test )
-         results[ datapath ] += [ ( n, bandwidth ) ]
-      network.stop()
+            bandwidth = net.iperf( [ net.hosts[ 0 ], net.hosts[ n ] ]  )
+            print bandwidth ; flush()
+            results[ datapath ] += [ ( n, bandwidth ) ]
+        net.stop()
       
-   for datapath in datapaths:
-      print
-      print "*** Linear network results for", datapath, "datapath:"
-      print
-      result = results[ datapath ]  
-      print "SwitchCount\tiperf Results"
-      for switchCount, bandwidth in result:
-         print switchCount, '\t\t', 
-         print bandwidth[ 0 ], 'server, ', bandwidth[ 1 ], 'client'
-      print
-   print
+    for datapath in datapaths:
+        print
+        print "*** Linear network results for", datapath, "datapath:"
+        print
+        result = results[ datapath ]  
+        print "SwitchCount\tiperf Results"
+        for switchCount, bandwidth in result:
+            print switchCount, '\t\t', 
+            print bandwidth[ 0 ], 'server, ', bandwidth[ 1 ], 'client'
+        print
+    print
       
 if __name__ == '__main__':
-   init()
-   print "*** Running linearBandwidthTest"
-   linearBandwidthTest( [ 1, 10, 20, 40, 60, 80, 100 ] )
+    lg.setLogLevel( 'info' )
+    init()
+    print "*** Running linearBandwidthTest"
+    linearBandwidthTest( [ 1, 10 ] )