diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+0.4
+---
+* Reinstate Text and ByteString instances because some users require them.
+
 0.3.0.1
 -------
 * Add yes/no and y/n parsing to the Bool instance
diff --git a/readable.cabal b/readable.cabal
--- a/readable.cabal
+++ b/readable.cabal
@@ -1,5 +1,5 @@
 name:           readable
-version:        0.3.0.1
+version:        0.3.1
 synopsis:       Reading from Text and ByteString
 
 description:
diff --git a/src/Data/Readable.hs b/src/Data/Readable.hs
--- a/src/Data/Readable.hs
+++ b/src/Data/Readable.hs
@@ -36,7 +36,7 @@
     -- implementation of this function simply decodes with UTF-8 and then
     -- calls the fromText function.  If decoding fails, mzero will be
     -- returned.  You can provide your own implementation if you need
-    -- different behavior.
+    -- different behavior such as not decoding to UTF8.
     fromBS   :: MonadPlus m => ByteString -> m a
     fromBS = fromText <=< hushPlus . decodeUtf8'
 
@@ -53,9 +53,14 @@
   | T.null rest = return a
   | otherwise   = mzero
 
--- We don't supply instances for Text or ByteString anymore because they're
--- almost definitely not what the user would want.  Users should use the
--- appropriate encodeUtf8/decodeUtf8 functions instead.
+
+-- Leaving out these instances breaks users who depend on having a unified
+-- constraint for parsing, so we need to keep them around.
+instance Readable ByteString where
+    fromText = return . encodeUtf8
+    fromBS = return
+instance Readable Text where
+    fromText = return
 
 instance Readable Int where
     fromText = either (const mzero) checkComplete . signed decimal
