diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,15 @@
+haskell-torrent (10000.1.3) unstable; urgency=medium
+
+  * Update to cabal-version: >= 1.10 so Hackage will accept uploads again.
+
+ -- Joey Hess <id@joeyh.name>  Tue, 21 Mar 2023 20:44:19 -0400
+
+haskell-torrent (10000.1.2) unstable; urgency=medium
+
+  * Updated to build without deprecation warnings from bencode-0.6.1.0
+
+ -- Joey Hess <id@joeyh.name>  Tue, 21 Mar 2023 20:43:50 -0400
+
 haskell-torrent (10000.1.1) unstable; urgency=medium
 
   * Fix build with pre-AMP base.
diff --git a/src/Data/Torrent.hs b/src/Data/Torrent.hs
--- a/src/Data/Torrent.hs
+++ b/src/Data/Torrent.hs
@@ -15,10 +15,11 @@
 	) where
 
 import Data.BEncode
-import Data.BEncode.Parser
+import Data.BEncode.Reader
 import Data.Binary
 import Data.Generics
 import Data.Maybe
+import Control.Applicative
 
 import qualified Data.ByteString.Lazy as BS
 import Data.ByteString.Lazy (ByteString)
@@ -73,30 +74,29 @@
 readTorrent :: ByteString -> Either String Torrent
 readTorrent inp = case bRead inp of
 	Nothing -> Left "Not BEncoded"
-	Just be -> runParser parseTorrent be
+	Just be -> runBReader parseTorrent be
 
-parseTorrent :: BParser Torrent
+parseTorrent :: BReader Torrent
 parseTorrent = do
-	announce <- optional $ bbytestring $ dict "announce"
-	creator <- optional $ bbytestring $ dict "created by"
-	info <- dict "info"
-	setInput info
-	name <- bbytestring $ dict "name"
-	pLen <- bint $ dict "piece length"
-	pieces <- bbytestring $ dict "pieces"
-	torrentInfo <- parseTorrentInfo name pLen pieces
-	return $ Torrent announce [] BS.empty creator torrentInfo
+	announce <- optional $ dict "announce" bbytestring
+	creator <- optional $ dict "created by" bbytestring
+	dict "info" $ do
+		name <- dict "name" bbytestring
+		pLen <- dict "piece length" bint
+		pieces <- dict "pieces" bbytestring
+		torrentInfo <- parseTorrentInfo name pLen pieces
+		return $ Torrent announce [] BS.empty creator torrentInfo
 
-parseTorrentInfo :: ByteString -> Integer -> ByteString -> BParser TorrentInfo
+parseTorrentInfo :: ByteString -> Integer -> ByteString -> BReader TorrentInfo
 parseTorrentInfo name pLen pieces = single <|> multi
   where
 	single = do
-		len <- bint $ dict "length"
+		len <- dict "length" bint
 		return $ SingleFile len name pLen pieces
 	multi = do
-		files <- list "files" $ do
-			len <- bint $ dict "length"
-			filePaths <- list "path" $ bbytestring token
+		files <- dict "files" $ list $ do
+			len <- dict "length" bint
+			filePaths <- dict "path" (list bbytestring)
 			return $ TorrentFile len filePaths
 		return $ MultiFile files name pLen pieces
 
diff --git a/torrent.cabal b/torrent.cabal
--- a/torrent.cabal
+++ b/torrent.cabal
@@ -1,6 +1,6 @@
 Name: torrent
-Version: 10000.1.1
-Cabal-Version: >= 1.6
+Version: 10000.1.3
+Cabal-Version: >= 1.10
 Maintainer: Joey Hess <id@joeyh.name>
 Author: Lemmih <lemmih@gmail.com>
 Copyright: 2005-2007, Lemmih
@@ -14,10 +14,11 @@
 Library
   GHC-Options: -Wall -fno-warn-tabs
   Hs-Source-Dirs: src
+  Default-Language: Haskell2010
   Exposed-Modules:
     Data.Torrent
     Data.Torrent.Scrape
-  Build-Depends: base >= 4.5, base < 5, binary, bencode >=0.2,
+  Build-Depends: base >= 4.5, base < 5, binary, bencode >= 0.6.1.0,
     filepath, containers, bytestring, syb
 
 source-repository head
