diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImagareConfigScreen.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImagareConfigScreen.java
index 0a4f83d..f0a2faf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImagareConfigScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImagareConfigScreen.java
@@ -136,6 +136,7 @@
         @Override
         public void onSuccess(JavaScriptObject result) {
           saveButton.setEnabled(false);
+          onSave();
         }
 
         @Override
@@ -144,4 +145,7 @@
         }
       });
   }
+
+  protected void onSave() {
+  }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImagarePreferenceScreen.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImagarePreferenceScreen.java
index bae87be..5922452 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImagarePreferenceScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/client/ImagarePreferenceScreen.java
@@ -17,6 +17,7 @@
 import com.google.gerrit.plugin.client.Plugin;
 import com.google.gerrit.plugin.client.rpc.RestApi;
 import com.google.gerrit.plugin.client.screen.Screen;
+import com.google.gwt.user.client.Cookies;
 import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.ImageResourceRenderer;
@@ -58,4 +59,10 @@
 
     super.display(info);
   }
+
+  @Override
+  protected void onSave() {
+    super.onSave();
+    Cookies.removeCookie(Plugin.get().getPluginName() + "~prefs");
+  }
 }
diff --git a/src/main/resources/static/imagare.js b/src/main/resources/static/imagare.js
index f55087e..acf14cf 100644
--- a/src/main/resources/static/imagare.js
+++ b/src/main/resources/static/imagare.js
@@ -18,23 +18,64 @@
         return;
       }
 
-      Gerrit.get('/accounts/self/preference', function(r) {
-        if (!r.pattern) {
-          return;
-        }
-
-        if ('TOOLTIP' === r.link_decoration) {
-          addTooltips(r.pattern);
-        } else if ('INLINE' === r.link_decoration) {
-          inlineImages(r.pattern);
-        }
-      });
+      var prefs = getPrefsFromCookie();
+      if (prefs !== null) {
+        convertImageLinks(prefs);
+      } else {
+        Gerrit.get('/accounts/self/preference', function(prefs) {
+          storePrefsInCookie(prefs);
+          convertImageLinks(prefs);
+        });
+      }
     }
 
     function startsWith(s, p) {
       return s.slice(0, p.length) == p;
     }
 
+    function storePrefsInCookie(prefs) {
+      var date = new Date();
+      date.setTime(date.getTime() + (1 * 24 * 60 * 60 * 1000)); // 1 day
+      document.cookie = getCookieName()
+          + "="
+          + JSON.stringify(prefs)
+          + "; expires=" + date.toGMTString()
+          + "; path=/";
+    }
+
+    function getPrefsFromCookie() {
+      var cookie = document.cookie;
+      if (cookie.length > 0) {
+        var cookieName = getCookieName();
+        var start = cookie.indexOf(cookieName + "=");
+        if (start != -1) {
+            start = start + cookieName.length + 1;
+            var end = document.cookie.indexOf(";", start);
+            if (end == -1) {
+                end = document.cookie.length;
+            }
+            return JSON.parse(unescape(document.cookie.substring(start, end)));
+        }
+      }
+      return null;
+    }
+
+    function getCookieName() {
+      return self.getPluginName() + "~prefs";
+    }
+
+    function convertImageLinks(prefs) {
+      if (!prefs.pattern) {
+        return;
+      }
+
+      if ('TOOLTIP' === prefs.link_decoration) {
+        addTooltips(prefs.pattern);
+      } else if ('INLINE' === prefs.link_decoration) {
+        inlineImages(prefs.pattern);
+      }
+    }
+
     function inlineImages(pattern) {
       var l = document.links;
       for(var i = 0; i < l.length; i++) {
