diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 1e31f31..cc6fa9f 100755
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -435,7 +435,7 @@
 
     def log( self, cmdStr, level="", noExit=False ):
         """
-            log  the commands in the onos CLI.
+            log the commands in the onos CLI.
             returns main.TRUE on success
             returns main.FALSE if Error occurred
             if noExit is True, TestON will not exit, but clean up
@@ -447,24 +447,21 @@
             lvlStr = ""
             if level:
                 lvlStr = "--level=" + level
-
-            self.handle.sendline( "log:log " + lvlStr + " " + cmdStr )
-            self.handle.expect( "log:log" )
-            self.handle.expect( self.karafPrompt )
-
-            response = self.handle.before
-            if re.search( "Error", response ):
-                main.log.debug( response )
+            handle = self.sendline( "log:log " + lvlStr + " " + cmdStr, noExit=noExit )
+            assert handle is not None, "Error in sendline"
+            assert "Command not found:" not in handle, handle
+            if re.search( "Error", handle ):
+                main.log.error( self.name + ": Error in logging message" )
+                main.log.error( handle )
                 return main.FALSE
-            return main.TRUE
-        except pexpect.TIMEOUT:
-            main.log.exception( self.name + ": TIMEOUT exception found" )
-            main.log.error( self.name + ":    " + self.handle.before )
-            if noExit:
-                main.cleanup()
-                return None
             else:
-                main.cleanAndExit()
+                return main.TRUE
+        except AssertionError:
+            main.log.exception( "" )
+            return None
+        except TypeError:
+            main.log.exception( self.name + ": Object not as expected" )
+            return None
         except pexpect.EOF:
             main.log.error( self.name + ": EOF exception found" )
             main.log.error( self.name + ":    " + self.handle.before )
@@ -5330,16 +5327,21 @@
         Level defaults to INFO
         """
         try:
-            self.handle.sendline( "log:set %s %s" % ( level, app ) )
-            self.handle.expect( self.karafPrompt )
-
-            response = self.handle.before
-            if re.search( "Error", response ):
+            handle = self.sendline( "log:set %s %s" % ( level, app ) )
+            assert handle is not None, "Error in sendline"
+            assert "Command not found:" not in handle, handle
+            if re.search( "Error", handle ):
+                main.log.error( self.name + ": Error in setting log level" )
+                main.log.error( handle )
                 return main.FALSE
-            return main.TRUE
-        except pexpect.TIMEOUT:
-            main.log.exception( self.name + ": TIMEOUT exception found" )
-            main.cleanAndExit()
+            else:
+                return main.TRUE
+        except AssertionError:
+            main.log.exception( "" )
+            return None
+        except TypeError:
+            main.log.exception( self.name + ": Object not as expected" )
+            return None
         except pexpect.EOF:
             main.log.error( self.name + ": EOF exception found" )
             main.log.error( self.name + ":    " + self.handle.before )
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 78b8477..06caa7c 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -1149,6 +1149,7 @@
                                       "onos\sstart/running,\sprocess",
                                       "ONOS\sis\salready\sinstalled",
                                       "does not exist",
+                                      "Failed to start",
                                       self.prompt,
                                       pexpect.TIMEOUT ], timeout=180 )
             if i == 0:
@@ -1175,11 +1176,16 @@
                 self.handle.expect( self.prompt )
                 return main.FALSE
             elif i == 4:
+                # Service failed to start
+                main.log.error( "ONOS service failed to start" )
+                self.handle.expect( self.prompt )
+                return main.FALSE
+            elif i == 5:
                 # prompt
                 main.log.info( self.name + ": ONOS was installed on {} {}.".format(  node,
                                "but not started" if 'n' in options else "and started" ) )
                 return main.TRUE
-            elif i == 5:
+            elif i == 6:
                 # timeout
                 main.log.info(
                     "Installation of ONOS on " +
diff --git a/TestON/tests/dependencies/Cluster.py b/TestON/tests/dependencies/Cluster.py
index 2e79481..2e16a45 100644
--- a/TestON/tests/dependencies/Cluster.py
+++ b/TestON/tests/dependencies/Cluster.py
@@ -543,7 +543,7 @@
                 result = result and t.result
         return result
 
-    def installOnos( self, installMax=True, installParallel=True ):
+    def installOnos( self, installMax=True, installParallel=True, retries=5 ):
         """
         Description:
             Installing onos.
@@ -560,16 +560,21 @@
             options = "-f"
             if installMax and i >= self.numCtrls:
                 options = "-nf"
+            args = [ ctrl.Bench.onosInstall, main.FALSE ]
+            kwargs={ "node" : ctrl.ipAddress,
+                     "options" : options }
             if installParallel:
-                t = main.Thread( target=ctrl.Bench.onosInstall,
+                t = main.Thread( target=utilities.retry,
                                  name="onos-install-" + ctrl.name,
-                                 kwargs={ "node" : ctrl.ipAddress,
-                                          "options" : options } )
+                                 args=args,
+                                 kwargs={ 'kwargs': kwargs,
+                                          'attempts': retries } )
+
                 threads.append( t )
                 t.start()
             else:
                 result = result and \
-                            main.ONOSbench.onosInstall( node=ctrl.ipAddress, options=options )
+                            utilities.retry( args=args, kwargs=kwargs, attempts=retries )
             i += 1
         if installParallel:
             for t in threads:
