     return unless normalized
     anchor = normalized[1]
     @isFoldedUp = true
-    limit = @panels[anchor].length - 1
-
-    for i in [limit..1] by -1
-      delay = (limit - i) * @settings.speed * .6
-      angle = 100
-
-      do (i, delay, angle) =>
-
-        setTimeout =>
-
-          unless i is limit
-            do (i) =>
-              setTimeout =>
-                @panels[anchor][i].style.display = 'none'
-              , delay * .8
-
-          @panels[anchor][i].style[css.transform] = @_transform angle
-          if @shading
-            @_setShader i, anchor, angle
-
-        , delay
+    i = @panels[anchor].length - 1
+    angle = 100
+
+    nextPanel = =>
+      @panels[anchor][i].addEventListener css.transitionEnd, onTransitionEnd, false
+      @panels[anchor][i].style[css.transform] = @_transform angle
+      if @shading
+        @_setShader i, anchor, angle
+
+    onTransitionEnd = (e) =>
+      @panels[anchor][i].removeEventListener css.transitionEnd, onTransitionEnd, false
+      @panels[anchor][i].style.display = 'none'
+      if --i is 0
+        @_callback callback
+      else
+        setTimeout nextPanel, 0
+
+    nextPanel()
 
 
   unfold: (callback) ->

    anchor = @_getLonghandAnchor args[1]
    options = extendObj args[2], @_methodDefaults[method]

    if anchor isnt @lastAnchor or (method is 'foldUp' and @lastAngle isnt 0)
      
      @reset =>
        @_showStage anchor

        setTimeout =>

          if method is 'foldUp' or method is 'unfold'
            args.shift()

          @[method].apply @, args



  reset: (callback) ->
    if @isFoldedUp
      return @unfold callback

    for panel, i in @panels[@lastAnchor]
      panel.style[css.transform] = @_transform 0
      if @shading
