diff --git a/src/org/openbravo/mobile/core/login/RolePermissions.java b/src/org/openbravo/mobile/core/login/RolePermissions.java
--- a/src/org/openbravo/mobile/core/login/RolePermissions.java
+++ b/src/org/openbravo/mobile/core/login/RolePermissions.java
@@ -12,16 +12,19 @@
 import java.io.IOException;
 import java.io.Writer;
 import java.util.ArrayList;
+import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 
 import javax.servlet.ServletException;
+import javax.servlet.http.HttpSession;
 
 import org.apache.log4j.Logger;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
+import org.openbravo.client.kernel.RequestContext;
 import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.dal.service.OBQuery;
@@ -72,8 +75,9 @@
 
     Map<String, Object> prefValues = new HashMap<String, Object>();
     // default is false
+    System.err.println("test");
     for (String pref : prefs) {
-      prefValues.put(pref, false);
+      prefValues.put(pref.toUpperCase(), false);
     }
     prefValues.putAll(getPreferenceValues(prefs));
 
@@ -119,21 +123,49 @@
 
   private Map<String, Object> getPreferenceValues(List<String> preferenceKeys) {
     HashSet<String> prefKeys = new HashSet<String>(preferenceKeys);
-    List<Preference> preferences = Preferences.getAllPreferences(OBContext.getOBContext()
-        .getCurrentClient().getId(), OBContext.getOBContext().getCurrentOrganization().getId(),
-        OBContext.getOBContext().getUser().getId(), OBContext.getOBContext().getRole().getId());
+    final HttpSession session = RequestContext.get().getSession();
     Map<String, Object> result = new HashMap<String, Object>();
-    for (Preference preference : preferences) {
-      if (preference.getProperty() == null || !prefKeys.contains(preference.getProperty())) {
-        continue;
+    boolean foundCachedPreferences = false;
+    if (session != null) {
+      final Enumeration<?> enumeration = RequestContext.get().getSessionAttributeNames();
+      while (enumeration.hasMoreElements()) {
+        final String enumerationKey = (String) enumeration.nextElement();
+        if (enumerationKey.startsWith("P|")) {
+          final int lastIndexOf = enumerationKey.lastIndexOf("|");
+          final String prefKey = enumerationKey.substring(lastIndexOf + 1);
+          foundCachedPreferences = true;
+          System.err.println(prefKey);
+          if (prefKeys.contains(prefKey)) {
+
+            Object prefValue = (String) session.getAttribute(enumerationKey);
+            if ("Y".equals(prefValue)) {
+              prefValue = Boolean.TRUE;
+            } else if ("N".equals(prefValue)) {
+              prefValue = Boolean.FALSE;
+            }
+            System.err.println(prefKey + " --> " + prefValue);
+            result.put(prefKey, prefValue);
+          }
+        }
       }
-      Object prefValue = preference.getSearchKey();
-      if ("Y".equals(prefValue)) {
-        prefValue = Boolean.TRUE;
-      } else if ("N".equals(prefValue)) {
-        prefValue = Boolean.FALSE;
+    }
+    // nothing cached, use the traditional approach
+    if (!foundCachedPreferences) {
+      List<Preference> preferences = Preferences.getAllPreferences(OBContext.getOBContext()
+          .getCurrentClient().getId(), OBContext.getOBContext().getCurrentOrganization().getId(),
+          OBContext.getOBContext().getUser().getId(), OBContext.getOBContext().getRole().getId());
+      for (Preference preference : preferences) {
+        if (preference.getProperty() == null || !prefKeys.contains(preference.getProperty())) {
+          continue;
+        }
+        Object prefValue = preference.getSearchKey();
+        if ("Y".equals(prefValue)) {
+          prefValue = Boolean.TRUE;
+        } else if ("N".equals(prefValue)) {
+          prefValue = Boolean.FALSE;
+        }
+        result.put(preference.getProperty(), prefValue);
       }
-      result.put(preference.getProperty(), prefValue);
     }
     return result;
   }
