 
     # Select the directory view and optionally select an Outcome or Group.
     selectDir: (dir, selectedModel) =>
-      dfd = $.Deferred()
       # don't re-select the same model
-      if selectedModel and dir is @selectedDir() and selectedModel is @selectedDir()?.prevSelectedModel
-        dfd.resolve()
-        return dfd.promise()
-
-      complete = =>
-        # remove all directories after the selected dir
-        _.each @directories.splice(i + 1), (d) -> d.remove()
-        @addDirFor selectedModel if selectedModel instanceof OutcomeGroup and !selectedModel.isNew()
-        @updateSidebarWidth()
-        @trigger 'select', selectedModel, @directories
-        dfd.resolve()
+      return if selectedModel and dir is @selectedDir() and selectedModel is @selectedDir()?.prevSelectedModel
 
       dir.clearSelection() unless selectedModel
+
+      # remove all directories after the selected dir
       i = _.indexOf @directories, dir
-      # only scroll to dir if the selection is not the last dir
-      if @directories.length is i + 1
-        complete()
-      else
-        @_scrollToDir i, selectedModel, complete
-
-      dfd.promise()
+      _.each @directories.splice(i + 1), (d) -> d.remove()
+      isAddingDir = selectedModel instanceof OutcomeGroup and !selectedModel.isNew()
+      @addDirFor selectedModel if isAddingDir
+      @updateSidebarWidth()
+      scrollIndex = if isAddingDir then i + 1 else i
+      @_scrollToDir scrollIndex, selectedModel
+      @trigger 'select', selectedModel, @directories
 
     refreshSelection: (model) =>
       dir = @selectedDir()

    dirForGroup: (outcomeGroup) ->
      _.find(@directories, (d) -> d.outcomeGroup is outcomeGroup) || @addDirFor(outcomeGroup)

    _scrollToDir: (dirIndex, model, complete) ->
      scrollLeft = (@directoryWidth + 1) * (if model instanceof Outcome then dirIndex - 1 else dirIndex)
      @$sidebar.animate {scrollLeft: scrollLeft}, duration: @directoryWidth, complete: complete
      scrollTop = (@entryHeight + 1) * _.indexOf(@directories[dirIndex].views(), _.find(@directories[dirIndex].views(), (v) -> v.model is model))
      @directories[dirIndex].$el.animate {scrollTop: scrollTop}, duration: @directoryWidth

    _findLastDir: (f) ->
      _.find(_.clone(@directories).reverse(), f) || _.last @directories

      clickedOutside = e.target is e.currentTarget
      return unless clickedOutside
      dir = $(e.target).data 'view'
      @selectDir dir

    # Adds a directory view for an outcome group.
    # Returns the directory view.
