diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 192597b..9336590 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -248,11 +248,16 @@
         topoDict = self.numSwitchesN_links( *topoArgList )
         return topoDict
 
-    def pingall( self, timeout=300, shortCircuit = False ):
+    def pingall( self, timeout=300, shortCircuit = False ,numFailedPings = 1):
         """
            Verifies the reachability of the hosts using pingall command.
            Optional parameter timeout allows you to specify how long to
            wait for pingall to complete
+           Optional:
+           shortCircuit - Break the pingall based on the number of failed hosts
+           ping
+           numFailedPings - initialized the number required for the pingall to
+           break defaults to 1 
            Returns:
            main.TRUE if pingall completes with no pings dropped
            otherwise main.FALSE"""
@@ -268,7 +273,7 @@
                         timeout=int( timeout ) )
                 else:
                     self.handle.sendline( "pingall" )
-                    i = self.handle.expect( [ "mininet>","X X X",
+                    i = self.handle.expect( [ "mininet>","X",
                                               pexpect.EOF,
                                               pexpect.TIMEOUT ],
                                             timeout )
@@ -276,16 +281,52 @@
                         main.log.info( "mininet> prompt found!" )
                         response = str( self.handle.before )
                     if i == 1:
-                        main.log.info( self.name + ": Cannot ping some of the hosts")
+                        main.log.info( self.name + 
+                                       ": Cannot ping some of the hosts")
+                        failedPings = 1
+                        main.log.info( self.name + ": failed to ping " + 
+                                str( failedPings ) + " host" )
+                        while failedPings != numFailedPings:
+                            j = self.handle.expect( [ "mininet>","X",
+                                                      pexpect.EOF,
+                                                      pexpect.TIMEOUT ],
+                                                      timeout )
+                            if j == 0:
+                                main.log.info( self.name + ": pingall finished")
+                                break
+                            if j == 1:
+                                failedPings = failedPings + 1
+                                main.log.info( self.name + ": failed to ping " 
+                                        + str( failedPings ) + " host" )
+
+                            if j == 2:
+                                main.log.error( self.name + 
+                                                ": EOF exception found" )
+                                main.log.error( self.name + ":     " +
+                                                self.handle.before )
+                                main.cleanup()
+                                main.exit()
+                            if j == 3:
+                                main.log.error( self.name + 
+                                                ": TIMEOUT exception found" )
+                                main.log.error( self.name +
+                                                ":     " +
+                                                str( self.handle.before ) )
+                                break
+                        
+                        main.log.info( self.name + ": Cannot ping " 
+                                       + str( failedPings ) +" hosts")
                         main.log.info( str( self.handle.before ) )
                         response = str( self.handle.before )
                     if i == 2:
                         main.log.error( self.name + ": EOF exception found" )
-                        main.log.error( self.name + ":     " + self.handle.before )
+                        main.log.error( self.name + ":     "
+                                        + self.handle.before )
                         main.cleanup()
                         main.exit()
                     if i == 3:
-                        main.log.error( self.name + ": TIMEOUT exception found" )
+                        main.log.error( self.name +
+                                        ": TIMEOUT exception found" )
                         main.log.error( self.name +
                                         ":     " +
                                         str( self.handle.before ) )
diff --git a/TestON/tests/OnosCHO/OnosCHO.py b/TestON/tests/OnosCHO/OnosCHO.py
index 3706a03..b48c44f 100644
--- a/TestON/tests/OnosCHO/OnosCHO.py
+++ b/TestON/tests/OnosCHO/OnosCHO.py
@@ -464,6 +464,8 @@
             for i in xrange(1,(main.numMNswitches + 1), int( main.numCtrls ) ):
                 pool = []
                 for cli in main.CLIs:
+                    if i >= len( main.numMNswitches  ) + 1:
+                        break
                     dpid = "of:00000000000000" + format( i,'02x' )
                     t = main.Thread(target = cli.getDevicePortsEnabledCount,threadID = main.threadID, name = "getDevicePortsEnabledCount",args = [dpid])
                     t.start()
@@ -486,6 +488,8 @@
             for i in xrange( 1,( main.numMNswitches + 1 ), int( main.numCtrls) ):
                 pool = []
                 for cli in main.CLIs:
+                    if i >= len( main.numMNswitches  ) + 1:
+                        break
                     dpid = "of:00000000000000" + format( i,'02x' )
                     t = main.Thread( target = cli.getDeviceLinksActiveCount,
                                      threadID = main.threadID,
@@ -501,7 +505,7 @@
                     linkCountTemp = re.split( r'\t+', linkCountResult )
                     linkCount = linkCountTemp[ 1 ].replace( "\r\r\n\x1b[32m", "" )
                     main.deviceActiveLinksCount.append( linkCount )
-                print "Device Active Links Count Stored: \n", str( main.deviceActiveLinksCount )
+            print "Device Active Links Count Stored: \n", str( main.deviceActiveLinksCount )
             time2 = time.time()
             main.log.info("Time for counting all enabled links of the switches: %2f seconds" %(time2-time1))
 
@@ -1189,7 +1193,7 @@
 
     def CASE71( self, main ):
         """
-        Randomly bring some core links down and verify ping all ( Host Intents-Att Topo)
+        Randomly bring some core links down and verify ping all ( Point Intents-Att Topo)
         """
         import random
         main.randomLink1 = []
@@ -1204,9 +1208,9 @@
         switchLinksToToggle = main.params[ 'ATTCORELINKS' ][ 'toggleLinks' ]
         link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
 
-        main.log.report( "Randomly bring some core links down and verify ping all (Host Intents-Att Topo)" )
+        main.log.report( "Randomly bring some core links down and verify ping all (Point Intents-Att Topo)" )
         main.log.report( "___________________________________________________________________________" )
-        main.case( "Host intents - Randomly bring some core links down and verify ping all" )
+        main.case( "Point intents - Randomly bring some core links down and verify ping all" )
         main.step( "Verify number of Switch links to toggle on each Core Switch are between 1 - 5" )
         if ( int( switchLinksToToggle ) ==
              0 or int( switchLinksToToggle ) > 5 ):
@@ -1268,7 +1272,7 @@
 
     def CASE81( self, main ):
         """
-        Bring the core links up that are down and verify ping all ( Host Intents-Att Topo )
+        Bring the core links up that are down and verify ping all ( Point Intents-Att Topo )
         """
         import random
         link1End1 = main.params[ 'ATTCORELINKS' ][ 'linkS3a' ]
@@ -1278,11 +1282,11 @@
         switchLinksToToggle = main.params[ 'ATTCORELINKS' ][ 'toggleLinks' ]
 
         main.log.report(
-            "Bring the core links up that are down and verify ping all (Host Intents-Att Topo" )
+            "Bring the core links up that are down and verify ping all ( Point Intents-Att Topo" )
         main.log.report(
             "__________________________________________________________________" )
         main.case(
-            "Host intents - Bring the core links up that are down and verify ping all" )
+            "Point intents - Bring the core links up that are down and verify ping all" )
         main.step( "Bring randomly cut links on Core devices up" )
         for i in range( int( switchLinksToToggle ) ):
             main.Mininet1.link(
@@ -1446,15 +1450,15 @@
 
     def CASE73( self, main ):
         """
-        Randomly bring some links down and verify ping all ( Host Intents-Chordal Topo)
+        Randomly bring some links down and verify ping all ( Point Intents-Chordal Topo)
         """
         import random
         import itertools 
         link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
         
-        main.log.report( "Randomly bring some core links down and verify ping all (Host Intents-Chordal Topo)" )
+        main.log.report( "Randomly bring some core links down and verify ping all ( Point Intents-Chordal Topo)" )
         main.log.report( "___________________________________________________________________________" )
-        main.case( "Host intents - Randomly bring some core links down and verify ping all" )
+        main.case( "Point intents - Randomly bring some core links down and verify ping all" )
         switches = []
         switchesComb = []
         for i in range( main.numMNswitches ):
@@ -1504,17 +1508,17 @@
 
     def CASE83( self, main ):
         """
-        Bring the core links up that are down and verify ping all ( Host Intents Chordal Topo )
+        Bring the core links up that are down and verify ping all ( Point Intents Chordal Topo )
         """
         import random
         link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
        
         main.log.report(
-            "Bring the core links up that are down and verify ping all (Host Intents-Chordal Topo" )
+            "Bring the core links up that are down and verify ping all ( Point Intents-Chordal Topo" )
         main.log.report(
             "__________________________________________________________________" )
         main.case(
-            "Host intents - Bring the core links up that are down and verify ping all" )
+            "Point intents - Bring the core links up that are down and verify ping all" )
         main.step( "Bring randomly cut links on devices up" )
         
         for switch in main.randomLinks:
