diff --git a/src/org/openbravo/mobile/core/model/ClientModelComponent.java b/src/org/openbravo/mobile/core/model/ClientModelComponent.java
index 83ce22bc..2a669b00 100644
--- a/src/org/openbravo/mobile/core/model/ClientModelComponent.java
+++ b/src/org/openbravo/mobile/core/model/ClientModelComponent.java
@@ -12,12 +12,15 @@ import java.util.ArrayList;
 import java.util.List;
 
 import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
 
+import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.openbravo.base.model.ModelProvider;
 import org.openbravo.base.model.Property;
 import org.openbravo.client.kernel.BaseTemplateComponent;
+import org.openbravo.client.kernel.StaticResourceProvider;
 import org.openbravo.client.kernel.Template;
 import org.openbravo.dal.service.OBDal;
 import org.openbravo.service.json.JsonConstants;
@@ -39,6 +42,9 @@ public class ClientModelComponent extends BaseTemplateComponent {
 
   private List<Property> filteredProps = null;
 
+  @Inject
+  private StaticResourceProvider resourceProvider;
+
   static {
     FILTERED_PROP_NAMES.add("client");
     FILTERED_PROP_NAMES.add("organization");
@@ -204,7 +210,27 @@ public class ClientModelComponent extends BaseTemplateComponent {
 
   @Override
   public String getETag() {
-    return String.valueOf(System.currentTimeMillis());
+    final String appNameKey = getAppNameKey();
+    if (resourceProvider.getStaticResourceCachedInfo(appNameKey) == null) {
+      // do something unique
+      return String.valueOf(System.currentTimeMillis());
+    } else {
+      // compute the md5 of the cached content
+      return DigestUtils.md5Hex(resourceProvider.getStaticResourceCachedInfo(appNameKey));
+    }
+  }
+
+  private String getAppNameKey() {
+    return getApplicationName() + "_" + getParameter(MODEL_NAME_PARAM);
+  }
+
+  @Override
+  public String generate() {
+    final String content = super.generate();
+    if (!isInDevelopment()) {
+      resourceProvider.putStaticResourceCachedInfo(getAppNameKey(), content);
+    }
+    return content;
   }
 
   @Override
