     delete @displayBuffer.markers[@id]
 
   notifyObservers: ({oldHeadBufferPosition, oldTailBufferPosition, bufferChanged}) ->
-    oldHeadScreenPosition = @previousHeadScreenPosition
+    oldHeadScreenPosition = @getHeadScreenPosition()
+    @headScreenPosition = null
     newHeadScreenPosition = @getHeadScreenPosition()
-    @previousHeadScreenPosition = newHeadScreenPosition
 
-    oldTailScreenPosition = @previousTailScreenPosition
+    oldTailScreenPosition = @getTailScreenPosition()
+    @tailScreenPosition = null
     newTailScreenPosition = @getTailScreenPosition()
-    @previousTailScreenPosition = newTailScreenPosition
 
     return if _.isEqual(newHeadScreenPosition, oldHeadScreenPosition) and _.isEqual(newTailScreenPosition, oldTailScreenPosition)
 

    @buffer.setMarkerRange(@id, bufferRange, options)

  getHeadScreenPosition: ->
    @displayBuffer.screenPositionForBufferPosition(@getHeadBufferPosition(), wrapAtSoftNewlines: true)

  setHeadScreenPosition: (screenPosition, options) ->
    screenPosition = @displayBuffer.clipScreenPosition(screenPosition, options)

    @buffer.setMarkerHeadPosition(@id, bufferPosition)

  getTailScreenPosition: ->
    @tailScreenPosition ?= @displayBuffer.screenPositionForBufferPosition(@getTailBufferPosition(), wrapAtSoftNewlines: true)

  setTailScreenPosition: (screenPosition, options) ->
    screenPosition = @displayBuffer.clipScreenPosition(screenPosition, options)
