diff --git a/bin/mn b/bin/mn
index 3d01a58313c8dda1b54eb7beb65a56f11216be0f..04761dafd06b2a9505e1e90efa309d693c046a26 100755
--- a/bin/mn
+++ b/bin/mn
@@ -25,7 +25,7 @@ from mininet.cli import CLI
 from mininet.log import lg, LEVELS, info, debug, error
 from mininet.net import Mininet, MininetWithControlNet, VERSION
 from mininet.node import ( Host, CPULimitedHost, Controller, OVSController,
-                           NOX, RemoteController, DefaultController, UserSwitch, OVSKernelSwitch,
+                           NOX, DefaultController, RemoteController, UserSwitch, OVSKernelSwitch,
                            OVSLegacyKernelSwitch, IVSSwitch )
 from mininet.link import Link, TCLink
 from mininet.topo import SingleSwitchTopo, LinearTopo, SingleSwitchReversedTopo
diff --git a/mininet/node.py b/mininet/node.py
index 26802656208a9b80482fbc23ff2729401f6b7b9e..41b2d45b4184306121b9c8a9f71de5a6858e7f76 100644
--- a/mininet/node.py
+++ b/mininet/node.py
@@ -1277,23 +1277,19 @@ def __repr__( self ):
         return '<%s %s: %s:%s pid=%s> ' % (
             self.__class__.__name__, self.name,
             self.IP(), self.port, self.pid )
-
-class DefaultController( Controller ):
-    "find any controller that is available and run it"
-    def __init__( self, name, **kwargs ):
-        "search for any installed controller"
-        controllers = [ 'controller', 'ovs-controller',
-                        'test-controller' ]
-        for c in controllers:
-            if quietRun( "which " + c ):
-                Controller.__init__( self, name, command=c, **kwargs )
-                break
+    @classmethod
+    def isAvailable( self ):
+        return quietRun( 'which controller' )
 
 class OVSController( Controller ):
     "Open vSwitch controller"
     def __init__( self, name, command='ovs-controller', **kwargs ):
+        if quietRun( 'which test-controller' ):
+            command = 'test-controller'
         Controller.__init__( self, name, command=command, **kwargs )
-
+    @classmethod
+    def isAvailable( self ):
+        return quietRun( 'which ovs-controller' ) or quietRun( 'which test-controller' )
 
 class NOX( Controller ):
     "Controller to run a NOX application."
@@ -1348,3 +1344,10 @@ def checkListening( self ):
         if 'Connected' not in listening:
             warn( "Unable to contact the remote controller"
                   " at %s:%d\n" % ( self.ip, self.port ) )
+
+
+def DefaultController( name, order=[ Controller, OVSController ], **kwargs ):
+    "find a default controller for mininet"
+    for controller in order:
+        if controller.isAvailable():
+            return controller( name, **kwargs )