Index: popups.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/popups/popups.module,v
retrieving revision 1.11.2.19
diff -u -r1.11.2.19 popups.module
--- popups.module	20 Nov 2008 21:18:57 -0000	1.11.2.19
+++ popups.module	13 Feb 2009 02:10:48 -0000
@@ -56,10 +56,10 @@
 
   foreach ($popups as $path => $popup_config) {
     if ($path == $_GET['q']) {
-      popups_add_popups($popups[$path]);
+      popups_add_popups($popup_config);
     }
     elseif (strpos($path, '*') !== FALSE && drupal_match_path($_GET['q'], $path)) {
-      popups_add_popups($popups[$path]);
+      popups_add_popups($popup_config);
     }
   }  
   
@@ -168,14 +168,22 @@
 
 /**
  * Define hook_popups().
- * Build the list of popup rules from all modules that implement hook_popups.
- * 
- * @todo - Add some caching so we don't rebuild everytime?
+ *
+ * Retrieves the list of popup rules from all modules that implement hook_popups.
+ *
+ * @param $reset
+ *   (optional) If set to TRUE, forces the popup rule cache to reset.
  */
-function popups_get_popups() {
+function popups_get_popups($reset = FALSE) {
   static $popups = NULL;
-  if (!isset($popups)) {
-    $popups = module_invoke_all('popups');
+  if (!isset($popups) || $reset) {
+    if (!$reset && ($cache = cache_get('popups:popups')) && !empty($cache->data)) {
+      $popups = $cache->data;
+    }
+    else {
+      $popups = module_invoke_all('popups');
+      cache_set('popups:popups', $popups);
+    }
   }
   return $popups;
 }
