Argh..... sorry, there was a trivial cut & paste error in the code I just posted. The errback method should of course be: def errback(self, fail=None): if not self._called: self._called = True defer.Deferred.errback(self, fail) Terry