 /// Observes a managed object and updates a ```CoreDataDecodable```.
 public final class ManagedObjectObserver<Decodable: CoreDataDecodable> {
     
-    public var decodable: Decodable?
+    // MARK: - Properties
+    
+    public private(set) var decodable: Decodable?
     
     public let managedObject: NSManagedObject
     
     public let context: NSManagedObjectContext
     
+    public var event = ManagedObjectObserverEvent<Decodable>()
+    
+    // MARK: - Private Properties
+    
     private let privateObserver: PrivateManagedObjectObserver
+    
+    // MARK: - Initialization
     
     public init(managedObject: NSManagedObject, context: NSManagedObjectContext) {
         
         self.managedObject = managedObject
         self.context = context
         
+        self.decodable = Decodable.init(managedObject: managedObject)
+        
         self.privateObserver = PrivateManagedObjectObserver(managedObject: managedObject, context: context)
     }
+}
+
+// MARK: - Supporting Types
+
+public struct ManagedObjectObserverEvent<Decodable: CoreDataDecodable> {
+    
+    public var updated: Decodable -> () = { _ in }
+    
+    public var deleted: () -> () = { _ in }
 }
 
 // MARK: - Private

                }
            }
        }
        
        if let insertedObjects = notification.userInfo?[NSInsertedObjectsKey] as! [NSManagedObject]? {
            
            for managedObject in insertedObjects {
                
                if managedObject === self.managedObject {
                    
                    self.delegate?.observer(self, managedObjectInserted: managedObject)
                    
                    return
                }
            }
        }
    }
}


        
        self.managedObject = managedObject
        self.context = context
        
        super.init()
        
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "managedObjectContextObjectsDidChange:", name: NSManagedObjectContextObjectsDidChangeNotification, object: context)
    }
