             }
 
             lastContentOffset = translation.y
-            if checkRubberbandingForDelta(delta) {
-                scrollWithDelta(delta)
+            if checkRubberbandingForDelta(delta) && checkScrollHeightIsLargeEnoughForScrolling() {
+                if toolbarState != .Collapsed || contentOffset.y <= 0 {
+                    scrollWithDelta(delta)
+                }
+
+                if headerTopOffset == -headerFrame.height {
+                    toolbarState = .Collapsed
+                } else if headerTopOffset == 0 {
+                    toolbarState = .Visible
+                } else {
+                    toolbarState = .Animating
+                }
             }
 
             if gesture.state == .Ended || gesture.state == .Cancelled {

            completion?(finished: true)
        }
    }
}

extension BrowserScrollingController: UIGestureRecognizerDelegate {

    }

    func hideToolbars(#animated: Bool, completion: ((finished: Bool) -> Void)? = nil) {
        toolbarState = .Collapsed
        let animationDistance = headerFrame.height - abs(headerTopOffset)
        let durationRatio = abs((headerFrame.height + headerTopOffset) / headerFrame.height)
        let actualDuration = NSTimeInterval(ToolbarBaseAnimationDuration * durationRatio)
        self.animateToolbarsWithOffsets(
            animated: animated,
