diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,20 @@
+Darcs 2.14.5, 6 August 2020
+
+  * Resolve issue2650
+
+    This is a stupid and rather unfortunate bug that affects all previous
+    versions of the 2.12 and 2.14 branch. It can lead to corruption of the
+    _darcs/format file in repos where *future* darcs versions add an
+    alternative format property. The bug affects commands rebase suspend,
+    rebase pull, and rebase apply.
+
+    It is possible to manually fix the corruption by deleting from
+    _darcs/format strings of the form "Unknown property: ". Future releases
+    will contain a work-around that automatically fixes this particular kind
+    of corruption when reading the format file, in case it should ever
+    happen in practice. Nevertheless we strongly recommend to upgrade and
+    avoid using the darcs versions affected by this bug.
+
 Darcs 2.14.4, 28 April 2020
 
   * Restored the ability to run our shell tests, at least when building
diff --git a/darcs.cabal b/darcs.cabal
--- a/darcs.cabal
+++ b/darcs.cabal
@@ -1,6 +1,6 @@
 cabal-version:  1.24
 Name:           darcs
-version:        2.14.4
+version:        2.14.5
 License:        GPL-2
 License-file:   COPYING
 Author:         David Roundy <droundy@darcs.net>, <darcs-devel@darcs.net>
diff --git a/release/distributed-context b/release/distributed-context
--- a/release/distributed-context
+++ b/release/distributed-context
@@ -1,1 +1,1 @@
-Just "\nContext:\n\n\n[TAG 2.14.4\nBen Franksen <ben.franksen@online.de>**20200429121444\n Ignore-this: 515570fbeb07f14bf8359f4c414b27f3b75f26d03b92c1b1e35b49e3bdd9efca3d444d36989d9434\n] \n"
+Just "\nContext:\n\n\n[TAG 2.14.5\nBen Franksen <ben.franksen@online.de>**20200806192304\n Ignore-this: 2c4a08e40916e6c0e2dfde4eb66752af766640f92a4dbb847812e06fc0142c6da8592d68199f6985\n] \n"
diff --git a/src/Darcs/Repository/Format.hs b/src/Darcs/Repository/Format.hs
--- a/src/Darcs/Repository/Format.hs
+++ b/src/Darcs/Repository/Format.hs
@@ -63,7 +63,7 @@
     show HashedInventory = hashedInventoryFormat
     show NoWorkingDir = noWorkingDirFormat
     show RebaseInProgress = rebaseInProgressFormat
-    show (UnknownFormat f) = "Unknown format: " ++ f
+    show (UnknownFormat f) = f
 
 readRepoProperty :: String -> RepoProperty
 readRepoProperty input
@@ -167,7 +167,7 @@
     wp x = case partition isKnown x of
                (_, []) -> Nothing
                (_, unknowns) -> Just . unwords $
-                    "Can't write repository format: " : map show unknowns
+                    "Can't write repository: unknown formats:" : map show unknowns
 
 -- | @'transferProblem' source target@ returns 'Just' an error message if we
 -- cannot transfer patches from a repo in format @source@ to a repo in format
@@ -192,7 +192,7 @@
   where
     rp x | any isKnown x = Nothing
     rp [] = impossible
-    rp x = Just . unwords $ "Can't understand repository format:" : map show x
+    rp x = Just . unwords $ "Can't read repository: unknown formats:" : map show x
 
 -- |'findProblems' applies a function that maps format-entries to an optional
 -- error message, to each repoformat entry. Returning any errors.
diff --git a/tests/annotate.sh b/tests/annotate.sh
--- a/tests/annotate.sh
+++ b/tests/annotate.sh
@@ -1,6 +1,7 @@
 #!/usr/bin/env bash
 . lib
 
+rm -rf temp1
 darcs init temp1
 cd temp1
 mkdir a b
@@ -12,9 +13,9 @@
 darcs annotate c
 darcs annotate c | grep "a@b.com"
 cd ..
-rm -rf temp1
 
 # issue1473 annotate repodir
+rm -rf temp1
 mkdir temp1
 cd temp1
 darcs init
@@ -31,9 +32,9 @@
 diff inner outer
 
 cd ..
-rm -rf temp1
 
 # issue2207 : annotate on directories
+rm -rf temp1
 darcs init temp1
 cd temp1
 mkdir d
@@ -41,12 +42,12 @@
 darcs record -lam 'p1'
 darcs annotate d | grep 'p1'
 cd ..
-rm -rf temp1
 
 # issue1473 - check that annotate works with and without
 # repodir and with "." argument.  It should fail with the empty string as
 # a single argument and without any arguments.
 
+rm -rf temp1
 darcs init temp1
 cd temp1
 echo 'Example content.' > f
@@ -61,4 +62,3 @@
 darcs annotate --repodir=temp1 f
 not darcs annotate --repodir=temp1
 not darcs annotate --repodir=temp1 ''
-rm -rf temp1
diff --git a/tests/bad-format.sh b/tests/bad-format.sh
--- a/tests/bad-format.sh
+++ b/tests/bad-format.sh
@@ -20,12 +20,10 @@
 
 cat temp2/_darcs/format
 
-rm -rf temp1
+rm -rf temp3
 
-not darcs get temp2 temp1 2> err
+not darcs get temp2 temp3 2> err
 
 cat err
 grep intentional-error err
-grep 'understand repository format' err
-
-rm -rf temp1 temp2
+grep -i "read repository.*unknown format" err
diff --git a/tests/issue1277-repo-format.sh b/tests/issue1277-repo-format.sh
--- a/tests/issue1277-repo-format.sh
+++ b/tests/issue1277-repo-format.sh
@@ -33,14 +33,14 @@
  echo impossible >> _darcs/format
  echo 'Example content.' > f
  not darcs add f > log 2>&1
- grep "Can't understand repository format" log
+ grep -i "read repository.*unknown format" log
  not darcs whatsnew > log 2>&1
- grep "Can't understand repository format" log
+ grep -i "read repository.*unknown format" log
  not darcs init > log 2>&1
  grep "You may not run this command in a repository" log
- grep "Can't understand repository format" log
+ grep -i "read repository.*unknown format" log
  cd ..
  not darcs whatsnew --repodir R2 > log 2>&1
  grep "R2 looks like a repository directory," log
- grep "Can't understand repository format" log
+ grep -i "read repository.*unknown format" log
 cd ..
diff --git a/tests/log.sh b/tests/log.sh
--- a/tests/log.sh
+++ b/tests/log.sh
@@ -62,6 +62,7 @@
 
 # Some tests for the output of log when combined with move.
 
+rm -rf temp2
 darcs init temp2
 cd temp2
 date > foo
@@ -95,6 +96,7 @@
 # darcs changes should be able to pull up the history for a file
 #   using its moved and not-yet recorded new name
 
+rm -rf temp3
 darcs init temp3
 cd temp3
 touch b
@@ -107,6 +109,7 @@
 ## Asking "darcs log" about an unrecorded file d/f will list the
 ## patch that creates the parent directory d/ (instead of no patches).
 
+rm -rf temp4
 darcs init temp4
 cd temp4
 mkdir d
@@ -120,6 +123,7 @@
 ## issue1632 - 'darcs changes d/f' should not list any changes,
 ## where d is part of the repo and f is a non-existent file.
 
+rm -rf temp5
 darcs init temp5
 cd temp5
 
@@ -136,6 +140,7 @@
 ## issue1888 - changes --context is broken when topmost patch
 ## is a clean tag.
 
+rm -rf temp6
 darcs init temp6
 cd temp6
 
diff --git a/tests/patch-index-creation.sh b/tests/patch-index-creation.sh
--- a/tests/patch-index-creation.sh
+++ b/tests/patch-index-creation.sh
@@ -32,32 +32,29 @@
 ## SOFTWARE.
 
 . lib
-rm -rf R S
 
+rm -rf R
 darcs init --repo R
 cd R
 darcs show patch-index | grep 'Patch Index is not yet created.' # init
-
 cd ..
-rm -rf R
 
+rm -rf R
 darcs init --repo R --with-patch-index
 cd R
 darcs show patch-index | grep 'Patch Index is in sync with repo.' # init --patch-index
-
 cd ..
 
+rm -rf S
 darcs clone R S
 cd S
 darcs show patch-index | grep 'Patch Index is not yet created.' # clone
-
 cd ..
-rm -rf S
 
+rm -rf S
 darcs clone R S --with-patch-index
 cd S
 darcs show patch-index | grep 'Patch Index is in sync with repo.' # clone --patch-index
-
 cd ..
 
 rm -rf repo repo2
@@ -65,10 +62,9 @@
 echo 'I understand the consequences of my action' | darcs convert darcs-2 repo repo2 
 cd repo2
 darcs show patch-index | grep 'Patch Index is not yet created.' # convert
-
 cd ..
-rm -rf repo repo2
 
+rm -rf repo repo2
 gunzip -c $TESTDATA/simple-v1.tgz | tar xf -
 echo 'I understand the consequences of my action' | darcs convert darcs-2 repo repo2 --with-patch-index
 cd repo2
@@ -96,4 +92,3 @@
 darcs show patch-index | grep 'Patch Index is not yet created.' # log -a file --no-patch-index
 
 cd ..
-rm -rf R S repo repo2
diff --git a/tests/repoformat.sh b/tests/repoformat.sh
--- a/tests/repoformat.sh
+++ b/tests/repoformat.sh
@@ -2,13 +2,14 @@
 
 . lib
 
-rm -rf garbage future
+rm -rf garbage
 mkdir garbage
 cd garbage
-darcs  init
-echo gobbledygook > _darcs/format
+darcs init
+echo gobbledygook >> _darcs/format
 cd ..
 
+rm -rf future
 mkdir future
 cd future
 darcs init
@@ -21,25 +22,24 @@
 EOF
 cd ..
 
-
 # check the rules for reading and writing
 
 ## garbage repo: we don't understand anything
-# get garbage repo
+rm -rf temp1
 not darcs get garbage temp1 2> log
-grep -i "can't understand repository format" log
-rm -rf temp1 log
+grep -i "read repository.*unknown format" log
 
 # pull from garbage repo
+rm -rf temp1
 mkdir temp1
 cd temp1
 darcs init
 not darcs pull ../garbage 2> log
-grep -i "can't understand repository format" log
+grep -i "read repository.*unknown format" log
 cd ..
-rm -rf temp1
 
 # apply in garbage repo
+rm -rf temp1
 mkdir temp1
 cd temp1
 darcs init
@@ -48,18 +48,23 @@
 darcs send -a --context=empty-context -o ../bundle.dpatch .
 cd ../garbage
 not darcs apply ../bundle.dpatch 2> log
-grep -i "can't understand repository format" log
+grep -i "read repository.*unknown format" log
 cd ..
-rm -rf temp1 bundle.dpatch
 
 # add in garbage repo
 cd garbage
 touch toto
 not darcs add toto 2> log
-grep -i "can't understand repository format" log
+grep -i "read repository.*unknown format" log
 cd ..
 
-rm -rf garbage
+# rebase suspend in garbage repo
+cd garbage
+not darcs rebase suspend --last=1 2> log
+grep -i "read repository.*unknown format" log
+# issue2650
+not grep 'Unknown format' _darcs/format
+cd ..
 
 
 ## future repo: we don't understand one
@@ -70,6 +75,7 @@
 
 # get future repo: ok
 # --to-match is needed because of bug###
+rm -rf temp1
 darcs get future temp1 --to-match "name titi"
 cd temp1
 darcs changes
@@ -77,18 +83,18 @@
 darcs add toto
 darcs record -am 'blah'
 cd ..
-rm -rf temp1
 
 # pull from future repo: ok
+rm -rf temp1
 mkdir temp1
 cd temp1
 darcs init
 darcs pull ../future -a
 darcs changes | grep titi
 cd ..
-rm -rf temp1
 
 # apply in future repo: !ok
+rm -rf temp1
 mkdir temp1
 cd temp1
 darcs init
@@ -98,15 +104,20 @@
 cd ../future
 not darcs apply ../bundle.dpatch 2> log
 cat log
-grep -i "can't write repository format" log
+grep -i "write repository.*unknown format" log
 cd ..
-rm -rf temp1 bundle.dpatch
 
 # record in future repo: !ok
 cd future
 touch toto
 not darcs add toto 2> log
-grep -i "can't write repository format" log
+grep -i "write repository.*unknown format" log
 cd ..
 
-rm -rf future #No future!
+# rebase suspend in future repo
+cd future
+not darcs rebase suspend --last=1 2> log
+grep -i "write repository.*unknown format" log
+# issue2650
+not grep 'Unknown format' _darcs/format
+cd ..
