diff --git a/Test/Control.hs b/Test/Control.hs
--- a/Test/Control.hs
+++ b/Test/Control.hs
@@ -29,11 +29,11 @@
 -- deriving instance Show (Paragraph' Text)
 -- deriving instance Show (Field' Text)
 
-replaceString :: String -> String -> String -> String
-replaceString old new x =
+replaceStrings :: String -> String -> String -> String
+replaceStrings old new x =
     case x =~ old of
       mr | null (mrMatch mr) -> x
-      mr -> mrBefore mr <> new <> mrAfter mr
+      mr -> mrBefore mr <> new <> replaceStrings old new (mrAfter mr)
 
 -- Additional tests of the results of parsing additional
 -- inter-paragraph newlines, or missing terminating newlines, would be
@@ -53,13 +53,12 @@
     , TestCase (parseDebianControlFromFile "Test/Control.hs" >>= \ vc ->
                 assertEqual "policy4"
                             -- Exceptions have bogus Eq instances, so we need to show then compare.
-                            "Left \"src/Debian/Control/Policy.hs\"(line 77, column 54): ParseControlError \"Test/Control.hs\" (line 0, column 0):\nFailed to parse Test/Control.hs"
-                            (show (either Left (either Left Right . debianRelations "Foo") vc)))
+                            "Left \"src/Debian/Control/Policy.hs\"(line ?, column ?): ParseControlError \"Test/Control.hs\" (line ?, column ?):\nFailed to parse Test/Control.hs"
+                            (replaceStrings "[0-9]+" "?" $ show (either Left (debianRelations "Foo") vc)))
     , TestCase (parseDebianControlFromFile "nonexistant" >>= \ vc ->
                 assertEqual "policy5"
-                            "Left \"src/Debian/Control/Policy.hs\"(line 76, column 36): IOError nonexistant: openBinaryFile: does not exist (No such file or directory)"
-                            (replaceString "openFile" "openBinaryFile"
-                             (show (either Left (debianRelations "Foo") (vc :: Either ControlFileError DebianControl)))))
+                            "Left \"src/Debian/Control/Policy.hs\"(line ?, column ?): IOError nonexistant: openBinaryFile: does not exist (No such file or directory)"
+                            (replaceStrings "[0-9]+" "?" . replaceStrings "openFile" "openBinaryFile" $ show (either Left (debianRelations "Foo") vc)))
 
     -- Test whether embedded newlines in field values can be mistaken
     -- for field or paragraph divisions.  In cases pretty7 and pretty9
diff --git a/debian.cabal b/debian.cabal
--- a/debian.cabal
+++ b/debian.cabal
@@ -1,6 +1,7 @@
+cabal-version:  3.0
 Name:           debian
-Version:        4.0.2
-License:        BSD3
+Version:        4.0.3
+License:        BSD-3-Clause
 License-File:   debian/copyright
 Author:         David Fox <dsf@seereason.com>, Jeremy Shaw <jeremy@seereason.com>, Clifford Beshers <beshers@seereason.com>
 Category:       Debian
@@ -8,7 +9,6 @@
 Homepage:       https://github.com/clinty/debian-haskell
 Build-Type:     Simple
 Synopsis:       Modules for working with the Debian package system
-Cabal-Version: >= 1.9
 Description:
   This library includes modules covering some basic data types defined by
   the Debian policy manual - version numbers, control file syntax, etc.
@@ -61,7 +61,7 @@
    Build-Depends: network-uri >= 2.6
  else
    Build-Depends: network >= 2.4 && < 2.6
-
+ default-language: Haskell2010
  ghc-options: -Wall
  Exposed-modules:
         Debian.Apt.Dependencies,
@@ -73,7 +73,7 @@
         Debian.Codename,
         Debian.Control,
         Debian.Control.Common,
-        Debian.Control.Builder
+        Debian.Control.Builder,
         Debian.Control.ByteString,
         Debian.Control.Policy,
         Debian.Control.String,
@@ -110,21 +110,29 @@
  Main-is: FakeChanges.hs
  Build-Depends: base, debian, directory, filepath
  ghc-options: -threaded -W
- Extensions:           ExistentialQuantification CPP
+ default-extensions:           ExistentialQuantification CPP
+ default-language: Haskell2010
 
 Executable apt-get-build-depends
  Hs-Source-Dirs: utils
  Main-is: AptGetBuildDeps.hs
  Build-Depends: base, debian, process
  ghc-options: -threaded -W
- Extensions:           ExistentialQuantification CPP
+ default-extensions:           ExistentialQuantification CPP
+ default-language: Haskell2010
 
 Test-Suite debian-tests
   Type: exitcode-stdio-1.0
   Hs-Source-Dirs: Test
   Main-Is: Main.hs
  Build-Depends: base, Cabal, debian, HUnit, parsec, pretty >= 1.1.2, regex-tdfa, text
- Other-Modules: Changes Control Dependencies Paths_debian Versions
+ other-modules: Changes
+              , Control
+              , Dependencies
+              , Paths_debian
+              , Versions
+ autogen-modules: Paths_debian
+ default-language: Haskell2010
 
 source-repository head
   type:     git
