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" )
