diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,28 +1,6 @@
 # Change Log / Release Notes
 
-## 0.3.0.4 (April 15, 2019)
-
- * Bumped dependencies
-
- * Builds on NixOS 18.09, 19.03, and unstable
-
-## 0.3.0.3 (October 09, 2018)
-
- * Bumped dependencies
-
-## 0.3.0.2 (March 20, 2018)
-
-  * Updated to LTS Haskell 11.1
-
-  * Bumped dependencies
-
-## 0.3.0.1 (April 14, 2017)
-
-  * Updated to LTS Haskell 8.9
-
-  * Bumped dependencies
-
-## 0.3.0.0 (August 11, 2016)
+## 0.3 (August 11, 2016)
 
   * Add some additional (convenience) exports from `Data.Csv`. (Thanks
     goes to Florian Hofmann.)
@@ -30,6 +8,14 @@
   * Added `data/HLint.hs`
 
   * Updated to LTS Haskell 6.7
+
+  * Minor updates:
+
+    - 0.3.0.1 (April 14, 2017): Updated dependencies
+    - 0.3.0.2 (March 20, 2018): Updated dependencies
+    - 0.3.0.3 (October 09, 2018): Updated dependencies
+    - 0.3.0.4 (April 15, 2019): Updated dependencies
+    - 0.3.0.5 (October 29, 2020): Update dependencies
 
 ## 0.2.0.0 (February 8, 2016)
 
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2014-2019 Peter Jones <pjones@devalot.com>
+Copyright (c) 2014-2020 Peter Jones <pjones@devalot.com>
 
 All rights reserved.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,5 +1,9 @@
 # cassava-streams
 
+[![CI](https://github.com/pjones/cassava-streams/workflows/CI/badge.svg)](https://github.com/pjones/cassava-streams/actions)
+[![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/pjones/cassava-streams?label=release)](https://github.com/pjones/cassava-streams/releases)
+[![Hackage](https://img.shields.io/hackage/v/cassava-streams)](https://hackage.haskell.org/package/cassava-streams)
+
 [io-streams][] interface for the [cassava][] CSV library.
 
 [io-streams]: http://hackage.haskell.org/package/io-streams
diff --git a/cassava-streams.cabal b/cassava-streams.cabal
--- a/cassava-streams.cabal
+++ b/cassava-streams.cabal
@@ -1,17 +1,17 @@
---------------------------------------------------------------------------------
-name:          cassava-streams
-version:       0.3.0.4
-synopsis:      io-streams interface for the cassava CSV library.
-license:       BSD3
-license-file:  LICENSE
-author:        Peter Jones <pjones@devalot.com>
-maintainer:    Peter Jones <pjones@devalot.com>
-copyright:     Copyright (c) 2014-2019 Peter Jones
-category:      Data, Text, CSV, IO-Streams
-build-type:    Simple
-cabal-version: 1.18
-homepage:      https://code.devalot.com/open/cassava-streams
-bug-reports:   https://code.devalot.com/open/cassava-streams/issues
+cabal-version:      2.2
+name:               cassava-streams
+version:            0.3.0.5
+synopsis:           io-streams interface for the cassava CSV library.
+license:            BSD-3-Clause
+license-file:       LICENSE
+author:             Peter Jones <pjones@devalot.com>
+maintainer:         Peter Jones <pjones@devalot.com>
+copyright:          Copyright (c) 2014-2020 Peter Jones
+category:           Data, Text, CSV, IO-Streams
+build-type:         Simple
+homepage:           https://github.com/pjones/cassava-streams
+bug-reports:        https://github.com/pjones/cassava-streams/issues
+tested-with:        GHC ==8.6.5 || ==8.8.4 || ==8.10.2
 description:
   The cassava-streams library glues togeter the cassava CSV library
   and the io-streams streaming library.
@@ -27,61 +27,65 @@
 --------------------------------------------------------------------------------
 source-repository head
   type:     git
-  location: https://code.devalot.com/open/cassava-streams.git
+  location: https://github.com/pjones/cassava-streams.git
 
 --------------------------------------------------------------------------------
 flag tutorial
   description: Build the tutorial binary (useful for profiling).
-  manual: True
-  default: False
+  manual:      True
+  default:     False
 
 --------------------------------------------------------------------------------
+common dependencies
+  build-depends:
+    , base        >=4.8  && <5.0
+    , bytestring  >=0.10 && <0.12
+    , cassava     >=0.4  && <0.6
+    , io-streams  >=1.1  && <1.6
+    , vector      >=0.10 && <0.13
+
+--------------------------------------------------------------------------------
 library
+  import:           dependencies
   exposed-modules:
     System.IO.Streams.Csv
     System.IO.Streams.Csv.Tutorial
+
   other-modules:
-    System.IO.Streams.Csv.Encode
     System.IO.Streams.Csv.Decode
+    System.IO.Streams.Csv.Encode
 
-  hs-source-dirs: src
+  hs-source-dirs:   src
   default-language: Haskell2010
-  ghc-options: -Wall -fwarn-incomplete-uni-patterns
-
-  build-depends: base       >= 4.8   && < 5.0
-               , bytestring >= 0.10  && < 0.11
-               , cassava    >= 0.4   && < 0.6
-               , io-streams >= 1.1   && < 1.6
-               , vector     >= 0.10  && < 0.13
+  ghc-options:      -Wall -fwarn-incomplete-uni-patterns
+  build-depends:
 
 --------------------------------------------------------------------------------
 executable tutorial
   default-language: Haskell2010
-  hs-source-dirs: bin
-  main-is: tutorial.hs
-  ghc-options: -Wall -fwarn-incomplete-uni-patterns -rtsopts
+  hs-source-dirs:   bin
+  main-is:          tutorial.hs
+  ghc-options:      -Wall -fwarn-incomplete-uni-patterns -rtsopts
 
   if !flag(tutorial)
     buildable: False
+
   else
-    build-depends: base
-                 , cassava-streams
-                 , io-streams
+    build-depends:
+      , base
+      , cassava-streams
+      , io-streams
 
 --------------------------------------------------------------------------------
 test-suite test
-  type: exitcode-stdio-1.0
+  import:           dependencies
+  type:             exitcode-stdio-1.0
   default-language: Haskell2010
-  hs-source-dirs: test
-  main-is: test.hs
-  ghc-options: -Wall -fwarn-incomplete-uni-patterns
-
-  build-depends: base
-               , QuickCheck >= 2.7 && < 3.0
-               , bytestring
-               , cassava
-               , cassava-streams
-               , io-streams
-               , tasty            >= 0.8 && < 1.3
-               , tasty-quickcheck >= 0.8 && < 1.3
-               , vector
+  hs-source-dirs:   test
+  main-is:          test.hs
+  ghc-options:      -Wall -fwarn-incomplete-uni-patterns
+  build-depends:
+    , cassava-streams
+    , QuickCheck        >=2.7 && <3.0
+    , tasty             >=0.8 && <1.5
+    , tasty-quickcheck  >=0.8 && <1.3
diff --git a/src/System/IO/Streams/Csv/Decode.hs b/src/System/IO/Streams/Csv/Decode.hs
--- a/src/System/IO/Streams/Csv/Decode.hs
+++ b/src/System/IO/Streams/Csv/Decode.hs
@@ -37,7 +37,7 @@
 --------------------------------------------------------------------------------
 -- | Exception thrown when stream decoding cannot continue due to an
 -- error.
-data StreamDecodingError = StreamDecodingError String
+newtype StreamDecodingError = StreamDecodingError String
   deriving (Typeable, Show)
 
 instance Exception StreamDecodingError
diff --git a/test/test.hs b/test/test.hs
--- a/test/test.hs
+++ b/test/test.hs
@@ -70,7 +70,7 @@
   Streams.connect sourceList encoder
 
   -- Decode from ByteString.
-  decoder <- fmap BS.concat encoded >>= Streams.fromByteString >>= is
+  decoder <- (encoded >>= Streams.fromByteString . BS.concat) >>= is
   (decodeStream, decoded) <- Streams.listOutputStream
   Streams.connect decoder decodeStream
   decoded
