     @removedAllMarkerDecorations(marker)
 
   removedAllMarkerDecorations: (marker) ->
+    @decorationMarkerChangedSubscriptions[marker.id].off()
     @decorationMarkerDestroyedSubscriptions[marker.id].off()
-
-    for subscriptionObject in @decorationMarkerChangedSubscriptions[marker.id]
-      subscriptionObject.subscription.off()
 
     delete @decorationsByMarkerId[marker.id]
     delete @decorationMarkerChangedSubscriptions[marker.id]
     delete @decorationMarkerDestroyedSubscriptions[marker.id]
-
-  unsubscribeDecorationFromMarker: (marker, decoration) ->
-    subscriptionObjects = @decorationMarkerChangedSubscriptions[marker.id]
-    return unless @decorationMarkerChangedSubscriptions[marker.id]
-
-    for i in [subscriptionObjects.length - 1..0]
-      subscriptionObject = subscriptionObjects[i]
-      if subscriptionObject.decoration == decoration
-        subscriptionObject.subscription.off()
-        subscriptionObjects.splice(i, 1)
-
-    delete @decorationMarkerChangedSubscriptions[marker.id] if subscriptionObjects.length == 0
 
   # Retrieves a {DisplayBufferMarker} based on its id.
   #

      console.warn 'A decoration cannot be removed from a null marker'
      return

    return unless @decorationMarkerSubscriptions[marker.id]?

    decorations = @decorationsByMarkerId[marker.id]
    for i in [decorations.length - 1..0]
      decoration = decorations[i]
      if @decorationMatchesPattern(decoration, decorationPattern)
        @unsubscribeDecorationFromMarker(marker, decoration)
        decorations.splice(i, 1)
        @emit 'decoration-removed', marker, decoration


      return

    marker = @getMarker(marker.id)

    @decorationMarkerDestroyedSubscriptions[marker.id] ?= @subscribe marker, 'destroyed', =>
      @removeAllDecorationsForMarker(marker)

    @decorationMarkerChangedSubscriptions[marker.id] ?= @subscribe marker, 'changed', (event) =>
      decorations = @decorationsByMarkerId[marker.id]
      for decoration in decorations
        @emit 'decoration-changed', marker, decoration, event

    @decorationsByMarkerId[marker.id] ?= []
    @decorationsByMarkerId[marker.id].push(decoration)
