--- views_random_seed_handler_sort_random.inc	2011-08-29 04:11:06.000000000 -0600
+++ views_random_seed_handler_sort_random_new.inc	2011-11-03 17:25:35.000000000 -0600
@@ -31,6 +31,7 @@ class views_random_seed_handler_sort_ran
         'custom' => t('Use custom PHP code')
       ),
       '#default_value' => isset($this->options['user_seed_type']) ? $this->options['user_seed_type'] : 'same_per_user',
+      '#description' => module_exists('varnish') ? t('Note: Using a different seed per user will disable varnish page caching for anonymous users on a per user basis.') : '',
     );
 
     // User seed type.
@@ -112,8 +113,15 @@ function views_random_seed_calculate_see
   $time = time();
   $seed_name = 'views_seed_name-'. $view_name .'-'. $display;
   $seed_time = 'views_seed_time-'. $view_name .'-'. $display;
-  $seed = isset($_SESSION[$seed_name]) ? $_SESSION[$seed_name] : FALSE;
-
+  $user_seed_type = $options['user_seed_type'];
+  
+  if ($user_seed_type == 'diff_per_user' && isset($_SESSION[$seed_name])) {
+    $seed = $_SESSION[$seed_name];
+  }
+  elseif (!$seed = variable_get($seed_name, FALSE)) {
+    $seed = FALSE;
+  }
+  
   if ($options['user_seed_type'] == 'custom') {
     $seed = eval($options['custom_seed']);
     return (int) $seed;
@@ -121,15 +129,15 @@ function views_random_seed_calculate_see
 
   // Create a first seed if necessary.
   if ($seed == FALSE) {
-    $seed = _views_random_seed_generate_seed($options['user_seed_type'], $seed_name, $seed_time, $time, $db_type);
+    $seed = _views_random_seed_generate_seed($user_seed_type, $seed_name, $seed_time, $time, $db_type);
   }
-
+  
   // Reset seed or not ?
   if ($options['reset_seed_int'] != 'never') {
     $reset_time = $options['reset_seed_int'] == 'custom' ? $options['reset_seed_custom'] : $options['reset_seed_int'];
-    if (($_SESSION[$seed_time] + $reset_time) < $time) {
+    if (($user_seed_type == 'diff_per_user' && ($_SESSION[$seed_time] + $reset_time) < $time) || ($user_seed_type == 'same_per_user' && (variable_get($seed_time, 0) + $reset_time) < $time)) {
       variable_del($seed_name);
-      $seed = _views_random_seed_generate_seed($options['user_seed_type'], $seed_name, $seed_time, $time, $db_type);
+      $seed = _views_random_seed_generate_seed($user_seed_type, $seed_name, $seed_time, $time, $db_type);
     }
   }
 
@@ -149,22 +157,21 @@ function views_random_seed_calculate_see
  * @return int seed value.
  */
 function _views_random_seed_generate_seed($user_seed_type, $seed_name, $seed_time, $time, $db_type) {
-
   // Different per user, simply return $time.
   if ($user_seed_type == 'diff_per_user') {
     $seed = _views_random_seed_create_int($time, $db_type);
+    $_SESSION[$seed_time] = $time;
+    $_SESSION[$seed_name] = $seed;
   }
   else {
-    // Same for al users, get a stored variable.
-    $seed = variable_get($seed_name, FALSE);
-    if ($seed == FALSE) {
+    // Same for all users, get a stored variable.
+    if (!$seed = variable_get($seed_name, FALSE)) {
       $seed = _views_random_seed_create_int($time, $db_type);
       variable_set($seed_name, $seed);
+      variable_set($seed_time, $time);
     }
   }
-
-  $_SESSION[$seed_time] = $time;
-  $_SESSION[$seed_name] = $seed;
+  print 'new seed';
   return $seed;
 }
 
