Added 'failed' param to allow for setFailure(null); to cause an isDone()