       properties.tail.column = tailMaxColumn
 
   captureProperties: ->
-    head: @selection.getHeadBufferPosition()
-    tail: @selection.getTailBufferPosition()
+    head = @selection.getHeadBufferPosition()
+    tail = @selection.getTailBufferPosition()
+    {head, tail}
 
   selectByProperties: ({head, tail}) ->
     # No problem if head is greater than tail, Range constructor swap start/end.
-    @setBufferRange([tail, head])
+    @setBufferRange([tail, head], preserveFolds: true)
     @setReversedState(head.isLessThan(tail))
 
   # Return true if selection was non-empty and non-reversed selection.


  restoreFromProperties: ->
    return unless @hasProperties()
    {head, tail} = @getProperties()
    @withKeepingGoalColumn =>
      @setBufferRange([tail, head], preserveFolds: true)

  # Only for setting autoscroll option to false by default
  setBufferRange: (range, options={}) ->


  setReversedState: (reversed) ->
    return if @selection.isReversed() is reversed

    if @hasProperties()
      {head, tail, wise} = @getProperties()
      @setProperties(head: tail, tail: head, wise: wise)

    options = {autoscroll: true, reversed, preserveFolds: true}
