diff --git a/src/org/openbravo/erpCommon/businessUtility/Preferences.java b/src/org/openbravo/erpCommon/businessUtility/Preferences.java
--- a/src/org/openbravo/erpCommon/businessUtility/Preferences.java
+++ b/src/org/openbravo/erpCommon/businessUtility/Preferences.java
@@ -25,6 +25,7 @@
 import org.apache.log4j.Logger;
 import org.openbravo.base.provider.OBProvider;
 import org.openbravo.base.secureApp.VariablesSecureApp;
+import org.openbravo.client.kernel.RequestContext;
 import org.openbravo.dal.core.OBContext;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.dal.service.OBQuery;
@@ -159,18 +160,18 @@
   }
 
   /**
-   * Obtains the value for a given property with the visibility defined by the parameters. In case
-   * of conflict or the property is not defined an exception is thrown.
+   * Obtains the value for a given property with the visibility defined by the parameters. In case of conflict or the property is
+   * not defined an exception is thrown.
    * <p>
-   * This method is used to query in database for the property value, note that when properties are
-   * set, they are also saved as session values and it is possible to obtain them using
-   * {@link Utility#getPreference(VariablesSecureApp, String, String) Utility.getPreference}.
+   * This method is used to query in database for the property value, note that when properties are set, they are also saved as
+   * session values and it is possible to obtain them using {@link Utility#getPreference(VariablesSecureApp, String, String)
+   * Utility.getPreference}.
    * 
    * @throws PropertyException
    *           if the property cannot be resolved in a single value:
    *           <ul>
-   *           <li> {@link PropertyNotFoundException} if the property is not defined. <li>
-   *           {@link PropertyConflictException} in case of conflict
+   *           <li> {@link PropertyNotFoundException} if the property is not defined. <li> {@link PropertyConflictException} in
+   *           case of conflict
    *           </ul>
    */
   public static String getPreferenceValue(String property, boolean isListProperty, Client client,
@@ -321,6 +322,26 @@
   }
 
   /**
+   * Returns a preference value for the current user, using the current users client/org/rol. It also tries to find the preference
+   * value in the http session, if not found there then it queries for it Storing the result in the http session (if present). The
+   * http session is only checked if it is present.
+   */
+  public static String getCurrentPreferenceValue(String property, boolean isListProperty,
+      Window window) throws PropertyException {
+    final String sessionKey = ("P|" + (window != null ? window.getId() + "|" : "" + property))
+        .toUpperCase();
+
+    String value = RequestContext.get().getVariablesSecureApp().getSessionValue(sessionKey);
+    if (value == null || value.length() == 0) {
+      value = getPreferenceValue(property, isListProperty, OBContext.getOBContext()
+          .getCurrentClient(), OBContext.getOBContext().getCurrentOrganization(), OBContext
+          .getOBContext().getUser(), OBContext.getOBContext().getRole(), window);
+      RequestContext.get().getVariablesSecureApp().setSessionValue(sessionKey, value);
+    }
+    return value;
+  }
+
+  /**
    * Stores the preference as a session value
    * 
    * @param vars
