diff --git a/mininet/net.py b/mininet/net.py
index 353fc579f04bc8bdaa86fa3ad4235e12fe6d97d4..b7b89f7e0e977ea1b4e9cb34c30e8ae00ca9deac 100755
--- a/mininet/net.py
+++ b/mininet/net.py
@@ -246,7 +246,7 @@ def addController( self, name='c0', controller=None, **params ):
         if not controller:
             controller = self.controller
         # Construct new controller if one is not given
-        if isinstance(name, Controller):
+        if issubclass( name.__class__, Controller ):
             controller_new = name
             # Pylint thinks controller is a str()
             # pylint: disable=E1103
@@ -357,7 +357,11 @@ def buildFromTopo( self, topo=None ):
             if type( classes ) is not list:
                 classes = [ classes ]
             for i, cls in enumerate( classes ):
-                self.addController( 'c%d' % i, cls )
+                # Allow Controller objects because nobody understands currying
+                if issubclass( cls.__class__, Controller ):
+                    self.addController( cls )
+                else:
+                    self.addController( 'c%d' % i, cls )
 
         info( '*** Adding hosts:\n' )
         for hostName in topo.hosts():