diff --git a/TestON/drivers/common/cli/networkdriver.py b/TestON/drivers/common/cli/networkdriver.py
index 968973d..c151aab 100755
--- a/TestON/drivers/common/cli/networkdriver.py
+++ b/TestON/drivers/common/cli/networkdriver.py
@@ -53,11 +53,6 @@
         super( NetworkDriver, self ).__init__()
         self.graph = Graph()
 
-    def checkOptions( self, var, defaultVar ):
-        if var is None or var == "":
-            return defaultVar
-        return var
-
     def connect( self, **connectargs ):
         """
         Creates ssh handle for the SDN network "bench".
@@ -635,7 +630,7 @@
                             output = dstHost.checkFilter()
                             main.log.debug( output )
                             if output:
-                                #TODO: parse output?
+                                # TODO: parse output?
                                 packets = dstHost.readPackets()
                                 for packet in packets.splitlines():
                                     main.log.debug( packet )
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 7a0641e..72ed62c 100755
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -58,15 +58,12 @@
         self.handle = None
         self.karafUser = None
         self.karafPass = None
+        self.karafTimeout = None
+
         self.dockerPrompt = None
         self.graph = Graph()
         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.
@@ -85,10 +82,13 @@
                     self.karafPass = self.options[ key ]
                 elif key == "docker_prompt":
                     self.dockerPrompt = self.options[ key ]
+                elif key == "karaf_timeout":
+                    self.karafTimeout = 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 )
             self.dockerPrompt = self.checkOptions( self.dockerPrompt, "~/onos#" )
+            self.karafTimeout = self.checkOptions( self.karafTimeout, 7200000  )
 
             for key in self.options:
                 if key == 'onosIp':
@@ -301,6 +301,7 @@
                 startCliCommand = "onos " + str( ONOSIp )
             self.handle.sendline( startCliCommand )
             tries = 0
+            setTimeout = False
             while tries < 5:
                 i = self.handle.expect( [
                     self.karafPrompt,
@@ -308,14 +309,17 @@
                     pexpect.TIMEOUT ], onosStartTimeout )
 
                 if i == 0:
-                    main.log.info( str( ONOSIp ) + " CLI Started successfully" )
+                    if setTimeout:
+                        main.log.info( str( ONOSIp ) + " CLI Started successfully" )
+                        return main.TRUE
                     if karafTimeout:
                         self.handle.sendline(
                             "config:property-set -p org.apache.karaf.shell\
                                      sshIdleTimeout " +
-                            karafTimeout )
-                        self.handle.expect( self.karafPrompt )
-                    return main.TRUE
+                            str( karafTimeout ) )
+                        self.handle.expect( "closed by remote host" )
+                        self.handle.sendline( startCliCommand )
+                        setTimeout = True
                 elif i == 1:
                     main.log.info( str( ONOSIp ) + " CLI asking for password" )
                     main.log.debug( "Sending %s" % self.karafPass )
@@ -6739,8 +6743,6 @@
                 if not ready:
                     self.handle.expect( self.dockerPrompt )
                 time.sleep( 1 )
-            #main.log.debug( "%s: It took %s tries for onos log folder to %sbe created" %
-            #                    ( self.name, retries, "" if ready else "NOT " ) )
 
             cmdList = []
             cmdList.append( "apt-get update" )
diff --git a/TestON/drivers/common/cli/onosclusterdriver.py b/TestON/drivers/common/cli/onosclusterdriver.py
index 520250b..6ca91b7 100755
--- a/TestON/drivers/common/cli/onosclusterdriver.py
+++ b/TestON/drivers/common/cli/onosclusterdriver.py
@@ -96,11 +96,6 @@
         self.nodes = []
         super( OnosClusterDriver, 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 "bench".
@@ -126,10 +121,16 @@
                     self.useDocker = "True" == self.options[ key ]
                 elif key == "docker_prompt":
                     self.dockerPrompt = self.options[ key ]
+                elif key == "web_user":
+                    self.webUser = self.options[ key ]
+                elif key == "web_pass":
+                    self.webPass = 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 )
+            self.webUser = self.checkOptions( self.webUser, "onos" )
+            self.webPass = self.checkOptions( self.webPass, "rocks" )
             prefix = self.checkOptions( prefix, "ONOS" )
             self.useDocker = self.checkOptions( self.useDocker, False )
             self.dockerPrompt = self.checkOptions( self.dockerPrompt, "~/onos#" )
@@ -250,7 +251,6 @@
             main.componentDictionary[ name ][ 'host' ] = host
         main.componentDictionary[name]['type'] = "OnosCliDriver"
         main.componentDictionary[name]['connect_order'] = str( int( main.componentDictionary[name]['connect_order'] ) + 1 )
-        main.log.debug( main.componentDictionary[name] )
 
     def createCliComponent( self, name, host ):
         """
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 6b13e3a..18540f0 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -39,6 +39,11 @@
         """
         self.name = None
         self.home = None
+        self.maxNodes = None
+        self.karafUser = None
+        self.karafPass = None
+        self.webUser = None
+        self.webPass = None
         self.handle = None
         self.nicAddr = None
         super( OnosDriver, self ).__init__()
@@ -55,26 +60,26 @@
 
             for key in connectargs:
                 vars( self )[ key ] = connectargs[ key ]
-            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.name = self.options[ 'name' ]
 
             # The 'nodes' tag is optional and it is not required in .topo file
             for key in self.options:
-                if key == "nodes":
+                if key == "home":
+                    self.home = self.options[ 'home' ]
+                elif key == "nodes":
                     # Maximum number of ONOS nodes to run, if there is any
                     self.maxNodes = int( self.options[ 'nodes' ] )
-                    break
-                self.maxNodes = None
+                elif key == "web_user":
+                    self.webUser = self.options[ key ]
+                elif key == "web_pass":
+                    self.webPass = self.options[ key ]
 
-            if self.maxNodes is None or self.maxNodes == "":
-                self.maxNodes = 100
+            self.home = self.checkOptions( self.home, "~/onos" )
+            self.maxNodes = self.checkOptions( self.maxNodes, 100 )
+            self.karafUser = self.checkOptions( self.karafUser, self.user_name )
+            self.karafPass = self.checkOptions( self.karafPass, self.pwd )
+            self.webUser = self.checkOptions( self.webUser, "onos" )
+            self.webPass = self.checkOptions( self.webPass, "rocks" )
 
             # Grabs all OC environment variables based on max number of nodes
             self.onosIps = {}  # Dictionary of all possible ONOS ip
@@ -826,6 +831,8 @@
             # on here.
             appString = "export ONOS_APPS=" + appString
             onosGroup = "export ONOS_GROUP=" + onosUser
+            onosWebUser = "export ONOS_WEB_USER=" + self.webUser
+            onosWebPass = "export ONOS_WEB_PASS=" + self.webPass
             onosUser = "export ONOS_USER=" + onosUser
             if useSSH:
                 onosUseSSH = "export ONOS_USE_SSH=true"
@@ -871,6 +878,8 @@
             cellFile.write( appString + "\n" )
             cellFile.write( onosGroup + "\n" )
             cellFile.write( onosUser + "\n" )
+            cellFile.write( onosWebUser + "\n" )
+            cellFile.write( onosWebPass + "\n" )
             if useSSH:
                 cellFile.write( onosUseSSH + "\n" )
             cellFile.close()
@@ -2718,10 +2727,15 @@
             for ip in onosIPs:
                 cmd += " " + str( ip )
             self.handle.sendline( cmd )
-            self.handle.expect( self.prompt, timeout=timeout )
-            handle = self.handle.before
-            main.log.debug( handle )
+            i = 0
+            while i == 0:
+                i = self.handle.expect( [ "Password", self.prompt ], timeout=timeout )
+                handle = self.handle.before
+                main.log.debug( "%s: %s" % ( self.name, handle ) )
+                if i == 0:
+                    self.handle.sendline( self.pwd )
             assert handle is not None, "Error in sendline"
+            assert "The requested URL returned error" not in handle, handle
             assert "Command not found:" not in handle, handle
             assert "Exception:" not in handle, handle
             # Rename and move diags file to dstDir from /tmp
@@ -2730,7 +2744,7 @@
             self.handle.sendline( "mv /tmp/onos-diags.tar.gz " + str( dstDir ) + "onos-diags" + str( suffix ) + ".tar.gz" )
             self.handle.expect( self.prompt )
             handle = self.handle.before
-            main.log.debug( handle )
+            main.log.debug( "%s: %s" % ( self.name, handle ) )
             assert handle is not None, "Error in sendline"
             assert "No such file or directory" not in handle, handle
             return main.TRUE
