diff --git a/bytestringparser-temporary.cabal b/bytestringparser-temporary.cabal
--- a/bytestringparser-temporary.cabal
+++ b/bytestringparser-temporary.cabal
@@ -1,5 +1,5 @@
 name:            bytestringparser-temporary
-version:         0.4.0
+version:         0.4.1
 license:         BSD3
 license-file:    LICENSE
 category:        Text, Parsing
diff --git a/src/Data/ParserCombinators/Attoparsec/Internal.hs b/src/Data/ParserCombinators/Attoparsec/Internal.hs
--- a/src/Data/ParserCombinators/Attoparsec/Internal.hs
+++ b/src/Data/ParserCombinators/Attoparsec/Internal.hs
@@ -281,18 +281,12 @@
 
 takeWhile1 :: (Word8 -> Bool) -> Parser LB.ByteString
 takeWhile1 p = Parser $ \s@(S sb lb n) ->
-               let (h, t) = SB.span p sb
-               in if SB.null h
-                  then Left (sb +: lb, [])
-                  else if SB.null t
-                       then case unParser (nextChunk *> takeWhile p) s of
-                              Left err -> Left err
-                              Right (xs, s') ->
-                                  let bs = h +: xs
-                                  in if LB.null bs
-                                    then Left (sb +: lb, [])
-                                    else Right (bs, s')
-                       else Right (oneChunk h, S t lb (n + length64 h))
+               case unParser (takeWhile p) s of
+                 Left err -> Left err
+                 Right (bs, s') -> if LB.null bs
+                                   then Left (sb +: lb, [msg])
+                                   else Right (bs, s')
+    where msg = "Expected at least one byte to satisfy criterion."
 {-# INLINE takeWhile1 #-}
 
 -- | Skip over characters while the predicate is true.
