diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.9.6.2
+
+* No externally visible changes
+
 ## 0.9.6.1
 
 * No externally visible changes
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2014-2018 Purely Agile Limited; 2019-2022 Tom Ellis
+Copyright (c) 2014-2018 Purely Agile Limited; 2019-2023 Tom Ellis
 
 All rights reserved.
 
diff --git a/opaleye.cabal b/opaleye.cabal
--- a/opaleye.cabal
+++ b/opaleye.cabal
@@ -1,6 +1,6 @@
 name:            opaleye
-copyright:       Copyright (c) 2014-2018 Purely Agile Limited; 2019-2022 Tom Ellis
-version:         0.9.6.1
+copyright:       Copyright (c) 2014-2018 Purely Agile Limited; 2019-2023 Tom Ellis
+version:         0.9.6.2
 synopsis:        An SQL-generating DSL targeting PostgreSQL
 description:     An SQL-generating DSL targeting PostgreSQL.  Allows
                  Postgres queries to be written within Haskell in a
@@ -16,7 +16,7 @@
 extra-doc-files: README.md
                  CHANGELOG.md
                  *.md
-tested-with:     GHC==9.2, GHC==9.0, GHC==8.10, GHC==8.8, GHC==8.6, GHC==8.4, GHC==8.2, GHC==8.0
+tested-with:     GHC==9.6, GHC==9.4, GHC==9.2, GHC==9.0, GHC==8.10, GHC==8.8
 
 source-repository head
   type:     git
@@ -27,7 +27,7 @@
   hs-source-dirs: src
   build-depends:
       aeson               >= 0.6     && < 2.2
-    , base                >= 4.9     && < 4.18
+    , base                >= 4.9     && < 4.19
     , base16-bytestring   >= 0.1.1.6 && < 1.1
     , case-insensitive    >= 1.2     && < 1.3
     , bytestring          >= 0.10    && < 0.12
@@ -39,7 +39,7 @@
     , scientific          >= 0.3     && < 0.4
     , semigroups          >= 0.13    && < 0.21
     , text                >= 0.11    && < 2.1
-    , transformers        >= 0.3     && < 0.6
+    , transformers        >= 0.3     && < 0.7
     , time-compat         >= 1.9.5   && < 1.12
     , time-locale-compat  >= 0.1     && < 0.2
     , uuid                >= 1.3     && < 1.4
diff --git a/src/Opaleye/Aggregate.hs b/src/Opaleye/Aggregate.hs
--- a/src/Opaleye/Aggregate.hs
+++ b/src/Opaleye/Aggregate.hs
@@ -157,11 +157,7 @@
 arrayAgg_ = A.makeAggr HPQ.AggrArr
 
 {-|
-FIXME: no longer supports nulls
-
-Aggregates values, including nulls, as a JSON array
-
-An example usage:
+Aggregates values as a JSON array. An example usage:
 
 @
 import qualified Opaleye as O
diff --git a/src/Opaleye/Internal/Aggregate.hs b/src/Opaleye/Internal/Aggregate.hs
--- a/src/Opaleye/Internal/Aggregate.hs
+++ b/src/Opaleye/Internal/Aggregate.hs
@@ -34,8 +34,8 @@
                          a b)
 
 makeAggr' :: Maybe HPQ.AggrOp -> Aggregator (C.Field_ n a) (C.Field_ n' b)
-makeAggr' mAggrOp = Aggregator (PM.PackMap
-  (\f (C.Column e) -> fmap C.Column (f (fmap (, [], HPQ.AggrAll) mAggrOp, e))))
+makeAggr' mAggrOp = P.dimap C.unColumn C.Column $ Aggregator (PM.PackMap
+  (\f e -> f (fmap (, [], HPQ.AggrAll) mAggrOp, e)))
 
 makeAggr :: HPQ.AggrOp -> Aggregator (C.Field_ n a) (C.Field_ n' b)
 makeAggr = makeAggr' . Just
diff --git a/src/Opaleye/Internal/Binary.hs b/src/Opaleye/Internal/Binary.hs
--- a/src/Opaleye/Internal/Binary.hs
+++ b/src/Opaleye/Internal/Binary.hs
@@ -35,8 +35,7 @@
 runBinaryspec (Binaryspec b) = PM.traversePM b
 
 binaryspecColumn :: Binaryspec (Field_ n a) (Field_ n a)
-binaryspecColumn = Binaryspec (PM.iso (mapBoth unColumn) Column)
-  where mapBoth f (s, t) = (f s, f t)
+binaryspecColumn = dimap unColumn Column (Binaryspec (PM.PackMap id))
 
 sameTypeBinOpHelper :: PQ.BinOp -> Binaryspec columns columns'
                     -> Q.Query columns -> Q.Query columns -> Q.Query columns'
diff --git a/src/Opaleye/Internal/Column.hs b/src/Opaleye/Internal/Column.hs
--- a/src/Opaleye/Internal/Column.hs
+++ b/src/Opaleye/Internal/Column.hs
@@ -22,7 +22,7 @@
 type FieldNullable = Field_ 'Nullable
 
 -- | Only used within a 'Column', to indicate that it can be @NULL@.
--- For example, a 'Column' ('Nullable' @SqlText@) can be @NULL@ but a
+-- For example, a @'Column' ('Nullable' SqlText)@ can be @NULL@ but a
 -- 'Column' @SqlText@ cannot.
 data Nullable a = Nullable_
 
diff --git a/src/Opaleye/Internal/Unpackspec.hs b/src/Opaleye/Internal/Unpackspec.hs
--- a/src/Opaleye/Internal/Unpackspec.hs
+++ b/src/Opaleye/Internal/Unpackspec.hs
@@ -39,7 +39,7 @@
 
 -- | Target the single 'HPQ.PrimExpr' inside a 'F.Field n'
 unpackspecField :: Unpackspec (F.Field_ n a) (F.Field_ n a)
-unpackspecField = Unpackspec (PM.iso IC.unColumn IC.Column)
+unpackspecField = dimap IC.unColumn IC.Column (Unpackspec (PM.PackMap id))
 
 -- | Modify all the targeted 'HPQ.PrimExpr's
 runUnpackspec :: Applicative f
diff --git a/src/Opaleye/Internal/Values.hs b/src/Opaleye/Internal/Values.hs
--- a/src/Opaleye/Internal/Values.hs
+++ b/src/Opaleye/Internal/Values.hs
@@ -59,11 +59,11 @@
 
 -- Some overlap here with extractAttrPE
 nonEmptyRowspecField :: NonEmptyRowspec (Field_ n a) (Field_ n a)
-nonEmptyRowspecField = NonEmptyRowspec (pure . C.unColumn) s
+nonEmptyRowspecField = dimap C.unColumn C.Column $ NonEmptyRowspec pure s
   where s = do
           t <- T.fresh
           let symbol = HPQ.Symbol "values" t
-          pure (pure symbol, C.Column (HPQ.AttrExpr symbol))
+          pure (pure symbol, HPQ.AttrExpr symbol)
 
 rowspecField :: Rowspec (Field_ n a) (Field_ n a)
 rowspecField = NonEmptyRows nonEmptyRowspecField
diff --git a/src/Opaleye/Order.hs b/src/Opaleye/Order.hs
--- a/src/Opaleye/Order.hs
+++ b/src/Opaleye/Order.hs
@@ -1,5 +1,3 @@
-{-# LANGUAGE ConstraintKinds #-}
-{-# LANGUAGE TypeSynonymInstances #-}
 {-# LANGUAGE FlexibleContexts #-}
 
 -- | @ORDER BY@, @LIMIT@, @OFFSET@ and @DISTINCT ON@
