diff --git a/pykat/exceptions.py b/pykat/exceptions.py
index 972496951eafdf4c5c0176aaee17dad951980168..0c748d6447338301d35a26238013a777007c7f0c 100644
--- a/pykat/exceptions.py
+++ b/pykat/exceptions.py
@@ -50,6 +50,6 @@ class FinesseRunError(BasePyKatException) :
         self.__err = err
         self.__kat = kat
         
-        BasePyKatException.__init__(self, "Finesse error (file {1}):\n{0}".format(self.__err, self.__kat))
+        BasePyKatException.__init__(self, self.__err)
         #BasePyKatException.__init__(self, "{0}".format(self.__err))
         
diff --git a/pykat/finesse.py b/pykat/finesse.py
index dc406cdbd4ff6a123caa76abe5273feb9033db67..1c43a9dec7cbe3cf53ec02737cf7b624980d0de0 100644
--- a/pykat/finesse.py
+++ b/pykat/finesse.py
@@ -554,53 +554,59 @@ class kat(object):
         Before fully parsing a bunch of commands firstly any constants or variables
         to be recorded and replaced.
         """
-        constants = self.constants
         
-        for line in commands:
-            values = line.split()
+        try:
+            constants = self.constants
+        
+            for line in commands:
+                values = line.split()
             
-            if len(values)>0 and values[0] == 'const':
+                if len(values)>0 and values[0] == 'const':
                 
-                if len(values) >= 3:
-                    if values[1] in constants:
-                        raise pkex.BasePyKatException('const command with the name "{0}" already used'.format(values[1]))
+                    if len(values) >= 3:
+                        if values[1] in constants:
+                            raise pkex.BasePyKatException('const command with the name "{0}" already used'.format(values[1]))
+                        else:
+                            constants[str(values[1])] = Constant(values[1], values[2], [])
                     else:
-                        constants[str(values[1])] = Constant(values[1], values[2], [])
-                else:
-                    raise pkex.BasePyKatException('const command "{0}" was not the correct format'.format(line))
+                        raise pkex.BasePyKatException('const command "{0}" was not the correct format'.format(line))
         
-        commands_new = []
+            commands_new = []
         
-        for line in commands:
-            values = line.split()
+            for line in commands:
+                values = line.split()
             
-            if len(values) > 0 and values[0] != 'const':
-                # check if we have a var/constant in this line
-                if line.find('$') >= 0:
-                    for key in constants.keys():
-                        # TODO: need to fix this for checking mulitple instances of const in a single line
+                if len(values) > 0 and values[0] != 'const':
+                    # check if we have a var/constant in this line
+                    if line.find('$') >= 0:
+                        for key in constants.keys():
+                            # TODO: need to fix this for checking mulitple instances of const in a single line
                         
-                        chars = [' ', '+', '-', '*', '/', ')']
+                            chars = [' ', '+', '-', '*', '/', ')']
 
-                        for c in chars:
-                            none_found = False
+                            for c in chars:
+                                none_found = False
                             
-                            while not none_found:
-                                if line.find('$'+key+c) > -1:
-                                    constants[key].usedBy.append(line)
-                                    line = line.replace('$'+key+c, str(constants[key].value)+ c)
-                                else:
-                                    none_found = True
+                                while not none_found:
+                                    if line.find('$'+key+c) > -1:
+                                        constants[key].usedBy.append(line)
+                                        line = line.replace('$'+key+c, str(constants[key].value)+ c)
+                                    else:
+                                        none_found = True
                         
-                        if line.endswith('$'+key):
-                            constants[key].usedBy.append(line)
-                            line = line.replace('$'+key, str(constants[key].value))
+                            if line.endswith('$'+key):
+                                constants[key].usedBy.append(line)
+                                line = line.replace('$'+key, str(constants[key].value))
                         
-                commands_new.append(line)
+                    commands_new.append(line)
     
-        self.constants = constants
+            self.constants = constants
         
-        return commands_new
+            return commands_new
+            
+        except pkex.BasePyKatException as ex:
+            pkex.PrintError("Error processing constants:", ex)
+            sys.exit(1)
         
     def parseCommands(self, commands, blocks=None):
         try:
@@ -1007,6 +1013,7 @@ class kat(object):
                     line = unicode(aline, "utf-8")
                 else:
                     line = aline
+                    
                 if len(line) > 0:
                     # remove any ANSI commands
                     #ansi = re.compile(r'\x1b[^m]*m')
@@ -1026,12 +1033,14 @@ class kat(object):
                                 sys.stdout.write("\r{0} {1}".format(action, prc))
                             else:
                                 sys.stdout.write("\r{0} {1}".format(str(action, 'utf-8'), str(prc, 'utf-8')))
+                                
                     elif line.lstrip().startswith(b'*'):
                         if self.verbose:
                             if six.PY2:
                                 sys.stdout.write(line)        
                             else:
                                 sys.stdout.write(str(line,'utf-8')) 
+                                
                     elif line.rstrip().endswith(b'%'):
                         vals = line.split("-")
                         action = vals[0].strip()
@@ -1066,8 +1075,7 @@ class kat(object):
 
             # If Finesse returned an error, just print that and exit!
             if p.returncode != 0:
-                print (err)
-                sys.exit(1) 
+                raise pkex.FinesseRunError(err, katfile.name)
             
             self.__prevrunfilename = katfile.name
             
@@ -1139,9 +1147,11 @@ class kat(object):
                 return [r, perfData]
             else:
                 return r
-            
-        except pkex.FinesseRunError as fe:
-            print (fe)
+
+        except pkex.FinesseRunError as ex:
+            pkex.PrintError("Error from Finesse:", ex)
+        except pkex.BasePyKatException as ex:
+            pkex.PrintError("Error from pykat:", ex)
         finally:
             if self.verbose: print ("")
             if self.verbose: print ("Finished in " + str(datetime.datetime.now()-start))