diff --git a/TestON/drivers/common/cli/dpclidriver.py b/TestON/drivers/common/cli/dpclidriver.py
index f3ea3e5..bae91e4 100644
--- a/TestON/drivers/common/cli/dpclidriver.py
+++ b/TestON/drivers/common/cli/dpclidriver.py
@@ -13,7 +13,7 @@
 class DPCliDriver( CLI ):
 
     def __init__( self ):
-        super( CLI, self ).__init__()
+        super( DPCliDriver, self ).__init__()
 
     def connect( self, **connectargs ):
         for key in connectargs:
@@ -46,12 +46,12 @@
         and false if a single interface has issues
         """
         self.handle.sendline( "" )
-        self.handle.expect( "\$" )
+        self.handle.expect( self.prompt )
 
         self.handle.sendline( "rm /tmp/local_ip.txt" )
-        self.handle.expect( "\$" )
+        self.handle.expect( self.prompt )
         self.handle.sendline( "touch /tmp/local_ip.txt" )
-        self.handle.expect( "\$" )
+        self.handle.expect( self.prompt )
 
         main.log.info( "Creating interfaces" )
         k = 0
@@ -69,7 +69,7 @@
                     intf ) + " " + ip + " netmask 255.255.255.0" )
 
             i = self.handle.expect( [
-                                    "\$",
+                                    self.prompt,
                                     "password",
                                     pexpect.TIMEOUT,
                                     pexpect.EOF ],
@@ -78,11 +78,11 @@
             if i == 0:
                 self.handle.sendline(
                     "echo " + str( ip ) + " >> /tmp/local_ip.txt" )
-                self.handle.expect( "\$" )
+                self.handle.expect( self.prompt )
             elif i == 1:
                 main.log.info( "Sending sudo password" )
                 self.handle.sendline( self.pwd )
-                self.handle.expect( "\$" )
+                self.handle.expect( self.prompt )
             else:
                 main.log.error( "INTERFACES NOT CREATED" )
                 return main.FALSE
@@ -98,7 +98,7 @@
         this function will install fping then run the same command
         """
         self.handle.sendline( "" )
-        self.handle.expect( "\$" )
+        self.handle.expect( self.prompt )
 
         self.handle.sendline( "scp " + str( destlogin ) + "@" +
                               str( destip ) +
@@ -123,7 +123,7 @@
             return result
 
         self.handle.sendline( "" )
-        self.handle.expect( "\$" )
+        self.handle.expect( self.prompt )
 
         main.log.info( "Pinging interfaces on the " + str( netdst ) +
                        " network from " + str( netsrc ) + "." +
@@ -135,7 +135,7 @@
             i = self.handle.expect( [
                                     "reachable",
                                     "unreachable",
-                                    "\$",
+                                    self.prompt,
                                     "password",
                                     pexpect.TIMEOUT,
                                     "not installed" ],
@@ -160,12 +160,12 @@
                 main.log.info( "fping not installed, installing fping" )
                 self.handle.sendline( "sudo apt-get install fping" )
                 i = self.handle.expect( [ "password",
-                                          "\$",
+                                          self.prompt,
                                           pexpect.TIMEOUT ],
                                         timeout=60 )
                 if i == 0:
                     self.handle.sendline( self.pwd )
-                    self.handle.expect( "\$", timeout=30 )
+                    self.handle.expect( self.prompt, timeout=30 )
                     main.log.info( "fping installed, now pinging interfaces" )
                     self.handle.sendline(
                         "sudo fping -S " + str(
diff --git a/TestON/drivers/common/cli/emulator/flowvisordriver.py b/TestON/drivers/common/cli/emulator/flowvisordriver.py
index 35c0bbf..5839e18 100644
--- a/TestON/drivers/common/cli/emulator/flowvisordriver.py
+++ b/TestON/drivers/common/cli/emulator/flowvisordriver.py
@@ -37,7 +37,7 @@
         FlowVisorDriver is the basic driver which will handle the Mininet functions
     """
     def __init__( self ):
-        super( Emulator, self ).__init__()
+        super( FlowVisorDriver, self ).__init__()
         self.handle = self
         self.wrapped = sys.modules[ __name__ ]
 
@@ -61,13 +61,13 @@
 
         # Copying the readme file to process the
         if self.handle:
-            self.execute( cmd='\r', prompt='\$', timeout=10 )
+            self.execute( cmd='\r', prompt=self.prompt, timeout=10 )
             self.options[ 'path' ] = '/home/openflow/flowvisor/scripts/'
             #self.handle.logfile = sys.stdout
             self.execute(
                 cmd='cd ' +
                 self.options[ 'path' ],
-                prompt='\$',
+                prompt=self.prompt,
                 timeout=10 )
             main.log.info( "Starting FlowVisor " )
 
@@ -92,7 +92,7 @@
             main.log.info( response )
             #import time
             # time.sleep( 10 )
-            #response = self.execute( cmd='./start_visualizer.sh & \r',prompt='\$',timeout=10 )
+            #response = self.execute( cmd='./start_visualizer.sh & \r',prompt=self.prompt,timeout=10 )
 
             return main.TRUE
         else:
@@ -111,13 +111,13 @@
             for id in flow_ids:
                 self.removeFlowSpace( id )
         else:
-            self.execute( cmd="clear", prompt="\$", timeout=10 )
+            self.execute( cmd="clear", prompt=self.prompt, timeout=10 )
             self.execute(
                 cmd="./fvctl.sh removeFlowSpace " +
                 id,
                 prompt="passwd:",
                 timeout=10 )
-            self.execute( cmd="\n", prompt="\$", timeout=10 )
+            self.execute( cmd="\n", prompt=self.prompt, timeout=10 )
             main.log.info( "Removed flowSpace which is having id :" + id )
 
         return main.TRUE
@@ -155,13 +155,13 @@
                 except Exception:
                     main.log.error( "Please specify flowspace properly" )
         """
-        # self.execute( cmd="clear",prompt="\$",timeout=10 )
+        # self.execute( cmd="clear",prompt=self.prompt,timeout=10 )
         self.execute(
             cmd="./fvctl.sh addFlowSpace " +
             flowspace,
             prompt="passwd:",
             timeout=10 )
-        self.execute( cmd="\n", prompt="\$", timeout=10 )
+        self.execute( cmd="\n", prompt=self.prompt, timeout=10 )
         sucess_match = re.search( "success\:\s+(\d+)", main.last_response )
         if sucess_match:
             main.log.info(
@@ -172,12 +172,12 @@
             return main.FALSE
 
     def listFlowSpace( self ):
-        self.execute( cmd="clear", prompt="\$", timeout=10 )
+        self.execute( cmd="clear", prompt=self.prompt, timeout=10 )
         self.execute(
             cmd="./fvctl.sh listFlowSpace ",
             prompt="passwd:",
             timeout=10 )
-        self.execute( cmd="\n", prompt="\$", timeout=10 )
+        self.execute( cmd="\n", prompt=self.prompt, timeout=10 )
         flow_space = main.last_response
         flow_space = self.remove_contol_chars( flow_space )
         flow_space = re.sub(
@@ -191,9 +191,9 @@
         return flow_space
 
     def listDevices( self ):
-        # self.execute( cmd="clear",prompt="\$",timeout=10 )
+        # self.execute( cmd="clear",prompt=self.prompt,timeout=10 )
         #self.execute( cmd="./fvctl.sh listDevices ",prompt="passwd:",timeout=10 )
-        # self.execute( cmd="\n",prompt="\$",timeout=10 )
+        # self.execute( cmd="\n",prompt=self.prompt,timeout=10 )
         devices_list = ''
         last_response = re.findall(
             "(Device\s\d+\:\s((\d|[a-z])(\d|[a-z])\:)+(\d|[a-z])(\d|[a-z]))",
diff --git a/TestON/drivers/common/cli/emulator/lincoedriver.py b/TestON/drivers/common/cli/emulator/lincoedriver.py
index 5024f17..dfc7511 100644
--- a/TestON/drivers/common/cli/emulator/lincoedriver.py
+++ b/TestON/drivers/common/cli/emulator/lincoedriver.py
@@ -31,7 +31,7 @@
     LincOEDriver class will handle all emulator functions
     """
     def __init__( self ):
-        super( Emulator, self ).__init__()
+        super( LincOEDriver, self ).__init__()
         self.handle = self
         self.wrapped = sys.modules[ __name__ ]
         self.flag = 0
@@ -103,12 +103,12 @@
             self.handle.sendline( "make rel" )
             i = self.handle.expect( [
                 "ERROR",
-                "\$" ] )
+                self.prompt ] )
 
             if i == 0:
                 self.handle.sendline( "sudo pkill -9 epmd" )
                 self.handle.sendline( "make rel" )
-                self.handle.expect( "\$" )
+                self.handle.expect( self.prompt )
 
                 handle = self.handle.before
                 return handle
@@ -222,7 +222,7 @@
         """
         try:
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             self.handle.sendline( "sudo ~/linc-oe/rel/linc/bin/linc attach" )
             self.handle.expect( ">" )
             return main.TRUE
@@ -317,19 +317,19 @@
             # Send CTRL+C twice to exit CLI
             self.handle.send( "\x03" )
             self.handle.send( "\x03" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             handle1 = self.handle.before
             cmd = "pgrep -f linc"
             self.handle.sendline( cmd )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             handle2 = self.handle.before
             main.log.info( "pid's = " + handle2 )
             cmd = "sudo kill -9 `pgrep -f linc`"
             self.handle.sendline( cmd )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             # Close the ssh connection
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             self.handle.sendline( "exit" )
             self.handle.expect( "closed" )
         except pexpect.EOF:
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 90f79a9..21ba948 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -44,12 +44,11 @@
 
 
 class MininetCliDriver( Emulator ):
-
     """
        MininetCliDriver is the basic driver which will handle
        the Mininet functions"""
     def __init__( self ):
-        super( Emulator, self ).__init__()
+        super( MininetCliDriver, self ).__init__()
         self.handle = self
         self.name = None
         self.home = None
@@ -155,7 +154,7 @@
                     main.log.info( self.name + ": Sending sudo password" )
                     self.handle.sendline( self.pwd )
                     i = self.handle.expect( [ '%s:' % self.user,
-                                              '\$',
+                                              self.prompt,
                                               pexpect.EOF,
                                               pexpect.TIMEOUT ],
                                             timeout )
@@ -197,7 +196,7 @@
                     cmdString += mnCmd
                 # Send the command and check if network started
                 self.handle.sendline( "" )
-                self.handle.expect( '\$' )
+                self.handle.expect( self.prompt )
                 main.log.info( "Sending '" + cmdString + "' to " + self.name )
                 self.handle.sendline( cmdString )
                 while True:
@@ -213,7 +212,7 @@
                     elif i == 1:
                         response = str( self.handle.before +
                                         self.handle.after )
-                        self.handle.expect( '\$' )
+                        self.handle.expect( self.prompt )
                         response += str( self.handle.before +
                                          self.handle.after )
                         main.log.error(
@@ -2370,7 +2369,7 @@
             try:
                 self.handle.sendline( "" )
                 i = self.handle.expect( [ 'mininet>',
-                                          '\$',
+                                          self.prompt,
                                           pexpect.EOF,
                                           pexpect.TIMEOUT ],
                                         timeout )
@@ -2395,7 +2394,7 @@
 
                 if fileName:
                     self.handle.sendline( "" )
-                    self.handle.expect( '\$' )
+                    self.handle.expect( self.prompt )
                     self.handle.sendline(
                         "sudo kill -9 \`ps -ef | grep \"" +
                         fileName +
diff --git a/TestON/drivers/common/cli/emulator/poxclidriver.py b/TestON/drivers/common/cli/emulator/poxclidriver.py
index 02c43b1..349e54e 100644
--- a/TestON/drivers/common/cli/emulator/poxclidriver.py
+++ b/TestON/drivers/common/cli/emulator/poxclidriver.py
@@ -41,7 +41,7 @@
         PoxCliDriver driver provides the basic functions of POX controller
     """
     def __init__( self ):
-        super( Emulator, self ).__init__()
+        super( PoxCliDriver, self ).__init__()
         self.handle = self
         self.wrapped = sys.modules[ __name__ ]
 
@@ -80,12 +80,12 @@
                 self.execute(
                     cmd="cd " +
                     self.options[ 'pox_lib_location' ],
-                    prompt="/pox\$",
+                    prompt="/pox" + self.prompt,
                     timeout=120 )
             else:
                 self.execute(
                     cmd="cd ~/TestON/lib/pox/",
-                    prompt="/pox\$",
+                    prompt="/pox" + self.prompt,
                     timeout=120 )
             # launching pox with components
             main.log.info( "launching POX controller with given components" )
@@ -102,7 +102,7 @@
 
     def disconnect( self, handle ):
         if self.handle:
-            self.execute( cmd="exit()", prompt="/pox\$", timeout=120 )
+            self.execute( cmd="exit()", prompt="/pox" + self.prompt, timeout=120 )
         else:
             main.log.error( "Connection failed to the host" )
 
diff --git a/TestON/drivers/common/cli/emulator/remotemininetdriver.py b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
index 8788af0..4aa8ad4 100644
--- a/TestON/drivers/common/cli/emulator/remotemininetdriver.py
+++ b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
@@ -39,7 +39,7 @@
     mininet running on the target.
     """
     def __init__( self ):
-        super( Emulator, self ).__init__()
+        super( RemoteMininetDriver, self ).__init__()
         self.handle = self
         self.name = None
         self.wrapped = sys.modules[ __name__ ]
@@ -103,12 +103,12 @@
         """
         try:
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             self.handle.sendline( "cat " + pingList )
             self.handle.expect( pingList )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             outputs = self.handle.before + self.handle.after
             if re.search( " 0% packet loss", outputs ):
                 return main.FALSE
@@ -140,7 +140,7 @@
         """
         try:
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             args = utilities.parse_args(
                 [ "SRC", "TARGET", "PINGTIME" ], **pingParams )
             precmd = "sudo rm /tmp/ping." + args[ "SRC" ]
@@ -152,7 +152,7 @@
             main.log.info( command )
             self.execute( cmd=command, prompt="(.*)", timeout=10 )
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             return main.TRUE
         except TypeError:
             main.log.exception(self.name + ": Object not as expected")
@@ -179,14 +179,14 @@
         """
         try:
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             args = utilities.parse_args( [ "SRC" ], **pingParams )
             self.handle.sendline( "tail /tmp/ping." + args[ "SRC" ] )
             self.handle.expect( "tail" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             result = self.handle.before + self.handle.after
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             if re.search( 'Unreachable', result ):
                 main.log.info( "Unreachable found in ping logs..." )
                 return main.FALSE
@@ -220,7 +220,7 @@
         """
         try:
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             command = "sudo kill -SIGINT `pgrep ping`"
             main.log.info( command )
             self.execute( cmd=command, prompt="(.*)", timeout=10 )
@@ -231,11 +231,11 @@
             self.execute( cmd=command, prompt="100%", timeout=20 )
             # Make sure the output is cleared
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             self.handle.sendline( "" )
-            i = self.handle.expect( [ "password", "\$" ] )
+            i = self.handle.expect( [ "password", self.prompt ] )
             if i == 0:
                 main.log.error( "Error, sudo asking for password" )
                 main.log.error( self.handle.before )
@@ -260,12 +260,12 @@
     def pingLongKill( self ):
         try:
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             command = "sudo kill -SIGING `pgrep ping`"
             main.log.info( command )
             self.execute( cmd=command, prompt="(.*)", timeout=10 )
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             return main.TRUE
         except pexpect.TIMEOUT:
             main.log.exception( self.name + ": TIMEOUT exception found in pingLongKill" )
@@ -330,7 +330,7 @@
         """
         try:
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             args = utilities.parse_args( [ "SRC", "TARGET" ], **pingParams )
             command = "mininet/util/m " + \
                 args[ "SRC" ] + " ping " + args[ "TARGET" ] + " -c 4 -W 1 -i .2"
@@ -365,15 +365,15 @@
         try:
             if self.handle:
                 self.handle.sendline( "" )
-                self.handle.expect( "\$" )
+                self.handle.expect( self.prompt )
                 self.handle.sendline( 'ifconfig -a | grep "sw.. " | wc -l' )
                 self.handle.expect( "wc" )
-                self.handle.expect( "\$" )
+                self.handle.expect( self.prompt )
                 response = self.handle.before
                 self.handle.sendline(
                     'ps -ef | grep "bash -ms mininet:sw" | grep -v color | wc -l' )
                 self.handle.expect( "color" )
-                self.handle.expect( "\$" )
+                self.handle.expect( self.prompt )
                 response2 = self.handle.before
 
                 if re.search( num, response ):
@@ -424,7 +424,7 @@
             self.handle.sendline( "" )
             self.handle.sendline( "" )
             i = self.handle.expect( [ 'No\ssuch\device', 'listening\son',
-                                    pexpect.TIMEOUT, "\$" ], timeout=10 )
+                                    pexpect.TIMEOUT, self.prompt ], timeout=10 )
             main.log.info( self.handle.before + self.handle.after )
             if i == 0:
                 main.log.error( self.name + ": tcpdump - No such device exists.\
@@ -459,7 +459,7 @@
         try:
             self.handle.sendline( "sudo pkill tcpdump" )
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
         except pexpect.EOF:
             main.log.error( self.name + ": EOF exception found" )
             main.log.error( self.name + ":     " + self.handle.before )
@@ -487,9 +487,9 @@
         """
         try:
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             self.handle.sendline( "cd ~/" + name + "/tools/test/topos" )
-            self.handle.expect( "topos\$" )
+            self.handle.expect( "topos"+ self.prompt )
             if ctrllerIP == None:
                 main.log.info( "You need to specify the IP" )
                 return main.FALSE
@@ -531,7 +531,7 @@
         """
         try:
             self.handle.sendline( "" )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             self.handle.sendline( "sudo ~/linc-oe/rel/linc/bin/linc attach" )
             self.handle.expect( ">" )
             return main.TRUE
@@ -548,8 +548,8 @@
             if self.handle:
                 # Close the ssh connection
                 self.handle.sendline( "" )
-                # self.handle.expect( "\$" )
-                i = self.handle.expect( [ '\$', 'mininet>', pexpect.TIMEOUT,
+                # self.handle.expect( self.prompt )
+                i = self.handle.expect( [ self.prompt, 'mininet>', pexpect.TIMEOUT,
                                           pexpect.EOF ], timeout=2 )
                 if i == 0:
                     self.handle.sendline( "exit" )
@@ -557,7 +557,7 @@
                 elif i == 1:
                     self.handle.sendline( "exit" )
                     self.handle.expect( "exit" )
-                    self.handle.expect('\$')
+                    self.handle.expect(self.prompt)
                     self.handle.sendline( "exit" )
                     self.handle.expect( "exit" )
                     self.handle.expect( "closed" )
@@ -637,7 +637,7 @@
                 # at the time of writing this function )
                 # Check for existing rules on current input
                 self.handle.sendline( "" )
-                self.handle.expect( "\$" )
+                self.handle.expect( self.prompt )
                 self.handle.sendline(
                     "sudo iptables -C OUTPUT -p " +
                     str( packetType ) +
@@ -647,7 +647,7 @@
                     str( dstPort ) +
                     " -j " +
                     str( rule ) )
-                i = self.handle.expect( [ "iptables:", "\$" ] )
+                i = self.handle.expect( [ "iptables:", self.prompt ] )
                 print i
                 print self.handle.before
                 print "after: "
@@ -656,7 +656,7 @@
             elif actionType == 'remove':
                 # Check for existing rules on current input
                 self.handle.sendline( "" )
-                self.handle.expect( "\$" )
+                self.handle.expect( self.prompt )
                 self.handle.sendline(
                     "sudo iptables -C OUTPUT -p " +
                     str( packetType ) +
@@ -666,7 +666,7 @@
                     str( dstPort ) +
                     " -j " +
                     str( rule ) )
-                self.handle.expect( "\$" )
+                self.handle.expect( self.prompt )
             print "before: "
             print self.handle.before
             actualString = self.handle.after
@@ -710,7 +710,7 @@
                         main.log.info( infoString )
 
                         self.handle.expect(
-                            [ "\$", pexpect.EOF, pexpect.TIMEOUT ] )
+                            [ self.prompt, pexpect.EOF, pexpect.TIMEOUT ] )
                     except pexpect.TIMEOUT:
                         main.log.error(
                             self.name +
@@ -754,7 +754,7 @@
                         main.log.info( infoString )
 
                         self.handle.expect(
-                            [ "\$", pexpect.EOF, pexpect.TIMEOUT ] )
+                            [ self.prompt, pexpect.EOF, pexpect.TIMEOUT ] )
                     except pexpect.TIMEOUT:
                         main.log.error(
                             self.name +
diff --git a/TestON/drivers/common/cli/emulator/scapyclidriver.py b/TestON/drivers/common/cli/emulator/scapyclidriver.py
index f1457ea..f61536c 100644
--- a/TestON/drivers/common/cli/emulator/scapyclidriver.py
+++ b/TestON/drivers/common/cli/emulator/scapyclidriver.py
@@ -38,7 +38,7 @@
        ScapyCliDriver is the basic driver which will handle
        the Scapy functions"""
     def __init__( self ):
-        super( Emulator, self ).__init__()
+        super( ScapyCliDriver, self ).__init__()
         self.handle = self
         self.name = None
         self.home = None
@@ -147,7 +147,7 @@
             try:
                 self.handle.sendline( "" )
                 i = self.handle.expect( [ '>>>',
-                                          '\$',
+                                          self.prompt,
                                           pexpect.EOF,
                                           pexpect.TIMEOUT ],
                                         timeout )
@@ -171,7 +171,7 @@
 
                 if fileName:
                     self.handle.sendline( "" )
-                    self.handle.expect( '\$' )
+                    self.handle.expect( self.prompt )
                     self.handle.sendline(
                         "sudo kill -9 \`ps -ef | grep \"" +
                         fileName +
diff --git a/TestON/drivers/common/cli/emulatordriver.py b/TestON/drivers/common/cli/emulatordriver.py
index fb7a80d..206c935 100644
--- a/TestON/drivers/common/cli/emulatordriver.py
+++ b/TestON/drivers/common/cli/emulatordriver.py
@@ -26,10 +26,8 @@
 """
 from drivers.common.clidriver import CLI
 
-
 class Emulator( CLI ):
     # The common functions for emulator included in emulatordriver
 
     def __init__( self ):
-        super( CLI, self ).__init__()
-
+        super( Emulator, self ).__init__()
\ No newline at end of file
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index b7a4439..032460b 100755
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -41,9 +41,15 @@
         self.name = None
         self.home = None
         self.handle = None
+        self.karafUser = None
+        self.karafPass = None
         self.graph = Graph()
-        super( CLI, self ).__init__()
+        super( OnosCliDriver, self ).__init__()
 
+    def checkOptions(self, var, defaultVar):
+        if var is None or var == "":
+            return defaultVar
+        return var
     def connect( self, **connectargs ):
         """
         Creates ssh handle for ONOS cli.
@@ -54,10 +60,15 @@
             self.home = "~/onos"
             for key in self.options:
                 if key == "home":
-                    self.home = self.options[ 'home' ]
-                    break
-            if self.home is None or self.home == "":
-                self.home = "~/onos"
+                    self.home = self.options[ key ]
+                elif key == "karaf_username":
+                    self.karafUser = self.options[ key ]
+                elif key == "karaf_password":
+                    self.karafPass = self.options[ key ]
+
+            self.home = self.checkOptions(self.home, "~/onos")
+            self.karafUser = self.checkOptions(self.karafUser, self.user_name)
+            self.karafPass = self.checkOptions(self.karafPass, self.pwd )
 
             for key in self.options:
                 if key == 'onosIp':
@@ -89,7 +100,7 @@
                 home=self.home )
 
             self.handle.sendline( "cd " + self.home )
-            self.handle.expect( "\$" )
+            self.handle.expect( self.prompt )
             if self.handle:
                 return self.handle
             else:
@@ -118,7 +129,7 @@
                 i = self.logout()
                 if i == main.TRUE:
                     self.handle.sendline( "" )
-                    self.handle.expect( "\$" )
+                    self.handle.expect( self.prompt )
                     self.handle.sendline( "exit" )
                     self.handle.expect( "closed" )
         except TypeError:
@@ -146,11 +157,11 @@
         try:
             if self.handle:
                 self.handle.sendline( "" )
-                i = self.handle.expect( [ "onos>", "\$", pexpect.TIMEOUT ],
+                i = self.handle.expect( [ "onos>", self.prompt, pexpect.TIMEOUT ],
                                         timeout=10 )
                 if i == 0:  # In ONOS CLI
                     self.handle.sendline( "logout" )
-                    j = self.handle.expect( [ "\$",
+                    j = self.handle.expect( [ self.prompt,
                                               "Command not found:",
                                               pexpect.TIMEOUT ] )
                     if j == 0:  # Successfully logged out
@@ -160,7 +171,7 @@
                         # or the command timed out
                         self.handle.send( "\x04" )  # send ctrl-d
                         try:
-                            self.handle.expect( "\$" )
+                            self.handle.expect( self.prompt )
                         except pexpect.TIMEOUT:
                             main.log.error( "ONOS did not respond to 'logout' or CTRL-d" )
                         return main.TRUE
@@ -211,7 +222,7 @@
                 handleAfter = self.handle.after
                 # Get the rest of the handle
                 self.handle.sendline("")
-                self.handle.expect("\$")
+                self.handle.expect(self.prompt)
                 handleMore = self.handle.before
 
                 main.log.info( "Cell call returned: " + handleBefore +
@@ -253,7 +264,7 @@
             # Check if we are already in the cli
             self.handle.sendline( "" )
             x = self.handle.expect( [
-                "\$", "onos>" ], commandlineTimeout)
+                self.prompt, "onos>" ], commandlineTimeout)
             if x == 1:
                 main.log.info( "ONOS cli is already running" )
                 return main.TRUE
@@ -276,7 +287,7 @@
                         "config:property-set -p org.apache.karaf.shell\
                                  sshIdleTimeout " +
                         karafTimeout )
-                    self.handle.expect( "\$" )
+                    self.handle.expect( self.prompt )
                     self.handle.sendline( startCliCommand + str( ONOSIp ) )
                     self.handle.expect( "onos>" )
                 return main.TRUE
@@ -295,7 +306,7 @@
                             "config:property-set -p org.apache.karaf.shell\
                                     sshIdleTimeout " +
                             karafTimeout )
-                        self.handle.expect( "\$" )
+                        self.handle.expect( self.prompt )
                         self.handle.sendline( startCliCommand + str( ONOSIp ) )
                         self.handle.expect( "onos>" )
                     return main.TRUE
@@ -338,7 +349,7 @@
         try:
             self.handle.sendline( "" )
             x = self.handle.expect( [
-                "\$", "onos>" ], commandlineTimeout)
+                self.prompt, "onos>" ], commandlineTimeout)
 
             if x == 1:
                 main.log.info( "ONOS cli is already running" )
@@ -357,7 +368,7 @@
                         "config:property-set -p org.apache.karaf.shell\
                                  sshIdleTimeout " +
                         karafTimeout )
-                    self.handle.expect( "\$" )
+                    self.handle.expect( self.prompt )
                     self.handle.sendline( "/opt/onos/bin/onos" )
                     self.handle.expect( "onos>" )
                 return main.TRUE
@@ -376,7 +387,7 @@
                             "config:property-set -p org.apache.karaf.shell\
                                     sshIdleTimeout " +
                             karafTimeout )
-                        self.handle.expect( "\$" )
+                        self.handle.expect( self.prompt )
                         self.handle.sendline( "/opt/onos/bin/onos" )
                         self.handle.expect( "onos>" )
                     return main.TRUE
@@ -464,7 +475,7 @@
         try:
             # Try to reconnect if disconnected from cli
             self.handle.sendline( "" )
-            i = self.handle.expect( [ "onos>", "\$", pexpect.TIMEOUT ] )
+            i = self.handle.expect( [ "onos>", self.prompt, pexpect.TIMEOUT ] )
             if i == 1:
                 main.log.error( self.name + ": onos cli session closed. ")
                 if self.onosIp:
@@ -496,7 +507,7 @@
             if dollarSign:
                 i = self.handle.expect( ["onos>"], timeout )
             else:
-                i = self.handle.expect( ["onos>", "\$"], timeout )
+                i = self.handle.expect( ["onos>", self.prompt], timeout )
             response = self.handle.before
             # TODO: do something with i
             main.log.info( "Command '" + str( cmdStr ) + "' sent to "
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 805946b..454bd95 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -40,8 +40,7 @@
         self.home = None
         self.handle = None
         self.nicAddr = None
-        self.prompt = "\$"
-        super( CLI, self ).__init__()
+        super( OnosDriver, self ).__init__()
 
     def connect( self, **connectargs ):
         """
@@ -52,6 +51,7 @@
         the ip address needed to ssh to the "bench"
         """
         try:
+
             for key in connectargs:
                 vars( self )[ key ] = connectargs[ key ]
             self.home = "~/onos"
@@ -182,7 +182,7 @@
         try:
             self.handle.sendline( 'date +%s.%N' )
             self.handle.expect( 'date \+\%s\.\%N' )
-            self.handle.expect( '\$' )
+            self.handle.expect( self.prompt )
             epochMs = self.handle.before
             return epochMs
         except Exception:
@@ -311,8 +311,8 @@
                     'Runtime\sEnvironment\sto\scontinue',
                     'BUILD\sFAILURE',
                     'BUILD\sSUCCESS',
-                    'onos\$',  #TODO: fix this to be more generic?
-                    'ONOS\$',
+                    'onos' + self.prompt,  #TODO: fix this to be more generic?
+                    'ONOS' + self.prompt,
                     pexpect.TIMEOUT ], mciTimeout )
                 if i == 0:
                     main.log.error( self.name + ":There is insufficient memory \
@@ -449,7 +449,7 @@
             if i == 0:
                 main.log.error( self.name + ": Git pull had some issue" )
                 output = self.handle.after
-                self.handle.expect( '\$' )
+                self.handle.expect( self.prompt )
                 output += self.handle.before
                 main.log.warn( output )
                 return main.ERROR
@@ -1733,7 +1733,7 @@
                 cmd += " old"
             self.handle.sendline( cmd )
             self.handle.expect( cmd )
-            self.handle.expect( "\$ " )
+            self.handle.expect( self.prompt + " " )
             response = self.handle.before
             return response
         except pexpect.EOF:
diff --git a/TestON/drivers/common/cli/ovsdbdriver.py b/TestON/drivers/common/cli/ovsdbdriver.py
index 150e5fa..2a7a919 100644
--- a/TestON/drivers/common/cli/ovsdbdriver.py
+++ b/TestON/drivers/common/cli/ovsdbdriver.py
@@ -24,7 +24,7 @@
         self.name = None
         self.home = None
         self.handle = None
-        super( CLI, self ).__init__()
+        super( OvsdbDriver, self ).__init__()
 
     def connect( self, **connectargs ):
         try:
diff --git a/TestON/drivers/common/cli/quaggaclidriver.py b/TestON/drivers/common/cli/quaggaclidriver.py
index 721ae6a..5a59d88 100644
--- a/TestON/drivers/common/cli/quaggaclidriver.py
+++ b/TestON/drivers/common/cli/quaggaclidriver.py
@@ -17,7 +17,7 @@
 class QuaggaCliDriver( CLI ):
 
     def __init__( self ):
-        super( CLI, self ).__init__()
+        super( QuaggaCliDriver, self ).__init__()
 
     # TODO: simplify this method
     def connect( self, **connectargs ):
@@ -51,7 +51,7 @@
 
         if self.handle:
             # self.handle.expect( "",timeout=10 )
-            # self.handle.expect( "\$",timeout=10 )
+            # self.handle.expect( self.prompt,timeout=10 )
             self.handle.sendline( "telnet localhost 2605" )
             # self.handle.expect( "Password:", timeout=5 )
             self.handle.expect( "Password:" )
@@ -77,7 +77,7 @@
 
         if self.handle:
             # self.handle.expect( "" )
-            # self.handle.expect( "\$" )
+            # self.handle.expect( self.prompt )
             self.handle.sendline( "telnet localhost 2605" )
             # self.handle.expect( "Password:", timeout=5 )
             self.handle.expect( "Password:" )
@@ -460,7 +460,7 @@
 
         if self.handle:
             # self.handle.expect( "" )
-            # self.handle.expect( "\$" )
+            # self.handle.expect( self.prompt )
             main.log.info( "I in host " + str( ip_address ) )
             main.log.info( pingTestFile + " > " + pingTestResultFile + " &" )
             self.handle.sendline(
@@ -468,7 +468,7 @@
                 " > " +
                 pingTestResultFile +
                 " &" )
-            self.handle.expect( "\$", timeout=60 )
+            self.handle.expect( self.prompt, timeout=60 )
             handle = self.handle.before
 
             return handle
diff --git a/TestON/drivers/common/cli/remotesysdriver.py b/TestON/drivers/common/cli/remotesysdriver.py
index a56f644..fae42ac 100644
--- a/TestON/drivers/common/cli/remotesysdriver.py
+++ b/TestON/drivers/common/cli/remotesysdriver.py
@@ -31,7 +31,7 @@
     # The common functions for emulator included in emulatordriver
 
     def __init__( self ):
-        super( CLI, self ).__init__()
+        super( RemoteSysDriver, self ).__init__()
 
     def connect( self, **connectargs ):
         for key in connectargs:
@@ -48,13 +48,13 @@
             pwd=self.pwd )
         """
         if self.handle:
-            self.execute( cmd= "\n",prompt= "\$|>|#",timeout= 10 )
+            self.execute( cmd= "\n",prompt= self.prompt,timeout= 10 )
             self.execute( cmd= "ssh -l paxterra 10.128.4.1",prompt= "paxterra@10.128.4.1's password:",timeout= 10 )
             self.execute( cmd= "\n",prompt= "paxterra@10.128.4.1's password:",timeout= 10 )
-            self.execute( cmd="0nLab_gu3st",prompt="\$",timeout=10 )
-            self.execute( cmd="cd TestON/bin/",prompt="\$",timeout=10 )
-            self.execute( cmd="./cli.py run Assert example 1",prompt="\$",timeout=10 )
-            self.execute( cmd= "\n",prompt= "$",timeout= 10 )
+            self.execute( cmd="0nLab_gu3st",prompt=self.prompt,timeout=10 )
+            self.execute( cmd="cd TestON/bin/",prompt=self.prompt,timeout=10 )
+            self.execute( cmd="./cli.py run Assert example 1",prompt=self.prompt,timeout=10 )
+            self.execute( cmd= "\n",prompt= self.prompt,timeout= 10 )
             #self.execute( cmd="help",prompt=">",timeout=10 )
 
             #self.execute( cmd="~.",prompt= ".*",timeout= 10 )
diff --git a/TestON/drivers/common/cli/remotetestbed/floodlightclidriver.py b/TestON/drivers/common/cli/remotetestbed/floodlightclidriver.py
index 4f55a90..68345e6 100644
--- a/TestON/drivers/common/cli/remotetestbed/floodlightclidriver.py
+++ b/TestON/drivers/common/cli/remotetestbed/floodlightclidriver.py
@@ -34,7 +34,7 @@
         FloodLightCliDriver is the basic driver which will handle the Mininet functions
     """
     def __init__( self ):
-        super( RemoteTestBedDriver, self ).__init__()
+        super( FloodLightCliDriver, self ).__init__()
 
     def connect( self, **connectargs ):
         for key in connectargs:
@@ -51,16 +51,16 @@
             pwd=self.pwd )
         if self.handle:
             main.log.info( "Connected " + self.name )
-            self.execute( cmd="\r", prompt="\$", timeout=10 )
+            self.execute( cmd="\r", prompt=self.prompt, timeout=10 )
             self.execute(
                 cmd="cd /home/openflow/floodlight/",
-                prompt="floodlight\$",
+                prompt="floodlight" + self.prompt,
                 timeout=3 )
             self.execute(
                 cmd="java -jar target/floodlight.jar &",
-                prompt="\$",
+                prompt=self.prompt,
                 timeout=3 )
-            self.execute( cmd="\r", prompt="\$", timeout=10 )
+            self.execute( cmd="\r", prompt=self.prompt, timeout=10 )
             return self.handle
         else:
             return main.FALSE
diff --git a/TestON/drivers/common/cli/remotetestbed/remotepoxdriver.py b/TestON/drivers/common/cli/remotetestbed/remotepoxdriver.py
index 50100c9..0273a18 100644
--- a/TestON/drivers/common/cli/remotetestbed/remotepoxdriver.py
+++ b/TestON/drivers/common/cli/remotetestbed/remotepoxdriver.py
@@ -35,7 +35,7 @@
         RemoteVMDriver is the basic driver which will handle the Mininet functions
     """
     def __init__( self ):
-        super( RemoteTestBedDriver, self ).__init__()
+        super( RemotePoxDriver, self ).__init__()
 
     def connect( self, **connectargs ):
         for key in connectargs:
@@ -56,7 +56,7 @@
             self.execute(
                 cmd="cd " +
                 self.options[ 'pox_lib_location' ],
-                prompt="/pox\$",
+                prompt="/pox" + self.prompt,
                 timeout=120 )
             self.execute(
                 cmd='./pox.py samples.of_tutorial',
@@ -67,6 +67,6 @@
 
     def disconnect( self, handle ):
         if self.handle:
-            self.execute( cmd="exit()", prompt="/pox\$", timeout=120 )
+            self.execute( cmd="exit()", prompt="/pox" + self.prompt, timeout=120 )
         else:
             main.log.error( "Connection failed to the host" )
diff --git a/TestON/drivers/common/cli/remotetestbed/remotevmdriver.py b/TestON/drivers/common/cli/remotetestbed/remotevmdriver.py
index f4a1f1a..e8f4c00 100644
--- a/TestON/drivers/common/cli/remotetestbed/remotevmdriver.py
+++ b/TestON/drivers/common/cli/remotetestbed/remotevmdriver.py
@@ -37,7 +37,7 @@
         RemoteVMDriver is the basic driver which will handle the Mininet functions
     """
     def __init__( self ):
-        super( RemoteTestBedDriver, self ).__init__()
+        super( RemoteVMDriver, self ).__init__()
 
     def connect( self, **connectargs ):
         for key in connectargs:
@@ -102,7 +102,7 @@
         if i == 1:
             main.log.info( "ssh connection asked for password, gave password" )
             self.handle.sendline( self.pwd )
-            self.handle.expect( '>|#|$' )
+            self.handle.expect( self.prompt )
 
         elif i == 2:
             main.log.error( "Connection timeout" )
diff --git a/TestON/drivers/common/cli/remotetestbeddriver.py b/TestON/drivers/common/cli/remotetestbeddriver.py
index ebf8fbe..3c0b109 100644
--- a/TestON/drivers/common/cli/remotetestbeddriver.py
+++ b/TestON/drivers/common/cli/remotetestbeddriver.py
@@ -31,7 +31,7 @@
     # The common functions for emulator included in RemoteTestBedDriver
 
     def __init__( self ):
-        super( CLI, self ).__init__()
+        super( RemoteTestBedDriver, self ).__init__()
 
     def connect( self, **connectargs ):
         for key in connectargs:
@@ -53,9 +53,9 @@
             pwd=remote_pwd )
 
         if self.handle:
-            self.execute( cmd="\n", prompt="\$|>|#", timeout=10 )
-            self.execute( cmd="SET CYGWIN=notty", prompt="\$|>|#", timeout=10 )
-            self.execute( cmd="\n", prompt="\$|>|#", timeout=10 )
+            self.execute( cmd="\n", prompt=self.prompt, timeout=10 )
+            self.execute( cmd="SET CYGWIN=notty", prompt=self.prompt, timeout=10 )
+            self.execute( cmd="\n", prompt=self.prompt, timeout=10 )
             main.log.info(
                 "ssh " +
                 self.vm_user_name +
@@ -68,8 +68,8 @@
                 self.vm_ip_address,
                 prompt="(.*)",
                 timeout=10 )
-            self.execute( cmd="\n", prompt="assword:", timeout=10 )
-            self.execute( cmd=self.vm_pwd, prompt="\$", timeout=10 )
+            self.execute( cmd="\n", prompt="password:", timeout=10 )
+            self.execute( cmd=self.vm_pwd, prompt=self.prompt, timeout=10 )
 
             return self.handle
         else:
diff --git a/TestON/drivers/common/cli/tool/dpctlclidriver.py b/TestON/drivers/common/cli/tool/dpctlclidriver.py
index 683f16e..bb12089 100644
--- a/TestON/drivers/common/cli/tool/dpctlclidriver.py
+++ b/TestON/drivers/common/cli/tool/dpctlclidriver.py
@@ -84,7 +84,7 @@
         cmd = cmd + tcpIP + ":" + tcpPort + " in_port=" + \
             str( args[ "INPORT" ] ) + ",idle_timeout=" + str(
                 args[ "TIMEOUT" ] ) + ",actions=" + args[ "ACTION" ]
-        response = self.execute( cmd=cmd, prompt="\~\$", timeout=60 )
+        response = self.execute( cmd=cmd, prompt="\~" + self.prompt, timeout=60 )
         if utilities.assert_matches( expect="openflow", actual=response, onpass="Flow Added Successfully", onfail="Adding Flow Failed!!!" ):
             return main.TRUE
         else:
diff --git a/TestON/drivers/common/cli/toolsdriver.py b/TestON/drivers/common/cli/toolsdriver.py
index c96cb4f..a8f5d39 100644
--- a/TestON/drivers/common/cli/toolsdriver.py
+++ b/TestON/drivers/common/cli/toolsdriver.py
@@ -31,4 +31,4 @@
     # The common functions for Tools included in toolsdriver
 
     def __init__( self ):
-        super( CLI, self ).__init__()
+        super( Tools, self ).__init__()
