--- includes/bootstrap.inc.old	Thu Jul 16 09:43:00 2009
+++ includes/bootstrap.inc	Thu Jul 16 09:59:54 2009
@@ -566,9 +566,14 @@
  * @see page_set_cache
  */
 function drupal_page_header() {
+  $last_modified = gmdate('D, d M Y H:i:s') .' GMT';
+  # Add '_nocache' string to input of md5 function to differ logged in user and anonymous
+  $etag = '"'.md5($last_modified.'_nocache').'"';
+
   header("Expires: Sun, 19 Nov 1978 05:00:00 GMT");
-  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
-  header("Cache-Control: store, no-cache, must-revalidate");
+  header("Last-Modified: " . $last_modified);
+  header("Etag: $etag");
+  header("Cache-Control: store, no-cache, must-revalidate, private");
   header("Cache-Control: post-check=0, pre-check=0", FALSE);
 }
 
@@ -610,7 +610,7 @@
 
   // The following headers force validation of cache:
   header("Expires: Sun, 19 Nov 1978 05:00:00 GMT");
-  header("Cache-Control: must-revalidate");
+  header("Cache-Control: must-revalidate, max-age=0");
 
   // Determine if the browser accepts gzipped data.
   if (@strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') === FALSE && function_exists('gzencode')) {
