def tee(self):
        """
        Produces a new deferred and returns it. If this C{MultiDeferred}
        has not been fired (callbacked or errbacked) yet, the deferred
        will not have been fired yet either, but will be fired when
        and if this C{MultiDeferred} gets fired in the future. If this
        C{MultiDeferred} has been fired, returns a deferred
        synchronously fired with the same result.

        @return: A deferred that will fire with whatever this object
        is fired with.
        @rtype: L{Deferred}
        """
        if self._result is not _NO_RESULT:
            if not self._isFailure:
                return succeed(self._result)
            else:
                return fail(self._result)

        d = Deferred()
        self._deferreds.append(d)
        return d