Index: src/main/java/com/xpn/xwiki/objects/classes/DBTreeListClass.java
===================================================================
--- src/main/java/com/xpn/xwiki/objects/classes/DBTreeListClass.java	(revision 33978)
+++ src/main/java/com/xpn/xwiki/objects/classes/DBTreeListClass.java	(working copy)
@@ -45,6 +45,8 @@
 {
     private static final Log LOG = LogFactory.getLog(DBTreeListClass.class);
 
+    private List<ListItem> cachedDBTreeList;
+
     public DBTreeListClass(PropertyMetaClass wclass)
     {
         super("dbtreelist", "DB Tree List", wclass);
@@ -64,7 +66,25 @@
     {
         setStringValue("parentField", parentField);
     }
+    
+    public List<ListItem> getCachedDBTreeList(XWikiContext context)
+    {
+        if (isCache()) {
+            return this.cachedDBTreeList;
+        } else {
+            return (List<ListItem>) context.get(context.getDatabase() + ":" + getFieldFullName() + "-tree");
+        }
+    }
 
+    public void setCachedDBTreeList(List<ListItem> cachedDBTreeList, XWikiContext context)
+    {
+        if (isCache()) {
+            this.cachedDBTreeList = cachedDBTreeList;
+        } else {
+            context.put(context.getDatabase() + ":" + getFieldFullName() + "-tree", cachedDBTreeList);
+        }
+    }
+
     public Map<String, List<ListItem>> getTreeMap(XWikiContext context)
     {
         List<ListItem> list = getDBList(context);
@@ -95,8 +115,12 @@
     protected List<ListItem> getTreeList(Map<String, List<ListItem>> treemap, Map<String, ListItem> map,
         XWikiContext context)
     {
-        List<ListItem> list = new ArrayList<ListItem>();
-        addToTreeList(list, treemap, map, "", context);
+    	List<ListItem> list = getCachedDBTreeList(context);
+        if (list == null) {
+           list = new ArrayList<ListItem>();
+           addToTreeList(list, treemap, map, "", context);
+           setCachedDBTreeList(list, context);   
+        }
         return list;
     }
 
