 import UIKit
 
 public struct SlideMenuOptions {
+    
+    public enum SlidingMode {
+        case Standard
+        case Push
+    }
+    
     public static var leftViewWidth: CGFloat = 270.0
     public static var leftBezelWidth: CGFloat = 16.0
     public static var contentViewScale: CGFloat = 0.96

            return
        }
        
        switch panGesture.state {
            case UIGestureRecognizerState.Began:
                
                LeftPanState.frameAtStartOfPan = leftContainerView.frame
                LeftPanState.startPointOfPan = panGesture.locationInView(view)
                LeftPanState.wasOpenAtStartOfPan = isLeftOpen()
                LeftPanState.wasHiddenAtStartOfPan = isLeftHidden()
                
                leftViewController?.beginAppearanceTransition(LeftPanState.wasHiddenAtStartOfPan, animated: true)
                addShadowToView(leftContainerView)
                setOpenWindowLevel()
            case UIGestureRecognizerState.Changed:
                
                let translation: CGPoint = panGesture.translationInView(panGesture.view!)
                leftContainerView.frame = applyLeftTranslation(translation, toFrame: LeftPanState.frameAtStartOfPan)
                applyLeftOpacity()
                applyLeftContentViewScale()
            case UIGestureRecognizerState.Ended:

        var newOrigin: CGFloat = toFrame.origin.x
        newOrigin += translation.x
        
        var minOrigin: CGFloat = 0.0
        var maxOrigin: CGFloat = leftContainerView.frame.size.width
        
        if SlideMenuOptions.mainContainerViewAlwaysOnTop {
            if SlideMenuOptions.slidingMode == SlideMenuOptions.SlidingMode.Push {
                minOrigin = leftMinOrigin()
                maxOrigin = 0.0
            }
        } else {
            minOrigin = leftMinOrigin()
            maxOrigin = 0.0
        }
        
        var newFrame: CGRect = toFrame
        
        if newOrigin < minOrigin {
