     task = ArchiveThreadHelper.getArchiveTask([focused])
     @_moveAndShiftBy(offset, task)
 
-  _onMoveThread: (thread, task) ->
-    @_moveAndShiftBy('auto', task)
-
-  _onMoveThreads: (threads, task) ->
-    selectedThreadIds = threads.map (thread) -> thread.id
-    focusedId = FocusedContentStore.focusedId('thread')
-    keyboardId = FocusedContentStore.keyboardCursorId('thread')
-
-    TaskQueueStatusStore.waitForPerformLocal(task).then =>
-      if focusedId in selectedThreadIds
-        Actions.setFocus(collection: 'thread', item: null)
-      if keyboardId in selectedThreadIds
-        Actions.setCursorPosition(collection: 'thread', item: null)
-
-    Actions.queueTask(task)
-    @_view.selection.clear()
-
   _onArchiveSelection: ->
     selectedThreads = @_view.selection.items()
     task = ArchiveThreadHelper.getArchiveTask(selectedThreads)
     @_onMoveThreads(selectedThreads, task)
+
+  _onMoveThread: (thread, task) ->
+    @_moveAndShiftBy('auto', task)
+
+  _onMoveThreads: (threads, task) ->
+    threadIds = threads.map (thread) -> thread.id
+    focusedId = FocusedContentStore.focusedId('thread')
+    keyboardId = FocusedContentStore.keyboardCursorId('thread')
+
+    if focusedId in threadIds
+      changeFocused = true
+    if keyboardId in threadIds
+      changeKeyboardCursor = true
+
+    if changeFocused or changeKeyboardCursor
+      newFocusIndex = Number.MAX_VALUE
+      for thread in threads
+        newFocusIndex = Math.min(newFocusIndex, @_view.indexOfId(thread.id))
+
+    TaskQueueStatusStore.waitForPerformLocal(task).then =>
+      layoutMode = WorkspaceStore.layoutMode()
+      if changeFocused
+        item = @_view.get(newFocusIndex)
+        Actions.setFocus(collection: 'thread', item: item)
+      if changeKeyboardCursor
+        item = @_view.get(newFocusIndex)
+        Actions.setCursorPosition(collection: 'thread', item: item)
+        Actions.setFocus(collection: 'thread', item: item) if layoutMode is 'split'
+
+    Actions.queueTask(task)
+    @_view.selection.clear()
 
   _moveAndShiftBy: (offset, task) ->
     layoutMode = WorkspaceStore.layoutMode()

          for message in messages
            messagesByThread[message.threadId].push message
          messagesByThread
      @setView(view)

    Actions.setFocus(collection: 'thread', item: null)

    @listenTo AccountStore, @_onAccountChanged
    @listenTo FocusedMailViewStore, @_onMailViewChanged

    # We can't create a @view on construction because the CategoryStore
    # has hot yet been populated from the database with the list of
    # categories and their corresponding ids. Once that is ready, the
