diff --git a/TestON/tests/CHOTestMonkey/CHOTestMonkey.py b/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
index 314bde9..75e95ca 100644
--- a/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
+++ b/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
@@ -32,6 +32,7 @@
         """
         import time
         from threading import Lock, Condition
+        from core.graph import Graph
         from tests.CHOTestMonkey.dependencies.elements.ONOSElement import Controller
         from tests.CHOTestMonkey.dependencies.EventGenerator import EventGenerator
         from tests.CHOTestMonkey.dependencies.EventScheduler import EventScheduler
@@ -58,6 +59,7 @@
             if main.params[ 'EVENT' ][ eventName ][ 'status' ] == 'on':
                 main.enabledEvents[ int( main.params[ 'EVENT' ][ eventName ][ 'typeIndex' ] ) ] = eventName
         print main.enabledEvents
+        main.graph = Graph()
         main.eventScheduler = EventScheduler()
         main.eventGenerator = EventGenerator()
         main.variableLock = Lock()
diff --git a/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py b/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py
index de32193..0811019 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py
@@ -5,7 +5,6 @@
 from threading import Lock, Condition
 from tests.CHOTestMonkey.dependencies.events.Event import EventType, EventStates, Event
 from tests.CHOTestMonkey.dependencies.EventScheduler import EventScheduleMethod
-from tests.CHOTestMonkey.dependencies.GraphHelper import GraphHelper
 
 class MessageType:
     def __init__( self ):
@@ -169,21 +168,10 @@
             main.log.warn( "Event Generator - Too many arguments for randomLinkToggle: %s" % ( args ) )
         else:
             downUpAvgInterval = int( args[ 0 ] )
-        with main.variableLock:
-            graphHelper = GraphHelper()
-            availableLinks = graphHelper.getNonCutEdges()
-            if len( availableLinks ) == 0:
-                main.log.warn( "All links are cut edges, aborting event" )
-                return
-            link = random.sample( availableLinks, 1 )
-
         self.eventGeneratorLock.acquire()
         main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_DOWN,
                                            scheduleMethod,
-                                           [ link[ 0 ].deviceA.name, link[ 0 ].deviceB.name ] )
-        with main.variableLock:
-            link[ 0 ].setPendingDown()
-            link[ 0 ].backwardLink.setPendingDown()
+                                           [ 'random', 'random' ] )
         sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkToggle' ][ 'sleepBeforeCheck' ] )
         main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
         self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -199,7 +187,7 @@
             time.sleep( downUpInterval )
         main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_UP,
                                            scheduleMethod,
-                                           [ link[ 0 ].deviceA.name, link[ 0 ].deviceB.name ] )
+                                           [ 'random', 'random' ] )
         main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
         self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
         if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
@@ -227,24 +215,12 @@
             linkGroupSize = int( args[ 0 ] )
             downDownAvgInterval = int( args[ 1 ] )
             downUpAvgInterval = int( args[ 2 ] )
-        downLinks = []
         for i in range( 0, linkGroupSize ):
-            with main.variableLock:
-                graphHelper = GraphHelper()
-                availableLinks = graphHelper.getNonCutEdges()
-                if len( availableLinks ) == 0:
-                    main.log.warn( "All links are cut edges, aborting event" )
-                    continue
-                link = random.sample( availableLinks, 1 )
             if i == 0:
                 self.eventGeneratorLock.acquire()
             main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_DOWN,
                                                scheduleMethod,
-                                               [ link[ 0 ].deviceA.name, link[ 0 ].deviceB.name ] )
-            with main.variableLock:
-                link[ 0 ].setPendingDown()
-                link[ 0 ].backwardLink.setPendingDown()
-            downLinks.append( link[ 0 ] )
+                                               [ 'random', 'random' ] )
             sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkGroupToggle' ][ 'sleepBeforeCheck' ] )
             main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
             self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -267,10 +243,10 @@
         else:
             time.sleep( downUpInterval )
 
-        for link in downLinks:
+        for i in range( 0, linkGroupSize ):
             main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_UP,
                                                scheduleMethod,
-                                               [ link.deviceA.name, link.deviceB.name ] )
+                                               [ 'random', 'random' ] )
             main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
             self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
             if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
@@ -301,20 +277,10 @@
             main.log.warn( "Event Generator - Too many arguments for randomDeviceToggle: %s" % ( args ) )
         else:
             downUpAvgInterval = int( args[ 0 ] )
-        with main.variableLock:
-            graphHelper = GraphHelper()
-            availableDevices = graphHelper.getNonCutVertices()
-            if len( availableDevices ) == 0:
-                main.log.warn( "All devices are Cut vertices, aborting event" )
-                return
-            device = random.sample( availableDevices, 1 )
-
         self.eventGeneratorLock.acquire()
         main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_DOWN,
                                            scheduleMethod,
-                                           [ device[ 0 ].name ] )
-        with main.variableLock:
-            device[ 0 ].setPendingDown()
+                                           [ 'random' ] )
         sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkToggle' ][ 'sleepBeforeCheck' ] )
         main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
         self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -330,7 +296,7 @@
             time.sleep( downUpInterval )
         main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_UP,
                                            scheduleMethod,
-                                           [ device[ 0 ].name ] )
+                                           [ 'random' ] )
         main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
         self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
         if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
@@ -358,23 +324,12 @@
             deviceGroupSize = int( args[ 0 ] )
             downDownAvgInterval = int( args[ 1 ] )
             downUpAvgInterval = int( args[ 2 ] )
-        downDevices = []
         for i in range( 0, deviceGroupSize ):
-            with main.variableLock:
-                graphHelper = GraphHelper()
-                availableDevices = graphHelper.getNonCutVertices()
-                if len( availableDevices ) == 0:
-                    main.log.warn( "All devices are cut vertices, aborting event" )
-                    continue
-                device = random.sample( availableDevices, 1 )
             if i == 0:
                 self.eventGeneratorLock.acquire()
             main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_DOWN,
                                                scheduleMethod,
-                                               [ device[ 0 ].name ] )
-            with main.variableLock:
-                device[ 0 ].setPendingDown()
-            downDevices.append( device[ 0 ] )
+                                               [ 'random' ] )
             sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkGroupToggle' ][ 'sleepBeforeCheck' ] )
             main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
             self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -397,10 +352,10 @@
         else:
             time.sleep( downUpInterval )
 
-        for device in downDevices:
+        for i in range( 0, deviceGroupSize ):
             main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_UP,
                                                scheduleMethod,
-                                               [ device.name ] )
+                                               [ 'random' ] )
             main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
             self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
             if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
diff --git a/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py b/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
index 7e4c95c..99ead73 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
@@ -172,7 +172,7 @@
             if len( self.pendingEvents ) > 0:
                 events += str( self.pendingEvents[ -1 ].typeIndex )
         events += "]"
-        main.log.debug( "Event Scheduler - Events: " + events )
+        #main.log.debug( "Event Scheduler - Events: " + events )
 
     def isAvailable( self ):
         with self.pendingEventsCondition:
diff --git a/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py b/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
index 2a18ac7..b3618dd 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
@@ -18,9 +18,6 @@
     def isRemoved( self ):
         return self.status == 'removed'
 
-    def setPendingDown( self ):
-        self.status = 'pending_down'
-
     def setRemoved( self ):
         self.status = 'removed'
 
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
index d0408f9..babdebb 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
@@ -99,6 +99,8 @@
                 if not host.isDown() and not host.isRemoved():
                     upHostNum += 1
         clusterNum = 1
+        with main.mininetLock:
+            graphDictMininet = main.Mininet1.getGraphDict( useId=True )
         for controller in main.controllers:
             if controller.isUp():
                 with controller.CLILock:
@@ -107,8 +109,14 @@
                     #if not topoState:
                     #    main.log.warn( "Topo Check - link or device number discoverd by ONOS%s is incorrect" % ( controller.index ) )
                     #    checkResult = EventStates().FAIL
-                    # Check links
+                    # Compare ONOS and Mininet topologies
+                    graphDictONOS = controller.CLI.getGraphDict()
+                    compareResult = main.graph.compareGraphs( graphDictONOS, graphDictMininet )
+                    if not compareResult:
+                        checkResult = EventStates().FAIL
+                        main.log.warn( "Topo Check - ONOS and Mininet topologies do not match" )
                     try:
+                        # Check links
                         links = controller.CLI.links()
                         links = json.loads( links )
                         if not len( links ) == upLinkNum:
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
index 7247ecf..8ec62a1 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
@@ -4,7 +4,6 @@
 """
 from tests.CHOTestMonkey.dependencies.events.Event import EventType, EventStates, Event
 from tests.CHOTestMonkey.dependencies.elements.NetworkElement import NetworkElement, Device, Host, Link
-from tests.CHOTestMonkey.dependencies.GraphHelper import GraphHelper
 
 class LinkEvent( Event ):
     def __init__( self ):
@@ -28,18 +27,16 @@
                 main.log.warn( "%s - Too many arguments: %s" % ( self.typeString, args ) )
                 return EventStates().ABORT
             if args[ 0 ] == 'random' or args[ 1 ] == 'random':
-                import random
                 if self.typeIndex == EventType().NETWORK_LINK_DOWN:
-                    with main.variableLock:
-                        graphHelper = GraphHelper()
-                        availableLinks = graphHelper.getNonCutEdges()
-                        if len( availableLinks ) == 0:
-                            main.log.warn( "All links are cut edges, aborting event" )
-                            return EventStates().ABORT
-                        linkList = random.sample( availableLinks, 1 )
-                        self.linkA = linkList[ 0 ]
-                        self.linkB = linkList[ 0 ].backwardLink
+                    with main.mininetLock:
+                        linkRandom = main.Mininet1.getLinkRandom()
+                    if linkRandom == None:
+                        main.log.warn( "No link available, aborting event" )
+                        return EventStates().ABORT
+                    args[ 0 ] = linkRandom[ 0 ]
+                    args[ 1 ] = linkRandom[ 1 ]
                 elif self.typeIndex == EventType().NETWORK_LINK_UP:
+                    import random
                     with main.variableLock:
                         downLinks = []
                         for link in main.links:
@@ -54,7 +51,7 @@
             elif args[ 0 ] == args[ 1 ]:
                 main.log.warn( "%s - invalid arguments: %s" % ( self.typeString, args ) )
                 return EventStates().ABORT
-            else:
+            if self.linkA == None or self.linkB == None:
                 for link in main.links:
                     if link.deviceA.name == args[ 0 ] and link.deviceB.name == args[ 1 ]:
                         self.linkA = link
@@ -88,9 +85,13 @@
                 main.log.warn( "Link Down - link has been removed" )
                 return EventStates().ABORT
         with main.mininetLock:
+            '''
             result = main.Mininet1.link( END1=self.linkA.deviceA.name,
                                          END2=self.linkA.deviceB.name,
                                          OPTION="down")
+            '''
+            result = main.Mininet1.delLink( self.linkA.deviceA.name,
+                                            self.linkA.deviceB.name )
         if not result:
             main.log.warn( "%s - failed to bring down link" % ( self.typeString ) )
             return EventStates().FAIL
@@ -118,9 +119,13 @@
                 main.log.warn( "Link Up - link has been removed" )
                 return EventStates().ABORT
         with main.mininetLock:
+            '''
             result = main.Mininet1.link( END1=self.linkA.deviceA.name,
                                          END2=self.linkA.deviceB.name,
                                          OPTION="up")
+            '''
+            result = main.Mininet1.addLink( self.linkA.deviceA.name,
+                                            self.linkA.deviceB.name )
         if not result:
             main.log.warn( "%s - failed to bring up link" % ( self.typeString ) )
             return EventStates().FAIL
@@ -152,14 +157,12 @@
             if args[ 0 ] == 'random':
                 import random
                 if self.typeIndex == EventType().NETWORK_DEVICE_DOWN:
-                    with main.variableLock:
-                        graphHelper = GraphHelper()
-                        availableDevices = graphHelper.getNonCutVertices()
-                        if len( availableDevices ) == 0:
-                            main.log.warn( "All devices are cut vertices, aborting event" )
-                            return EventStates().ABORT
-                        deviceList = random.sample( availableDevices, 1 )
-                        self.device = deviceList[ 0 ]
+                    with main.mininetLock:
+                        switchRandom = main.Mininet1.getSwitchRandom()
+                    if switchRandom == None:
+                        main.log.warn( "No switch available, aborting event" )
+                        return EventStates().ABORT
+                    args[ 0 ] = switchRandom
                 elif self.typeIndex == EventType().NETWORK_DEVICE_UP:
                     with main.variableLock:
                         removedDevices = []
@@ -171,7 +174,7 @@
                             return EventStates().ABORT
                         deviceList = random.sample( removedDevices, 1 )
                         self.device = deviceList[ 0 ]
-            else:
+            if self.device == None:
                 for device in main.devices:
                     if device.name == args[ 0 ]:
                         self.device = device
