     @foldsByMarkerId = {}
     @decorationsById = {}
     @decorationsByMarkerId = {}
-    @subscribe @tokenizedBuffer.observeGrammar @subscribeToScopedConfigSettings
-    @subscribe @tokenizedBuffer.onDidChange @handleTokenizedBufferChange
-    @subscribe @buffer.onDidUpdateMarkers @handleBufferMarkersUpdated
-    @subscribe @buffer.onDidCreateMarker @handleBufferMarkerCreated
+    @disposables.add @tokenizedBuffer.observeGrammar @subscribeToScopedConfigSettings
+    @disposables.add @tokenizedBuffer.onDidChange @handleTokenizedBufferChange
+    @disposables.add @buffer.onDidUpdateMarkers @handleBufferMarkersUpdated
+    @disposables.add @buffer.onDidCreateMarker @handleBufferMarkerCreated
     @updateAllScreenLines()
     @createFoldForMarker(marker) for marker in @buffer.findMarkers(@getFoldMarkerAttributes())
 

  decorateMarker: (marker, decorationParams) ->
    marker = @getMarker(marker.id)
    decoration = new Decoration(marker, this, decorationParams)
    @subscribe decoration.onDidDestroy => @removeDecoration(decoration)
    @decorationsByMarkerId[marker.id] ?= []
    @decorationsByMarkerId[marker.id].push(decoration)
    @decorationsById[decoration.id] = decoration

    super

    @emitter = new Emitter
    @disposables = new CompositeDisposable

    @tokenizedBuffer ?= new TokenizedBuffer({tabLength, buffer, @invisibles})
    @buffer = @tokenizedBuffer.buffer
