diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -10,6 +10,8 @@
 
     - 0.5.1 (October 29, 2020): Update dependencies
 
+    - 0.5.2 (May 15, 2024): Update dependencies
+
 ## 0.4 (November 21, 2016)
 
   * Added the `resolve` function.  If you have a playlist that
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2013-2020 Peter Jones <pjones@devalot.com>
+Copyright (c) 2013-2024 Peter Jones <pjones@devalot.com>
 
 All rights reserved.
 
diff --git a/playlists.cabal b/playlists.cabal
--- a/playlists.cabal
+++ b/playlists.cabal
@@ -1,16 +1,16 @@
-cabal-version:      2.2
+cabal-version:      2.4
 name:               playlists
-version:            0.5.1
+version:            0.5.2
 homepage:           https://github.com/pjones/playlists
 bug-reports:        https://github.com/pjones/playlists/issues
 license:            BSD-3-Clause
 license-file:       LICENSE
 author:             Peter Jones <pjones@devalot.com>
 maintainer:         Peter Jones <pjones@devalot.com>
-copyright:          Copyright (c) 2013-2020 Peter Jones
+copyright:          Copyright (c) 2013-2024 Peter Jones
 category:           Text
 build-type:         Simple
-tested-with:        GHC ==8.6.5 || ==8.8.4 || ==8.10.2
+tested-with:        GHC==8.10.7, GHC==9.4.8, GHC==9.6.5, GHC==9.8.2
 synopsis:           Library and executable for working with playlist files.
 description:
   Playlists is a library for working with media playlist files.  The
@@ -40,11 +40,13 @@
 
 --------------------------------------------------------------------------------
 extra-source-files:
-  README.md
-  CHANGES.md
   test/*.m3u
   test/*.pls
 
+extra-doc-files:
+  README.md
+  CHANGES.md
+
 --------------------------------------------------------------------------------
 source-repository head
   type:     git
@@ -53,11 +55,11 @@
 --------------------------------------------------------------------------------
 common dependencies
   build-depends:
-    , attoparsec  >=0.10 && <0.14
+    , attoparsec  >=0.10 && <0.15
     , base        >=4.6  && <5
-    , bytestring  >=0.10 && <0.12
-    , filepath    >=1.3  && <1.5
-    , text        >=0.11 && <1.3
+    , bytestring  >=0.10 && <0.13
+    , filepath    >=1.3  && <1.6
+    , text        >=0.11 && <2.2
     , word8       >=0.0  && <0.2
 
 --------------------------------------------------------------------------------
@@ -90,7 +92,7 @@
   hs-source-dirs: util
   main-is:        playlist.hs
   build-depends:
-    , optparse-applicative  >=0.10 && <0.17
+    , optparse-applicative  >=0.10 && <0.19
     , playlists
 
 --------------------------------------------------------------------------------
diff --git a/src/Text/Playlist/Internal/ReadWrite.hs b/src/Text/Playlist/Internal/ReadWrite.hs
--- a/src/Text/Playlist/Internal/ReadWrite.hs
+++ b/src/Text/Playlist/Internal/ReadWrite.hs
@@ -20,7 +20,7 @@
 import qualified Data.Attoparsec.ByteString as Atto
 import Data.ByteString (ByteString)
 import qualified Data.ByteString.Lazy as BL
-import qualified Data.ByteString.Lazy.Builder as BL
+import qualified Data.ByteString.Builder as BL
 
 --------------------------------------------------------------------------------
 import qualified Text.Playlist.M3U.Reader as M3U
diff --git a/src/Text/Playlist/M3U/Writer.hs b/src/Text/Playlist/M3U/Writer.hs
--- a/src/Text/Playlist/M3U/Writer.hs
+++ b/src/Text/Playlist/M3U/Writer.hs
@@ -16,8 +16,8 @@
 module Text.Playlist.M3U.Writer (writePlaylist) where
 
 --------------------------------------------------------------------------------
-import Data.ByteString.Lazy.Builder (Builder)
-import qualified Data.ByteString.Lazy.Builder as B
+import Data.ByteString.Builder (Builder)
+import qualified Data.ByteString.Builder as B
 import Data.Text (Text)
 import Data.Text.Encoding (encodeUtf8)
 import Text.Playlist.Types
diff --git a/src/Text/Playlist/PLS/Reader.hs b/src/Text/Playlist/PLS/Reader.hs
--- a/src/Text/Playlist/PLS/Reader.hs
+++ b/src/Text/Playlist/PLS/Reader.hs
@@ -49,7 +49,7 @@
 parseTrack :: Parser Track
 parseTrack = do
   (n, url) <- parseFileN
-  title    <- (Just <$> parseTitle n) <|> return Nothing
+  title    <- optional (parseTitle n)
 
   -- Parse track length.
   mlen <- (Just . realToFrac <$> (skipSpace >> string "Length" >> skipWhile isDigit >> string "=" >> signed double))
diff --git a/src/Text/Playlist/PLS/Writer.hs b/src/Text/Playlist/PLS/Writer.hs
--- a/src/Text/Playlist/PLS/Writer.hs
+++ b/src/Text/Playlist/PLS/Writer.hs
@@ -18,8 +18,8 @@
        ) where
 
 --------------------------------------------------------------------------------
-import Data.ByteString.Lazy.Builder (Builder)
-import qualified Data.ByteString.Lazy.Builder as B
+import Data.ByteString.Builder (Builder)
+import qualified Data.ByteString.Builder as B
 import Data.Text.Encoding (encodeUtf8)
 import Text.Playlist.Types
 
