         var newOrigin: CGFloat = toFrame.origin.x
         newOrigin += translation.x
         
-        let minOrigin: CGFloat = leftMinOrigin()
-        let maxOrigin: CGFloat = 0.0
+        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 {

                if panInfo.action == .Open {
                    if !LeftPanState.wasHiddenAtStartOfPan {
                        leftViewController?.beginAppearanceTransition(true, animated: true)
                    }
                    openLeftWithVelocity(panInfo.velocity)
                    track(.FlickOpen)

    }
    
    public func isLeftOpen() -> Bool {
        if SlideMenuOptions.mainContainerViewAlwaysOnTop {
            if SlideMenuOptions.slidingMode == SlideMenuOptions.SlidingMode.Standard {
                return mainContainerView.frame.origin.x != 0.0
            } else {
                return leftContainerView.frame.origin.x == 0.0
            }
        } else {
            return leftContainerView.frame.origin.x == 0.0
        }
    }
    
    public func isLeftHidden() -> Bool {
