Index: twisted/spread/pb.py =================================================================== --- twisted/spread/pb.py (revision 12811) +++ twisted/spread/pb.py (working copy) @@ -886,7 +886,15 @@ netResult = object.remoteMessageReceived(self, message, netArgs, netKw) except Error, e: if answerRequired: - self._sendError(CopyableFailure(e), requestID) + # If the error is Copyable, send it back and let the code + # on the other end deal with unjellying. + # If it isn't Copyable, wrap it in a CopyableFailure, which + # ensures it can be unjellied on the other end. We have to + # do this because all errors must be sent back. + if isinstance(e, Copyable): + self._sendError(e, requestID) + else: + self._sendError(CopyableFailure(e), requestID) except: if answerRequired: log.msg("Peer will receive following PB traceback:", isError=True)