 class MoveSelectedTextLeft extends MoveSelectedTextUp
   direction: 'left'
 
+  canMoveSelection: (selection) ->
+    selection.getBufferRange().start.column > 0
+
   moveLinewise: (selection) ->
-    selection.outdentSelectedRows()
+    switch @direction
+      when 'left' then selection.outdentSelectedRows()
+      when 'right' then selection.indentSelectedRows()
 
   moveCharacterwise: (selection) ->
-    return if selection.getBufferRange().start.column is 0
+    return unless @canMoveSelection(selection)
+    if @direction is 'right'
+      endPoint = selection.getBufferRange().end
+      insertTextAtPoint(@editor, endPoint, " ") if pointIsAtEndOfLine(@editor, endPoint)
 
     @rotateTextForSelection(selection)
-    @editor.scrollToCursorPosition({center: true})
+    @editor.scrollToCursorPosition(center: true)
 
 class MoveSelectedTextRight extends MoveSelectedTextLeft
   direction: 'right'
-
-  moveLinewise: (selection) ->
-    selection.indentSelectedRows()
-
-  moveCharacterwise: (selection) ->
-    eol = selection.getBufferRange().end
-    if pointIsAtEndOfLine(@editor, eol)
-      insertTextAtPoint(@editor, eol, " ")
-
-    @rotateTextForSelection(selection)
-    @editor.scrollToCursorPosition({center: true})
+  canMoveSelection: (selection) ->
+    true
 
 # Duplicate
 # -------------------------
 class DuplicateSelectedText extends MoveSelectedText
   getCount: ->
     count = super
-    return count unless @isOverwrite()
+    return count unless @isOverwriteMode()
     switch @direction
       when 'up'
         if @isLinewise()

    selection.setBufferRange(range, {reversed})

  # Return 0 when no longer movable
  getCount: =>
    count = super
    if @direction is 'up'
      topSelection = @editor.getSelectionsOrderedByBufferPosition()[0]

  duplicateCharacterwise: (blockwiseSelection, count)  ->
    insertBlankLine = (amount) =>
      [startRow, endRow] = blockwiseSelection.getBufferRowRange()
      if @isOverwriteMode()
        if @direction is 'down'
          extendLastBufferRowToRow(@editor, endRow + amount)
      else
