diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
 Brick changelog
 ---------------
 
+0.65.1
+------
+
+Bug fixes:
+ * `Brick.Widgets.Core.viewport`: fixed non-scroll
+   direction width/height in the presence of scroll bars (see
+   e41ad936ebe8b49e259a72ff7a34765d5a587aaa).
+
 0.65
 ----
 
@@ -38,6 +46,8 @@
    * `scrollbarAttr` - the base attribute of scroll bars
    * `scrollbarTroughAttr` - the attribute of scroll bar troughs
    * `scrollbarHandleAttr` - the attribute of scroll bar handles
+ * The `Context` type got the `n` type argument that is used for
+   `Result`, `EventM`, etc.
 
 Package changes:
  * Raised `base` bounds to allow building with GHC 9.2.1 (thanks Mario
diff --git a/brick.cabal b/brick.cabal
--- a/brick.cabal
+++ b/brick.cabal
@@ -1,5 +1,5 @@
 name:                brick
-version:             0.65
+version:             0.65.1
 synopsis:            A declarative terminal user interface library
 description:
   Write terminal user interfaces (TUIs) painlessly with 'brick'! You
@@ -32,7 +32,7 @@
 license-file:        LICENSE
 author:              Jonathan Daugherty <cygnus@foobox.com>
 maintainer:          Jonathan Daugherty <cygnus@foobox.com>
-copyright:           (c) Jonathan Daugherty 2015-2020
+copyright:           (c) Jonathan Daugherty 2015-2021
 category:            Graphics
 build-type:          Simple
 cabal-version:       1.18
diff --git a/docs/guide.rst b/docs/guide.rst
--- a/docs/guide.rst
+++ b/docs/guide.rst
@@ -1245,6 +1245,13 @@
 column of available space if vertical scroll bars are enabled and one
 row of available space if horizontal scroll bars are enabled.
 
+Scroll bars can also be configured to draw "handles" with
+``withHScrollBarHandles`` and ``withVScrollBarHandles``.
+
+Lastly, scroll bars can be configured to report mouse events on
+each scroll bar element. To enable mouse click reporting, use
+``withClickableHScrollBars`` and ``withClickableVScrollBars``.
+
 For a demonstration of the scroll bar API in action, see the
 ``ViewportScrollbarsDemo.hs`` demonstration program.
 
diff --git a/docs/samtay-tutorial.md b/docs/samtay-tutorial.md
--- a/docs/samtay-tutorial.md
+++ b/docs/samtay-tutorial.md
@@ -24,7 +24,7 @@
 1. [Demo programs](https://github.com/jtdaugherty/brick/tree/master/programs)
 (clone down to explore the code and run them locally)
 2. [User guide](https://github.com/jtdaugherty/brick/blob/master/docs/guide.rst)
-3. [Haddock docs](https://hackage.haskell.org/package/brick-0.18)
+3. [Haddock docs](https://hackage.haskell.org/package/brick)
 4. [Google group](https://groups.google.com/forum/#!forum/brick-users)
 
 ### The basic idea
diff --git a/src/Brick.hs b/src/Brick.hs
--- a/src/Brick.hs
+++ b/src/Brick.hs
@@ -1,8 +1,11 @@
 -- | This module is provided as a convenience to import the most
--- important parts of the API all at once. Note that the Haddock
--- documentation for this library is for /reference/ usage; if you
--- are looking for an introduction or tutorial, see the README for links
--- to plenty of material!
+-- important parts of the API all at once. If you are new to Brick and
+-- are looking to learn it, the best place to start is the
+-- [Brick User Guide](https://github.com/jtdaugherty/brick/blob/master/docs/guide.rst).
+-- The README also has links to other learning resources. Unlike
+-- most Haskell libraries that only have API documentation, Brick
+-- is best larned by reading the User Guide and other materials and
+-- referring to the API docs only as needed. Enjoy!
 module Brick
   ( module Brick.Main
   , module Brick.Types
diff --git a/src/Brick/Main.hs b/src/Brick/Main.hs
--- a/src/Brick/Main.hs
+++ b/src/Brick/Main.hs
@@ -390,7 +390,15 @@
 -- information from the most recent rendering. Returns 'Nothing' if
 -- no such state could be found, either because the name was invalid
 -- or because no rendering has occurred (e.g. in an 'appStartEvent'
--- handler).
+-- handler). An important consequence of this behavior is that if this
+-- function is called before a viewport is rendered for the first
+-- time, no state will be found because the renderer only knows about
+-- viewports it has rendered in the most recent rendering. As a result,
+-- if you need to make viewport transformations before they are drawn
+-- for the first time, you may need to use 'viewportScroll' and its
+-- associated functions without relying on this function. Those
+-- functions queue up scrolling requests that can be made in advance of
+-- the next rendering to affect the viewport.
 lookupViewport :: (Ord n) => n -> EventM n (Maybe Viewport)
 lookupViewport n = EventM $ asks (M.lookup n . eventViewportMap)
 
diff --git a/src/Brick/Widgets/Core.hs b/src/Brick/Widgets/Core.hs
--- a/src/Brick/Widgets/Core.hs
+++ b/src/Brick/Widgets/Core.hs
@@ -1191,6 +1191,11 @@
 -- used to display large contents for scrolling. This function is best
 -- used when the contents are not too large OR when the contents are
 -- large and render-cacheable.
+--
+-- Also, be aware that there is a rich API for accessing viewport
+-- information from within the 'EventM' monad; check the docs for
+-- @Brick.Main@ to learn more about ways to get information about
+-- viewports after they're drawn.
 viewport :: (Ord n, Show n)
          => n
          -- ^ The name of the viewport (must be unique and stable for
@@ -1233,7 +1238,9 @@
 
       -- Update the viewport size.
       let newVp = VP 0 0 newSize (0, 0)
-          newSize = (c^.availWidthL - vSBWidth, c^.availHeightL - hSBHeight)
+          newSize = (newWidth, newHeight)
+          newWidth = c^.availWidthL - vSBWidth
+          newHeight = c^.availHeightL - hSBHeight
           vSBWidth = maybe 0 (const 1) vsOrientation
           hSBHeight = maybe 0 (const 1) hsOrientation
           doInsert (Just vp) = Just $ vp & vpSize .~ newSize
@@ -1244,10 +1251,12 @@
       -- Then render the viewport content widget with the rendering
       -- layout constraint released (but raise an exception if we are
       -- asked to render an infinitely-sized widget in the viewport's
-      -- scrolling dimension)
+      -- scrolling dimension). Also note that for viewports that
+      -- only scroll in one direction, we apply a constraint in the
+      -- non-scrolling direction in case a scroll bar is present.
       let release = case typ of
-            Vertical -> vRelease
-            Horizontal -> hRelease
+            Vertical -> vRelease . hLimit newWidth
+            Horizontal -> hRelease . vLimit newHeight
             Both -> vRelease >=> hRelease
           released = case release p of
             Just w -> w
@@ -1370,7 +1379,6 @@
                                   & extentsL .~ mempty
           _ -> render $ addVScrollbar
                       $ addHScrollbar
-                      $ cropToContext
                       $ vLimit (vpFinal^.vpSize._2)
                       $ hLimit (vpFinal^.vpSize._1)
                       $ padBottom Max
