diff --git a/bin/mn b/bin/mn
index e94515d39abb9222872c92df1bcf008581bbcc04..0263995445fc08f4087ff04568f454adb5f03abf 100755
--- a/bin/mn
+++ b/bin/mn
@@ -27,7 +27,8 @@ from mininet.net import Mininet, MininetWithControlNet, VERSION
 from mininet.node import ( Host, CPULimitedHost, Controller, OVSController,
                            NOX, RemoteController, DefaultController,
                            UserSwitch, OVSBridge, OVSSwitch,
-                           OVSLegacyKernelSwitch, IVSSwitch )
+                           OVSLegacyKernelSwitch, IVSSwitch,
+                           getAvailableController )
 from mininet.nodelib import LinuxBridge
 from mininet.link import Link, TCLink
 from mininet.topo import SingleSwitchTopo, LinearTopo, SingleSwitchReversedTopo
@@ -65,7 +66,7 @@ CONTROLLERS = { 'ref': Controller,
                 'ovsc': OVSController,
                 'nox': NOX,
                 'remote': RemoteController,
-                'default': DefaultController,
+                'default': None,
                 'none': lambda name: None }
 
 LINKDEF = 'default'
@@ -230,6 +231,17 @@ class MininetRunner( object ):
 
         start = time.time()
 
+        if self.options.controller == "default":
+            controller_name = getAvailableController()
+            if controller_name is not None:
+                self.options.controller = controller_name
+            else:
+                # fallback to OVS Bridge switch, which does not use OF controller
+                info('*** No default OpenFlow implementation found!\n')
+                info('    Fallback to ovsb switch implementation.\n')
+                self.options.switch = 'ovsb'
+                self.options.controller = 'none'
+
         topo = buildTopo( TOPOS, self.options.topo )
         switch = customConstructor( SWITCHES, self.options.switch )
         host = customConstructor( HOSTS, self.options.host )
diff --git a/mininet/node.py b/mininet/node.py
index a10abbf2f0205c5e0f0b5bfeaa078d5007bef15d..922b442a64fa0de1ab722c244fd5f2d79af26e7e 100644
--- a/mininet/node.py
+++ b/mininet/node.py
@@ -1382,9 +1382,19 @@ def checkListening( self ):
             warn( "Unable to contact the remote controller"
                   " at %s:%d\n" % ( self.ip, self.port ) )
 
+DEFAULT_CONTROLLERS = [ ('ref', Controller), ('ovsc', OVSController) ]
+DEFAULT_CONTROLLERS_CLASSES = [ klass for _, klass in DEFAULT_CONTROLLERS ]
 
-def DefaultController( name, order=[ Controller, OVSController ], **kwargs ):
+def getAvailableController():
+    "find name of any default controller that is available; None if nothing is available"
+    for name, controller in DEFAULT_CONTROLLERS:
+        if controller.isAvailable():
+            return name
+    return None
+
+def DefaultController( name, order = DEFAULT_CONTROLLERS_CLASSES, **kwargs ):
     "find any controller that is available and run it"
     for controller in order:
         if controller.isAvailable():
             return controller( name, **kwargs )
+    return None