diff --git a/tools/dev/mininet/examples/README b/tools/dev/mininet/examples/README
new file mode 100644
index 0000000..5d7e70f
--- /dev/null
+++ b/tools/dev/mininet/examples/README
@@ -0,0 +1,9 @@
+This directory contains examples of using onos.py.
+
+You run them directly as Python scripts:
+
+    sudo ./multicluster.py
+
+
+multicluster.py: creates two ONOS controller clusters, each of
+                 which controls a separate segment of the data network.
diff --git a/tools/dev/mininet/examples/multicluster.py b/tools/dev/mininet/examples/multicluster.py
new file mode 100755
index 0000000..29e2b56
--- /dev/null
+++ b/tools/dev/mininet/examples/multicluster.py
@@ -0,0 +1,94 @@
+#!/usr/bin/python
+
+"""
+multicluster.py: multiple ONOS clusters example
+
+We create two ONOSClusters, "east" and "west", and
+a LinearTopo data network where the first and second halves
+of the network are connected to each ONOSCluster,
+respectively.
+
+The size of the ONOSCluster is determined by its
+topology. In this example the topology is a
+SingleSwitchTopo of size 1, so the "Cluster" is
+actually a single node (for performance and
+resource usage reasons.) However, it is possible
+to use larger cluster sizes in a large (!) Mininet VM,
+(e.g. 12 GB of RAM for two 3-node ONOS clusters.)
+
+The MultiSwitch class is a customized version of
+ONOSOVSSwitch that has a "controller" instance variable
+(and parameter)
+"""
+
+from mininet.net import Mininet
+from mininet.topo import LinearTopo, SingleSwitchTopo
+from mininet.log import setLogLevel
+from mininet.topolib import TreeTopo
+from mininet.clean import cleanup
+
+from onos import ONOSCluster, ONOSOVSSwitch, ONOSCLI, RenamedTopo
+
+
+class MultiSwitch( ONOSOVSSwitch ):
+    "Custom OVSSwitch() subclass that connects to different clusters"
+
+    def __init__( self, *args, **kwargs ):
+        "controller: controller/ONOSCluster to connect to"
+        self.controller = kwargs.pop( 'controller', None )
+        ONOSOVSSwitch.__init__( self, *args, **kwargs )
+
+    def start( self, controllers ):
+        "Start and connect to our previously specified controller"
+        return ONOSOVSSwitch.start( self, [ self.controller ] )
+
+
+def run():
+    "Test a multiple ONOS cluster network"
+    setLogLevel( 'info' )
+    # East and west control network topologies (using RenamedTopo)
+    # We specify switch and host prefixes to avoid name collisions
+    # East control switch prefix: 'east_cs', ONOS node prefix: 'east_onos'
+    # Each network is a renamed SingleSwitchTopo of size clusterSize
+    # It's also possible to specify your own control network topology
+    clusterSize = 1
+    etopo = RenamedTopo( SingleSwitchTopo, clusterSize,
+                         snew='east_cs', hnew='east_onos' )
+    wtopo = RenamedTopo( SingleSwitchTopo, clusterSize,
+                         snew='west_cs', hnew='west_onos' )
+    # east and west ONOS clusters
+    # Note that we specify the NAT node names to avoid name collisions
+    east = ONOSCluster( 'east', topo=etopo, ipBase='192.168.123.0/24',
+                        nat='enat0' )
+    west = ONOSCluster( 'west', topo=wtopo, ipBase='192.168.124.0/24',
+                        nat='wnat0' )
+    # Data network topology
+    topo = LinearTopo( 10 )
+    # Create network
+    net = Mininet( topo=topo, switch=MultiSwitch, controller=[ east, west ] )
+    # Assign switches to controllers
+    count = len( net.switches )
+    for i, switch in enumerate( net.switches ):
+        switch.controller = east if i < count/2 else west
+    # Start up network
+    net.start()
+    ONOSCLI( net )  # run our special unified Mininet/ONOS CLI
+    net.stop()
+
+# Add a "controllers" command to ONOSCLI
+
+def do_controllers( self, line ):
+    "List controllers assigned to switches"
+    cmap = {}
+    for s in self.mn.switches:
+        c = getattr( s, 'controller', None ).name
+        cmap.setdefault( c, [] ).append( s.name )
+    for c in sorted( cmap.keys() ):
+        switches = ' '.join( cmap[ c ] )
+        print '%s: %s' % ( c, switches )
+
+ONOSCLI.do_controllers = do_controllers
+
+
+if __name__ == '__main__':
+    run()
diff --git a/tools/dev/mininet/examples/onos.py b/tools/dev/mininet/examples/onos.py
new file mode 120000
index 0000000..2c8e36b
--- /dev/null
+++ b/tools/dev/mininet/examples/onos.py
@@ -0,0 +1 @@
+../onos.py
\ No newline at end of file
