diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 281fcf0..f049074 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -189,7 +189,6 @@
         '''
         Verifies the host's ip configured or not.
         '''
-        self.handle.sendline("")
         if self.handle :
             try:
                 response = self.execute(cmd=host+" ifconfig",prompt="mininet>",timeout=10)
@@ -319,6 +318,23 @@
         else:
             main.log.error("Connection failed to the host")
 
+    def getDPID(self, switch):
+        if self.handle:
+            self.handle.sendline("")
+            self.expect("mininet>")
+            cmd = "py %s.dpid" %switch
+            try:
+                response = self.execute(cmd=cmd,prompt="mininet>",timeout=10)
+                self.handle.expect("mininet>")
+                response = self.handle.before
+                return response
+            except pexpect.EOF:
+                main.log.error(self.name + ": EOF exception found")
+                main.log.error(self.name + ":     " + self.handle.before)
+                main.cleanup()
+                main.exit()
+
+
     def getInterfaces(self, node):
         '''
             return information dict about interfaces connected to the node
@@ -531,7 +547,6 @@
     def get_sw_controller(self,sw):
         command = "sh ovs-vsctl get-controller "+str(sw)
         try:
-            self.handle.expect("mininet")
             response = self.execute(cmd=command,prompt="mininet>",timeout=10)
             print(response)
             if response:
diff --git a/TestON/drivers/common/cli/emulator/remotemininetdriver.py b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
index 1bf7b89..5224338 100644
--- a/TestON/drivers/common/cli/emulator/remotemininetdriver.py
+++ b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
@@ -74,15 +74,18 @@
 #*********************************************************************************************
 #*********************************************************************************************
 
-    def checkForLoss(self, fileName):
+    def checkForLoss(self, pingList):
         import os
-        if os.stat(fileName)[6]==0:
-            return main.TRUE
-        pingFile= open(fileName,'r')
-        pingList = pingFile.read()
-        
-        if re.search("0% packet loss",pingList):
+        self.handle.sendline("")
+        self.handle.expect("\$")
+        self.handle.sendline("cat " + pingList)
+        self.handle.expect(pingList)
+        self.handle.expect("\$")
+        outputs = self.handle.before + self.handle.after
+        if re.search(" 0% packet loss",outputs):
             return main.FALSE
+        elif re.search("found multiple mininet",outputs):
+            return main.ERROR
         return main.TRUE
 
 
@@ -123,7 +126,7 @@
         Then copies all the ping files to the TestStation.
         '''
         import time
-        command = "sudo pkill ping" 
+        command = "sudo kill -SIGINT `pgrep ping`" 
         main.log.info( command ) 
         self.execute(cmd=command,prompt="(.*)",timeout=10)
         main.log.info( "Removing old ping data" )
@@ -133,6 +136,14 @@
         main.log.info( "Transferring ping files to TestStation" )
         command = "scp /tmp/ping.* admin@10.128.7.7:/tmp/" 
         self.execute(cmd=command,prompt="100%",timeout=20)
+        print("finished kill")
+        return main.TRUE
+    
+    def pingLongKill(self):
+        import time
+        command = "sudo kill -SIGING `pgrep ping`"
+        main.log.info(command)
+        self.execute(cmd=command,prompt="(.*)",timeout=10)
         return main.TRUE
         
     def pingHost(self,**pingParams):
diff --git a/TestON/drivers/common/cli/zookeeperclidriver.py b/TestON/drivers/common/cli/zookeeperclidriver.py
index 79f06ee..2a7c218 100644
--- a/TestON/drivers/common/cli/zookeeperclidriver.py
+++ b/TestON/drivers/common/cli/zookeeperclidriver.py
@@ -151,7 +151,7 @@
                 k4 = k3[1].split()
                 k5 = k4[1].split('"')
                 return k5[1]
-        return "NO SWITCH FOUND"
+        return "NO CONTROLLERS FOUND"
 
     def isup(self):
         '''
