   ###
   collapse: ->
     if not @_collapseTransitioning and @collapsible and not @collapsed
-      @collapsed = true
-      setCollapseFlag @
-      @prefixedClasses.remove EXPANDING_CLS
-      @prefixedClasses.add COLLAPSING_CLS
-
-      reduceParentTreeHeight = (tree, h) ->
-        if not tree then return
-        tree.reduceHeight h
-        if tree.parent.parent and tree.parent.parent.collapsible
-          reduceParentTreeHeight tree.parent.parent, h
-
-      @_getDescendantsHeight().then (h) =>
-        promises = []
-        @children.get(TREE_TAG_NAME).every (tree) ->
-          promises.push tree.collapse()
-        Promise.all(promises).then =>
-          transitionHelper 'collapse', @
-          if @_targetTree then reduceParentTreeHeight(@parent, h)
-
+      @_collapse()
     else
       Promise.fulfilled()
 



  ###*
  # Updates the "collapsible" display state of this item.
  #
  # @method _updateCollapsible
  # @memberof stout-ui/tree/TreeItemView#
  # @private
  ###
  _updateCollapsible: ->

    # Update collapsed and collapsable classes based on child trees.
    @prefixedClasses.remove COL_CLS, COLLAPSED_CLS

    if @children.get(TREE_TAG_NAME).length > 0 and @collapsible

      if @collapsed
        @collapsed = false
        @collapse()
      else
        @expand()

      @prefixedClasses.add COL_CLS

    if @collapsed and @collapsible

    @_collapseTransitioning = false
    @_targetTree = false

    @on 'ready', @_onTreeReady, @

    # Listen for touchstart/mouseup events to toggle the tree.
    @on 'mouseup', (e) =>
