diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
 Brick changelog
 ---------------
 
+0.11
+----
+
+API changes:
+ * Added getVtyHandle in EventM for obtaining the current Vty context.
+   It returns Nothing when calling the appStartEvent handler but after
+   that a context is always available.
+
 0.10
 ----
 
diff --git a/brick.cabal b/brick.cabal
--- a/brick.cabal
+++ b/brick.cabal
@@ -1,5 +1,5 @@
 name:                brick
-version:             0.10
+version:             0.11
 synopsis:            A declarative terminal user interface library
 description:
   Write terminal applications painlessly with 'brick'! You write an
diff --git a/docs/guide.rst b/docs/guide.rst
--- a/docs/guide.rst
+++ b/docs/guide.rst
@@ -906,7 +906,7 @@
        Widget Greedy Greedy $ do
            ctx <- getContext
            let a = ctx^.attrL
-           return $ Result (Graphics.Vty.charFill ch a (ctx^.availWidth) (ctx^.availHeight))
+           return $ Result (Graphics.Vty.charFill a ch (ctx^.availWidthL) (ctx^.availHeightL))
                            [] []
 
 Rendering Sub-Widgets
diff --git a/src/Brick/Main.hs b/src/Brick/Main.hs
--- a/src/Brick/Main.hs
+++ b/src/Brick/Main.hs
@@ -10,6 +10,7 @@
   , halt
   , suspendAndResume
   , lookupViewport
+  , getVtyHandle
 
   -- ** Viewport scrolling
   , viewportScroll
@@ -65,7 +66,7 @@
   )
 
 import Brick.Types (Viewport, Direction, Widget, rowL, columnL, CursorLocation(..), cursorLocationNameL, EventM(..))
-import Brick.Types.Internal (ScrollRequest(..), RenderState(..), observedNamesL, Next(..), EventState(..), CacheInvalidateRequest(..))
+import Brick.Types.Internal (EventRO(..), ScrollRequest(..), RenderState(..), observedNamesL, Next(..), EventState(..), CacheInvalidateRequest(..))
 import Brick.Widgets.Internal (renderFinal)
 import Brick.AttrMap
 
@@ -198,7 +199,8 @@
                     run newRS newAppState chan
 
         emptyES = ES [] []
-    (st, eState) <- runStateT (runReaderT (runEventM (appStartEvent app initialAppState)) M.empty) emptyES
+        eventRO = EventRO M.empty Nothing
+    (st, eState) <- runStateT (runReaderT (runEventM (appStartEvent app initialAppState)) eventRO) emptyES
     let initialRS = RS M.empty (esScrollRequests eState) S.empty mempty
     chan <- newChan
     forkIO $ forever $ readChan userChan >>= (\userEvent -> writeChan chan (Right userEvent))
@@ -234,8 +236,9 @@
             Left e' -> appLiftVtyEvent app e'
             Right e' -> e'
 
+    let eventRO = EventRO (viewportMap nextRS) (Just vty)
     (next, eState) <- runStateT (runReaderT (runEventM (appHandleEvent app appState userEvent))
-                                (viewportMap nextRS)) emptyES
+                                eventRO) emptyES
     return (next, nextRS { rsScrollRequests = esScrollRequests eState
                          , renderCache = applyInvalidations (cacheInvalidateRequests eState) $
                                          renderCache nextRS
@@ -253,7 +256,11 @@
 -- or because no rendering has occurred (e.g. in an 'appStartEvent'
 -- handler).
 lookupViewport :: (Ord n) => n -> EventM n (Maybe Viewport)
-lookupViewport = EventM . asks . M.lookup
+lookupViewport n = EventM $ asks (M.lookup n . eventViewportMap)
+
+-- | Get the Vty handle currently in use.
+getVtyHandle :: EventM n (Maybe Vty)
+getVtyHandle = EventM $ asks eventVtyHandle
 
 -- | Invalidate the rendering cache entry with the specified name.
 invalidateCacheEntry :: n -> EventM n ()
diff --git a/src/Brick/Types.hs b/src/Brick/Types.hs
--- a/src/Brick/Types.hs
+++ b/src/Brick/Types.hs
@@ -75,7 +75,6 @@
 import Control.Monad.Trans.State.Lazy
 import Control.Monad.Trans.Reader
 import Graphics.Vty (Event, Attr)
-import qualified Data.Map as M
 import Control.Monad.IO.Class
 
 import Brick.Types.TH
@@ -111,7 +110,7 @@
 -- to dig into the reader value yourself, just use
 -- 'Brick.Main.lookupViewport'.
 newtype EventM n a =
-    EventM { runEventM :: ReaderT (M.Map n Viewport) (StateT (EventState n) IO) a
+    EventM { runEventM :: ReaderT (EventRO n) (StateT (EventState n) IO) a
            }
            deriving (Functor, Applicative, Monad, MonadIO)
 
diff --git a/src/Brick/Types/Internal.hs b/src/Brick/Types/Internal.hs
--- a/src/Brick/Types/Internal.hs
+++ b/src/Brick/Types/Internal.hs
@@ -19,6 +19,7 @@
   , cursorLocationNameL
   , Context(..)
   , EventState(..)
+  , EventRO(..)
   , Next(..)
   , Result(..)
   , CacheInvalidateRequest(..)
@@ -45,7 +46,7 @@
 import Lens.Micro.Internal (Field1, Field2)
 import qualified Data.Set as S
 import qualified Data.Map as M
-import Graphics.Vty (DisplayRegion, Image, emptyImage)
+import Graphics.Vty (Vty, DisplayRegion, Image, emptyImage)
 import Data.Default (Default(..))
 
 import Brick.Types.TH
@@ -97,6 +98,10 @@
 data EventState n = ES { esScrollRequests :: [(n, ScrollRequest)]
                        , cacheInvalidateRequests :: [CacheInvalidateRequest n]
                        }
+
+data EventRO n = EventRO { eventViewportMap :: M.Map n Viewport
+                         , eventVtyHandle :: Maybe Vty
+                         }
 
 -- | The type of actions to take upon completion of an event handler.
 data Next a = Continue a
