diff --git a/include/class.error.php b/include/class.error.php
new file mode 100644
index 0000000000000000000000000000000000000000..bdc4d7a575e05cd61770ef388b13afe37c0c5da3
--- /dev/null
+++ b/include/class.error.php
@@ -0,0 +1,51 @@
+<?php
+/*********************************************************************
+    class.error.php
+
+    Error handling for PHP < 5.0. Allows for returning a formal error from a
+    function since throwing it isn't available. Also allows for consistent
+    logging and debugging of errors in the osTicket system log.
+
+    Peter Rotich <peter@osticket.com>
+    Jared Hancock <jared@osticket.com>
+    Copyright (c)  2006-2013 osTicket
+    http://www.osticket.com
+
+    Released under the GNU General Public License WITHOUT ANY WARRANTY.
+    See LICENSE.TXT for details.
+
+    vim: expandtab sw=4 ts=4 sts=4:
+**********************************************************************/
+
+class Error /* extends Exception */ {
+    var $title = '';
+
+    function Error($message) {
+        call_user_func_array(array($this,'__construct'), func_get_args());
+    }
+    function __construct($message) {
+        global $ost;
+
+        $message = str_replace(ROOT_DIR, '(root)/', $message);
+
+        if ($ost->getConfig()->getLogLevel() == 3)
+            $message .= "\n\n" . $this->formatBacktrace(debug_backtrace());
+
+        $ost->logError($this->getTitle(), $message);
+    }
+
+    function getTitle() {
+        return get_class($this) . ": {$this->title}";
+    }
+
+    function formatBacktrace($bt) {
+        $buffer = array();
+        foreach ($bt as $i=>$frame)
+            $buffer[] = sprintf("#%d %s%s%s at [%s:%d]", $i,
+                $frame['class'], $frame['type'], $frame['function'],
+                str_replace(ROOT_DIR, '', $frame['file']), $frame['line']);
+        return implode("\n", $buffer);
+    }
+}
+
+?>