 
       initializing = true
 
+      limitToPrefix = isServerCollection @collection
+
       queryFields = fieldsToProjection @fields
       @collection.find({}, fields: queryFields).observe
-        added: globals.Document._observerCallback @collection, (document) =>
+        added: globals.Document._observerCallback limitToPrefix, (document) =>
           @trigger document, null unless initializing
 
-        changed: globals.Document._observerCallback @collection, (newDocument, oldDocument) =>
+        changed: globals.Document._observerCallback limitToPrefix, (newDocument, oldDocument) =>
           @trigger newDocument, oldDocument
 
-        removed: globals.Document._observerCallback @collection, (oldDocument) =>
+        removed: globals.Document._observerCallback limitToPrefix, (oldDocument) =>
           @trigger null, oldDocument
 
       initializing = false

    started

  # TODO: Should we add retry?
  @_observerCallback: (collection, f) ->
    return (obj, args...) ->
      try
        if Meteor.isServer and collection._connection is Meteor.server
          # We call f only if the first character of id is in share.PREFIX. By that we allow each instance to
          # operate only on a subset of documents, allowing simple coordination while scaling.
          id = if _.isObject obj then obj._id else obj

  else
    collection._connection in [null, Meteor.server]

isServerCollection = (collection) ->
  Meteor.isServer and collection._connection is Meteor.server

# We augment the cursor so that it matches our extra method in documents manager.
LocalCollection.Cursor::exists = ->
  # We just have to limit the query temporary. For limited and unsorted queries
