diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,14 @@
+## [v1.5.0](https://github.com/diagrams/diagrams-core/tree/v1.5.0) (2021-05-13)
+
+* Updates for GHC 8.10 and 9.0
+* Drop support for GHC < 8.4
+* Remove deprecated `Option` type in favor of `Maybe`.  This is a
+  breaking API change.
+
+## [v1.4.2-r1](https://github.com/diagrams/diagrams-core/tree/v1.4.2-r1) (2020-02-10)
+
+* Allow `lens-4.19` and `linear-1.21`
+
 ## [v1.4.2](https://github.com/diagrams/diagrams-core/tree/v1.4.2) (2019-10-19)
 
 * New `KeyVal` constructor for `Annotation` ([PR](https://github.com/diagrams/diagrams-core/pull/104))
diff --git a/diagrams-core.cabal b/diagrams-core.cabal
--- a/diagrams-core.cabal
+++ b/diagrams-core.cabal
@@ -1,5 +1,5 @@
 Name:                diagrams-core
-Version:             1.4.2
+Version:             1.5.0
 Synopsis:            Core libraries for diagrams EDSL
 Description:         The core modules underlying diagrams,
                      an embedded domain-specific language
@@ -15,7 +15,7 @@
 Cabal-version:       1.18
 Extra-source-files:  CHANGELOG.md, README.markdown, diagrams/*.svg
 extra-doc-files:     diagrams/*.svg
-Tested-with:         GHC == 7.10.2, GHC == 8.0.1, GHC == 8.2.2, GHC == 8.4.1, GHC == 8.6.1, GHC == 8.8.1
+Tested-with:         GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.4, GHC == 9.0.1
 Source-repository head
   type:     git
   location: git://github.com/diagrams/diagrams-core.git
@@ -36,14 +36,14 @@
                        Diagrams.Core.Types,
                        Diagrams.Core.V
 
-  Build-depends:       base >= 4.2 && < 4.14,
+  Build-depends:       base >= 4.11 && < 4.16,
                        containers >= 0.4.2 && < 0.7,
                        unordered-containers >= 0.2 && < 0.3,
                        semigroups >= 0.8.4 && < 0.20,
-                       monoid-extras >= 0.3 && < 0.6,
+                       monoid-extras >= 0.3 && < 0.7,
                        dual-tree >= 0.2 && < 0.3,
-                       lens >= 4.0 && < 4.19,
-                       linear >= 1.11.3 && < 1.21,
+                       lens >= 4.0 && < 5.1,
+                       linear >= 1.11.3 && < 1.22,
                        adjunctions >= 4.0 && < 5.0,
                        distributive >=0.2.2 && < 1.0,
                        profunctors >= 5.0 && < 6.0,
diff --git a/src/Diagrams/Core/Compile.hs b/src/Diagrams/Core/Compile.hs
--- a/src/Diagrams/Core/Compile.hs
+++ b/src/Diagrams/Core/Compile.hs
@@ -103,8 +103,8 @@
       -- 'untangle' we have already performed the action of the
       -- transform on the style).
       (\d t -> case get d of
-                 Option Nothing   -> t
-                 Option (Just d') ->
+                 Nothing -> t
+                 Just d' ->
                    let (tr,sty) = untangle d'
                    in  Node (DStyle sty) [Node (DTransform tr) [t]]
       )
diff --git a/src/Diagrams/Core/Envelope.hs b/src/Diagrams/Core/Envelope.hs
--- a/src/Diagrams/Core/Envelope.hs
+++ b/src/Diagrams/Core/Envelope.hs
@@ -109,10 +109,10 @@
 --   The idea for envelopes came from
 --   Sebastian Setzer; see
 --   <http://byorgey.wordpress.com/2009/10/28/collecting-attributes/#comment-2030>.  See also Brent Yorgey, /Monoids: Theme and Variations/, published in the 2012 Haskell Symposium: <http://ozark.hendrix.edu/~yorgey/pub/monoid-pearl.pdf>; video: <http://www.youtube.com/watch?v=X-8NCkD2vOw>.
-newtype Envelope v n = Envelope (Option (v n -> Max n))
+newtype Envelope v n = Envelope (Maybe (v n -> Max n))
 
 instance Wrapped (Envelope v n) where
-  type Unwrapped (Envelope v n) = Option (v n -> Max n)
+  type Unwrapped (Envelope v n) = Maybe (v n -> Max n)
   _Wrapped' = iso (\(Envelope e) -> e) Envelope
 
 instance Rewrapped (Envelope v n) (Envelope v' n')
@@ -120,7 +120,7 @@
 -- | \"Apply\" an envelope by turning it into a function.  @Nothing@
 --   is returned iff the envelope is empty.
 appEnvelope :: Envelope v n -> Maybe (v n -> n)
-appEnvelope (Envelope (Option e)) = (getMax .) <$> e
+appEnvelope (Envelope e) = (getMax .) <$> e
 
 -- | A convenient way to transform an envelope, by specifying a
 --   transformation on the underlying @v n -> n@ function.  The empty
@@ -130,7 +130,7 @@
 
 -- | Create an envelope from a @v n -> n@ function.
 mkEnvelope :: (v n -> n) -> Envelope v n
-mkEnvelope = Envelope . Option . Just . (Max .)
+mkEnvelope = Envelope . Just . (Max .)
 
 -- | Create a point envelope for the given point.  A point envelope
 --   has distance zero to a bounding hyperplane in every direction.
diff --git a/src/Diagrams/Core/Types.hs b/src/Diagrams/Core/Types.hs
--- a/src/Diagrams/Core/Types.hs
+++ b/src/Diagrams/Core/Types.hs
@@ -224,7 +224,7 @@
 -- | Extract the (total) transformation from a downwards annotation
 --   value.
 transfFromAnnot :: (Additive v, Num n) => DownAnnots v n -> Transformation v n
-transfFromAnnot = option mempty killR . fst
+transfFromAnnot = maybe mempty killR . fst
 
 -- | A leaf in a 'QDiagram' tree is either a 'Prim', or a \"delayed\"
 --   @QDiagram@ which expands to a real @QDiagram@ once it learns the
@@ -347,7 +347,7 @@
 -- | A useful variant of 'getU' which projects out a certain
 --   component.
 getU' :: (Monoid u', u :>: u') => D.DUALTree d u a l -> u'
-getU' = maybe mempty (option mempty id . get) . D.getU
+getU' = maybe mempty (maybe mempty id . get) . D.getU
 
 -- | Lens onto the 'Envelope' of a 'QDiagram'.
 envelope :: (OrderedField n, Metric v, Monoid' m)
diff --git a/src/Diagrams/Core/V.hs b/src/Diagrams/Core/V.hs
--- a/src/Diagrams/Core/V.hs
+++ b/src/Diagrams/Core/V.hs
@@ -47,7 +47,7 @@
 
 type instance V (a -> b)   = V b
 type instance V [a]        = V a
-type instance V (Option a) = V a
+type instance V (Maybe a) = V a
 type instance V (Set a)    = V a
 type instance V (Map k a)  = V a
 
@@ -63,7 +63,7 @@
 
 type instance N (a -> b)   = N b
 type instance N [a]        = N a
-type instance N (Option a) = N a
+type instance N (Maybe a) = N a
 type instance N (Set a)    = N a
 type instance N (Map k a)  = N a
 
@@ -71,7 +71,7 @@
 type instance N (Split m)     = N m
 type instance N (m :+: n)     = N m
 
--- | Conveient type alias to retrieve the vector type associated with an
+-- | Convenient type alias to retrieve the vector type associated with an
 --   object's vector space. This is usually used as @Vn a ~ v n@ where @v@ is
 --   the vector space and @n@ is the numerical field.
 type Vn a = V a (N a)
