       for name, field of obj
         if field instanceof globals.Document._ObservingField
           sourceFields[field.sourcePath] = 1
+          index = {}
+          index["#{ field.sourcePath }._id"] = 1
+          indexes.push index
         else if field not instanceof globals.Document._Field
           sourceFieldsWalker field
 
     sourceFieldsWalker @Meta.fields
+
+    unless updateAll
+      for index in indexes
+        @Meta.collection._ensureIndex index
 
     initializing = true
 

  @_setupSourceObservers: (updateAll) ->
    return if _.isEmpty @Meta.fields

    sourceFields =
      _id: 1 # To make sure we do not pass empty set of fields


# We have to modify prototype directly because there are classes which already inherit from the class
# and we cannot just override the class as we are doing for other server-side only methods.
globals.Document._TargetedFieldsObservingField::_setupTargetObservers = (updateAll) ->
  unless updateAll
    index = {}
    index["#{ @sourcePath }._id"] = 1
    @sourceCollection._ensureIndex index

    if @reverseName
      index = {}
      index["#{ @reverseName }._id"] = 1
      @targetCollection._ensureIndex index

  initializing = true

  observers =
