diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Revision history for siphon
+
+## 0.8.1.2 -- 2021-10-25
+
+* Correct handling of CRLF.
diff --git a/siphon.cabal b/siphon.cabal
--- a/siphon.cabal
+++ b/siphon.cabal
@@ -1,16 +1,17 @@
+cabal-version: 3.0
 name: siphon
-version: 0.8.1.1
+version: 0.8.1.2
 synopsis: Encode and decode CSV files
 description: Please see README.md
 homepage: https://github.com/andrewthad/colonnade#readme
-license: BSD3
+license: BSD-3-Clause
 license-file: LICENSE
 author: Andrew Martin
 maintainer: andrew.thaddeus@gmail.com
 copyright: 2016 Andrew Martin
 category: web
 build-type: Simple
-cabal-version: >=1.10
+extra-source-files: CHANGELOG.md
 
 library
   hs-source-dirs: src
@@ -25,7 +26,7 @@
     , vector
     , streaming >= 0.1.4 && < 0.3
     , attoparsec
-    , transformers >= 0.5 && < 0.6
+    , transformers >= 0.4.2 && < 0.6
     , semigroups >= 0.18.2 && < 0.20
   default-language: Haskell2010
 
diff --git a/src/Siphon.hs b/src/Siphon.hs
--- a/src/Siphon.hs
+++ b/src/Siphon.hs
@@ -388,7 +388,11 @@
   trailChar <- case mb of
     Just b
       | b == comma -> A.anyWord8 >> return TrailCharComma
-      | b == newline || b == cr -> A.anyWord8 >> return TrailCharNewline
+      | b == newline -> A.anyWord8 >> return TrailCharNewline
+      | b == cr -> do
+          _ <- A.anyWord8
+          _ <- A.word8 newline
+          return TrailCharNewline
       | otherwise -> fail "encountered double quote after escaped field"
     Nothing -> return TrailCharEnd
   if doubleQuote `S.elem` s
@@ -412,7 +416,11 @@
   case mb of
     Just b
       | b == comma -> A.anyWord8 >> return (bs,TrailCharComma)
-      | b == newline || b == cr -> A.anyWord8 >> return (bs,TrailCharNewline)
+      | b == newline -> A.anyWord8 >> return (bs,TrailCharNewline)
+      | b == cr -> do
+          _ <- A.anyWord8
+          _ <- A.word8 newline
+          return (bs,TrailCharNewline)
       | otherwise -> fail "encountered double quote in unescaped field"
     Nothing -> return (bs,TrailCharEnd)
 
diff --git a/test/Doctest.hs b/test/Doctest.hs
--- a/test/Doctest.hs
+++ b/test/Doctest.hs
@@ -2,6 +2,7 @@
 
 main :: IO ()
 main = doctest
-  [ "src/Siphon.hs"
+  [ "-isrc"
+  , "src/Siphon.hs"
   ]
 
diff --git a/test/Test.hs b/test/Test.hs
--- a/test/Test.hs
+++ b/test/Test.hs
@@ -108,6 +108,16 @@
                 ]
               )
             ) @?= (["drew","martin, drew"] :> Nothing)
+    , testCase "Headed Decoding (escaped characters, character per chunk, CRLF)"
+        $ ( runIdentity . SMP.toList )
+            ( S.decodeCsvUtf8 decodingF
+              ( mapM_ (SMP.yield . BC8.singleton) $ concat
+                [ "name\r\n"
+                , "drew\r\n"
+                , "\"martin, drew\"\r\n"
+                ]
+              )
+            ) @?= (["drew","martin, drew"] :> Nothing)
     , testProperty "Headed Isomorphism (int,char,bool)"
         $ propIsoStream BC8.unpack
           (S.decodeCsvUtf8 decodingB)
