diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 27e1bf6..64e267a 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -1931,7 +1931,7 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
-    def getSwitchRandom( self, timeout=60, nonCut=True, switchClasses=None, excludeNodes=[] ):
+    def getSwitchRandom( self, timeout=60, nonCut=True, switchClasses=None, excludeNodes=[], excludeSwitches=[] ):
         """
         Randomly get a switch from Mininet topology.
         If nonCut is True, it gets a list of non-cut switches (the deletion
@@ -1940,6 +1940,7 @@
         it just randomly returns one switch from all current switches in
         Mininet.
         excludeNodes will be pased to getGraphDict method
+        Switches specified in excludeSwitches will be excluded
         Returns the name of the chosen switch.
         """
         import random
@@ -1958,6 +1959,7 @@
                     return None
                 self.graph.update( graphDict )
                 candidateSwitches = self.graph.getNonCutVertices()
+                candidateSwitches = [ switch for switch in candidateSwitches if switch not in excludeSwitches ]
             if candidateSwitches is None:
                 return None
             elif len( candidateSwitches ) == 0:
diff --git a/TestON/tests/CHOTestMonkey/CHOTestMonkey.params b/TestON/tests/CHOTestMonkey/CHOTestMonkey.params
index 80a0b0b..1452741 100644
--- a/TestON/tests/CHOTestMonkey/CHOTestMonkey.params
+++ b/TestON/tests/CHOTestMonkey/CHOTestMonkey.params
@@ -407,6 +407,7 @@
         </topo4>
         <mininetArgs></mininetArgs>
         <loadTopoSleep>5</loadTopoSleep>
+        <excludeSwitches></excludeSwitches>
     </TOPO>
 
     <CASE1>
diff --git a/TestON/tests/CHOTestMonkey/CHOTestMonkey.params.trellis b/TestON/tests/CHOTestMonkey/CHOTestMonkey.params.trellis
index fc839ec..f6aa628 100644
--- a/TestON/tests/CHOTestMonkey/CHOTestMonkey.params.trellis
+++ b/TestON/tests/CHOTestMonkey/CHOTestMonkey.params.trellis
@@ -6,11 +6,13 @@
     # 5. Load topology and balances all switches
     # 6. Collect and store device and link data from ONOS
     # 7. Collect and store host data from ONOS
+    # 10. Run all enabled checks
     # 70. Run randomly generated events
+    # 80. Replay events from log file
     # 100. Do nothing
 
     <testcases>
-        0,2,4,5,6,7,70
+        0,2,4,5,6,7,10,70,100
     </testcases>
 
     <GIT>
@@ -114,7 +116,7 @@
             <CLI>check-traffic</CLI>
             <CLIParamNum>0</CLIParamNum>
             <rerunInterval>10</rerunInterval>
-            <maxRerunNum>10</maxRerunNum>
+            <maxRerunNum>5</maxRerunNum>
             <pingWait>1</pingWait>
             <pingTimeout>10</pingTimeout>
         </TrafficCheck>
@@ -305,7 +307,8 @@
             <fileName>hagg.py</fileName>
         </topo10>
         <mininetArgs>--dhcp=1 --routers=1 --ipv6=1 --ipv4=1</mininetArgs>
-        <loadTopoSleep>90</loadTopoSleep>
+        <loadTopoSleep>120</loadTopoSleep>
+        <excludeSwitches>leaf5</excludeSwitches>
     </TOPO>
 
     <CASE2>
@@ -319,7 +322,7 @@
     </CASE4>
 
     <CASE70>
-        <sleepSec>30</sleepSec>
+        <sleepSec>60</sleepSec>
         <addHostIntentWeight>0</addHostIntentWeight>
         <addPointIntentWeight>0</addPointIntentWeight>
         <linkDownWeight>0</linkDownWeight>
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
index ccb5831..22380cf 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
@@ -134,7 +134,7 @@
         checkResult = EventStates().PASS
         upLinkNum = 0
         upDeviceNum = 0
-        upHostNum = 0
+        upHostList = []
         with main.variableLock:
             for link in main.links:
                 if not link.isDown() and not link.isRemoved():
@@ -144,11 +144,22 @@
                     upDeviceNum += 1
             for host in main.hosts:
                 if not host.isDown() and not host.isRemoved():
-                    upHostNum += 1
+                    upHostList.append( host )
         clusterNum = 1
+        # Verify host IPs
+        if hasattr( main, "expectedHosts" ):
+            for host in upHostList:
+                ipResult = main.Mininet1.verifyHostIp( hostList=[ host.name ],
+                                                       prefix=main.expectedHosts[ 'network' ][ host.name ],
+                                                       update=False )
+                if not ipResult:
+                    checkResult = EventStates().FAIL
+                    main.log.warn( "Topo Check - Failed to verify IP address on host %s" % ( host.name ) )
+        '''
         with main.mininetLock:
             graphDictMininet = main.Mininet1.getGraphDict( useId=True, switchClasses=r"(OVSSwitch)",
                                                            excludeNodes=[ 'bgp', 'cs', 'nat', 'dhcp', 'r' ] )
+        '''
         for controller in main.controllers:
             if controller.isUp():
                 with controller.CLILock:
@@ -186,9 +197,17 @@
                         hosts = json.loads( hosts )
                         if hasattr( main, "expectedHosts" ):
                             hosts = [ host for host in hosts if host[ 'id' ] in main.expectedHosts[ 'onos' ].keys() ]
-                        if not len( hosts ) == upHostNum:
+                        if not len( hosts ) == len( upHostList ):
                             # checkResult = EventStates().FAIL
-                            main.log.warn( "Topo Check - host number discoverd by ONOS%s is incorrect: %s expected and %s actual" % ( controller.index, upHostNum, len( hosts ) ) )
+                            main.log.warn( "Topo Check - host number discoverd by ONOS%s is incorrect: %s expected and %s actual" % ( controller.index, len( upHostList ), len( hosts ) ) )
+                        # Check Host IPs
+                        if hasattr( main, "expectedHosts" ):
+                            for host in upHostList:
+                                ipResult = controller.CLI.verifyHostIp( hostList=[ host.id ],
+                                                                        prefix=main.expectedHosts[ 'onos' ][ host.id ] )
+                                if not ipResult:
+                                    checkResult = EventStates().FAIL
+                                    main.log.warn( "Topo Check - ONOS%s failed to verify IP address on host %s" % ( controller.index, host.id ) )
                         # Check clusters
                         clusters = controller.CLI.clusters()
                         clusters = json.loads( clusters )
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
index 935226c..7a2e84f 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
@@ -188,9 +188,14 @@
             if args[ 0 ] == 'random':
                 import random
                 if self.typeIndex == EventType().NETWORK_DEVICE_DOWN:
+                    if main.params[ 'TOPO' ][ 'excludeSwitches' ]:
+                        excludeSwitches = main.params[ 'TOPO' ][ 'excludeSwitches' ].split( ',' )
+                    else:
+                        excludeSwitches = []
                     with main.mininetLock:
                         switchRandom = main.Mininet1.getSwitchRandom( switchClasses=r"(OVSSwitch)",
-                                                                      excludeNodes=[ 'bgp', 'cs', 'nat', 'dhcp', 'r' ] )
+                                                                      excludeNodes=[ 'bgp', 'cs', 'nat', 'dhcp', 'r' ],
+                                                                      excludeSwitches=excludeSwitches )
                     if switchRandom is None:
                         main.log.warn( "No switch available, aborting event" )
                         return EventStates().ABORT
