diff --git a/src/allmydata/dirnode.py b/src/allmydata/dirnode.py
index 022a6e0..76f2dc9 100644
--- a/src/allmydata/dirnode.py
+++ b/src/allmydata/dirnode.py
@@ -929,9 +929,11 @@ class DeepChecker:
         if self._repair:
             d = node.check_and_repair(self.monitor, self._verify, self._add_lease)
             d.addCallback(self._results.add_check_and_repair, childpath)
+            d.addErrback(self._results.add_check_and_repair, childpath)
         else:
             d = node.check(self.monitor, self._verify, self._add_lease)
             d.addCallback(self._results.add_check, childpath)
+            d.addErrback(self._results.add_check, childpath)
         d.addCallback(lambda ignored: self._stats.add_node(node, childpath))
         return d
 
diff --git a/src/allmydata/immutable/filenode.py b/src/allmydata/immutable/filenode.py
index ed3785b..94c7d77 100644
--- a/src/allmydata/immutable/filenode.py
+++ b/src/allmydata/immutable/filenode.py
@@ -143,11 +143,17 @@ class CiphertextFileNode:
                     crr.post_repair_results = prr
                     return crr
                 def _repair_error(f):
-                    # as with mutable repair, I'm not sure if I want to pass
-                    # through a failure or not. TODO
+                    prr = CheckResults(cr.uri, cr.storage_index)
+                    prr.data = copy.deepcopy(cr.data)
+                    prr.set_healthy(False)
+                    prr.set_recoverable(False)
+                    prr.set_needs_rebalancing(False)
+                    crr.post_repair_results = prr
+
                     crr.repair_successful = False
                     crr.repair_failure = f
-                    return f
+                    return crr
+
                 r = Repairer(self, storage_broker=sb, secret_holder=sh,
                              monitor=monitor)
                 d = r.start()
diff --git a/src/allmydata/mutable/checker.py b/src/allmydata/mutable/checker.py
index e5d3c30..3efc75a 100644
--- a/src/allmydata/mutable/checker.py
+++ b/src/allmydata/mutable/checker.py
@@ -312,10 +312,14 @@ class MutableCheckAndRepairer(MutableChecker):
             self._fill_checker_results(repair_results.servermap, r)
             self.cr_results.repair_results = repair_results # TODO?
         def _repair_error(f):
-            # I'm not sure if I want to pass through a failure or not.
+            prr = CheckResults(cr.uri, cr.storage_index)
+            prr.data = copy.deepcopy(cr.data)
+            prr.set_healthy(False)
+            prr.set_recoverable(False)
+            prr.set_needs_rebalancing(False)
+            self.cr_results.post_repair_results = prr
+
             self.cr_results.repair_successful = False
-            self.cr_results.repair_failure = f # TODO?
-            #self.cr_results.post_repair_results = ??
-            return f
+            self.cr_results.repair_failure = f
         d.addCallbacks(_repair_finished, _repair_error)
         return d
diff --git a/src/allmydata/scripts/tahoe_check.py b/src/allmydata/scripts/tahoe_check.py
index adb0ccc..e716eae 100644
--- a/src/allmydata/scripts/tahoe_check.py
+++ b/src/allmydata/scripts/tahoe_check.py
@@ -210,16 +210,18 @@ class DeepCheckAndRepairOutput(LineOnlyReceiver):
             self.repairs_attempted += 1
             if crr["repair-successful"]:
                 self.repairs_successful += 1
+
+        path = d["path"]
+        if not path:
+            path = ["<root>"]
+        # verbose means also print one line per file
         if self.verbose:
-            # verbose means also print one line per file
-            path = d["path"]
-            if not path:
-                path = ["<root>"]
             # we don't seem to have a summary available, so build one
             if was_healthy:
                 summary = "healthy"
             else:
                 summary = "not healthy"
+
             print >>stdout, "%s: %s" % (quote_path(path), summary)
 
         # always print out corrupt shares
@@ -231,9 +233,9 @@ class DeepCheckAndRepairOutput(LineOnlyReceiver):
         # always print out repairs
         if crr["repair-attempted"]:
             if crr["repair-successful"]:
-                print >>stdout, " repair successful"
+                print >>stdout, "%s repair successful" % quote_path(path)
             else:
-                print >>stdout, " repair failed"
+                print >>stdout, "%s repair failed" % quote_path(path)
 
     def done(self):
         if self.in_error:
