diff --git a/core/SkError.h b/core/SkError.h
new file mode 100644
index 0000000..ce2994c
--- /dev/null
+++ b/core/SkError.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+ 
+#ifndef SkError_DEFINED
+#define SkError_DEFINED
+
+
+/** \file SkError.h
+*/
+
+enum SkError {
+    /** All is well
+     */
+    kNoError_SkError=0,
+    
+    /** User argument passed to Skia function was invalid: NULL when that’s 
+     *  not allowed, out of numeric range, bad enum, or violating some 
+     *  other general precondition.
+     */
+    kInvalidArgument_SkError,
+    
+    /** User tried to perform some operation in a state when the operation 
+     *  was not legal, or the operands make no sense (e.g., asking for 
+     *  pixels from an SkPictureCanvas).  Other examples might be 
+     *  inset()’ing a rectangle to make it degenerate (negative width/height).
+     */
+    kInvalidOperation_SkError,
+    
+    /** Probably not needed right now, but in the future we could have opaque 
+     *  handles for SkPictures floating around, and it would be a good idea 
+     *  to anticipate this kind of issue.
+     */
+    kInvalidHandle_SkError,
+    
+    /** This is probably not possible because paint surely has defaults for 
+     *  everything, but perhaps a paint can get into a bad state somehow.
+     */
+    kInvalidPaint_SkError,
+    
+    /** Skia was unable to allocate memory to perform some task.
+     */
+    kOutOfMemory_SkError,
+    
+    /** Skia failed while trying to consume some external resource.
+     */
+    kParseError_SkError
+};
+
+/** Return the current per-thread error code.  Error codes are "sticky"; they
+ *  are not not reset by subsequent successful operations.
+ */ 
+SkError SkGetLastError();
+
+/** Clear the current per-thread error code back to kNoError_SkError.
+ */
+void SkClearLastError();
+
+/** Type for callback functions to be invoked whenever an error is registered.
+ *  Callback functions take the error code being set, as well as a context 
+ *  argument that is provided when the callback is registered.
+ */
+typedef void (*SkErrorCallbackFunction)(SkError, void *);
+
+/** Set the current per-thread error callback.
+ *  
+ *  @param cb The callback function to be invoked.  Passing NULL
+ *            for cb will revert to the default error callback which
+ *            does nothing on release builds, but on debug builds will
+ *            print an informative error message to the screen.
+ *  @param context An arbitrary pointer that will be passed to 
+ *                 the provided callback function.
+ */
+void SkSetErrorCallback(SkErrorCallbackFunction cb, void *context);
+
+/** Get a human-readable description of the last (per-thread) error that 
+ *  occurred.  The returned error message will include not only a human 
+ *  readable version of the error code, but also information about the 
+ *  conditions that led to the error itself.
+ */
+const char *SkGetLastErrorString();
+
+#endif /* SkError_DEFINED */
