diff --git a/reclass/errors.py b/reclass/errors.py
index dfb07b3..959f466 100644
--- a/reclass/errors.py
+++ b/reclass/errors.py
@@ -11,43 +11,41 @@
 
 class ReclassException(Exception):
 
-    def __init__(self, rc=posix.EX_SOFTWARE, *args):
-        super(ReclassException, self).__init__(*args)
+    def __init__(self, msg, rc=posix.EX_SOFTWARE, *args):
+        super(ReclassException, self).__init__(msg, *args)
         self._rc = rc
 
     def __str__(self):
-        return "reclass encountered an exception, sorry!"
+        return self.message
 
-    message = property(lambda self: self.__str__())
     rc = property(lambda self: self._rc)
 
 
 class NotFoundError(ReclassException):
 
-    def __init__(self, rc=posix.EX_IOERR):
-        super(NotFoundError, self).__init__(rc)
+    def __init__(self, msg, rc=posix.EX_IOERR):
+        super(NotFoundError, self).__init__(msg, rc)
 
 
 class NodeNotFound(NotFoundError):
 
     def __init__(self, storage, classname, uri):
-        super(NodeNotFound, self).__init__()
         self._storage = storage
         self._name = classname
         self._uri = uri
-
-    def __str__(self):
-        return "Node '{0}' not found under {1}://{2}".format(self._name,
-                                                             self._storage,
-                                                             self._uri)
+        msg = "Node '{0}' not found under {1}://{2}".format(self._name,
+                                                            self._storage,
+                                                            self._uri)
+        super(NodeNotFound, self).__init__(msg)
 
 
-class ClassNotFound(NodeNotFound):
+class ClassNotFound(NotFoundError):
 
     def __init__(self, storage, classname, uri, nodename):
-        super(ClassNotFound, self).__init__(storage, classname, uri)
+        self._storage = storage
+        self._name = classname
+        self._uri = uri
         self._nodename = nodename
-
-    def __str__(self):
-        return "Class '{0}' (in ancestry of node {1}) not found under {2}://{3}" \
+        msg = "Class '{0}' (in ancestry of node {1}) not found under {2}://{3}" \
                 .format(self._name, self._nodename, self._storage, self._uri)
+        super(ClassNotFound, self).__init__(msg)
