diff -urp views/views.module views_gzip/views.module
--- views/views.module	2007-07-14 20:54:16.000000000 +0200
+++ views_gzip/views.module	2008-02-26 17:22:47.000000000 +0100
@@ -179,7 +179,7 @@ function views_menu_admin_items(&$items,
  * overly intensive.
  */
 function views_get_all_urls() {
-  $cache = cache_get("views_urls", 'cache_views');
+  $cache = views_cache_get("views_urls");
   if ($cache == 0) {
     $views = array();
     $used = array();
@@ -200,10 +200,10 @@ function views_get_all_urls() {
           $views[$view->name] = $view->url;
       }
     }
-    cache_set("views_urls", 'cache_views', serialize($views));
+    views_cache_set("views_urls", $views);
   }
   else {
-    $views = unserialize($cache->data);
+    $views = $cache->data;
   }
 
   return $views;
@@ -2143,4 +2143,60 @@ function views_form_alter($form_id, &$fo
 // An implementation of hook_devel_caches() from devel.module. Must be in views.module so it always is included.
 function views_devel_caches() {
   return array('cache_views');
+}
+
+define('VIEWS_GZIP_TOKEN', 'GZIP_');
+
+/**
+ * Abstracted cache_set() implements gzip compression if available
+ * see: http://drupal.org/node/121390
+*/
+function views_cache_set($cid, $object) {
+  $data = serialize($object);
+  if (views_use_compression()) {
+    $data = VIEWS_GZIP_TOKEN.gzcompress($data);
+  }
+  cache_set($cid, 'cache_views', $data);
+}
+
+/**
+ * Abstracted cache_get() implements gzip compression if available
+ * see: http://drupal.org/node/121390
+*/
+function views_cache_get($cid) {
+  $data = cache_get($cid, 'cache_views');
+  if ($data) {
+    if (strpos($data->data, VIEWS_GZIP_TOKEN) !== FALSE) {  // see if the data is gzipd
+      if (views_use_compression()) {
+        $data->data = gzuncompress(substr($data->data, strlen(VIEWS_GZIP_TOKEN)));
+      }
+      else {
+        cache_clear_all($cid, 'cache_views');  // gzipd data we can't use, invalidate it
+        return 0;
+      }
+    }
+    $data->data = unserialize($data->data);
+    return $data;
+  }
+  return 0;
+}
+
+/**
+ * checks for availability of gzip compression functions and sets/returns true/false accordingly
+*/
+function views_use_compression() {
+  $var = variable_get('views_use_compression', -1);
+  if ($var != -1) {
+    return $var;
+  }
+  else {
+    if (function_exists('gzcompress') && function_exists('gzuncompress')) {
+      variable_set('views_use_compression', 1);
+      return 1;
+    }
+    else {
+      variable_set('views_use_compression', 0);
+      return 0;
+    }
+  }
 }
\ No newline at end of file
diff -urp views/views_cache.inc views_gzip/views_cache.inc
--- views/views_cache.inc	2007-07-14 21:12:02.000000000 +0200
+++ views_gzip/views_cache.inc	2008-02-26 17:34:57.000000000 +0100
@@ -27,8 +27,8 @@ function _views_get_arguments($titles = 
   global $locale;
 
   if (!$views_arguments) {
-    $data = cache_get("views_arguments:$locale", 'cache_views');
-    $cache = unserialize($data->data);
+    $data = views_cache_get("views_arguments:$locale");
+    $cache = $data->data;
     if (is_array($cache)) {
       $views_arguments = $cache;
     }
@@ -54,7 +54,7 @@ function _views_get_arguments($titles = 
         $views_arguments['title'][$name] = $arg;
       }
       $cache = $views_arguments;
-      cache_set("views_arguments:$locale", 'cache_views', serialize($cache));
+      views_cache_set("views_arguments:$locale", $cache);
     }
   }
   return ($titles ? $views_arguments['base'] : $views_arguments['title']);
@@ -69,8 +69,8 @@ function _views_get_tables($full = false
   global $locale;
 
   if (!$views_tables) {
-    $data = cache_get("views_tables:$locale", 'cache_views');
-    $cache = unserialize($data->data);
+    $data = views_cache_get("views_tables:$locale");
+    $cache = $data->data;
 
     if (is_array($cache)) {
       $views_tables = $cache;
@@ -143,7 +143,7 @@ function _views_get_tables($full = false
           }
         }
       }
-      cache_set("views_tables:$locale", 'cache_views', serialize($views_tables));
+      views_cache_set("views_tables:$locale", $views_tables);
     }
   }
   return ($full ? $views_tables : $views_tables['tables']);
@@ -223,8 +223,8 @@ function _views_get_default_views() {
   global $locale;
 
   if (!$views_default_views) {
-    $data = cache_get("views_default_views:$locale", 'cache_views');
-    $cache = unserialize($data->data);
+    $data = views_cache_get("views_default_views:$locale");
+    $cache = $data->data;
 
     if (is_array($cache)) {
       $views_default_views = $cache;
@@ -243,7 +243,7 @@ function _views_get_default_views() {
           $views_default_views[$i] = $view;
         }
       }
-      cache_set("views_default_views:$locale", 'cache_views', serialize($views_default_views));
+      views_cache_set("views_default_views:$locale", $views_default_views);
     }
   }
   return $views_default_views;
@@ -265,8 +265,8 @@ function _views_sort_arrays($a, $b) {
 }
 
 function _views_get_query(&$view, $args, $filters) {
-  if ($view->is_cacheable && ($cached = cache_get('views_query:' . $view->name, 'cache_views'))) {
-    $info = unserialize($cached->data);
+  if ($view->is_cacheable && ($cached = views_cache_get('views_query:' . $view->name))) {
+    $info = unserialize($cached->data[0]);
 
     $plugins = _views_get_style_plugins();
     if ($plugins[$view->type]['needs_table_header']) {
@@ -277,8 +277,8 @@ function _views_get_query(&$view, $args,
     views_load_query();
     $info = _views_build_query($view, $args, $filters);
     $data = array(
-        'query' => _views_replace_args($info['query'], $info['args']),
-        'countquery' => _views_replace_args($info['countquery'], $info['args']),
+      'query' => _views_replace_args($info['query'], $info['args']),
+      'countquery' => _views_replace_args($info['countquery'], $info['args']),
     );
     if ($view->is_cacheable) {
       cache_set('views_query:' . $view->name, 'cache_views', serialize($data));
@@ -312,8 +312,8 @@ function _views_get_style_plugins($title
   global $locale;
 
   if (!$views_style_plugins) {
-    $data = cache_get("views_style_plugins:$locale", 'cache_views');
-    $cache = unserialize($data->data);
+    $data = views_cache_get("views_style_plugins:$locale");
+    $cache = unserialize($data->data[0]);
     if (is_array($cache)) {
       $views_style_plugins = $cache;
     }
@@ -328,7 +328,7 @@ function _views_get_style_plugins($title
         $views_style_plugins['base'][$name] = $arg;
       }
       $cache = $views_style_plugins;
-      cache_set("views_style_plugins:$locale", 'cache_views', serialize($cache));
+      views_cache_set("views_style_plugins:$locale", $cache);
     }
   }
   return ($titles ? $views_style_plugins['title'] : $views_style_plugins['base']);
