         }
     }
     
-    public func valueForKey<A: UnmarshalingWithContext>(key: KeyType, context:A.ContextType) throws -> [A] {
+    public func valueForKey<A: UnmarshalingWithContext>(key: KeyType, context: A.ContextType) throws -> [A] {
         let any = try self.anyForKey(key)
         guard let objectArray = any as? [AnyObject] else {
             throw Error.TypeMismatch(expected: Array<MarshaledObject>.self, actual: any.dynamicType)

    associatedtype ContextType
    associatedtype ConvertibleType = Self
    
    static func valueFromObject(object: MarshaledObject, context:ContextType) throws -> ConvertibleType
}

public protocol UnmarshalUpdatingWithContext {
    associatedtype ContextType
    
    mutating func update(object object: MarshaledObject, context:ContextType) throws
}

extension MarshaledObject {
    public func valueForKey<A: UnmarshalingWithContext>(key: KeyType, context:A.ContextType) throws -> A {
        let any = try self.anyForKey(key)
        guard let object = any as? MarshaledObject else {
            throw Error.TypeMismatch(expected: MarshaledObject.self, actual: any.dynamicType)

        }
    }
    
    public func valueForKey<A: UnmarshalingWithContext>(key: KeyType, context: A.ContextType) throws -> [A]? {
        do {
            return try self.valueForKey(key, context: context) as [A]
        }
        catch Error.KeyNotFound {
            return nil
