     @invalidate ?= 'overlap'
     @persistent ?= true
     @properties ?= {}
+    @hasChangeObservers = false
     @rangeWhenDestroyed = null
     Object.freeze(@properties)
     @store.setMarkerHasTail(@id, @tailed)
-    @previousEventState = @getSnapshot(range)
 
   ###
   Section: Event Subscription

  #
  # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.
  onDidChange: (callback) ->
    @emitter.on 'did-change', callback

  # Public: Returns the current {Range} of the marker. The range is immutable.

  ###

  emitChangeEvent: (currentRange, textChanged, propertiesChanged) ->
    @store.markerUpdated(@id) unless textChanged
    return unless @hasChangeObservers
    oldState = @previousEventState

    return false unless propertiesChanged or
