diff --git a/skinr.module b/skinr.module
index fbfa1a3..ae99501 100644
--- a/skinr.module
+++ b/skinr.module
@@ -32,14 +32,23 @@ function skinr_init() {
  * Implementation of hook_preprocess().
  */
 function skinr_preprocess(&$vars, $hook) {
-  // Let's make sure this has been run. There have been problems where other
-  // modules implement a theme function in their hook_init(), so we make doubly
-  // sure that the includes are included.
-  skinr_init();
-
-  $skinr_config = skinr_fetch_config();
-  $current_theme = skinr_current_theme();
-  $theme_registry = theme_get_registry();
+  static $already_called = FALSE;
+  static $skinr_config;
+  static $current_theme;
+  static $theme_registry;
+
+  if (!$already_called) {
+    $already_called = TRUE;
+
+    // Let's make sure this has been run. There have been problems where other
+    // modules implement a theme function in their hook_init(), so we make doubly
+    // sure that the includes are included.
+    skinr_init();
+  
+    $skinr_config = skinr_fetch_config();
+    $current_theme = skinr_current_theme();
+    $theme_registry = theme_get_registry();
+  }
 
   $original_hook = $hook;
   if (isset($theme_registry[$hook]['original hook'])) {
@@ -1085,4 +1094,4 @@ function skinr_handler($type, $op, $handler, &$a3, $a4 = NULL, $a5 = NULL, $a6 =
         return $handler($op, $a3, $a4);
     }
   }
-}
\ No newline at end of file
+}
