=== modified file 'src/esi/VarState.cc'
--- src/esi/VarState.cc	2012-11-19 11:29:31 +0000
+++ src/esi/VarState.cc	2013-03-21 01:32:55 +0000
@@ -857,35 +857,43 @@
     delete currentFunction;
 }
 
-/* XXX FIXME: this should be comma delimited, no? */
 void
-ESIVarState::buildVary (HttpReply *rep)
+ESIVarState::buildVary(HttpReply *rep)
 {
+    /* TODO: use Key header flags.
+     * which will mean the eval() function above need to record what
+     * was scanned for in each of these replies.
+     * For now we generate it taking advantage of the flags being optional
+     * such that we can use identical Vary and key headers.
+     */
     char tempstr[1024];
     tempstr[0]='\0';
 
     if (flags.language)
-        strcat (tempstr, "Accept-Language ");
+        strcat(tempstr, ",Accept-Language");
 
     if (flags.cookie)
-        strcat (tempstr, "Cookie ");
+        strcat(tempstr, ",Cookie");
 
     if (flags.host)
-        strcat (tempstr, "Host ");
+        strcat(tempstr, ",Host");
 
     if (flags.referer)
-        strcat (tempstr, "Referer ");
+        strcat(tempstr, ",Referer");
 
     if (flags.useragent)
-        strcat (tempstr, "User-Agent ");
+        strcat(tempstr, ",User-Agent");
 
     if (!tempstr[0])
         return;
 
-    String strVary (rep->header.getList (HDR_VARY));
-
+    String strVary(rep->header.getList(HDR_VARY));
     if (!strVary.size() || strVary[0] != '*') {
-        rep->header.putStr (HDR_VARY, tempstr);
+        rep->header.putStr(HDR_VARY, &tempstr[1]));
+    }
+
+    String strVaryKey(rep->header.getList(HDR_KEY));
+    if (!strVaryKey.size()) {
+        rep->header.putStr(HDR_KEY, &tempstr[1]);
     }
 }
-


