diff --git a/TestON/drivers/common/api/onosrestapidriver.py b/TestON/drivers/common/api/onosrestapidriver.py
index 31a8930..fd00bb4 100644
--- a/TestON/drivers/common/api/onosrestapidriver.py
+++ b/TestON/drivers/common/api/onosrestapidriver.py
@@ -29,6 +29,7 @@
 import re
 import sys
 import time 
+import json
 
 sys.path.append("../")
 from drivers.common.apidriver import API
@@ -92,6 +93,26 @@
         '''
         return response  
     
-    
-   
-    
+    def find_host(self,RestIP,RestPort,RestAPI,hostMAC):
+	retcode = 0
+	url ="http://%s:%s%s" %(RestIP,RestPort,RestAPI)
+		
+	try:
+	    command = "curl -s %s" % (url)
+	    result = os.popen(command).read()
+	    parsedResult = json.loads(result)
+            print parsedResult
+	except:
+	    print "REST IF %s has issue" % command
+	    parsedResult = ""  
+	if type(parsedResult) == 'dict' and parsedResult.has_key('code'):
+	    print "REST %s returned code %s" % (command, parsedResult['code'])
+	    parsedResult = ""
+
+    	if parsedResult == "":
+	    return (retcode, "Rest API has an error")	
+	else:
+	    found = [item for item in parsedResult if item['mac'] == [str(hostMAC)]]
+            retcode = 1
+	    return (retcode, found)
+
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 4e60f46..97c5db3 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -131,7 +131,7 @@
         *requires fping to be installed on machine running mininet 
         ''' 
         args = utilities.parse_args(["SRC","TARGET"],**pingParams)
-        command = args["SRC"] + " fping -i 100 -t 10 -C 1 -q "+args["TARGET"]
+        command = args["SRC"] + " fping -i 100 -t 20 -C 1 -q "+args["TARGET"]
         self.handle.sendline(command) 
         self.handle.expect(args["TARGET"]) 
         self.handle.expect("mininet")
@@ -139,7 +139,7 @@
         if re.search(":\s-" ,response):
             main.log.info("Ping fail") 
             return main.FALSE
-        elif re.search(":\s\d\.\d\d", response):
+        elif re.search(":\s\d{1,2}\.\d\d", response):
             main.log.info("Ping good!")
             return main.TRUE
         main.log.info("Install fping on mininet machine... ") 
@@ -150,7 +150,7 @@
         
         args = utilities.parse_args(["SRC","TARGET"],**pingParams)
         #command = args["SRC"] + " ping -" + args["CONTROLLER"] + " " +args ["TARGET"]
-        command = args["SRC"] + " ping "+args ["TARGET"]+" -c 2 -i .2"
+        command = args["SRC"] + " ping "+args ["TARGET"]+" -c 1 -i .2"
         response = self.execute(cmd=command,prompt="mininet",timeout=10 )
         if utilities.assert_matches(expect=',\s0\%\spacket\sloss',actual=response,onpass="No Packet loss",onfail="Host is not reachable"):
             main.log.info("NO PACKET LOSS, HOST IS REACHABLE")
@@ -276,12 +276,12 @@
         return main.TRUE
         
 
-    def yank(self, **yangargs):
+    def yank(self,**yankargs):
 	'''
-	yank out a mininet switch interfacet to host
+	yank a mininet switch interface to a host
 	'''
-	main.log.info('Yang out the switch interface attached to a host')
-	args = utilities.parse_args(["SW","INTF"])
+	main.log.info('Yank the switch interface attached to a host')
+	args = utilities.parse_args(["SW","INTF"],**yankargs)
 	sw = args["SW"] if args["SW"] !=None else ""
 	intf = args["INTF"] if args["INTF"] != None else ""
 	command = "py "+ str(sw) + '.detach("' + str(intf) + '")'
@@ -293,7 +293,7 @@
         plug the yanked mininet switch interface to a switch
         '''
         main.log.info('Plug the switch interface attached to a switch')
-        args = utilities.parse_args(["SW","INTF"])
+        args = utilities.parse_args(["SW","INTF"],**plugargs)
         sw = args["SW"] if args["SW"] !=None else ""
         intf = args["INTF"] if args["INTF"] != None else ""
         command = "py "+ str(sw) + '.attach("' + str(intf) + '")'
@@ -349,6 +349,8 @@
         port6 = args["PORT6"] if args["PORT6"] != None else ""
         port7 = args["PORT7"] if args["PORT7"] != None else ""
         port8 = args["PORT8"] if args["PORT8"] != None else ""
+        ptcpA = int(args["PORT1"])+int(sw) if args["PORT1"] != None else ""
+        ptcpB = "ptcp:"+str(ptcpA) if ip1 != "" else ""
         tcp1 = "tcp:"+str(ip1)+":"+str(port1) if ip1 != "" else ""
         tcp2 = "tcp:"+str(ip2)+":"+str(port2) if ip2 != "" else ""
         tcp3 = "tcp:"+str(ip3)+":"+str(port3) if ip3 != "" else ""
@@ -361,7 +363,7 @@
        # master2 = tcp2+" role master " if args["MASTER"] == 2 else ""
        # master3 = tcp3+" role master " if args["MASTER"] == 3 else ""
        # master4 = tcp4+" role master " if args["MASTER"] == 4 else ""
-        command = "sh ovs-vsctl set-controller "+str(sw)+" "+tcp1+" "+tcp2+" "+tcp3+" "+tcp4+" "+tcp5+" "+tcp6+" "+tcp7+" "+tcp8
+        command = "sh ovs-vsctl set-controller s"+str(sw)+" "+ptcpB+" "+tcp1+" "+tcp2+" "+tcp3+" "+tcp4+" "+tcp5+" "+tcp6+" "+tcp7+" "+tcp8
         self.execute(cmd=command,prompt="mininet>",timeout=5)
 
     def disconnect(self):
diff --git a/TestON/drivers/common/cli/emulator/remotemininetdriver.py b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
index 5452dbe..5668182 100644
--- a/TestON/drivers/common/cli/emulator/remotemininetdriver.py
+++ b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
@@ -72,7 +72,9 @@
         Starts a continuous ping on the mininet host outputing to a file in the /tmp dir. 
         '''
         args = utilities.parse_args(["SRC","TARGET"],**pingParams)
-        command = "mininet/util/m " + args["SRC"] + " ping "+args ["TARGET"]+" -i .1 -D -W 1 > /tmp/ping." + args["SRC"] + " &"
+        precmd = "rm /tmp/ping." + args["SRC"]
+        self.execute(cmd=precmd,prompt="(.*)",timeout=10)
+        command = "mininet/util/m " + args["SRC"] + " ping "+args ["TARGET"]+" -i 1 -W 1 > /tmp/ping." + args["SRC"] + " &"
         main.log.info( command ) 
         self.execute(cmd=command,prompt="(.*)",timeout=10)
         return main.TRUE
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 41505f2..3b9e86b 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -59,14 +59,12 @@
         '''
         self.handle.sendline("")
         self.handle.expect("\$")
-        self.handle.sendline("cd ~/ONOS")
-        self.handle.expect("ONOS\$")
-        self.handle.sendline("./start-onos.sh start")
+        self.handle.sendline("~/ONOS/start-onos.sh start")
         self.handle.expect("onos.sh start")
         i=self.handle.expect(["Starting\sONOS\scontroller","Cassandra\sis\snot\srunning"])
         if i==0:
             try: 
-                self.handle.expect("ONOS\$", timeout=60)
+                self.handle.expect("\$", timeout=60)
                 main.log.info("ONOS Started ") 
             except:  
                 main.log.info("ONOS NOT Started, stuck while waiting for it to start ") 
@@ -111,8 +109,7 @@
         '''
         Starts the rest server on ONOS.
         '''
-        self.execute(cmd="cd ONOS",prompt="ONOS\$",timeout=10)
-        response = self.execute(cmd="start-rest.sh start",prompt="\$",timeout=10)
+        response = self.execute(cmd="~/ONOS/start-rest.sh start",prompt="\$",timeout=10)
         if re.search("admin",response):
             main.log.info("Rest Server Started Successfully")
             time.sleep(5)
@@ -190,12 +187,10 @@
         '''
         self.handle.sendline("")
         self.handle.expect("\$")
-        self.handle.sendline("cd ~/ONOS")
-        self.handle.expect("ONOS\$")
-        self.handle.sendline("./start-onos.sh stop")
+        self.handle.sendline("~/ONOS/start-onos.sh stop")
         self.handle.expect("stop", 2)
         result = self.handle.before 
-        self.handle.expect("ONOS\$", 60)
+        self.handle.expect("\$", 60)
         if re.search("Killed", result):
             main.log.info("ONOS Killed Successfully")
             return main.TRUE
@@ -507,7 +502,7 @@
         '''
         Used by CassndraCheck.py to scan ONOS logs for Exceptions
         '''
-        self.handle.sendline(r"dsh 'grep Exception ~/ONOS/onos-logs/onos.*.log'")
+        self.handle.sendline("dsh 'grep Exception ~/ONOS/onos-logs/onos.*.log'")
         self.handle.expect("\$ dsh") 
         self.handle.expect("\$")
         output = self.handle.before
@@ -527,7 +522,8 @@
         self.handle.sendline("cd ~/ONOS") 
         self.handle.expect("ONOS\$")
         self.handle.sendline("git pull")
-        
+       
+        uptodate = 0 
         i=self.handle.expect(['fatal','Username\sfor\s(.*):\s','Unpacking\sobjects',pexpect.TIMEOUT,'Already up-to-date','Aborting'],timeout=180)
         if i==0:
             main.log.error("Git pull had some issue...") 
@@ -553,12 +549,13 @@
             main.log.error("TIMEOUT")
             return main.FALSE
         elif i==4:
-            main.log.info("Already up to date") 
+            main.log.info("Already up to date")
+            uptodate = 1 
         elif i==5:
             main.log.info("Aborting... Are there conflicting git files?")
             return main.FALSE
         
-        
+        '''        
         main.log.info("./setup-local-maven.sh")
         self.handle.sendline("./setup-local-maven.sh")
         self.handle.expect("local-maven.sh")
@@ -575,36 +572,37 @@
             elif i == 3:
                 main.log.error("TIMEOUT!")
                 return main.FALSE
- 
-        main.log.info("mvn clean") 
-        self.handle.sendline("mvn clean")
-        while 1: 
-            i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=30)
-            if i == 0:
-                main.log.error("Build failure!")
-                return main.FALSE
-            elif i == 1:
-                main.log.info("Build success!")
-            elif i == 2:
-                main.log.info("Build complete") 
-                break;
-            elif i == 3:
-                main.log.error("TIMEOUT!")
-                return main.FALSE
+        '''      
+        if uptodate == 0:
+            main.log.info("mvn clean") 
+            self.handle.sendline("mvn clean")
+            while 1: 
+                i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=30)
+                if i == 0:
+                    main.log.error("Build failure!")
+                    return main.FALSE
+                elif i == 1:
+                    main.log.info("Build success!")
+                elif i == 2:
+                    main.log.info("Build complete") 
+                    break;
+                elif i == 3:
+                    main.log.error("TIMEOUT!")
+                    return main.FALSE
         
-        main.log.info("mvn compile") 
-        self.handle.sendline("mvn compile")
-        while 1: 
-            i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=30)
-            if i == 0:
-                main.log.error("Build failure!")
-                return main.FALSE
-            elif i == 1:
-                main.log.info("Build success!")
-            elif i == 2:
-                main.log.info("Build complete") 
-                break;
-            elif i == 3:
-                main.log.error("TIMEOUT!")
-                return main.FALSE
+            main.log.info("mvn compile") 
+            self.handle.sendline("mvn compile")
+            while 1: 
+                i=self.handle.expect(['BUILD\sFAILURE','BUILD\sSUCCESS','ONOS\$',pexpect.TIMEOUT],timeout=30)
+                if i == 0:
+                    main.log.error("Build failure!")
+                    return main.FALSE
+                elif i == 1:
+                    main.log.info("Build success!")
+                elif i == 2:
+                    main.log.info("Build complete") 
+                    break;
+                elif i == 3:
+                    main.log.error("TIMEOUT!")
+                    return main.FALSE
         
