     @removedAllMarkerDecorations(marker)
 
   removedAllMarkerDecorations: (marker) ->
-    @decorationMarkerChangedSubscriptions[marker.id].off()
-    @decorationMarkerDestroyedSubscriptions[marker.id].off()
+    @decorationMarkerChangedSubscriptions[marker.id].dispose()
+    @decorationMarkerDestroyedSubscriptions[marker.id].dispose()
 
     delete @decorationsByMarkerId[marker.id]
     delete @decorationMarkerChangedSubscriptions[marker.id]

      cls = decorationParams.class.split(' ').join('.')
      decorationParams.scope = ".minimap .#{cls}"

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

    @decorationMarkerChangedSubscriptions[marker.id] ?= @subscribe marker, 'changed', (event) =>
      decorations = @decorationsByMarkerId[marker.id]

      # Why check existence? Markers may get destroyed or decorations removed

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

    @decorationUpdatedSubscriptions[decoration.id] ?= decoration.onDidChangeProperties (event) =>
      @stackDecorationChanges(decoration)

    @decorationDestroyedSubscriptions[decoration.id] ?= decoration.onDidDestroy (event) =>
      @removeDecoration(decoration)

    @stackDecorationChanges(decoration)
