diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,9 @@
+0.3.3
+===
+
+- GHC 9.14.1 support
+- simplified Cabal stanzas to best practice template
+
 0.3.2
 ===
 
diff --git a/formatn.cabal b/formatn.cabal
--- a/formatn.cabal
+++ b/formatn.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name: formatn
-version: 0.3.2.0
+version: 0.3.3.0
 license: BSD-3-Clause
 license-file: LICENSE
 copyright: Tony Day (c) 2016
@@ -21,10 +21,9 @@
 
 build-type: Simple
 tested-with:
-  ghc ==9.6.7
-  ghc ==9.8.4
-  ghc ==9.10.2
+  ghc ==9.10.3
   ghc ==9.12.2
+  ghc ==9.14.1
 
 extra-doc-files:
   ChangeLog.md
@@ -38,35 +37,13 @@
   ghc-options:
     -Wall
     -Wcompat
-    -Widentities
     -Wincomplete-record-updates
     -Wincomplete-uni-patterns
-    -Wpartial-fields
     -Wredundant-constraints
 
-common ghc2024-additions
-  default-extensions:
-    DataKinds
-    DerivingStrategies
-    DisambiguateRecordFields
-    ExplicitNamespaces
-    GADTs
-    LambdaCase
-    MonoLocalBinds
-    RoleAnnotations
-
-common ghc2024-stanza
-  if impl(ghc >=9.10)
-    default-language:
-      GHC2024
-  else
-    import: ghc2024-additions
-    default-language:
-      GHC2021
-
 library
   import: ghc-options-stanza
-  import: ghc2024-stanza
+  default-language: GHC2024
   hs-source-dirs: src
   build-depends:
     base >=4.14 && <5,
@@ -76,7 +53,8 @@
   exposed-modules: Data.FormatN
 
 test-suite doctests
-  import: ghc2024-stanza
+  import: ghc-options-stanza
+  default-language: GHC2024
   main-is: doctests.hs
   hs-source-dirs: test
   build-depends:
