diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 0d27b43..9428c21 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -265,69 +265,78 @@
            Returns:
            main.TRUE if pingall completes with no pings dropped
            otherwise main.FALSE"""
-        if self.handle:
-            main.log.info(
-                self.name +
-                ": Checking reachabilty to the hosts using pingall" )
-            response = ""
-            failedPings = 0
-            returnValue = main.TRUE
-            self.handle.sendline( "pingall" )
-            while True:
-                i = self.handle.expect( [ "mininet>","X",
-                                          pexpect.EOF,
-                                          pexpect.TIMEOUT ],
-                                          timeout )
-                if i == 0:
-                    main.log.info( self.name + ": pingall finished")
-                    response += self.handle.before
-                    break
-                elif i == 1:
-                    response += self.handle.before + self.handle.after
-                    failedPings = failedPings + 1
-                    if failedPings >= acceptableFailed:
-                        returnValue = main.FALSE
-                        if shortCircuit:
-                            main.log.error( self.name +
-                                            ": Aborting pingall - "
-                                            + str( failedPings ) +
-                                            " pings failed" )
-                            break
-                elif i == 2:
-                    main.log.error( self.name +
-                                    ": EOF exception found" )
-                    main.log.error( self.name + ":     " +
-                                    self.handle.before )
-                    main.cleanup()
-                    main.exit()
-                elif i == 3:
-                    response += self.handle.before
-                    main.log.error( self.name +
-                                    ": TIMEOUT exception found" )
-                    main.log.error( self.name +
-                                    ":     " +
-                                    str( response ) )
+        try:
+            if self.handle:
+                main.log.info(
+                    self.name +
+                    ": Checking reachabilty to the hosts using pingall" )
+                response = ""
+                failedPings = 0
+                returnValue = main.TRUE
+                self.handle.sendline( "pingall" )
+                while True:
+                    i = self.handle.expect( [ "mininet>","X",
+                                              pexpect.EOF,
+                                              pexpect.TIMEOUT ],
+                                              timeout )
+                    if i == 0:
+                        main.log.info( self.name + ": pingall finished")
+                        response += self.handle.before
+                        break
+                    elif i == 1:
+                        response += self.handle.before + self.handle.after
+                        failedPings = failedPings + 1
+                        if failedPings >= acceptableFailed:
+                            returnValue = main.FALSE
+                            if shortCircuit:
+                                main.log.error( self.name +
+                                                ": Aborting pingall - "
+                                                + str( failedPings ) +
+                                                " pings failed" )
+                                break
+                    elif i == 2:
+                        main.log.error( self.name +
+                                        ": EOF exception found" )
+                        main.log.error( self.name + ":     " +
+                                        self.handle.before )
+                        main.cleanup()
+                        main.exit()
+                    elif i == 3:
+                        response += self.handle.before
+                        main.log.error( self.name +
+                                        ": TIMEOUT exception found" )
+                        main.log.error( self.name +
+                                        ":     " +
+                                        str( response ) )
+                        # NOTE: Send ctrl-c to make sure pingall is done
+                        self.handle.sendline( "\x03" )
+                        self.handle.expect( "Interrupt" )
+                        self.handle.expect( "mininet>" )
+                        break
+                pattern = "Results\:"
+                main.log.info( "Pingall output: " + str( response ) )
+                if re.search( pattern, response ):
+                    main.log.info( self.name + ": Pingall finished with "
+                                   + str( failedPings ) + " failed pings" )
+                    return returnValue
+                else:
                     # NOTE: Send ctrl-c to make sure pingall is done
-                    self.handle.send( "\x03" )
+                    self.handle.sendline( "\x03" )
                     self.handle.expect( "Interrupt" )
-                    self.handle.send( "" )
                     self.handle.expect( "mininet>" )
-                    break
-            pattern = "Results\:"
-            main.log.info( "Pingall output: " + str( response ) )
-            if re.search( pattern, response ):
-                main.log.info( self.name + ": Pingall finished with "
-                               + str( failedPings ) + " failed pings" )
-                return returnValue
+                    return main.FALSE
             else:
-                # NOTE: Send ctrl-c to make sure pingall is done
-                self.handle.send( "\x03" )
-                self.handle.expect( "Interrupt" )
-                self.handle.send( "" )
-                self.handle.expect( "mininet>" )
-                return main.FALSE
-        else:
-            main.log.error( self.name + ": Connection failed to the host" )
+                main.log.error( self.name + ": Connection failed to the host" )
+                main.cleanup()
+                main.exit()
+        except pexpect.TIMEOUT:
+            if response:
+                main.log.info( "Pingall output: " + str( response ) )
+            main.log.error( self.name + ": pexpect.TIMEOUT found" )
+            return main.FALSE
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":     " + self.handle.before )
             main.cleanup()
             main.exit()
 
