diff --git a/bin/mn_run.py b/bin/mn_run.py
index c3edfc6aac6f1f6165ea28e26bc7930b1c09e877..0aa724823e495e0c84140c936aefd8ceae174832 100755
--- a/bin/mn_run.py
+++ b/bin/mn_run.py
@@ -30,9 +30,11 @@
 HOSTS = {'process' : Host}
 
 CONTROLLER_DEF = 'ref'
+# a and b are the name and inNamespace params.
 CONTROLLERS = {'ref' : Controller,
                'nox_dump' : lambda a, b: NOX(a, b, 'packetdump'),
-               'nox_pysw' : lambda a, b: NOX(a, b, 'pyswitch')}
+               'nox_pysw' : lambda a, b: NOX(a, b, 'pyswitch'),
+               'none' :     lambda a, b: None}
 
 # optional tests to run
 TESTS = ['cli', 'build', 'ping_all', 'ping_pair', 'iperf', 'all']
diff --git a/mininet/net.py b/mininet/net.py
index 67f7e48a86bbee26dd2e90a3bce72379e92d893e..063ca23f71123dbbeb8417fbbb9d8eb61ace75b0 100755
--- a/mininet/net.py
+++ b/mininet/net.py
@@ -161,7 +161,8 @@ def _add_controller(self, controller):
         @param controller Controller class
         '''
         controller = self.controller('c0', not self.kernel)
-        self.controllers['c0'] = controller
+        if controller: # allow controller-less setups
+            self.controllers['c0'] = controller
 
     # Control network support:
     #
@@ -290,15 +291,14 @@ def build(self, xterms, cleanup):
     def start(self):
         '''Start controller and switches\n'''
         lg.info('*** Starting controller\n')
-        self.controllers['c0'].start()
-        #for controller in self.controllers:
-        #    controller.start()
+        for cname, cnode in self.controllers.iteritems():
+            cnode.start()
         lg.info('*** Starting %s switches\n' % len(self.topo.switches()))
         for switch_dpid in self.topo.switches():
             switch = self.nodes[switch_dpid]
             #lg.info('switch = %s' % switch)
             lg.info('0x%x ' % switch_dpid)
-            switch.start(self.controllers['c0'])
+            switch.start(self.controllers)
         lg.info('\n')
 
     def stop(self):
@@ -316,8 +316,8 @@ def stop(self):
             switch.stop()
         lg.info('\n')
         lg.info('*** Stopping controller\n')
-        #for controller in self.controllers.iteriterms():
-        self.controllers['c0'].stop()
+        for cname, cnode in self.controllers.iteritems():
+            cnode.stop()
         lg.info('*** Test complete\n')
 
     def run(self, test, **params):
@@ -448,7 +448,8 @@ def __init__(self, mininet):
         self.nodemap = {} # map names to Node objects
         for node in self.mn.nodes.values():
             self.nodemap[node.name] = node
-        self.nodemap['c0'] = self.mn.controllers['c0']
+        for cname, cnode in self.mn.controllers.iteritems():
+            self.nodemap[cname] = cnode
         self.nodelist = self.nodemap.values()
         self.run()
 
diff --git a/mininet/node.py b/mininet/node.py
index 9a30cf448f73f14b603448b4d6cf7faaad1fcc14..023d01c30861e135ef92e460b6c5de284f9b1893 100644
--- a/mininet/node.py
+++ b/mininet/node.py
@@ -253,13 +253,16 @@ def __init__(self, name, datapath = None):
         self.dp = datapath
         Node.__init__(self, name, inNamespace = (datapath == None))
 
-    def _startUserDatapath(self, controller):
+    def _startUserDatapath(self, controllers):
         '''Start OpenFlow reference user datapath.
 
         Log to /tmp/sN-{ofd,ofp}.log.
 
-        @param controller Controller object.
+        @param controllers dict of controller names to objects
         '''
+        if 'c0' not in controller:
+            raise Exception('User datapath start() requires controller c0')
+        controller = controllers['c0']
         ofdlog = '/tmp/' + self.name + '-ofd.log'
         ofplog = '/tmp/' + self.name + '-ofp.log'
         self.cmd('ifconfig lo up')
@@ -302,13 +305,13 @@ def _stopKernelDatapath(self):
             quietRun('ip link del ' + intf)
             lg.info('.')
 
-    def start(self, controller):
+    def start(self, controllers):
         '''Start datapath.
 
-        @param controller Controller object
+        @param controllers dict of controller names to objects
         '''
         if self.dp is None:
-            self._startUserDatapath(controller)
+            self._startUserDatapath(controllers)
         else:
             self._startKernelDatapath()