diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # Base16
 
-[![Build Status](https://travis-ci.com/emilypi/base16.svg?branch=master)](https://travis-ci.com/emilypi/base16)
+![Build Status](https://github.com/emilypi/base16/workflows/Haskell-CI/badge.svg)
 [![Hackage](https://img.shields.io/hackage/v/base16.svg)](https://hackage.haskell.org/package/base16)
 
 RFC 4648-compliant Base16 encoding and decoding.
diff --git a/base16.cabal b/base16.cabal
--- a/base16.cabal
+++ b/base16.cabal
@@ -1,6 +1,6 @@
 cabal-version:   2.0
 name:            base16
-version:         0.3.0.1
+version:         0.3.0.2
 synopsis:        Fast RFC 4648-compliant Base16 encoding
 description:
   RFC 4648-compliant Base16 encodings and decodings.
@@ -12,19 +12,14 @@
 license-file:    LICENSE
 author:          Emily Pillmore
 maintainer:      emilypi@cohomolo.gy
-copyright:       (c) 2020 Emily Pillmore
+copyright:       (c) 2020-2021 Emily Pillmore
 category:        Data
 build-type:      Simple
 extra-doc-files:
   CHANGELOG.md
   README.md
 
-tested-with:
-  GHC ==8.2.2
-   || ==8.4.4
-   || ==8.6.5
-   || ==8.8.4
-   || ==8.10.2
+tested-with:     GHC ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7 || ==9.0.1
 
 source-repository head
   type:     git
@@ -47,10 +42,10 @@
     Data.ByteString.Base16.Internal.W16.ShortLoop
 
   build-depends:
-      base        >=4.10    && <5
-    , bytestring  ^>=0.10
-    , deepseq     >=1.4.3.0 && <1.4.5.0
-    , primitive   >=0.6     && <0.8
+      base        >=4.10 && <5
+    , bytestring  >=0.10 && <0.12
+    , deepseq     ^>=1.4
+    , primitive   >=0.6  && <0.8
     , text        ^>=1.2
     , text-short  ^>=0.1
 
@@ -65,9 +60,9 @@
   hs-source-dirs:   test
   main-is:          Main.hs
   build-depends:
-      base               >=4.10 && <5
+      base               >=4.11 && <5
     , base16
-    , base16-bytestring
+    , base16-bytestring  >=1.0
     , bytestring
     , QuickCheck
     , random-bytestring
@@ -83,9 +78,9 @@
   hs-source-dirs:   benchmarks
   main-is:          Base16Bench.hs
   build-depends:
-      base               >=4.10 && <5
+      base               >=4.11 && <5
     , base16
-    , base16-bytestring
+    , base16-bytestring  >=1.0
     , bytestring
     , criterion
     , deepseq
diff --git a/src/Data/Text/Encoding/Base16.hs b/src/Data/Text/Encoding/Base16.hs
--- a/src/Data/Text/Encoding/Base16.hs
+++ b/src/Data/Text/Encoding/Base16.hs
@@ -45,7 +45,7 @@
 encodeBase16 = B16.encodeBase16 . T.encodeUtf8
 {-# INLINE encodeBase16 #-}
 
--- | Decode a Base16-encoded lazy 'Text' value.
+-- | Decode a Base16-encoded 'Text' value.
 --
 -- See: <https://tools.ietf.org/html/rfc4648#section-8 RFC-4648 section 8>
 --
@@ -61,7 +61,7 @@
 decodeBase16 = fmap T.decodeLatin1 . B16.decodeBase16 . T.encodeUtf8
 {-# INLINE decodeBase16 #-}
 
--- | Attempt to decode a lazy 'Text' value as Base16, converting from
+-- | Attempt to decode a 'Text' value as Base16, converting from
 -- 'ByteString' to 'Text' according to some encoding function. In practice,
 -- This is something like 'decodeUtf8'', which may produce an error.
 --
@@ -87,7 +87,7 @@
   Right a -> first ConversionError (f a)
 {-# INLINE decodeBase16With #-}
 
--- | Decode a Base16-encoded lazy 'Text' value leniently, using a
+-- | Decode a Base16-encoded 'Text' value leniently, using a
 -- strategy that never fails, catching unicode exceptions raised in the
 -- process of converting to text values.
 --
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -166,7 +166,7 @@
 prop_bos_coherence = testGroup "prop_bos_coherence"
   [ testProperty "prop_std_bos_coherence" $ \bs ->
       Right bs == B16.decodeBase16 (B16.encodeBase16' bs)
-      && Right bs == (Right (fst $ Bos.decode $ Bos.encode bs) :: Either T.Text BS.ByteString)
+      && Right bs == Bos.decode (Bos.encode bs)
   ]
 
 -- ---------------------------------------------------------------- --
