 }
 
 // Gets all newly mapped data and returns it in an array, caller can decide to append and what-not.
-private func mapFromJsonToSequence<T, U: Mapping, C: MappingContext>(
-    map:(key: Binding<U>, context: C),
+private func mapFromJsonToSequence<T, M: Mapping, MC: MappingContext>(
+    map:(key: Binding<M>, context: MC),
     fieldContains: (T) -> Bool)
-    throws -> (newObjects: [T], context: C)
-    where U.MappedObject == T, T: Equatable {
+    throws -> (newObjects: [T], context: MC)
+    where M.MappedObject == T, T: Equatable {
     
         guard map.context.error == nil else {
             throw map.context.error!

                    
                    // Unfortunately `AnyCollection<U.MappedObject>(orphans)` gives us "type is ambiguous without more context".
                    let arrayOrphans = Array(orphans)
                    let shouldDelete = AnyCollection<U.MappedObject>(arrayOrphans)
                    try deletion(shouldDelete).forEach {
                        try binding.key.mapping.delete(obj: $0)
                    }

}

// Arbitrary Optional.
public func map<T: JSONable, MC: MappingContext>(to field: inout T?, via keyPath:(key: JSONKeypath, context: MC)) -> MC where T == T.ConversionType {
    
    guard keyPath.context.error == nil else {
        return keyPath.context
