 
         # Makes sure every fieldSpec in he watching-selector is consistent
         # with either oldValues or newValues
-        subFieldSelectorMatcher =
+        subFieldSelectorMatcher = [
             selector: $type: 3 # object
-        subFieldSelectorMatcher["selector._id"] = $in: [null, instanceId]
-        subFieldSelectorMatcher["selector._id*DOT*#{J.Model.escapeDot '$in'}"] = $in: [null, instanceId]
+        ]
+
+        subFieldSelectorMatcher.push
+            $or: [
+                'selector._id': $in: [null, instanceId]
+            ,
+                'selector._id.*DOLLAR*in': $in: [instanceId]
+            ]
 
         addClauses = (selectorPrefix, oldSubValues, newSubValues) =>
             subFieldNameSet = {}

                            $or: [
                                selector: $in: [null, instanceId]
                            ,
                                subFieldSelectorMatcher
                            ]

                    console.log "***<#{watcherModelName}>.#{reactiveName}***"

                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(
