diff --git a/autopkgtest.py b/autopkgtest.py
index ff579d1..60ff7d7 100644
--- a/autopkgtest.py
+++ b/autopkgtest.py
@@ -563,7 +563,7 @@ class AutoPackageTest(object):
         if os.path.exists(request_path):
             self._adt_britney("submit", request_path)
 
-    def collect(self):
+    def collect(self, packages):
         # fetch results from swift
         try:
             swift_url = self.britney.options.adt_swift_url
@@ -584,6 +584,17 @@ class AutoPackageTest(object):
                 for archinfo in verinfo.values():
                     for arch in archinfo:
                         self.fetch_swift_results(swift_url, pkg, arch)
+            # also update results for excuses whose tests failed, in case a
+            # manual retry worked
+            for (pkg, ver) in packages:
+                if pkg not in self.pending_tests:
+                    for arch in self.test_results.get(pkg, {}):
+                        try:
+                            if not self.test_results[pkg][arch][1][ver][0]:
+                                self.log_verbose('Checking for new results for failed %s/%s on %s' % (pkg, ver, arch))
+                                self.fetch_swift_results(swift_url, pkg, arch)
+                        except KeyError:
+                            pass
 
             # update the results cache
             with open(self.results_cache_file + '.new', 'w') as f:
diff --git a/britney.py b/britney.py
index 48e51b7..23455c5 100755
--- a/britney.py
+++ b/britney.py
@@ -1848,7 +1848,7 @@ class Britney(object):
             autopkgtest.request(autopkgtest_packages, autopkgtest_excludes)
             if not self.options.dry_run:
                 autopkgtest.submit()
-                autopkgtest.collect()
+                autopkgtest.collect(autopkgtest_packages)
             jenkins_public = "https://jenkins.qa.ubuntu.com/job"
             jenkins_private = (
                 "http://d-jenkins.ubuntu-ci:8080/view/%s/view/AutoPkgTest/job" %
diff --git a/tests/test_autopkgtest.py b/tests/test_autopkgtest.py
index b1fcf23..202e909 100644
--- a/tests/test_autopkgtest.py
+++ b/tests/test_autopkgtest.py
@@ -317,6 +317,37 @@ lightgreen 2 i386 lightgreen 2
 
         self.assertEqual(self.pending_requests, '')
 
+    def test_rerun_failure(self):
+        '''manually re-running a failed test gets picked up'''
+
+        # first run fails
+        self.swift.set_results({'autopkgtest-series': {
+            'series/i386/l/lightgreen/20150101_100101@': (4, 'lightgreen 2'),
+            'series/amd64/l/lightgreen/20150101_100101@': (4, 'lightgreen 2'),
+        }})
+
+        self.do_test(
+            [('lightgreen', {'Version': '2', 'Depends': 'libgreen1 (>= 1)'}, 'autopkgtest')],
+            # FIXME: while we only submit requests through AMQP, but don't consider
+            # their results, we don't expect this to hold back stuff.
+            VALID_CANDIDATE,
+            [r'\blightgreen\b.*>1</a> to .*>2<',
+             r'autopkgtest for lightgreen 2: .*amd64.*Regression.*i386.*Regression'])
+        self.assertEqual(self.pending_requests, '')
+
+        # re-running test manually succeeded
+        self.swift.set_results({'autopkgtest-series': {
+            'series/i386/l/lightgreen/20150101_100101@': (4, 'lightgreen 2'),
+            'series/amd64/l/lightgreen/20150101_100101@': (4, 'lightgreen 2'),
+            'series/i386/l/lightgreen/20150101_100201@': (0, 'lightgreen 2'),
+            'series/amd64/l/lightgreen/20150101_100201@': (0, 'lightgreen 2'),
+        }})
+        self.do_test(
+            [], VALID_CANDIDATE,
+            [r'\blightgreen\b.*>1</a> to .*>2<',
+             r'autopkgtest for lightgreen 2: .*amd64.*Pass.*i386.*Pass'])
+        self.assertEqual(self.pending_requests, '')
+
     def test_no_amqp_config(self):
         '''Run without autopkgtest requests'''