diff --git a/client/bin/job.py b/client/bin/job.py
index fbd5fdd..07c739f 100755
--- a/client/bin/job.py
+++ b/client/bin/job.py
@@ -252,7 +252,7 @@
                 os.chdir(os.path.join(self.autodir, 'deps', dep))
                 utils.system('./' + dep + '.py')
             except Exception, e:
-                raise error.UnhandledError(e)
+                raise error.UnhandledTestError(e)
 
 
     def _runtest(self, url, tag, args, dargs):
@@ -260,10 +260,10 @@
             l = lambda : test.runtest(self, url, tag, args, dargs)
             pid = parallel.fork_start(self.resultdir, l)
             parallel.fork_waitfor(self.resultdir, pid)
-        except error.AutotestError:
+        except error.TestBaseException:
             raise
         except Exception, e:
-            raise error.UnhandledError(e)
+            raise error.UnhandledTestError(e)
 
 
     def run_test(self, url, *args, **dargs):
@@ -322,8 +322,7 @@
         def group_func():
             try:
                 self._runtest(url, tag, args, dargs)
-            except (error.TestNAError, error.TestUnknownError, error.TestError,
-                    error.TestFail), detail:
+            except error.TestBaseException, detail:
                 self.record(detail.exit_status, subdir, testname,
                             str(detail))
                 raise
@@ -338,7 +337,7 @@
         result, exc_info = self._rungroup(subdir, testname, group_func)
         if container:
             self.release_container()
-        if exc_info and isinstance(exc_info[1], error.TestError):
+        if exc_info and isinstance(exc_info[1], error.TestBaseException):
             return False
         elif exc_info:
             raise exc_info[0], exc_info[1], exc_info[2]
@@ -370,8 +369,7 @@
             result = function(*args, **dargs)
             self._decrement_group_level()
             self.record('END GOOD', subdir, testname)
-        except (error.TestNAError, error.TestError, error.TestFail,
-                error.TestUnknownError), e:
+        except error.TestBaseException, e:
             self._decrement_group_level()
             self.record('END %s' % e.exit_status, subdir, testname, str(e))
         except Exception, e:
diff --git a/client/bin/job_unittest.py b/client/bin/job_unittest.py
index fa23cb7..3d8abb7 100644
--- a/client/bin/job_unittest.py
+++ b/client/bin/job_unittest.py
@@ -312,7 +312,7 @@
         class MyError(error.TestError):
             pass
         real_error = MyError("this is the real error message")
-        unhandled_error = error.UnhandledError(real_error)
+        unhandled_error = error.UnhandledTestError(real_error)
 
         # set up the recording
         testname = "error_test"
@@ -346,7 +346,7 @@
         class MyError(Exception):
             pass
         real_error = MyError("this is the real error message")
-        unhandled_error = error.UnhandledError(real_error)
+        unhandled_error = error.UnhandledTestError(real_error)
         reason = first_line_comparator("Unhandled MyError: %s" % real_error)
 
         # set up the recording
diff --git a/client/bin/parallel.py b/client/bin/parallel.py
index af890a5..e8749db 100644
--- a/client/bin/parallel.py
+++ b/client/bin/parallel.py
@@ -21,7 +21,7 @@
             raise
 
         except Exception, e:
-            raise error.UnhandledError(e)
+            raise error.UnhandledTestError(e)
 
     except Exception, detail:
         ename = tmp + "/debug/error-%d" % (os.getpid())
diff --git a/client/common_lib/error.py b/client/common_lib/error.py
index 582810d..642860b 100644
--- a/client/common_lib/error.py
+++ b/client/common_lib/error.py
@@ -34,38 +34,62 @@
     pass
 
 
-class TestError(AutotestError):
+class TestBaseException(AutotestError):
+    """The parent of all test exceptions."""
+
+
+class TestError(TestBaseException):
     """Indicates that something went wrong with the test harness itself."""
     exit_status="ERROR"
     pass
 
 
-class TestUnknownError(AutotestError):
-    """Indicates an error which terminates and fails the test."""
-    exit_status="FAIL"
-    pass
-
-
-class TestNAError(AutotestError):
+class TestNAError(TestBaseException):
     """Indictates that the test is Not Applicable.  Should be thrown
     when various conditions are such that the test is inappropriate."""
     exit_status="TEST_NA"
     pass
 
 
-class TestFail(AutotestError):
+class TestFail(TestBaseException):
     """Indicates that the test failed, but the job will not continue."""
     exit_status="FAIL"
     pass
 
 
-class TestWarn(AutotestError):
+class TestWarn(TestBaseException):
     """Indicates that bad things (may) have happened, but not an explicit
     failure."""
     exit_status="WARN"
     pass
 
 
+class UnhandledTestError(TestError):
+    """Indicates an unhandled error in a test."""
+    def __init__(self, unhandled_exception):
+        if isinstance(unhandled_exception, TestError):
+            TestError.__init__(self, *unhandled_exception.args)
+        else:
+            msg = "Unhandled %s: %s"
+            msg %= (unhandled_exception.__class__.__name__,
+                    unhandled_exception)
+            msg += "\n" + traceback.format_exc()
+            TestError.__init__(self, msg)
+
+
+class UnhandledTestFail(TestFail):
+    """Indicates an unhandled fail in a test."""
+    def __init__(self, unhandled_exception):
+        if isinstance(unhandled_exception, TestFail):
+            TestFail.__init__(self, *unhandled_exception.args)
+        else:
+            msg = "Unhandled %s: %s"
+            msg %= (unhandled_exception.__class__.__name__,
+                    unhandled_exception)
+            msg += "\n" + traceback.format_exc()
+            TestFail.__init__(self, msg)
+
+
 class CmdError(TestError):
     """\
     Indicates that a command failed, is fatal to the test unless caught.
@@ -95,19 +119,6 @@
     pass
 
 
-class UnhandledError(TestUnknownError):
-    """Indicates an unhandled exception in a test."""
-    def __init__(self, unhandled_exception):
-        if isinstance(unhandled_exception, AutotestError):
-            TestUnknownError.__init__(self, *unhandled_exception.args)
-        else:
-            msg = "Unhandled %s: %s"
-            msg %= (unhandled_exception.__class__.__name__,
-                    unhandled_exception)
-            msg += "\n" + traceback.format_exc()
-            TestUnknownError.__init__(self, msg)
-
-
 class InstallError(JobError):
     """Indicates an installation error which Terminates and fails the job."""
     pass
diff --git a/client/common_lib/test.py b/client/common_lib/test.py
index 9735eab..c590d59 100644
--- a/client/common_lib/test.py
+++ b/client/common_lib/test.py
@@ -162,7 +162,12 @@
                 else:
                     p_args, p_dargs = _cherry_pick_args(self.execute,
                                                         args, dargs)
-                self.execute(*p_args, **p_dargs)
+                try:
+                    self.execute(*p_args, **p_dargs)
+                except error.AutotestError:
+                    raise
+                except Exception, e:
+                    raise error.UnhandledTestFail(e)
 
             finally:
                 self.cleanup()
@@ -171,7 +176,7 @@
         except error.AutotestError:
             raise
         except Exception, e:
-            raise error.UnhandledError(e)
+            raise error.UnhandledTestError(e)
 
 
 def _cherry_pick_args(func, args, dargs):
