anchor.diff:        match r with
         | Some() ->
           return! protocolMessageStream.ProtocolStream.TryAsyncReadResponse()
  -      | None -> return! Async.Raise (new TimeoutException("Timeout occurred while trying to write reply on channel."))
  +      | None -> return! Async.Raise (new CommunicationTimeoutException("Timeout occurred while trying to write reply on channel.", self.ActorId, TimeoutType.MessageSend))
       }
   
     member self.TryAsyncReplyOnEndPoint(endPoint: IPEndPoint, reply: Reply<'T>) =
  
positive.code:     info.AddValue("msgId", r.msgId)
  
    interface ISerializable with
      override self.GetObjectData(info: SerializationInfo, context: StreamingContext) =
        self.GetObjectData(info, context)
  
  [<Serializable>]
  type ReplyChannel<'T> =
  
negative.code:         let! protocolResponse = attempt <| self.AsyncReplyOnEndPoint(endPoint, reply)
          return match protocolResponse with
                 | Some(Acknowledge _) -> Choice1Of2()
                 | Some(UnknownRecipient _) -> Choice2Of2(new UnknownRecipientException("Remote host could not find the reply recipient.", self.ActorId) :> exn)
                 | Some(Failure(_, e)) -> Choice2Of2(new DeliveryException("Unable to send reply to sender.", self.ActorId, e) :> exn)
                 | None -> Choice2Of2(new CommunicationTimeoutException("Timeout occurred while waiting for confirmation of reply delivery.", self.ActorId, TimeoutType.ConfirmationReceive) :> exn)
        with :? SocketException as e when e.SocketErrorCode = SocketError.TimedOut -> return Choice2Of2(new CommunicationTimeoutException("Timeout occurred while trying to establish connection.", self.ActorId, TimeoutType.Connection, e) :> exn)
            | CommunicationException _ as e -> return Choice2Of2 e
            | e -> return Choice2Of2(new CommunicationException("Communication failure occurred while trying to send reply.", self.ActorId, e) :> exn)
      }
  
    member self.AsyncReply(reply: Reply<'T>) =
      async {
        let! endPoints = addressToEndpoints self.ActorId self.replyAddress
  
        let! r = endPoints |> List.conditionalFoldAsync (fun es endPoint ->
                   async {
  