diff --git a/Debian/Apt/Dependencies.hs b/Debian/Apt/Dependencies.hs
--- a/Debian/Apt/Dependencies.hs
+++ b/Debian/Apt/Dependencies.hs
@@ -16,13 +16,14 @@
 import Control.Arrow (second)
 import qualified Data.ByteString.Char8 as C
 import Data.List as List (find, union)
-import Data.Tree(Tree(rootLabel, Node))
-import Debian.Apt.Package(PackageNameMap, packageNameMap, lookupPackageByRel)
-import Debian.Control.ByteString(ControlFunctions(stripWS, lookupP, parseControlFromFile),
-                                 Field'(Field, Comment), Control'(Control), Paragraph, Control)
+import Data.Tree (Tree(rootLabel, Node))
+import Debian.Apt.Package (PackageNameMap, packageNameMap, lookupPackageByRel)
+import Debian.Control.ByteString (ControlFunctions(stripWS, lookupP, parseControlFromFile),
+                                  Field'(Field, Comment), Control'(Control), Paragraph, Control)
 import Debian.Relation (BinPkgName(..))
-import Debian.Relation.ByteString(ParseRelations(..), Relation(..), OrRelation, AndRelation, Relations, checkVersionReq)
-import Debian.Version(DebianVersion, parseDebianVersion, prettyDebianVersion)
+import Debian.Relation.ByteString (ParseRelations(..), Relation(..), OrRelation, AndRelation, Relations, checkVersionReq)
+import Debian.Version (DebianVersion, parseDebianVersion, prettyDebianVersion)
+import Debian.Version.ByteString ()
 import Text.PrettyPrint (render)
 
 -- * Basic CSP Types and Functions
@@ -113,7 +114,10 @@
       (Just (Field (_, name))) ->
           case lookupP "Version" p of
             Nothing -> error $ "Paragraph missing Version field"
-            (Just (Field (_, version))) -> (BinPkgName (C.unpack (stripWS name)), parseDebianVersion (C.unpack version))
+            (Just (Field (_, str))) ->
+                case parseDebianVersion str of
+                  Right ver -> (BinPkgName (C.unpack (stripWS name)), ver)
+                  Left e -> error $ "packageVersionParagraph: " ++ show e
             (Just (Comment _)) -> error "packageVersionParagraph"
       (Just (Comment _)) -> error "packageVersionParagraph"
 
diff --git a/Debian/Changes.hs b/Debian/Changes.hs
--- a/Debian/Changes.hs
+++ b/Debian/Changes.hs
@@ -209,7 +209,7 @@
       x | mrSubList x == [] -> Left ["Parse error in " ++ show text]
       MR {mrAfter = after, mrSubList = [_, name, ver, dists, urgency, _, details, _, _, who, _, date, _]} ->
           Right (Entry name
-                         (parseDebianVersion ver)
+                         (parseDebianVersion' ver)
                          (map parseReleaseName . words $ dists)
                          urgency
                          ("  " ++ unpack (strip (pack details)) ++ "\n")
@@ -251,7 +251,7 @@
       MR {mrSubList = []} -> Nothing
       MR {mrSubList = [_, name, ver, dists, urgency, _, details]} ->
           Just $ Entry name
-                       (parseDebianVersion ver)
+                       (parseDebianVersion' ver)
                        (map parseReleaseName . words $ dists)
                        urgency
                        details
diff --git a/Debian/Relation/String.hs b/Debian/Relation/String.hs
--- a/Debian/Relation/String.hs
+++ b/Debian/Relation/String.hs
@@ -84,7 +84,7 @@
        ver <- many1 (noneOf [' ',')','\t','\n'])
        skipMany whiteChar
        char ')'
-       return $ Just (op (parseDebianVersion ver))
+       return $ Just (op (parseDebianVersion' ver))
     <|>
     do return $ Nothing
 
diff --git a/Debian/Report.hs b/Debian/Report.hs
--- a/Debian/Report.hs
+++ b/Debian/Report.hs
@@ -40,7 +40,7 @@
 
 -- |extract the version number from a control paragraph
 extractVersion :: Paragraph -> Maybe DebianVersion
-extractVersion paragraph = fmap (parseDebianVersion . unpack)  $ fieldValue "Version" paragraph
+extractVersion paragraph = fmap (parseDebianVersion' . unpack)  $ fieldValue "Version" paragraph
 
 -- * Trump Report
 
diff --git a/Debian/Version.hs b/Debian/Version.hs
--- a/Debian/Version.hs
+++ b/Debian/Version.hs
@@ -4,6 +4,7 @@
     (DebianVersion -- |Exported abstract because the internal representation is likely to change
     , prettyDebianVersion
     , parseDebianVersion
+    , parseDebianVersion'
     , epoch
     , version
     , revision
diff --git a/Debian/Version/ByteString.hs b/Debian/Version/ByteString.hs
--- a/Debian/Version/ByteString.hs
+++ b/Debian/Version/ByteString.hs
@@ -14,5 +14,5 @@
     parseDebianVersion byteStr =
         let str = C.unpack byteStr in
         case parse parseDV str str of
-          Left e -> error (show e)
-          Right dv -> DebianVersion str dv
+          Left e -> Left e
+          Right dv -> Right (DebianVersion str dv)
diff --git a/Debian/Version/Common.hs b/Debian/Version/Common.hs
--- a/Debian/Version/Common.hs
+++ b/Debian/Version/Common.hs
@@ -6,6 +6,7 @@
     ( DebianVersion -- |Exported abstract because the internal representation is likely to change
     , prettyDebianVersion
     , ParseDebianVersion(..)
+    , parseDebianVersion'
     , evr               -- DebianVersion -> (Maybe Int, String, Maybe String)
     , epoch
     , version
@@ -94,11 +95,14 @@
 -- * Parser
 
 class ParseDebianVersion a where
-    parseDebianVersion :: a-> DebianVersion
+    parseDebianVersion :: a-> Either ParseError DebianVersion
 -- |Convert a string to a debian version number. May throw an
 -- exception if the string is unparsable -- but I am not sure if that
 -- can currently happen. Are there any invalid version strings?
 -- Perhaps ones with underscore, or something?
+
+parseDebianVersion' :: ParseDebianVersion string => string -> DebianVersion
+parseDebianVersion' str = either (\e -> error (show e)) id (parseDebianVersion str)
 
 {-
 showNN :: NonNumeric -> String
diff --git a/Debian/Version/Internal.hs b/Debian/Version/Internal.hs
--- a/Debian/Version/Internal.hs
+++ b/Debian/Version/Internal.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveDataTypeable, FlexibleContexts #-}
 module Debian.Version.Internal
     ( DebianVersion(..)
     , Numeric(..)
diff --git a/Debian/Version/String.hs b/Debian/Version/String.hs
--- a/Debian/Version/String.hs
+++ b/Debian/Version/String.hs
@@ -13,13 +13,13 @@
 instance ParseDebianVersion String where
     parseDebianVersion str =
         case parse parseDV str str of
-          Left e -> error (show e)
-          Right dv -> DebianVersion str dv
-
+          Left e -> Left e
+          Right dv -> Right (DebianVersion str dv)
+ 
 instance Read DebianVersion where
     readsPrec _ s =
         case stripPrefix "Debian.Version.parseDebianVersion " s of
           Just s' -> case reads s' :: [(String, String)] of
                        []-> []
-                       (v, s'') : _ -> [(parseDebianVersion v, s'')]
+                       (v, s'') : _ -> [(parseDebianVersion' v, s'')]
           Nothing -> []
diff --git a/Debian/Version/Text.hs b/Debian/Version/Text.hs
--- a/Debian/Version/Text.hs
+++ b/Debian/Version/Text.hs
@@ -14,5 +14,5 @@
     parseDebianVersion text =
         let str = T.unpack text in
         case parse parseDV str str of
-          Left e -> error (show e)
-          Right dv -> DebianVersion str dv
+          Left e -> Left e
+          Right dv -> Right (DebianVersion str dv)
diff --git a/Test/Changes.hs b/Test/Changes.hs
--- a/Test/Changes.hs
+++ b/Test/Changes.hs
@@ -5,7 +5,7 @@
 import Debian.Changes
 import Debian.Pretty (PP(..))
 import Debian.Release (ReleaseName(ReleaseName, relName))
-import Debian.Version (parseDebianVersion)
+import Debian.Version (parseDebianVersion, parseDebianVersion')
 import Test.HUnit
 import Text.PrettyPrint (render)
 import Text.PrettyPrint.HughesPJClass (pPrint)
@@ -161,12 +161,12 @@
 
 test3 =
     TestCase (assertEqual "haskell-regex-compat changelog 2" expected (parseEntries s3))
-    where expected = [Right (Entry {logPackage = "name", logVersion = parseDebianVersion "version", logDists = [ReleaseName {relName = "dist"}], logUrgency = "urgency", logComments = "  * details\n", logWho = "David Fox <dsf@seereason.com>", logDate = "Wed, 21 Nov 2007 01:26:57 +0000"})]
+    where expected = [Right (Entry {logPackage = "name", logVersion = parseDebianVersion' "version", logDists = [ReleaseName {relName = "dist"}], logUrgency = "urgency", logComments = "  * details\n", logWho = "David Fox <dsf@seereason.com>", logDate = "Wed, 21 Nov 2007 01:26:57 +0000"})]
 
 test4 =
     TestCase (assertEqual "haskell-regex-compat changelog 3" expected (parseEntries s4))
     where expected = [Right (Entry {logPackage = "haskell-regex-compat",
-                                     logVersion = parseDebianVersion "0.92-3+seereason1~jaunty4",
+                                     logVersion = parseDebianVersion' "0.92-3+seereason1~jaunty4",
                                      logDists = [ReleaseName {relName = "jaunty-seereason"}],
                                      logUrgency = "low",
                                      logComments = "  [ Joachim Breitner ]\n  * Adjust priority according to override file\n  * Depend on hscolour (Closes: #550769)\n\n  [ Marco T\250lio Gontijo e Silva ]\n",
@@ -175,32 +175,32 @@
 
 test1 =
     TestCase (assertEqual "haskell-regex-compat changelog 4" expected (parseChangeLog s1))
-    where expected = ChangeLog [(Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion "0.92-3+seereason1~jaunty4", logDists = [ReleaseName {relName = "jaunty-seereason"}], logUrgency = "low", logComments = "  [ Joachim Breitner ]\n  * Adjust priority according to override file\n  * Depend on hscolour (Closes: #550769)\n\n  [ Marco T\250lio Gontijo e Silva ]\n  * debian/control: Use more sintetic name for Vcs-Darcs.\n  * Built from sid apt pool\n  * Build dependency changes:\n     cpphs:                    1.9-1+seereason1~jaunty5     -> 1.9-1+seereason1~jaunty6\n     ghc6:                     6.10.4-1+seereason5~jaunty1  -> 6.12.1-0+seereason1~jaunty1\n     ghc6-doc:                 6.10.4-1+seereason5~jaunty1  -> 6.12.1-0+seereason1~jaunty1\n     ghc6-prof:                6.10.4-1+seereason5~jaunty1  -> 6.12.1-0+seereason1~jaunty1\n     haddock:                  2.4.2-3+seereason3~jaunty1   -> 6.12.1-0+seereason1~jaunty1\n     haskell-devscripts:       0.6.18-21+seereason1~jaunty1 -> 0.6.18-23+seereason1~jaunty1\n     haskell-regex-base-doc:   0.93.1-5+seereason1~jaunty1  -> 0.93.1-5++1+seereason1~jaunty1\n     haskell-regex-posix-doc:  0.93.2-4+seereason1~jaunty1  -> 0.93.2-4+seereason1~jaunty2\n     libghc6-regex-base-dev:   0.93.1-5+seereason1~jaunty1  -> 0.93.1-5++1+seereason1~jaunty1\n     libghc6-regex-base-prof:  0.93.1-5+seereason1~jaunty1  -> 0.93.1-5++1+seereason1~jaunty1\n     libghc6-regex-posix-dev:  0.93.2-4+seereason1~jaunty1  -> 0.93.2-4+seereason1~jaunty2\n     libghc6-regex-posix-prof: 0.93.2-4+seereason1~jaunty1  -> 0.93.2-4+seereason1~jaunty2\n", logWho = "SeeReason Autobuilder <autobuilder@seereason.org>", logDate = "Fri, 25 Dec 2009 01:55:37 -0800"}),
-                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion "0.92-3", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  [ Joachim Breitner ]\n  * Adjust priority according to override file\n  * Depend on hscolour (Closes: #550769)\n\n  [ Marco T\250lio Gontijo e Silva ]\n  * debian/control: Use more sintetic name for Vcs-Darcs.\n", logWho = "Joachim Breitner <nomeata@debian.org>", logDate = "Mon, 20 Jul 2009 13:05:35 +0200"}),
-                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion "0.92-2", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  * Adopt package for the Debian Haskell Group\n  * Fix \"FTBFS with new dpkg-dev\" by adding comma to debian/control\n    (Closes: #536473)\n", logWho = "Joachim Breitner <nomeata@debian.org>", logDate = "Mon, 20 Jul 2009 12:05:40 +0200"}),
-                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion "0.92-1.1", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  * Rebuild for GHC 6.10.\n  * NMU with permission of the author.\n", logWho = "John Goerzen <jgoerzen@complete.org>", logDate = "Mon, 16 Mar 2009 10:12:04 -0500"}),
-                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion "0.92-1", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  * New upstream release\n  * debian/control:\n    - Bump Standards-Version. No changes needed.\n", logWho = "Arjan Oosting <arjan@debian.org>", logDate = "Sun, 18 Jan 2009 00:05:02 +0100"}),
-                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion "0.91-1", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  * Take over package from Ian, as I already maintain haskell-regex-base,\n    and move Ian to the Uploaders field.\n  * Packaging complete redone (based on my haskell-regex-base package).\n", logWho = "Arjan Oosting <arjan@debian.org>", logDate = "Sat, 19 Jan 2008 16:48:39 +0100"}),
-                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion "0.71.0.1-1", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  * Initial release (used to be part of ghc6).\n  * Using \"Generic Haskell cabal library packaging files v9\".\n", logWho = "Ian Lynagh (wibble) <igloo@debian.org>", logDate = "Wed, 21 Nov 2007 01:26:57 +0000"})]
+    where expected = ChangeLog [(Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion' "0.92-3+seereason1~jaunty4", logDists = [ReleaseName {relName = "jaunty-seereason"}], logUrgency = "low", logComments = "  [ Joachim Breitner ]\n  * Adjust priority according to override file\n  * Depend on hscolour (Closes: #550769)\n\n  [ Marco T\250lio Gontijo e Silva ]\n  * debian/control: Use more sintetic name for Vcs-Darcs.\n  * Built from sid apt pool\n  * Build dependency changes:\n     cpphs:                    1.9-1+seereason1~jaunty5     -> 1.9-1+seereason1~jaunty6\n     ghc6:                     6.10.4-1+seereason5~jaunty1  -> 6.12.1-0+seereason1~jaunty1\n     ghc6-doc:                 6.10.4-1+seereason5~jaunty1  -> 6.12.1-0+seereason1~jaunty1\n     ghc6-prof:                6.10.4-1+seereason5~jaunty1  -> 6.12.1-0+seereason1~jaunty1\n     haddock:                  2.4.2-3+seereason3~jaunty1   -> 6.12.1-0+seereason1~jaunty1\n     haskell-devscripts:       0.6.18-21+seereason1~jaunty1 -> 0.6.18-23+seereason1~jaunty1\n     haskell-regex-base-doc:   0.93.1-5+seereason1~jaunty1  -> 0.93.1-5++1+seereason1~jaunty1\n     haskell-regex-posix-doc:  0.93.2-4+seereason1~jaunty1  -> 0.93.2-4+seereason1~jaunty2\n     libghc6-regex-base-dev:   0.93.1-5+seereason1~jaunty1  -> 0.93.1-5++1+seereason1~jaunty1\n     libghc6-regex-base-prof:  0.93.1-5+seereason1~jaunty1  -> 0.93.1-5++1+seereason1~jaunty1\n     libghc6-regex-posix-dev:  0.93.2-4+seereason1~jaunty1  -> 0.93.2-4+seereason1~jaunty2\n     libghc6-regex-posix-prof: 0.93.2-4+seereason1~jaunty1  -> 0.93.2-4+seereason1~jaunty2\n", logWho = "SeeReason Autobuilder <autobuilder@seereason.org>", logDate = "Fri, 25 Dec 2009 01:55:37 -0800"}),
+                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion' "0.92-3", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  [ Joachim Breitner ]\n  * Adjust priority according to override file\n  * Depend on hscolour (Closes: #550769)\n\n  [ Marco T\250lio Gontijo e Silva ]\n  * debian/control: Use more sintetic name for Vcs-Darcs.\n", logWho = "Joachim Breitner <nomeata@debian.org>", logDate = "Mon, 20 Jul 2009 13:05:35 +0200"}),
+                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion' "0.92-2", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  * Adopt package for the Debian Haskell Group\n  * Fix \"FTBFS with new dpkg-dev\" by adding comma to debian/control\n    (Closes: #536473)\n", logWho = "Joachim Breitner <nomeata@debian.org>", logDate = "Mon, 20 Jul 2009 12:05:40 +0200"}),
+                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion' "0.92-1.1", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  * Rebuild for GHC 6.10.\n  * NMU with permission of the author.\n", logWho = "John Goerzen <jgoerzen@complete.org>", logDate = "Mon, 16 Mar 2009 10:12:04 -0500"}),
+                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion' "0.92-1", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  * New upstream release\n  * debian/control:\n    - Bump Standards-Version. No changes needed.\n", logWho = "Arjan Oosting <arjan@debian.org>", logDate = "Sun, 18 Jan 2009 00:05:02 +0100"}),
+                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion' "0.91-1", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  * Take over package from Ian, as I already maintain haskell-regex-base,\n    and move Ian to the Uploaders field.\n  * Packaging complete redone (based on my haskell-regex-base package).\n", logWho = "Arjan Oosting <arjan@debian.org>", logDate = "Sat, 19 Jan 2008 16:48:39 +0100"}),
+                      (Entry {logPackage = "haskell-regex-compat", logVersion = parseDebianVersion' "0.71.0.1-1", logDists = [ReleaseName {relName = "unstable"}], logUrgency = "low", logComments = "  * Initial release (used to be part of ghc6).\n  * Using \"Generic Haskell cabal library packaging files v9\".\n", logWho = "Ian Lynagh (wibble) <igloo@debian.org>", logDate = "Wed, 21 Nov 2007 01:26:57 +0000"})]
 
 test2 =
     TestCase (assertEqual "haskell-regex-compat changelog" expected (parseEntries s2))
     where expected = [Right (Entry {logPackage = "haskell-haskeline",
-                                     logVersion = parseDebianVersion "0.6.1.6-1+seereason1~jaunty6",
+                                     logVersion = parseDebianVersion' "0.6.1.6-1+seereason1~jaunty6",
                                      logDists = [ReleaseName {relName = "jaunty-seereason"}],
                                      logUrgency = "low",
                                      logComments = "  * New upstream version.\n  * Remove extensible-exceptions patch, since ghc6 now ships it.\n  * debian/control:\n    - Use versioned Build-Depends.\n    - Use unversioned Recommends for ghc6-doc in libghc6-terminfo-doc.\n    - Use haskell Section.\n    - Use new Standards-Version: 3.8.1.\n    - Use DM-Upload-Allowed: yes.\n    - Use haskell:Recommends and haskell:Suggests.\n    - Don't use shlibs:Depends for -prof.\n    - Split dependencies in more than one line.\n  * Built from sid apt pool\n  * Build dependency changes:\n     ghc6:                     6.10.4-1+seereason5~jaunty1  -> 6.12.1-0+seereason1~jaunty1\n     ghc6-doc:                 6.10.4-1+seereason5~jaunty1  -> 6.12.1-0+seereason1~jaunty1\n     ghc6-prof:                6.10.4-1+seereason5~jaunty1  -> 6.12.1-0+seereason1~jaunty1\n     haddock:                  2.4.2-3+seereason3~jaunty1   -> 6.12.1-0+seereason1~jaunty1\n     haskell-devscripts:       0.6.18-21+seereason1~jaunty1 -> 0.6.18-23+seereason1~jaunty1\n     libghc6-mtl-dev:          1.1.0.2-7+seereason3~jaunty7 -> 1.1.0.2-7+seereason3~jaunty8\n     libghc6-mtl-doc:          1.1.0.2-7+seereason3~jaunty7 -> 1.1.0.2-7+seereason3~jaunty8\n     libghc6-mtl-prof:         1.1.0.2-7+seereason3~jaunty7 -> 1.1.0.2-7+seereason3~jaunty8\n     libghc6-terminfo-dev:     0.3.0.2-2+seereason1~jaunty5 -> 0.3.0.2-2+seereason1~jaunty6\n     libghc6-terminfo-doc:     0.3.0.2-2+seereason1~jaunty5 -> 0.3.0.2-2+seereason1~jaunty6\n     libghc6-terminfo-prof:    0.3.0.2-2+seereason1~jaunty5 -> 0.3.0.2-2+seereason1~jaunty6\n     libghc6-utf8-string-dev:  0.3.5-1+seereason3~jaunty7   -> 0.3.5-1++1+seereason1~jaunty1\n     libghc6-utf8-string-doc:  0.3.5-1+seereason3~jaunty7   -> 0.3.5-1++1+seereason1~jaunty1\n     libghc6-utf8-string-prof: 0.3.5-1+seereason3~jaunty7   -> 0.3.5-1++1+seereason1~jaunty1\n",
                                      logWho = "SeeReason Autobuilder <autobuilder@seereason.org>",
                                      logDate = "Fri, 25 Dec 2009 13:48:18 -0800"}),
                       Right (Entry {logPackage = "haskell-haskeline",
-                                     logVersion = parseDebianVersion "0.6.1.6-1",
+                                     logVersion = parseDebianVersion' "0.6.1.6-1",
                                      logDists = [ReleaseName {relName = "unstable"}],
                                      logUrgency = "low",
                                      logComments = "  * New upstream version.\n  * Remove extensible-exceptions patch, since ghc6 now ships it.\n  * debian/control:\n    - Use versioned Build-Depends.\n    - Use unversioned Recommends for ghc6-doc in libghc6-terminfo-doc.\n    - Use haskell Section.\n    - Use new Standards-Version: 3.8.1.\n    - Use DM-Upload-Allowed: yes.\n    - Use haskell:Recommends and haskell:Suggests.\n    - Don't use shlibs:Depends for -prof.\n    - Split dependencies in more than one line.\n",
                                      logWho = "Marco T\250lio Gontijo e Silva <marcot@holoscopio.com>",
                                      logDate = "Tue, 02 Jun 2009 10:18:27 -0300"}),
                       Right (Entry {logPackage = "haskell-haskeline",
-                                     logVersion = parseDebianVersion "0.6.1.3-1",
+                                     logVersion = parseDebianVersion' "0.6.1.3-1",
                                      logDists = [ReleaseName {relName = "unstable"}],
                                      logUrgency = "low",
                                      logComments = "  * Initial Debian package. (Closes: #496961)\n",
diff --git a/Test/Control.hs b/Test/Control.hs
--- a/Test/Control.hs
+++ b/Test/Control.hs
@@ -11,7 +11,7 @@
 import Debian.Control.Text ({- Pretty instances -})
 import Debian.Pretty (prettyShow)
 import Debian.Relation
-import Debian.Version (parseDebianVersion)
+import Debian.Version (parseDebianVersion, parseDebianVersion')
 import Paths_debian (version)
 import Text.Parsec.Error (ParseError)
 import Text.PrettyPrint.HughesPJClass (Doc, text, pPrint)
@@ -95,9 +95,9 @@
 
 -- The parsed build dependencies
 builddeps :: Relations
-builddeps = [[Rel (BinPkgName {unBinPkgName = "debhelper"}) (Just (GRE (Debian.Version.parseDebianVersion ("7" :: String)))) Nothing],
+builddeps = [[Rel (BinPkgName {unBinPkgName = "debhelper"}) (Just (GRE (Debian.Version.parseDebianVersion' ("7" :: String)))) Nothing],
              [Rel (BinPkgName {unBinPkgName = "cdbs"}) Nothing Nothing],
-             [Rel (BinPkgName {unBinPkgName = "haskell-devscripts"}) (Just (GRE (Debian.Version.parseDebianVersion ("0.7" :: String)))) Nothing],
+             [Rel (BinPkgName {unBinPkgName = "haskell-devscripts"}) (Just (GRE (Debian.Version.parseDebianVersion' ("0.7" :: String)))) Nothing],
              [Rel (BinPkgName {unBinPkgName = "ghc"}) Nothing Nothing],
              [Rel (BinPkgName {unBinPkgName = "ghc-prof"}) Nothing Nothing],
              [Rel (BinPkgName {unBinPkgName = "libghc-hunit-dev"}) Nothing Nothing],
@@ -108,21 +108,21 @@
              [Rel (BinPkgName {unBinPkgName = "libghc-parsec3-prof"}) Nothing Nothing],
              [Rel (BinPkgName {unBinPkgName = "libghc-pretty-class-dev"}) Nothing Nothing],
              [Rel (BinPkgName {unBinPkgName = "libghc-pretty-class-prof"}) Nothing Nothing],
-             [Rel (BinPkgName {unBinPkgName = "libghc-process-extras-dev"}) (Just (GRE (Debian.Version.parseDebianVersion ("0.4" :: String)))) Nothing],
-             [Rel (BinPkgName {unBinPkgName = "libghc-process-extras-prof"}) (Just (GRE (Debian.Version.parseDebianVersion ("0.4" :: String)))) Nothing],
+             [Rel (BinPkgName {unBinPkgName = "libghc-process-extras-dev"}) (Just (GRE (Debian.Version.parseDebianVersion' ("0.4" :: String)))) Nothing],
+             [Rel (BinPkgName {unBinPkgName = "libghc-process-extras-prof"}) (Just (GRE (Debian.Version.parseDebianVersion' ("0.4" :: String)))) Nothing],
              [Rel (BinPkgName {unBinPkgName = "libghc-regex-compat-dev"}) Nothing Nothing],
              [Rel (BinPkgName {unBinPkgName = "libghc-regex-compat-prof"}) Nothing Nothing],
-             [Rel (BinPkgName {unBinPkgName = "libghc-regex-tdfa-dev"}) (Just (GRE (Debian.Version.parseDebianVersion ("1.1.3" :: String)))) Nothing],
+             [Rel (BinPkgName {unBinPkgName = "libghc-regex-tdfa-dev"}) (Just (GRE (Debian.Version.parseDebianVersion' ("1.1.3" :: String)))) Nothing],
              [Rel (BinPkgName {unBinPkgName = "libghc-regex-tdfa-prof"}) Nothing Nothing],
-             [Rel (BinPkgName {unBinPkgName = "libghc-bzlib-dev"}) (Just (GRE (Debian.Version.parseDebianVersion ("0.5.0.0-4" :: String)))) Nothing],
+             [Rel (BinPkgName {unBinPkgName = "libghc-bzlib-dev"}) (Just (GRE (Debian.Version.parseDebianVersion' ("0.5.0.0-4" :: String)))) Nothing],
              [Rel (BinPkgName {unBinPkgName = "libghc-bzlib-prof"}) Nothing Nothing],
-             [Rel (BinPkgName {unBinPkgName = "libghc-haxml-prof"}) (Just (GRE (Debian.Version.parseDebianVersion ("1:1.20" :: String)))) Nothing],
-             [Rel (BinPkgName {unBinPkgName = "libghc-unixutils-dev"}) (Just (GRE (Debian.Version.parseDebianVersion ("1.50" :: String)))) Nothing],
-             [Rel (BinPkgName {unBinPkgName = "libghc-unixutils-prof"}) (Just (GRE (Debian.Version.parseDebianVersion ("1.50" :: String)))) Nothing],
+             [Rel (BinPkgName {unBinPkgName = "libghc-haxml-prof"}) (Just (GRE (Debian.Version.parseDebianVersion' ("1:1.20" :: String)))) Nothing],
+             [Rel (BinPkgName {unBinPkgName = "libghc-unixutils-dev"}) (Just (GRE (Debian.Version.parseDebianVersion' ("1.50" :: String)))) Nothing],
+             [Rel (BinPkgName {unBinPkgName = "libghc-unixutils-prof"}) (Just (GRE (Debian.Version.parseDebianVersion' ("1.50" :: String)))) Nothing],
              [Rel (BinPkgName {unBinPkgName = "libghc-zlib-dev"}) Nothing Nothing],
              [Rel (BinPkgName {unBinPkgName = "libghc-zlib-prof"}) Nothing Nothing],
-             [Rel (BinPkgName {unBinPkgName = "libghc-network-dev"}) (Just (GRE (Debian.Version.parseDebianVersion ("2.4" :: String)))) Nothing],
-             [Rel (BinPkgName {unBinPkgName = "libghc-network-prof"}) (Just (GRE (Debian.Version.parseDebianVersion ("2.4" :: String)))) Nothing],
+             [Rel (BinPkgName {unBinPkgName = "libghc-network-dev"}) (Just (GRE (Debian.Version.parseDebianVersion' ("2.4" :: String)))) Nothing],
+             [Rel (BinPkgName {unBinPkgName = "libghc-network-prof"}) (Just (GRE (Debian.Version.parseDebianVersion' ("2.4" :: String)))) Nothing],
              [Rel (BinPkgName {unBinPkgName = "libghc-utf8-string-dev"}) Nothing Nothing],
              [Rel (BinPkgName {unBinPkgName = "libghc-utf8-string-prof"}) Nothing Nothing],
              [Rel (BinPkgName {unBinPkgName = "libcrypto++-dev"}) Nothing Nothing]]
diff --git a/Test/Dependencies.hs b/Test/Dependencies.hs
--- a/Test/Dependencies.hs
+++ b/Test/Dependencies.hs
@@ -129,7 +129,7 @@
           case lookup "Version" p of
             Nothing -> error $ "Could not find Package in " ++ show p
             (Just v) -> 
-                (BinPkgName (stripWS n), parseDebianVersion v)
+                (BinPkgName (stripWS n), parseDebianVersion' v)
 
 mapSnd :: (b -> c) -> [(a,b)] -> [(a,c)]
 mapSnd f = map (second f)
diff --git a/Test/Versions.hs b/Test/Versions.hs
--- a/Test/Versions.hs
+++ b/Test/Versions.hs
@@ -8,62 +8,62 @@
 -- * Implicit Values
 
 implicit1 =
-    TestCase (assertEqual "1.0 == 1.0-" EQ (compare (parseDebianVersion "1.0") (parseDebianVersion "1.0-")))
+    TestCase (assertEqual "1.0 == 1.0-" EQ (compare (parseDebianVersion' "1.0") (parseDebianVersion' "1.0-")))
 
 implicit2 =
-    TestCase (assertEqual "1.0 == 1.0-0" EQ (compare (parseDebianVersion "1.0") (parseDebianVersion "1.0-0")))
+    TestCase (assertEqual "1.0 == 1.0-0" EQ (compare (parseDebianVersion' "1.0") (parseDebianVersion' "1.0-0")))
 
 implicit3 = 
-    TestCase (assertEqual "1.0 == 0:1.0-0" EQ (compare (parseDebianVersion "1.0") (parseDebianVersion "0:1.0-0")))
+    TestCase (assertEqual "1.0 == 0:1.0-0" EQ (compare (parseDebianVersion' "1.0") (parseDebianVersion' "0:1.0-0")))
 
 implicit4 = 
-    TestCase (assertEqual "1.0 == 1.0-" EQ (compare (parseDebianVersion "1.0") (parseDebianVersion "1.0-")))
+    TestCase (assertEqual "1.0 == 1.0-" EQ (compare (parseDebianVersion' "1.0") (parseDebianVersion' "1.0-")))
 
 implicit5 = 
-    TestCase (assertEqual "apple = apple0" EQ (compare (parseDebianVersion "apple") (parseDebianVersion "apple0")))
+    TestCase (assertEqual "apple = apple0" EQ (compare (parseDebianVersion' "apple") (parseDebianVersion' "apple0")))
 
 implicit6 = 
-    TestCase (assertEqual "apple = apple0-" EQ (compare (parseDebianVersion "apple") (parseDebianVersion "apple0-")))
+    TestCase (assertEqual "apple = apple0-" EQ (compare (parseDebianVersion' "apple") (parseDebianVersion' "apple0-")))
 
 implicit7 = 
-    TestCase (assertEqual "apple = apple0-0" EQ (compare (parseDebianVersion "apple") (parseDebianVersion "apple0-0")))
+    TestCase (assertEqual "apple = apple0-0" EQ (compare (parseDebianVersion' "apple") (parseDebianVersion' "apple0-0")))
 
 -- * epoch, version, revision
 
 epoch1 =
-    TestCase (assertEqual "epoch 0:0" (Just 0) (epoch $ parseDebianVersion "0:0"))
+    TestCase (assertEqual "epoch 0:0" (Just 0) (epoch $ parseDebianVersion' "0:0"))
 
 epoch2 =
-    TestCase (assertEqual "epoch 0" Nothing(epoch $ parseDebianVersion "0"))
+    TestCase (assertEqual "epoch 0" Nothing(epoch $ parseDebianVersion' "0"))
 
 epoch3 =
-    TestCase (assertEqual "epoch 1:0" (Just 1) (epoch $ parseDebianVersion "1:0"))
+    TestCase (assertEqual "epoch 1:0" (Just 1) (epoch $ parseDebianVersion' "1:0"))
 
 version1 =
-    TestCase (assertEqual "version apple" "apple" (version $ parseDebianVersion "apple"))
+    TestCase (assertEqual "version apple" "apple" (version $ parseDebianVersion' "apple"))
 
 version2 =
-    TestCase (assertEqual "version apple0" "apple0" (version $ parseDebianVersion "apple0"))
+    TestCase (assertEqual "version apple0" "apple0" (version $ parseDebianVersion' "apple0"))
 
 version3 =
-    TestCase (assertEqual "version apple1" "apple1" (version $ parseDebianVersion "apple1"))
+    TestCase (assertEqual "version apple1" "apple1" (version $ parseDebianVersion' "apple1"))
 
 revision1 =
-    TestCase (assertEqual "revision 1.0" Nothing (revision $ parseDebianVersion "1.0"))
+    TestCase (assertEqual "revision 1.0" Nothing (revision $ parseDebianVersion' "1.0"))
 
 revision2 =
-    TestCase (assertEqual "revision 1.0-" (Just "") (revision $ parseDebianVersion "1.0-"))
+    TestCase (assertEqual "revision 1.0-" (Just "") (revision $ parseDebianVersion' "1.0-"))
 
 revision3 =
-    TestCase (assertEqual "revision 1.0-0" (Just "0") (revision $ parseDebianVersion "1.0-0"))
+    TestCase (assertEqual "revision 1.0-0" (Just "0") (revision $ parseDebianVersion' "1.0-0"))
 
 revision4 =
-    TestCase (assertEqual "revision 1.0-apple" (Just "apple") (revision $ parseDebianVersion "1.0-apple"))
+    TestCase (assertEqual "revision 1.0-apple" (Just "apple") (revision $ parseDebianVersion' "1.0-apple"))
 
 
 -- * Ordering
 
-compareV str1 str2 = compare (parseDebianVersion str1) (parseDebianVersion str2)
+compareV str1 str2 = compare (parseDebianVersion' str1) (parseDebianVersion' str2)
 
 order1 =
     TestCase (assertEqual "1:1-1 > 0:1-1" GT (compareV "1:1-1" "0:1-1"))
@@ -74,10 +74,10 @@
 -- * Dashes in upstream version
 
 dash1 =
-    TestCase (assertEqual "version of upstream-version-revision" "upstream-version" (version (parseDebianVersion "upstream-version-revision")))
+    TestCase (assertEqual "version of upstream-version-revision" "upstream-version" (version (parseDebianVersion' "upstream-version-revision")))
 
 dash2 =
-    TestCase (assertEqual "revision of upstream-version-revision" (Just "revision") (revision (parseDebianVersion "upstream-version-revision")))
+    TestCase (assertEqual "revision of upstream-version-revision" (Just "revision") (revision (parseDebianVersion' "upstream-version-revision")))
 
 -- * Insignificant Zero's
 
diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,10 @@
+haskell-debian (3.89) unstable; urgency=low
+
+  * Change signature of parseDebianVersion to return Either ParseError DebianVerions.
+  * Provide the old signature as parseDebianVersion'.
+
+ -- David Fox <dsf@seereason.com>  Mon, 21 Sep 2015 15:23:32 -0700
+
 haskell-debian (3.88.1) unstable; urgency=low
 
   * Make ghc-7.10.2 a required travis test
diff --git a/debian.cabal b/debian.cabal
--- a/debian.cabal
+++ b/debian.cabal
@@ -1,5 +1,5 @@
 Name:           debian
-Version:        3.88.1
+Version:        3.89
 License:        BSD3
 License-File:   debian/copyright
 Author:         David Fox <dsf@seereason.com>, Jeremy Shaw <jeremy@seereason.com>, Clifford Beshers <beshers@seereason.com>
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+haskell-debian (3.89) unstable; urgency=low
+
+  * Change signature of parseDebianVersion to return Either ParseError DebianVerions.
+  * Provide the old signature as parseDebianVersion'.
+
+ -- David Fox <dsf@seereason.com>  Mon, 21 Sep 2015 15:23:32 -0700
+
 haskell-debian (3.88.1) unstable; urgency=low
 
   * Make ghc-7.10.2 a required travis test
