diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 ## Changelog for the `vault` package
 
+**0.3.1.5**
+
+* Compatibility with GHC-9.0
+     * Bump dependencies to allow `base >= 4.5 && < 4.16`
+* Depend on `semigroups` only with `GHC < 8.0`
+
 **0.3.1.4**
 
 * Compatibility with GHC-8.10
diff --git a/vault.cabal b/vault.cabal
--- a/vault.cabal
+++ b/vault.cabal
@@ -1,5 +1,5 @@
 Name:               vault
-Version:            0.3.1.4
+Version:            0.3.1.5
 Synopsis:           a persistent store for values of arbitrary types
 Description:
   A /vault/ is a persistent store for values of arbitrary types.
@@ -20,7 +20,7 @@
 Copyright:          (c) Heinrich Apfelmus 2011-2013
 
 build-type:         Simple
-cabal-version:      >= 1.6
+cabal-version:      >= 1.10
 Tested-With:         GHC == 7.6.3
                     ,GHC == 7.8.4
                     ,GHC == 7.10.3
@@ -48,13 +48,16 @@
 
 Library
     hs-source-dirs:     src
-    build-depends:      base >= 4.5 && < 4.15,
+    build-depends:      base >= 4.5 && < 4.16,
                         containers >= 0.4 && < 0.7,
-                        semigroups >= 0.1 && < 1.0,
                         unordered-containers >= 0.2.3.0 && < 0.3,
                         hashable >= 1.1.2.5 && < 1.4
 
-    extensions:         CPP
+    if impl(ghc < 8.0)
+        build-depends:  semigroups >= 0.1 && < 1.0
+
+    default-language:   Haskell2010
+    default-extensions: CPP
     ghc-options:        -Wall -fno-warn-missing-signatures
 
     exposed-modules:
