diff --git a/pykat/testing/web/web_interface.py b/pykat/testing/web/web_interface.py
index 20a9052de017d2b6610561e83f9245c762f862d9..fd0f9cee632e16853172703e3abaafb247005ac6 100644
--- a/pykat/testing/web/web_interface.py
+++ b/pykat/testing/web/web_interface.py
@@ -39,35 +39,37 @@ class FinesseProcessWatcher(Thread):
         self.process_to_watch = process
         
     def run(self):
-        global schedule_lock,current_test,scheduled_tests, watcher
-        
-        if self.process_to_watch is None:
-            return
-        
-        #if type(self.process_to_watch) is not finesse_test.FinesseTestProcess:
-        #    raise Exception("Tried to watch something which wasn't a FinesseTestProcess")
-    
-        print "Watcher is watching", self.process_to_watch
-    
-        self.process_to_watch.join()
-        
-        print "Watcher is continuing"
-        
-        # once done check if any other tests need to be ran
-        schedule_lock.acquire()
+        try:
+            global schedule_lock,current_test,scheduled_tests, watcher
+            
+            if self.process_to_watch is None:
+                return
+            
+            #if type(self.process_to_watch) is not finesse_test.FinesseTestProcess:
+            #    raise Exception("Tried to watch something which wasn't a FinesseTestProcess")
         
-        if len(scheduled_tests) > 0:
-            print "Watcher starting next test"
-            current_test = scheduled_tests.pop(0)
-            watcher = FinesseProcessWatcher()
-            watcher.setProcessToWatch(current_test)
-            watcher.start()
-            current_test.start()
-        else:
-            print "Watcher found no more tests to run"
-            current_test = None
+            print "Watcher is watching", self.process_to_watch
+            self.process_to_watch.start()
+            self.process_to_watch.join()
+            print "Watcher is continuing"
+            
+        try:
+            # once done check if any other tests need to be ran
+            schedule_lock.acquire()
         
-        schedule_lock.release()
+            if len(scheduled_tests) > 0:
+                print "Watcher starting next test"
+                current_test = scheduled_tests.pop(0)
+                watcher = FinesseProcessWatcher()
+                watcher.setProcessToWatch(current_test)
+                watcher.start()
+            else:
+                print "Watcher found no more tests to run"
+                current_test = None
+                watcher = None
+        finally:
+            schedule_lock.release()
+                
 
 @app.route('/finesse/cancel_test_<id>', methods=["POST"])
 def finesse_cancel_test(id):
@@ -150,12 +152,11 @@ def finesse_start_test():
         if current_test is None:
             print "running test"
             current_test = test
+            # create watcher thread which will start the test
+            # when ready
             watcher = FinesseProcessWatcher()
             watcher.setProcessToWatch(test)
             watcher.start()
-            
-            test.start()
-            
         else:
             print "queuing test"
             scheduled_tests.append(test)
diff --git a/setup.py b/setup.py
index 3e27ce123771b46eb6e0e986484a3b1ba049cbfb..f16d43750fbc563e5230425c01f5f046e75812c5 100644
--- a/setup.py
+++ b/setup.py
@@ -11,7 +11,7 @@ REQUIREMENTS = [i.strip() for i in open("requirements.txt").readlines()]
 
 setup(
     name='PyKat',
-    version='0.0.2',
+    version='0.0.3',
     author='Daniel Brown',
     author_email='ddb@star.sr.bham.ac.uk',
     packages=['pykat','pykat.gui','pykat.gui.resources'],