diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,19 @@
+propellor (5.4.0) unstable; urgency=medium
+
+  [ Sean Whitton ]
+  * Apt.installedBackport replaced with Apt.backportInstalled.  (API change)
+    The old property would install dependencies from backports even when
+    the versions in stable satisfy the requested backport's dependencies.
+    The new property installs only the listed packages from backports;
+    all other dependencies come from stable.
+    So in some cases, you may need to list additional backports to install,
+    that would not have needed to be listed before. Due to this behavior
+    change the property has been renamed so uses of it will be checked.
+  * Restic.installed: stop trying to install a backport on jessie, because no
+    such backport exists.
+
+ -- Joey Hess <id@joeyh.name>  Thu, 17 May 2018 10:43:20 -0400
+
 propellor (5.3.6) unstable; urgency=medium
 
   * Fix build with ghc 8.4, which broke due to the Semigroup Monoid change.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -56,4 +56,4 @@
 7. Write some neat new properties and send patches!
 
 (Want to get your feet wet with propellor before plunging in?
-[try this](http://propellor.branchable.com/forum/Simple_quickstart_without_git__44___SSH__44___GPG])
+[try this](http://propellor.branchable.com/forum/Simple_quickstart_without_git__44___SSH__44___GPG))
diff --git a/debian/changelog b/debian/changelog
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,19 @@
+propellor (5.4.0) unstable; urgency=medium
+
+  [ Sean Whitton ]
+  * Apt.installedBackport replaced with Apt.backportInstalled.  (API change)
+    The old property would install dependencies from backports even when
+    the versions in stable satisfy the requested backport's dependencies.
+    The new property installs only the listed packages from backports;
+    all other dependencies come from stable.
+    So in some cases, you may need to list additional backports to install,
+    that would not have needed to be listed before. Due to this behavior
+    change the property has been renamed so uses of it will be checked.
+  * Restic.installed: stop trying to install a backport on jessie, because no
+    such backport exists.
+
+ -- Joey Hess <id@joeyh.name>  Thu, 17 May 2018 10:43:20 -0400
+
 propellor (5.3.6) unstable; urgency=medium
 
   * Fix build with ghc 8.4, which broke due to the Semigroup Monoid change.
diff --git a/doc/README.mdwn b/doc/README.mdwn
--- a/doc/README.mdwn
+++ b/doc/README.mdwn
@@ -56,4 +56,4 @@
 7. Write some neat new properties and send patches!
 
 (Want to get your feet wet with propellor before plunging in?
-[try this](http://propellor.branchable.com/forum/Simple_quickstart_without_git__44___SSH__44___GPG])
+[try this](http://propellor.branchable.com/forum/Simple_quickstart_without_git__44___SSH__44___GPG))
diff --git a/propellor.cabal b/propellor.cabal
--- a/propellor.cabal
+++ b/propellor.cabal
@@ -1,5 +1,5 @@
 Name: propellor
-Version: 5.3.6
+Version: 5.4.0
 Cabal-Version: 1.20
 License: BSD2
 Maintainer: Joey Hess <id@joeyh.name>
diff --git a/src/Propellor/Property/Apt.hs b/src/Propellor/Property/Apt.hs
--- a/src/Propellor/Property/Apt.hs
+++ b/src/Propellor/Property/Apt.hs
@@ -247,12 +247,17 @@
   where
 	go = runApt (params ++ ["install"] ++ ps)
 
-installedBackport :: [Package] -> Property Debian
-installedBackport ps = withOS desc $ \w o -> case o of
+-- | Install packages from the stable-backports suite.
+--
+-- If installing the backport requires installing versions of a package's
+-- dependencies from stable-backports too, you will need to include those
+-- dependencies in the list of packages passed to this function.
+backportInstalled :: [Package] -> Property Debian
+backportInstalled ps = withOS desc $ \w o -> case o of
 	(Just (System (Debian _ suite) _)) -> case backportSuite suite of
 		Nothing -> unsupportedOS'
 		Just bs -> ensureProperty w $
-			runApt (["install", "-t", bs, "-y"] ++ ps)
+			runApt (["install", "-y"] ++ ((++ '/':bs) <$> ps))
 				`changesFile` dpkgStatus
 	_ -> unsupportedOS'
   where
diff --git a/src/Propellor/Property/Borg.hs b/src/Propellor/Property/Borg.hs
--- a/src/Propellor/Property/Borg.hs
+++ b/src/Propellor/Property/Borg.hs
@@ -57,7 +57,7 @@
 installed :: Property DebianLike
 installed = withOS desc $ \w o -> case o of
 	(Just (System (Debian _ (Stable "jessie")) _)) -> ensureProperty w $
-		Apt.installedBackport ["borgbackup"]
+		Apt.backportInstalled ["borgbackup", "python3-msgpack"]
 	_ -> ensureProperty w $
 		Apt.installed ["borgbackup"]
   where
diff --git a/src/Propellor/Property/Restic.hs b/src/Propellor/Property/Restic.hs
--- a/src/Propellor/Property/Restic.hs
+++ b/src/Propellor/Property/Restic.hs
@@ -35,13 +35,7 @@
 	val (REST url) = "rest:" ++ url
 
 installed :: Property DebianLike
-installed = withOS desc $ \w o -> case o of
-	(Just (System (Debian _ (Stable "jessie")) _)) -> ensureProperty w $
-		Apt.installedBackport ["restic"]
-	_ -> ensureProperty w $
-		Apt.installed ["restic"]
-  where
-	desc = "installed restic"
+installed = Apt.installed ["restic"] `describe` "installed restic"
 
 repoExists :: ResticRepo -> IO Bool
 repoExists repo = boolSystem "restic"
diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs
--- a/src/Propellor/Property/SiteSpecific/JoeySites.hs
+++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs
@@ -939,12 +939,13 @@
   where
 	d = "/var/www/html/homepower"
 	sshkeyfile = d </> ".ssh/key"
-	build = userScriptProperty (User "joey")
-		[ "cd " ++ d </> "reactive-banana-automation"
-		, "cabal install"
-		, "cd " ++ d
-		, "make"
-		]
+	build = check (not <$> doesFileExist (d </> "controller")) $
+		userScriptProperty (User "joey")
+			[ "cd " ++ d </> "reactive-banana-automation"
+			, "cabal install"
+			, "cd " ++ d
+			, "make"
+			]
 		`assume` MadeChange
 		`requires` Apt.installed
 			[ "ghc", "cabal-install", "make"
