diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index db01cc2..ce478fb 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -27,6 +27,7 @@
 import traceback
 import urllib2
 from urllib2 import URLError, HTTPError
+
 sys.path.append("../")
 from drivers.common.clidriver import CLI
 
@@ -198,7 +199,7 @@
             main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
             main.cleanup()
             main.exit()
-    
+
     def status(self):
         '''
         Called onos.sh core status and returns TRUE/FALSE accordingly
@@ -286,7 +287,6 @@
             main.exit()
 
 
-        
     def rest_status(self):
         '''
         Checks if the rest server is running.
@@ -674,6 +674,8 @@
             if len(result) != 0:
                 parsed_result = json.loads(result)
                 print(parsed_result)
+                return parsed_result
+            return main.TRUE
         except HTTPError as exc:
             print "ERROR:"
             print "  REST DELETE URL: %s" % url
@@ -688,7 +690,7 @@
             print "ERROR:"
             print "  REST DELETE URL: %s" % url
             print "  URL Error Reason: %s" % exc.reason
-        return result
+        return main.ERROR
 
 #*********************************************************************
 #*********************************************************************
@@ -725,6 +727,8 @@
             response.close()
             if len(result) != 0:
                 parsed_result = json.loads(result)
+                return parsed_result
+            return main.TRUE
         except HTTPError as exc:
             print "ERROR:"
             print "  REST GET URL: %s" % url
@@ -741,9 +745,8 @@
             print "  REST GET URL: %s" % url
             print "  URL Error Reason: %s" % exc.reason
             return "  HTTP Error Reason: %s" % exc.reason
-        return result
+        return main.ERROR
 
-        
 
 
     def add_intents(self):
@@ -1168,7 +1171,59 @@
             main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
             main.cleanup()
             main.exit()
- 
+
+    def detailed_status(self, log_filename):
+        '''
+        Reports RUNNING, STARTING, STOPPED, FROZEN, ERROR (and reason)
+        '''
+        try:
+            process_up = False
+            self.execute(cmd="\n", prompt="\$", timeout=10)
+            self.handle.sendline("cd " + self.home)
+            response = self.execute(cmd="./onos.sh core status ",prompt="\d+\sinstance\sof\sonos\srunning",timeout=10)
+            self.execute(cmd="\n",prompt="\$",timeout=10)
+            if re.search("1\sinstance\sof\sonos\srunning",response):
+                process_up = True
+            elif re.search("0\sinstance\sof\sonos\srunning",response):
+                process_up = False
+                return 'STOPPED'
+            elif re.search("Expected\sPrompt\snot found\s,\sTime Out!!",response):
+                return "ERROR", "Time out on ./onos.sh core status"
+            else :
+                main.log.warn(self.name + " WARNING: status recieved unknown response")
+                main.log.warn(response)
+                return 'Error', "Unknown response: %s" % response
+            '''
+            self.execute(cmd="\n",prompt="\$",timeout=10)
+            tail1 = self.execute(cmd="tail " + self.home + "%s" % log_filename, prompt="\$", timeout=10)
+            time.sleep(10)
+            self.execute(cmd="\n",prompt="\$",timeout=10)
+            tail2 = self.execute(cmd="tail " + self.home + "%s" % log_filename, prompt="\$", timeout=10)
+            '''
+
+            pattern = '(.*)1 instance(.*)'
+            pattern2 = '(.*)Exception: Connection refused(.*)'
+            # if utilities.assert_matches(expect=pattern,actual=response,onpass="ONOS process is running...",onfail="ONOS process not running..."):
+            running = self.execute(cmd="cat " + self.home + " %s | grep 'Sending LLDP out on all ports'" % log_filename,prompt="\$",timeout=10)
+            if re.search(pattern, response):
+                if running == '':
+                  return 'STARTING',
+                else:
+                  return 'RUNNING'
+            else:
+                main.log.error(self.name + ": ONOS process not running...")
+                return 'STOPPED'
+        except pexpect.EOF:
+            main.log.error(self.name + ": EOF exception found")
+            main.log.error(self.name + ":     " + self.handle.before)
+            main.cleanup()
+            main.exit()
+        except:
+            main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.log.error( traceback.print_exc() )
+            main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.cleanup()
+            main.exit()
 
     def git_pull(self, comp1=""):
         '''
