diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Revision history for base16
 
+## 0.3.2.0
+
+* Fix incorrect behavior in `Data.ByteString.Short.Base16#encodeBase16`
+* Drop base GHC <8.10
+
 ## 0.3.0.1
 
 * Allow for mixed-case lenient decoding + validation
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.1.0
+version:         0.3.2.0
 synopsis:        Fast RFC 4648-compliant Base16 encoding
 description:
   RFC 4648-compliant Base16 encodings and decodings.
@@ -12,7 +12,7 @@
 license-file:    LICENSE
 author:          Emily Pillmore
 maintainer:      emilypi@cohomolo.gy
-copyright:       (c) 2020-2021 Emily Pillmore
+copyright:       (c) 2020-2022 Emily Pillmore
 category:        Data
 build-type:      Simple
 extra-doc-files:
@@ -20,10 +20,7 @@
   README.md
 
 tested-with:
-  GHC ==8.4.4
-   || ==8.6.5
-   || ==8.8.4
-   || ==8.10.7
+  GHC ==8.10.7
    || ==9.0.1
    || ==9.2.1
 
@@ -48,7 +45,7 @@
     Data.ByteString.Base16.Internal.W16.ShortLoop
 
   build-depends:
-      base        >=4.10 && <4.17
+      base        >=4.14 && <4.17
     , bytestring  >=0.10 && <0.12
     , deepseq     ^>=1.4
     , primitive   >=0.6  && <0.8
@@ -66,7 +63,7 @@
   hs-source-dirs:   test
   main-is:          Main.hs
   build-depends:
-      base               >=4.11 && <4.17
+      base               >=4.14 && <4.17
     , base16
     , base16-bytestring  >=1.0
     , bytestring
@@ -84,7 +81,7 @@
   hs-source-dirs:   benchmarks
   main-is:          Base16Bench.hs
   build-depends:
-      base               >=4.11 && <4.17
+      base               >=4.14 && <4.17
     , base16
     , base16-bytestring  >=1.0
     , bytestring
diff --git a/src/Data/ByteString/Base16/Internal/Utils.hs b/src/Data/ByteString/Base16/Internal/Utils.hs
--- a/src/Data/ByteString/Base16/Internal/Utils.hs
+++ b/src/Data/ByteString/Base16/Internal/Utils.hs
@@ -41,7 +41,7 @@
   where
     cont_ q [] = [q]
     cont_ q (a:as) = case B.splitAt 1 a of
-      ~(x, y) -> let q' = B.append q x
+      (x, y) -> let q' = B.append q x
         in if B.length q' == 2
           then
             let as' = if B.null y then as else y:as
diff --git a/src/Data/ByteString/Short/Base16.hs b/src/Data/ByteString/Short/Base16.hs
--- a/src/Data/ByteString/Short/Base16.hs
+++ b/src/Data/ByteString/Short/Base16.hs
@@ -44,7 +44,7 @@
 -- @since 0.3.0.0
 --
 encodeBase16 :: ShortByteString -> ShortText
-encodeBase16 = fromShortByteStringUnsafe . decodeBase16ShortLenient_
+encodeBase16 = fromShortByteStringUnsafe . encodeBase16'
 {-# INLINE encodeBase16 #-}
 
 -- | Encode a 'ShortByteString' value as a Base16 'ShortByteString'  value with padding.
diff --git a/src/Data/Text/Short/Encoding/Base16.hs b/src/Data/Text/Short/Encoding/Base16.hs
--- a/src/Data/Text/Short/Encoding/Base16.hs
+++ b/src/Data/Text/Short/Encoding/Base16.hs
@@ -43,9 +43,7 @@
 -- "53756e"
 --
 encodeBase16 :: ShortText -> ShortText
-encodeBase16 = fromShortByteStringUnsafe
-  . BS16.encodeBase16'
-  . toShortByteString
+encodeBase16 = BS16.encodeBase16 . toShortByteString
 {-# INLINE encodeBase16 #-}
 
 -- | Decode a Base16-encoded 'ShortText' value.
