     @editor.decorateMarker marker,
       type: 'highlight'
       class: klass
-    setTimeout (=>
-      vi = atom.views.getView(@editor)
-      line=vi.rootElement.querySelector(
-        '.gutter .haskell-ghc-mod-error.line-number-'+row)
-      atom.tooltips.add line,
-        template: '<div class="tooltip" role="tooltip">'+
-          '<div class="tooltip-arrow"></div>'+
-          '<pre class="tooltip-inner"></pre></div>'
-        title: message
-        placement: 'right'
-      ), 100
+    setTimeout (=>@addTooltip(message,row)), 100
+    @errorTooltips.add @editor.onDidChangeScrollTop => @addTooltip(message,row)
     @errorTooltips.add @editor.onDidChangeCursorPosition (event) =>
       return unless event.newBufferPosition.isEqual([row,column])
       @showMessage range,message
 
-  getTypeCallback: (callback) ->
-    @process.getType @getText(), @getRange(), callback
-
   getType: ->
-    @getTypeCallback @showMessage
+    @process.getType @getText(), @getRange(), @showMessage
 
   insertType: ->
     symbol = @getSymbol()

    @errorMarkers = []
    @errorTooltips.dispose()
    @errorTooltips = new CompositeDisposable

  destroy: ->
    @clearError()

    @errorMarkers = []
    @errorTooltips = new CompositeDisposable
    @subscriptions = new CompositeDisposable
    @errorTooltipsMap = new WeakMap

    @subscriptions.add @editor.onDidSave =>
      @doCheck() if atom.config.get('haskell-ghc-mod.checkOnSave')
