       Flasher.flash() if settings.get('flashOnLand')
       @history.dump direction
 
+  checkLeak: ->
+    subTotal       = @subscriptions.disposables.size
+    editorSubTotal = _.chain(@editorSubscriptions)
+      .values()
+      .map((e) -> e.disposables?.size)
+      .filter( (e) -> e?)
+      .reduce(((sum, n) -> sum + n), 0)
+      .value()
+    console.log "subTotal: #{subTotal}"
+    console.log "editorSubTotal: #{editorSubTotal}"
+
   handleChangePath: (editor) ->
     orgURI = editor.getURI()
 
-    @subscriptions.add editor.onDidChangePath =>
+    @editorSubscriptions[editor.id].add editor.onDidChangePath =>
       newURI = editor.getURI()
       @history.rename orgURI, newURI
       @lastEditor.rename orgURI, newURI

      'cursor-history:clear': => @clear()
      'cursor-history:dump':  => @dump()
      'cursor-history:toggle-debug': => @toggleConfig('debug')

    @subscriptions.add atom.workspace.observeTextEditors (editor) =>
      @handleChangePath(editor)
      @subscriptions.add editor.onDidChangeCursorPosition (event) =>
        return if @isLocked()
        @handleCursorMoved event

    @subscriptions.add atom.workspace.observeActivePaneItem (item) =>
      if item instanceof TextEditor and item.getURI()


  deactivate: ->
    @subscriptions.dispose()
    for key, disposables @editorSubscriptions
      disposables.dispose()
    @editorSubscriptions = null
    settings.dispose()
    @history?.destroy()
    @history = null
