 }
 
 @discardableResult
-public func <- <T: RLMObject, U: RealmMapping, C: MappingContext>(field: RLMArray<T>, binding:(key: Binding<U>, context: C)) -> C where U.MappedObject == T, T: Equatable {
+public func <- <U: RealmMapping, C: MappingContext>(field: RLMArray<U.MappedObject>, binding:(key: Binding<U>, context: C)) -> C {
     
     return map(toRLMArray: field, using: binding)
 }
 
 @discardableResult
-public func map<T: RLMObject, U: RealmMapping, C: MappingContext>(toRLMArray field: RLMArray<T>, using binding:(key: Binding<U>, context: C)) -> C where U.MappedObject == T, T: Equatable {
+public func map<U: RealmMapping, C: MappingContext>(toRLMArray field: RLMArray<U.MappedObject>, using binding:(key: Binding<U>, context: C)) -> C {
     
     var variableList = RLMArrayBridge(rlmArray: field)
     let bridge = binding.key.generateRLMArrayMappingBridge()

    
    public let realmObjCAdapter: RealmAdapter
    public let rlmObjectType: RLMObject.Type
    
    public init(realmObjCAdapter: RealmAdapter, rlmObjectType: RLMObject.Type) {
        self.realmObjCAdapter = realmObjCAdapter
        self.rlmObjectType = rlmObjectType
    }
    
    public func mappingBegins() throws {
        try self.realmObjCAdapter.mappingBegins()
    }
    
    public func mappingEnded() throws {
        try self.realmObjCAdapter.mappingEnded()
    }
    
    public func mappingErrored(_ error: Error) {

    
    private var cache: Set<BaseType>
    public let realm: RLMRealm
    public let dataBaseTag: String = DefaultDatabaseTag.realm.rawValue
    public var requiresPrimaryKeys = false
    
    public init(realm: RLMRealm) {
