=== modified file 'src/AccessLogEntry.h'
--- src/AccessLogEntry.h	2009-12-22 01:12:53 +0000
+++ src/AccessLogEntry.h	2010-01-24 18:45:24 +0000
@@ -47,7 +47,11 @@
 {
 
 public:
-    AccessLogEntry() : url(NULL) , reply(NULL), request(NULL) {}
+    AccessLogEntry() : url(NULL) , reply(NULL), request(NULL),
+#if USE_ADAPTATION
+	adapted_request(NULL)
+#endif
+    {}
 
     const char *url;
 
@@ -134,6 +138,10 @@
 
     public:
         Headers() : request(NULL),
+#if USE_ADAPTATION
+	    adapted_request(NULL),
+#endif
+
 #if ICAP_CLIENT
                 icap(NULL),
 #endif
@@ -141,6 +149,11 @@
 
         char *request;
 
+#if USE_ADAPTATION
+	char *adapted_request;
+#endif
+
+
 #if ICAP_CLIENT
         char * icap;    ///< last matching ICAP response header.
 #endif
@@ -160,6 +173,10 @@
     HierarchyLogEntry hier;
     HttpReply *reply;
     HttpRequest *request;
+#if USE_ADAPTATION
+    HttpRequest *adapted_request;
+#endif
+
 
 #if ICAP_CLIENT
     /** \brief This subclass holds log info for ICAP part of request

=== modified file 'src/cf.data.pre'
--- src/cf.data.pre	2010-01-21 12:48:36 +0000
+++ src/cf.data.pre	2010-01-24 21:53:21 +0000
@@ -2547,7 +2547,7 @@
 				when multiple ICAP transactions per HTTP
 				transaction are supported.
 
-	If adaptation is enabled the following two codes become available:
+	If adaptation is enabled the following codes become available:
 
 		adapt::sum_trs Summed adaptation transaction response
 				times recorded as a comma-separated list in
@@ -2567,6 +2567,10 @@
 				together. Instead, all transaction response
 				times are recorded individually.
 
+		http::>ha	The adapted HTTP request headers. 
+				Optional header name argument on the format
+				header[:[separator]element]
+
 	You can prefix adapt::*_trs format codes with adaptation
 	service name in curly braces to record response time(s) specific
 	to that service. For example: %{my_service}adapt::sum_trs

=== modified file 'src/client_side.cc'
--- src/client_side.cc	2010-01-13 01:13:17 +0000
+++ src/client_side.cc	2010-01-24 21:47:08 +0000
@@ -461,7 +461,23 @@
         mb.init();
         packerToMemInit(&p, &mb);
         request->header.packInto(&p);
+#if USE_ADAPTATION
+	//if Adaptation this is the adapted request
+	aLogEntry->headers.adapted_request = xstrdup(mb.buf);	
+#else
         aLogEntry->headers.request = xstrdup(mb.buf);
+#endif
+
+#if USE_ADAPTATION
+	// if Adaptation then the virgin request is saved to aLogEntry->request
+	if (aLogEntry->request) {
+	    packerClean(&p);
+	    mb.reset();
+	    packerToMemInit(&p, &mb);
+	    aLogEntry->request->header.packInto(&p);
+	    aLogEntry->headers.request = xstrdup(mb.buf);
+	}
+#endif
 
 #if ICAP_CLIENT
         packerClean(&p);
@@ -559,7 +575,11 @@
 
         if (!Config.accessList.log || checklist->fastCheck()) {
             if (request)
+#if USE_ADAPTATION
+                al.adapted_request = HTTPMSGLOCK(request);
+#else
                 al.request = HTTPMSGLOCK(request);
+#endif
             accessLogLog(&al, checklist);
             updateCounters();
 

=== modified file 'src/client_side_request.cc'
--- src/client_side_request.cc	2010-01-22 01:13:11 +0000
+++ src/client_side_request.cc	2010-01-24 18:37:20 +0000
@@ -1266,6 +1266,9 @@
 #if USE_ADAPTATION
     if (!calloutContext->adaptation_acl_check_done) {
         calloutContext->adaptation_acl_check_done = true;
+        /*Save the original request for logging purposes*/
+        calloutContext->http->al.request = HTTPMSGLOCK(request);
+
         if (Adaptation::AccessCheck::Start(
                     Adaptation::methodReqmod, Adaptation::pointPreCache,
                     request, NULL, adaptationAclCheckDoneWrapper, calloutContext))

=== modified file 'src/log/access_log.cc'
--- src/log/access_log.cc	2009-12-22 01:12:53 +0000
+++ src/log/access_log.cc	2010-01-24 18:44:39 +0000
@@ -359,6 +359,12 @@
     LFT_REQUEST_HEADER_ELEM,
     LFT_REQUEST_ALL_HEADERS,
 
+#if USE_ADAPTATION
+    LFT_ADAPTED_REQUEST_HEADER,
+    LFT_ADAPTED_REQUEST_HEADER_ELEM,
+    LFT_ADAPTED_REQUEST_ALL_HEADERS,
+#endif
+
     LFT_REPLY_HEADER,
     LFT_REPLY_HEADER_ELEM,
     LFT_REPLY_ALL_HEADERS,
@@ -512,6 +518,10 @@
     {"<tt", LFT_TOTAL_SERVER_SIDE_RESPONSE_TIME},
     {"dt", LFT_DNS_WAIT_TIME},
 
+#if USE_ADAPTATION
+    {">ha", LFT_ADAPTED_REQUEST_HEADER},
+    {">ha", LFT_ADAPTED_REQUEST_ALL_HEADERS},
+#endif
     {">h", LFT_REQUEST_HEADER},
     {">h", LFT_REQUEST_ALL_HEADERS},
     {"<h", LFT_REPLY_HEADER},
@@ -765,6 +775,19 @@
 
             break;
 
+#if USE_ADAPTATION
+        case LFT_ADAPTED_REQUEST_HEADER:
+
+            if (al->request)
+                sb = al->adapted_request->header.getByName(fmt->data.header.header);
+
+            out = sb.termedBuf();
+
+            quote = 1;
+
+            break;
+#endif
+
         case LFT_REPLY_HEADER:
             if (al->reply)
                 sb = al->reply->header.getByName(fmt->data.header.header);
@@ -954,6 +977,18 @@
 
             break;
 
+#if USE_ADAPTATION
+        case LFT_ADAPTED_REQUEST_HEADER_ELEM:
+            if (al->adapted_request)
+                sb = al->adapted_request->header.getByNameListMember(fmt->data.header.header, fmt->data.header.element, fmt->data.header.separator);
+
+            out = sb.termedBuf();
+
+            quote = 1;
+
+            break;
+#endif
+
         case LFT_REPLY_HEADER_ELEM:
             if (al->reply)
                 sb = al->reply->header.getByNameListMember(fmt->data.header.header, fmt->data.header.element, fmt->data.header.separator);
@@ -971,6 +1006,15 @@
 
             break;
 
+#if USE_ADAPTATION
+        case LFT_ADAPTED_REQUEST_ALL_HEADERS:
+            out = al->headers.adapted_request;
+
+            quote = 1;
+
+            break;
+#endif
+
         case LFT_REPLY_ALL_HEADERS:
             out = al->headers.reply;
 
@@ -1393,6 +1437,10 @@
     case LFT_ICAP_REP_HEADER:
 #endif
 
+#if USE_ADAPTATION
+    case LFT_ADAPTED_REQUEST_HEADER:
+#endif
+
     case LFT_REQUEST_HEADER:
 
     case LFT_REPLY_HEADER:
@@ -1415,6 +1463,13 @@
                 case LFT_REQUEST_HEADER:
                     lt->type = LFT_REQUEST_HEADER_ELEM;
                     break;
+
+#if USE_ADAPTATION
+                case LFT_ADAPTED_REQUEST_HEADER:
+                    lt->type = LFT_ADAPTED_REQUEST_HEADER_ELEM;
+                    break;
+#endif
+
                 case LFT_REPLY_HEADER:
                     lt->type = LFT_REPLY_HEADER_ELEM;
                     break;
@@ -1440,6 +1495,13 @@
             case LFT_REQUEST_HEADER:
                 lt->type = LFT_REQUEST_ALL_HEADERS;
                 break;
+
+#if USE_ADAPTATION
+            case LFT_ADAPTED_REQUEST_HEADER:
+                lt->type = LFT_ADAPTED_REQUEST_ALL_HEADERS;
+                break;
+#endif
+
             case LFT_REPLY_HEADER:
                 lt->type = LFT_REPLY_ALL_HEADERS;
                 break;
@@ -1553,7 +1615,9 @@
                 case LFT_ICAP_REP_HEADER_ELEM:
 #endif
                 case LFT_REQUEST_HEADER_ELEM:
-
+#if USE_ADAPTATION
+                case LFT_ADAPTED_REQUEST_HEADER_ELEM:
+#endif
                 case LFT_REPLY_HEADER_ELEM:
 
                     if (t->data.header.separator != ',')
@@ -1567,6 +1631,11 @@
                     case LFT_REQUEST_HEADER_ELEM:
                         type = LFT_REQUEST_HEADER_ELEM;
                         break;
+#if USE_ADAPTATION
+                    case LFT_ADAPTED_REQUEST_HEADER_ELEM:
+                        type = LFT_ADAPTED_REQUEST_HEADER_ELEM;
+                        break;
+#endif
                     case LFT_REPLY_HEADER_ELEM:
                         type = LFT_REPLY_HEADER_ELEM;
                         break;
@@ -1588,7 +1657,9 @@
                     break;
 
                 case LFT_REQUEST_ALL_HEADERS:
-
+#if USE_ADAPTATION
+                case LFT_ADAPTED_REQUEST_ALL_HEADERS:
+#endif
                 case LFT_REPLY_ALL_HEADERS:
 
 #if ICAP_CLIENT
@@ -1601,6 +1672,11 @@
                     case LFT_REQUEST_ALL_HEADERS:
                         type = LFT_REQUEST_HEADER;
                         break;
+#if USE_ADAPTATION
+                    case LFT_ADAPTED_REQUEST_ALL_HEADERS:
+                        type = LFT_ADAPTED_REQUEST_HEADER;
+                        break;
+#endif
                     case LFT_REPLY_ALL_HEADERS:
                         type = LFT_REPLY_HEADER;
                         break;
@@ -2377,6 +2453,11 @@
     safe_free(aLogEntry->headers.reply);
     safe_free(aLogEntry->cache.authuser);
 
+#if USE_ADAPTATION
+    safe_free(aLogEntry->headers.adapted_request);
+    HTTPMSGUNLOCK(aLogEntry->adapted_request);
+#endif
+
     HTTPMSGUNLOCK(aLogEntry->reply);
     HTTPMSGUNLOCK(aLogEntry->request);
 #if ICAP_CLIENT