                             $or: [
                                 selector: $in: [null, instanceId]
                             ,
-                                subFieldSelectorMatcher
+                                $and: subFieldSelectorMatcher
                             ]
 
                     console.log "***<#{watcherModelName}>.#{reactiveName}***"


        # Makes sure every fieldSpec in he watching-selector is consistent
        # with either oldValues or newValues
        subFieldSelectorMatcher =
            selector: $type: 3 # object
        subFieldSelectorMatcher["selector._id"] = $in: [null, instanceId]
        subFieldSelectorMatcher["selector._id*DOT*#{J.Model.escapeDot '$in'}"] = $in: [null, instanceId]

        addClauses = (selectorPrefix, oldSubValues, newSubValues) =>
            subFieldNameSet = {}

                oldValue = oldSubValues[subFieldName]
                newValue = newSubValues[subFieldName]

                term = $or: [{}, {}]
                term.$or[0][selectorPath] = $in: [null]
                term.$or[1]["#{selectorPath}.*DOLLAR*in"] = $in: []

                if oldValue?
                    term.$or[0][selectorPath].$in.push oldValue
                    term.$or[1]["#{selectorPath}.*DOLLAR*in"].$in.push oldValue
                if newValue? and not EJSON.equals oldValue, newValue
                    term.$or[0][selectorPath].$in.push newValue
                    term.$or[1]["#{selectorPath}.*DOLLAR*in"].$in.push newValue

                subFieldSelectorMatcher.push term

                if J.util.isPlainObject(oldValue) or J.util.isPlainObject(newValue)
                    addClauses(
