diff --git a/testrunner/adb_interface.py b/testrunner/adb_interface.py
index fb304df..ad1b2c9 100755
--- a/testrunner/adb_interface.py
+++ b/testrunner/adb_interface.py
@@ -297,8 +297,7 @@
       WaitForResponseTimedOutError if wait_time elapses and pm still does not
       respond.
     """
-    logger.Log("Waiting for device package manager for %s seconds..."
-               % wait_time)
+    logger.Log("Waiting for device package manager...")
     self.SendCommand("wait-for-device")
     # Now the device is there, but may not be running.
     # Query the package manager with a basic command
@@ -315,7 +314,8 @@
         time.sleep(wait_period)
         attempts += 1
     if not pm_found:
-      raise errors.WaitForResponseTimedOutError
+      raise errors.WaitForResponseTimedOutError(
+          "Package manager did not respond after %s seconds" % wait_time)
     
   def Sync(self, retry_count=3):
     """Perform a adb sync.
@@ -331,13 +331,12 @@
     output = self.SendCommand("sync", retry_count=retry_count)
     if "Read-only file system" in output:
       logger.SilentLog(output) 
-      logger.Log("adb sync failed due to read only fs, retrying")
+      logger.Log("Remounting read-only filesystem")
       self.SendCommand("remount")
       output = self.SendCommand("sync", retry_count=retry_count)
     if "No space left on device" in output:
       logger.SilentLog(output) 
-      logger.Log("adb sync failed due to no space on device, trying shell" + 
-                 " start/stop")
+      logger.Log("Restarting device runtime")
       self.SendShellCommand("stop", retry_count=retry_count)
       output = self.SendCommand("sync", retry_count=retry_count)
       self.SendShellCommand("start", retry_count=retry_count)
@@ -345,3 +344,15 @@
     logger.SilentLog(output)
     self.WaitForDevicePm()
     return output
+  
+  def IsDevicePresent(self):
+    """Check if targeted device is present.
+
+    Returns:
+      True if device is present, False otherwise.
+    """
+    output = self.SendShellCommand("ls", retry_count=0)
+    if output.startswith("error:"):
+      return False
+    else:
+      return True
diff --git a/testrunner/coverage.py b/testrunner/coverage.py
index 507c5c7..39a2ceb 100755
--- a/testrunner/coverage.py
+++ b/testrunner/coverage.py
@@ -70,6 +70,27 @@
   def EnableCoverageBuild(self):
     """Enable building an Android target with code coverage instrumentation."""
     os.environ[self._EMMA_BUILD_FLAG] = "true"
+    #TODO: can emma.jar automagically be added to bootclasspath here?
+
+  def TestDeviceCoverageSupport(self):
+    """Check if device has support for generating code coverage metrics.
+
+    Currently this will check if the emma.jar file is on the device's boot
+    classpath.
+
+    Returns:
+      True if device can support code coverage. False otherwise.
+    """
+    output = self._adb.SendShellCommand("cat init.rc | grep BOOTCLASSPATH | "
+                                        "grep emma.jar")
+    if len(output) > 0:
+      return True
+    else:
+      logger.Log("Error: Targeted device does not have emma.jar on its "
+                 "BOOTCLASSPATH.")
+      logger.Log("Modify the BOOTCLASSPATH entry in system/core/rootdir/init.rc"
+                 " to add emma.jar")
+      return False
 
   def ExtractReport(self, test_suite,
                     device_coverage_path=_DEVICE_COVERAGE_PATH,
diff --git a/testrunner/logger.py b/testrunner/logger.py
index 762c893..61463a1 100755
--- a/testrunner/logger.py
+++ b/testrunner/logger.py
@@ -25,6 +25,7 @@
 
 _LOG_FILE = None
 _verbose = False
+_log_time = True
 
 def Init(log_file_path):
   """Set the path to the log file"""
@@ -57,8 +58,13 @@
 
 def _PrependTimeStamp(log_string):
   """Returns the log_string prepended with current timestamp """
-  return "# %s: %s" % (datetime.datetime.now().strftime("%m/%d/%y %H:%M:%S"),
-      log_string)
+  global _log_time
+  if _log_time:
+    return "# %s: %s" % (datetime.datetime.now().strftime("%m/%d/%y %H:%M:%S"),
+        log_string)
+  else:
+    # timestamp logging disabled
+    return log_string  
 
 def SilentLog(new_str):
   """Silently log new_str. Unless verbose mode is enabled, will log new_str
@@ -77,7 +83,12 @@
   """ Enable or disable verbose logging"""
   global _verbose
   _verbose = new_verbose
-
+  
+def SetTimestampLogging(new_timestamp=True):
+  """ Enable or disable outputting a timestamp with each log entry"""
+  global _log_time
+  _log_time = new_timestamp
+    
 def main():
   pass
 
diff --git a/testrunner/runtest.py b/testrunner/runtest.py
index bf5bb22..a4df950 100755
--- a/testrunner/runtest.py
+++ b/testrunner/runtest.py
@@ -53,6 +53,10 @@
       "The runtest script works in two ways.  You can query it "
       "for a list of tests, or you can launch one or more tests.")
 
+  def __init__(self):
+    # disable logging of timestamp
+    logger.SetTimestampLogging(False)  
+
   def _ProcessOptions(self):
     """Processes command-line options."""
     # TODO error messages on once-only or mutually-exclusive options.
@@ -178,10 +182,14 @@
         self._coverage_gen.EnableCoverageBuild()
         self._AddBuildTarget(self._coverage_gen.GetEmmaBuildPath(), target_set)
       target_build_string = " ".join(list(target_set))
-      logger.Log("Building %s" % target_build_string)
+      logger.Log("mmm %s" % target_build_string)
       cmd = 'ONE_SHOT_MAKEFILE="%s" make -C "%s" files' %  (target_build_string,
                                                             self._root_path)
-      if not self._options.preview:
+      if self._options.preview:
+        # in preview mode, just display to the user what command would have been
+        # run
+        logger.Log("adb sync")
+      else:
         run_command.RunCommand(cmd, return_output=False)
         logger.Log("Syncing to device...")
         self._adb.Sync()
@@ -259,6 +267,10 @@
         self._DumpTests()
         return
 
+      if not self._adb.IsDevicePresent():
+        logger.Log("Error: specified device cannot be found")
+        return
+
       if not self._options.skip_build:
         self._DoBuild()
 
