anchor.diff:          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.") :> exn)
  -               | Some(Failure(_, e)) -> Choice2Of2(new CommunicationException("Unable to send reply to sender.", e) :> exn)
  -               | None -> Choice2Of2(new TimeoutException("Timeout occurred while waiting for response on writing reply to channel.") :> exn)
  -      with e -> return Choice2Of2 e 
  +               | 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 = self.replyAddress.ToEndPointsAsync()
  +      let! endPoints = addressToEndpoints self.ActorId self.replyAddress
   
         let! r = endPoints |> List.conditionalFoldAsync (fun es endPoint ->
                    async {
  
positive.code:                                  | _ -> return! Async.Raise e
    }
  
  module ProtocolMessage =
    let box (protocolMessage: ProtocolMessage<'T>): ProtocolMessage<obj> =
      match protocolMessage with
  
negative.code:       match r with
        | Some() ->
          return! protocolMessageStream.ProtocolStream.TryAsyncReadResponse()
        | 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>) =
  