Index: sipXregistry/include/registry/SipRedirectServer.h
===================================================================
--- sipXregistry/include/registry/SipRedirectServer.h	(revision 19066)
+++ sipXregistry/include/registry/SipRedirectServer.h	(revision 19067)
@@ -305,7 +305,7 @@
    // will be removed, or PORT_NONE
    int mProxyNormalPort;
    // The Route header address and parameter value(lr) to use to
-   // "forward" redirected ACKs "back" to the proxy.
+   // forward redirected ACKs back to the proxy.
    UtlString mAckRouteToProxy;
 
    // functions
Index: sipXregistry/src/SipRedirectServer.cpp
===================================================================
--- sipXregistry/src/SipRedirectServer.cpp	(revision 19066)
+++ sipXregistry/src/SipRedirectServer.cpp	(revision 19067)
@@ -216,6 +216,23 @@
    ErrorDescriptor errorDescriptor;
 
    // Extract the request URI.
+
+   // This code is not strictly correct, as the request could have:
+   //    Route: <registrar [added by proxy]>,
+   //           sip:[user]@[domain],
+   //           [more]
+   // due to an element Record-Routing with its AOR, but no element seems
+   // to do that.
+   // If we desire to handle that case, we have to correct the code here
+   // to remove/skip any top routes that refer to the Registrar, then examine
+   // the topmost remaining route (if any).
+   // It would also require changing the code for routing ACKs that we forward
+   // to modify the topmost route if present, instead of the request-URI.
+   // There may be further complications due to strict routing.
+   // All of this would be much like the Proxy forwarding requests.
+   // Currently, we trust that all Route values refer to the registrar
+   // and blindly remove them from any ACK that we must forward directly.
+
    UtlString stringUri;
    pMessage->getRequestUri(&stringUri);
    // The requestUri is an addr-spec, not a name-addr.
@@ -404,10 +421,22 @@
                                                  contactAddrSpec,
                                                  SIP_PROTOCOL_VERSION);
 
+               // Remove any existing Route headers.
+               // See the comment at the top of this method ("Extract
+               // the request URI") for discussion.
+               while (ackCopy.removeHeader(SIP_ROUTE_FIELD, 0))
+               {
+                  // empty
+               }
+
                // Process header parameters in the request URI,
                // especially moving any Route parameters to Route headers.
                ackCopy.applyTargetUriHeaderParams();
 
+               // Put Route to proxy in the first position, so the proxy
+               // can see the ACK.
+               ackCopy.addRouteUri(mAckRouteToProxy.data());
+
                // Update or create the Max-Forwards header.
                if (!ackCopy.getMaxForwards(maxForwards))
                {
