             
             self.addObserver(self, forKeyPath: propertyName, options: .New, context: &observerContext)
         }
+    }
+    
+    public override var description:String {
+        var className = NSStringFromClass(self.dynamicType)
+        if className.hasPrefix("NSKVONotifying_") {
+            className = NSStringFromClass(class_getSuperclass(self.dynamicType))
+        }
+        
+        var s = className + " {"
+        for (propertyName, defined) in properties {
+            s += "\n    " + propertyName + ": "
+            if defined {
+                var value:AnyObject? = valueForKey(propertyName)
+                if value != nil {
+                    s += "\(value!)"
+                }
+                else {
+                    s += "nil"
+                }
+            }
+            else {
+                s += "(undefined)"
+            }
+        }
+        s += "\n}"
+        return s
     }
     
     public func _$isDefined(name:String) -> Bool {

    var  _$definedPropertyNames:[String] { get }
}

@objc(SpearalAutoPartialable)
public class SpearalAutoPartialable: NSObject, SpearalPartialable {
    

        
        super.init()
        
        let propertyNames = getPropertyNames(self.dynamicType, stopClass: SpearalAutoPartialable.self)
        for propertyName in propertyNames {
            if propertyName.isEmpty || properties[propertyName] != nil {
                continue
