             @$element = $(element).addClass(options.stackedClass)
             @options = options
 
-            # Event handlers
-            @_stack = _.debounce(@stack, 50)
+            @stack()
+            @_applied = true
+
+            @_optimized = getFluidChildren(@$element, @options).length < 2
+
+            # An optimized stack does not require debouncing since it does
+            # not involving recomputing the child positions.
+            if @_optimized
+                @_restack = @stack
+            else
+                @_restack = _.debounce(@stack, 50)
+
             @_scroll = (event) =>
                 $child = $(event.target)
                 toggleChildOverlay($child, @options)
 
-            @stack()
             @listen()
 
         overlay: =>

        return


    getStackedHeights = ($elem, options) ->
        remainingHeight = options.maxHeight

        $children = $elem.children()
        $fluidChildren = $children.filter(options.fluid)

        heights = []


                maxHeight: getMaxHeight(@$element, @options)
                minHeight: getMinHeight(@$element, @options)

            if @_optimized
                @$element.clearQueue('fx')
                @$element.animate
                    height: options.maxHeight
                , 200
            else
                heights = getStackedHeights(@$element, options)
                applyStackedHeights(@$element, heights, options)
            return @

        listen: ->
            $(window).on('resize', @_restack)
            @$element.children().on('scroll', @_scroll)
            return @

        unlisten: ->
            $(window).off('resize', @_restack)
            @$element.children().off('scroll', @_scroll)
            return @

