     }
     
     private func setItemViewForCurrentTopView(itemView : UIView){
-        setItemView(itemView, forView: currentTopView)
+        setItemView(itemView, forView: currentTopView, cacheOld: true)
     }
 
     private func setItemViewForCurrentBottomView(itemView : UIView){
-        setItemView(itemView, forView: currentBottomView)
-    }
-    
-    private func setItemView(itemView : UIView, forView view : UIView){
-        clearView(view)
+        setItemView(itemView, forView: currentBottomView, cacheOld: true)
+    }
+
+    private func setItemViewForCurrentTopView(itemView : UIView, cacheOld: Bool){
+        setItemView(itemView, forView: currentTopView, cacheOld: cacheOld)
+    }
+    
+    private func setItemViewForCurrentBottomView(itemView : UIView, cacheOld: Bool){
+        setItemView(itemView, forView: currentBottomView, cacheOld: cacheOld)
+    }
+    
+    private func setItemView(itemView : UIView, forView view : UIView, cacheOld: Bool){
+        clearView(view, cache: cacheOld)
         
         itemView.frame = view.bounds
         view.addSubview(itemView)
     }
     
     private func clearCurrentTopView(){
-        clearView(currentTopView)
+        clearView(currentTopView, cache: true)
     }
     
     private func clearCurrentBottomView(){
-        clearView(currentBottomView)
-    }
-    
-    private func clearView(view : UIView){
+        clearView(currentBottomView, cache: true)
+    }
+
+    private func clearCurrentTopView(cache cache: Bool){
+        clearView(currentTopView, cache: cache)
+    }
+    
+    private func clearCurrentBottomView(cache cache: Bool){
+        clearView(currentBottomView, cache: cache)
+    }
+    
+    private func clearView(view : UIView, cache: Bool){
         
         if let itemView = view.subviews.first {
-            cacheItemView(itemView)
+            if cache {
+                cacheItemView(itemView)
+            }
             itemView.removeFromSuperview()
         }
         


    public func dequeueReusableViewForClass(reusableViewClass : AnyClass) -> UIView? {
        let identifier = NSStringFromClass(reusableViewClass)
        let dequeuedView = cachedViews[identifier]?.last
        if dequeuedView != nil {
            cachedViews[identifier]?.removeLast()
        }
        return dequeuedView
    }
 
    


        if let itemsForIdentifier = cachedViews[identifier] {
            if itemsForIdentifier.count < MaxCachedViewsForIdentifier {
                cachedViews[identifier]?.append(itemView)
            }
        } else {
