diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,6 +1,11 @@
 # Revision history for frpnow-vty
 
+## 0.2.0.1  -- 2018-03-19
+
+* Shutdown vty even if exceptions are thrown.
+
 ## 0.2.0.0  -- 2018-03-18
+
 * Added basic 'runNowVty' and 'runNowVtyPure' functions.
 * Added 'demos/Demo.hs' mostly copied from [vty's Demo.hs](https://github.com/jtdaugherty/vty/blob/6f4edc0228660fb407f48c070ba3cee8c7dc7615/demos/Demo.hs).
 
diff --git a/frpnow-vty.cabal b/frpnow-vty.cabal
--- a/frpnow-vty.cabal
+++ b/frpnow-vty.cabal
@@ -2,10 +2,10 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                frpnow-vty
-version:             0.2.0.0
+version:             0.2.0.1
 synopsis:            Program terminal applications with vty and frpnow!
-description:         
-  This package allows you to create vty terminal 
+description:
+  This package allows you to create vty terminal
   applications using frpnow's frp interface.
   .
   A demo executable is also included to show how to
diff --git a/src/Control/FRPNow/Vty.hs b/src/Control/FRPNow/Vty.hs
--- a/src/Control/FRPNow/Vty.hs
+++ b/src/Control/FRPNow/Vty.hs
@@ -1,28 +1,44 @@
+-- |
+-- Module     : Control.FRPNow.Vty
+-- Copyright  : (c) Jaro Reinders, 2018
+-- License    : GPL-3
+-- Maintainer : jaro.reinders@gmail.com
+--
+-- This module provides interoperability of FRPNow and the vty terminal UI
+-- library.
 module Control.FRPNow.Vty where
 
 import Control.FRPNow
 import qualified Graphics.Vty as Vty
 import Control.Monad (forever)
+import Control.Exception (bracket)
 
+-- | Alias for 'Vty.Event' to prevent name clash with 'Event'.
 type VEvent = Vty.Event
 
+-- | Run a Now computation which produces a behavior of type Picture, and draw
+-- that on the screen.
 runNowVty
-  :: Vty.Config
+  :: Vty.Config -- ^ The vty configuration to use.
   -> (EvStream VEvent -> Now (BehaviorEnd Vty.Picture a))
+  -- ^ A now computation that takes a stream of vty events and produces
+  -- a behavior of pictures and an ending event.
   -> IO a
-runNowVty conf m = do
-  vty <- Vty.mkVty conf
+runNowVty conf m = bracket (Vty.mkVty conf) Vty.shutdown $ \vty ->
   runNowMaster $ do
     (evs, cbk) <- callbackStream
     async (forever (Vty.nextEvent vty >>= cbk))
     (b `Until` e) <- m evs
     sync . Vty.update vty =<< sample b
     callIOStream (Vty.update vty) (toChanges b)
-    plan ((<$ sync (Vty.shutdown vty)) <$> e)
+    pure e
 
+-- | Like 'runNowVty', but does not allow IO.
 runNowVtyPure
-  :: Vty.Config
+  :: Vty.Config -- ^ The vty configuration to use.
   -> (EvStream VEvent -> Behavior (BehaviorEnd Vty.Picture a))
+  -- ^ A computation that takes a stream of vty events and produces
+  -- a behavior of pictures and an ending event.
   -> IO a
 runNowVtyPure conf b = runNowVty conf (sample . b)
 
