diff --git a/lib/id.js b/lib/id.js
index <HASH>..<HASH> 100644
--- a/lib/id.js
+++ b/lib/id.js
@@ -12,7 +12,15 @@ module.exports = (function() {
    * objects that get passed around JS-land.
    */
   function ID(pointer, classPointer) {
-    if(!classPointer) Class.call(this, core.object_getClass(pointer));
+    var objClass = core.object_getClass(pointer);
+
+    // This is absolutely necessary, otherwise we'll seg fault if a user passes in a simple type or specifies
+    // an object on a class that takes a simple type.
+    if(objClass.isNull() || !objClass) 
+      throw new TypeError('An abstract class or delegate implemented a method that takes an ID (object),\n'+
+                          'but a simple type or structure (such as NSRect) was passed in, check the types used.\n\n');
+    
+    if(!classPointer) Class.call(this, objClass);
     else Class.call(this, classPointer);
     this.pointer = pointer;
     this.isClass = false;
Added type checking for issue <I>, added unit test for it