diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for reflex-vty
 
+## 0.4.1.1
+
+* Support ghc-9.6
+
 ## 0.4.1.0
 
 * Loosen version bounds and support GHC 9.4.4
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # reflex-vty
 
-[![Haskell](https://img.shields.io/badge/language-Haskell-orange.svg)](https://haskell.org) [![Hackage](https://img.shields.io/hackage/v/reflex-vty.svg)](https://hackage.haskell.org/package/reflex-vty) [![Travis CI](https://api.travis-ci.org/reflex-frp/reflex-vty.svg?branch=develop)](https://travis-ci.org/reflex-frp/reflex-vty) [![BSD3 License](https://img.shields.io/badge/license-BSD3-blue.svg)](https://github.com/reflex-frp/reflex-vty/blob/master/LICENSE)
+[![Haskell](https://img.shields.io/badge/language-Haskell-orange.svg)](https://haskell.org) [![Hackage](https://img.shields.io/hackage/v/reflex-vty.svg)](https://hackage.haskell.org/package/reflex-vty) [![BSD3 License](https://img.shields.io/badge/license-BSD3-blue.svg)](https://github.com/reflex-frp/reflex-vty/blob/master/LICENSE)
 
 Build terminal applications using functional reactive programming (FRP) with [Reflex FRP](https://reflex-frp.org).
 
diff --git a/reflex-vty.cabal b/reflex-vty.cabal
--- a/reflex-vty.cabal
+++ b/reflex-vty.cabal
@@ -1,5 +1,5 @@
 name: reflex-vty
-version: 0.4.1.0
+version: 0.4.1.1
 synopsis: Reflex FRP host and widgets for VTY applications
 description:
   Build terminal applications using functional reactive programming (FRP) with Reflex FRP (<https://reflex-frp.org>).
@@ -18,7 +18,7 @@
   ChangeLog.md
 extra-doc-files: doc/tasks.png
 tested-with:
-  GHC ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.4.4
+  GHC ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.4.5 || ==9.6.1
 
 source-repository head
   type: git
@@ -39,11 +39,11 @@
                  , Reflex.Spider.Orphans
                  , Control.Monad.NodeId
   build-depends:
-    base >= 4.10.0 && < 4.18,
+    base >= 4.10.0 && < 4.19,
     bimap >= 0.3.3 && < 0.6,
     containers >= 0.5.0 && < 0.7,
-    mtl >= 2.2.2 && < 2.3,
-    transformers >= 0.5.5 && < 0.6,
+    mtl >= 2.2.2 && < 2.4,
+    transformers >= 0.5.5 && < 0.7,
     stm >= 2.4 && < 2.6,
     data-default >= 0.7.1 && < 0.8,
     dependent-map >= 0.4 && < 0.5,
@@ -56,7 +56,7 @@
     ref-tf >= 0.4.0 && < 0.6,
     reflex >= 0.8 && < 1,
     time >= 1.8.0 && < 1.13,
-    vty >= 5.28 && < 5.38
+    vty >= 5.28 && < 5.39
   hs-source-dirs: src
   default-language: Haskell2010
   ghc-options: -Wall
diff --git a/src/Control/Monad/NodeId.hs b/src/Control/Monad/NodeId.hs
--- a/src/Control/Monad/NodeId.hs
+++ b/src/Control/Monad/NodeId.hs
@@ -11,6 +11,7 @@
   ) where
 
 import Control.Monad.Morph
+import Control.Monad.Fix
 import Control.Monad.Reader
 import Control.Monad.Ref
 import Data.IORef
diff --git a/src/Data/Text/Zipper.hs b/src/Data/Text/Zipper.hs
--- a/src/Data/Text/Zipper.hs
+++ b/src/Data/Text/Zipper.hs
@@ -12,11 +12,14 @@
 import           Prelude
 
 import Control.Exception (assert)
-import Control.Monad.State (evalState, forM, get, put)
 import Data.Char (isSpace)
 import Data.Map (Map)
 import Data.Maybe (fromMaybe)
 import Data.String
+import Control.Monad
+import Control.Monad.Fix
+import Control.Monad.State (evalState, get, put)
+
 import Data.Text (Text)
 import Data.Text.Internal (Text(..), text)
 import Data.Text.Internal.Fusion (stream)
diff --git a/src/Reflex/Vty/Widget/Layout.hs b/src/Reflex/Vty/Widget/Layout.hs
--- a/src/Reflex/Vty/Widget/Layout.hs
+++ b/src/Reflex/Vty/Widget/Layout.hs
@@ -9,6 +9,8 @@
 import Control.Applicative (liftA2)
 import Control.Monad.Morph
 import Control.Monad.NodeId (MonadNodeId(..), NodeId)
+import Control.Monad
+import Control.Monad.Fix
 import Control.Monad.Reader
 import Data.List (mapAccumL)
 import Data.Map.Ordered (OMap)
