diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
 Brick changelog
 ---------------
 
+0.41.4
+------
+
+API changes:
+ * Forms: added `setFormFocus` function to set focus for a form
+ * Added `NFData` instances for `AttrMap` and `Theme` types (thanks
+   Fraser Tweedale)
+
 0.41.3
 ------
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -67,6 +67,7 @@
  * `bhoogle`, a [Hoogle](https://www.haskell.org/hoogle/) client: https://github.com/andrevdm/bhoogle
  * `clifm`, a file manager: https://github.com/pasqu4le/clifm
  * `towerHanoi`, animated solutions to The Tower of Hanoi: https://github.com/shajenM/projects/tree/master/towerHanoi
+ * [`VOIDSPACE`](https://github.com/ChrisPenner/void-space), fight off scary category theory terms in this space-themed typing-tutor game: https://github.com/ChrisPenner/void-space
 
 Getting Started
 ---------------
diff --git a/brick.cabal b/brick.cabal
--- a/brick.cabal
+++ b/brick.cabal
@@ -1,5 +1,5 @@
 name:                brick
-version:             0.41.3
+version:             0.41.4
 synopsis:            A declarative terminal user interface library
 description:
   Write terminal applications painlessly with 'brick'! You write an
diff --git a/programs/MouseDemo.hs b/programs/MouseDemo.hs
--- a/programs/MouseDemo.hs
+++ b/programs/MouseDemo.hs
@@ -124,7 +124,7 @@
           return v
 
     void $ M.customMain buildVty Nothing app $ St [] Nothing
-           "Press Ctrl-up and Ctrl-down arrow keys to scroll, ESC to quit.\n\
+           "Try clicking on various UI elements.\n\
            \Observe that the click coordinates identify the\n\
            \underlying widget coordinates.\n\
            \\n\
diff --git a/src/Brick/AttrMap.hs b/src/Brick/AttrMap.hs
--- a/src/Brick/AttrMap.hs
+++ b/src/Brick/AttrMap.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE DeriveGeneric #-}
 -- | This module provides types and functions for managing an attribute
 -- map which maps attribute names ('AttrName') to attributes ('Attr').
@@ -51,6 +52,7 @@
 
 import qualified Data.Semigroup as Sem
 
+import Control.DeepSeq
 import qualified Data.Map as M
 import Data.Maybe (catMaybes)
 import Data.List (inits)
@@ -72,7 +74,7 @@
 -- "header" <> "clock" <> "seconds"
 -- @
 data AttrName = AttrName [String]
-              deriving (Show, Read, Eq, Ord, Generic)
+              deriving (Show, Read, Eq, Ord, Generic, NFData)
 
 instance Sem.Semigroup AttrName where
     (AttrName as) <> (AttrName bs) = AttrName $ as `mappend` bs
@@ -87,7 +89,7 @@
 -- | An attribute map which maps 'AttrName' values to 'Attr' values.
 data AttrMap = AttrMap Attr (M.Map AttrName Attr)
              | ForceAttr Attr
-             deriving (Show, Generic)
+             deriving (Show, Generic, NFData)
 
 -- | Create an attribute name from a string.
 attrName :: String -> AttrName
diff --git a/src/Brick/Forms.hs b/src/Brick/Forms.hs
--- a/src/Brick/Forms.hs
+++ b/src/Brick/Forms.hs
@@ -59,6 +59,7 @@
   , setFieldValid
   , setFormConcat
   , setFieldConcat
+  , setFormFocus
 
   -- * Simple form field constructors
   , editTextField
@@ -225,6 +226,10 @@
 (@@=) h mkFs s =
     let v = mkFs s
     in v { formFieldRenderHelper = h . (formFieldRenderHelper v) }
+
+-- | Set the focused field of a form.
+setFormFocus :: (Eq n) => n -> Form s e n -> Form s e n
+setFormFocus n f = f { formFocus = focusSetCurrent n $ formFocus f }
 
 -- | Set a form field's concatenation function.
 setFieldConcat :: ([Widget n] -> Widget n) -> FormFieldState s e n -> FormFieldState s e n
diff --git a/src/Brick/Themes.hs b/src/Brick/Themes.hs
--- a/src/Brick/Themes.hs
+++ b/src/Brick/Themes.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE TupleSections #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE TemplateHaskell #-}
 -- | Support for representing attribute themes and loading and saving
@@ -76,6 +77,7 @@
 
 import GHC.Generics (Generic)
 import Graphics.Vty hiding ((<|>))
+import Control.DeepSeq
 import Control.Monad (forM, join)
 import Control.Applicative ((<|>))
 import qualified Data.Text as T
@@ -107,7 +109,7 @@
                , customStyle :: Maybe Style
                -- ^ The customized style, if any.
                }
-               deriving (Eq, Read, Show, Generic)
+               deriving (Eq, Read, Show, Generic, NFData)
 
 instance Sem.Semigroup CustomAttr where
     a <> b =
@@ -127,7 +129,7 @@
                        -- so e.g. documentation for theme customization
                        -- can be generated mechanically.
                        }
-                       deriving (Eq, Read, Show, Generic)
+                       deriving (Eq, Read, Show, Generic, NFData)
 
 -- | A theme provides a set of default attribute mappings, a default
 -- attribute, and a set of customizations for the default mapping
@@ -151,7 +153,7 @@
           -- default mapping; any attributes named here that are not
           -- present in the default mapping will not be considered.
           }
-          deriving (Eq, Read, Show, Generic)
+          deriving (Eq, Read, Show, Generic, NFData)
 
 suffixLenses ''CustomAttr
 suffixLenses ''Theme
