 
       point = Point.max(point, Point.ZERO)
 
-  point
+  screenPoint = editor.screenPositionForBufferPosition(point, clipDirection: direction)
+  editor.bufferPositionForScreenPosition(screenPoint)
 
 class SelectionWrapper
   constructor: (@selection) ->

  getStartRow: -> @getRowFor('start')
  getEndRow: -> @getRowFor('end')


  getTailBufferRange: ->
    {editor} = @selection
    if (@isSingleRow() and @isLinewise())
      console.log "singleRow"
      editor.bufferRangeForBufferRow(@getTailRow(), includeNewline: true)
    else
      console.log "normal tail"
      tailStart = @selection.getTailScreenPosition()
      # tailStart = @selection.getTailBufferPosition()
      if @selection.isReversed()
        # tailEnd = translatePointAndClip(editor, tailStart, 'backward')
        tailEnd = editor.clipScreenPosition(tailStart.translate([0, -1]), clipDirection: 'backward')
      else
        # tailEnd = translatePointAndClip(editor, tailStart, 'forward')
        tailEnd = editor.clipScreenPosition(tailStart.translate([0, +1]), clipDirection: 'forward')

      # tailStart = @selection.getTailScreenPosition()
      # if @selection.isReversed()
      #   tailEnd = translatePointAndClip(editor, tailStart, 'backward')
      # else
      #   tailEnd = translatePointAndClip(editor, tailStart, 'forward')

      editor.bufferRangeForScreenRange([tailStart, tailEnd])

  preserveCharacterwise: ->
    properties = @detectCharacterwiseProperties()

    when 'forward'
      point = point.translate([0, +1])
      eol = editor.bufferRangeForBufferRow(point.row).end
      if point.isEqual(eol)
        return point

      if point.isGreaterThan(eol)
        return new Point(point.row + 1, 0)

      point = Point.min(point, editor.getEofBufferPosition())
    when 'backward'
      point = point.translate([0, -1])

