diff --git a/plugins/views_plugin_display.inc b/plugins/views_plugin_display.inc
index 3c47037..a21e258 100644
--- a/plugins/views_plugin_display.inc
+++ b/plugins/views_plugin_display.inc
@@ -39,7 +39,23 @@ class views_plugin_display extends views_plugin {
       unset($options['defaults']);
     }
 
-    $this->unpack_options($this->options, $options);
+    // Cache for unpack_options.
+    static $unpack_options = array();
+    $cid = 'unpack_options:' . md5(serialize(array($this->options, $options)));
+    if (empty($unpack_options[$cid])) {
+      $cache = views_cache_get($cid, TRUE);
+      if (!empty($cache->data)) {
+        $this->options = $cache->data;
+      }
+      else {
+        $this->unpack_options($this->options, $options);
+        views_cache_set($cid, $this->options, TRUE);
+      }
+      $unpack_options[$cid] = $this->options;
+    }
+    else {
+      $this->options = $unpack_options[$cid];
+    }
   }
 
   function destroy() {
