     @markerScreenPositionObservers[id].head.push(callback)
     subscription = @buffer.observeMarkerHeadPosition id, (bufferPosition) =>
       @cacheMarkerScreenPositions(id)
-      callback(@screenPositionForBufferPosition(bufferPosition))
+      callback(@getMarkerHeadScreenPosition(id))
 
     cancel: =>
       subscription.cancel()

    @getMarkerHeadBufferPosition(id)

  getMarkerHeadScreenPosition: (id) ->
    @screenPositionForBufferPosition(@getMarkerHeadBufferPosition(id))

  setMarkerHeadScreenPosition: (id, screenPosition, options) ->
    screenPosition = @clipScreenPosition(screenPosition, options)

    @buffer.setMarkerHeadPosition(id, bufferPosition)

  getMarkerTailScreenPosition: (id) ->
    @screenPositionForBufferPosition(@getMarkerTailBufferPosition(id), wrapAtSoftNewlines: true)

  setMarkerTailScreenPosition: (id, screenPosition, options) ->
    screenPosition = @clipScreenPosition(screenPosition, options)
