diff --git a/NOTICE b/NOTICE
index b78fc7f..7f1bfe3 100644
--- a/NOTICE
+++ b/NOTICE
@@ -95,6 +95,19 @@
 (C) Copyright 2004, 2005 International Business Machines Corporation.  All rights reserved.
 
 =========================================================================
+==  Apache Jackrabbit Notice                                           ==
+=========================================================================
+
+Apache Jackrabbit
+Copyright 2010 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+Based on source code originally developed by
+Day Software (http://www.day.com/).
+
+=========================================================================
 ==  Apache Log4J Notice                                                ==
 =========================================================================
 
diff --git a/applications/securityext/src/org/ofbiz/securityext/da/ServiceDaHandler.java b/applications/securityext/src/org/ofbiz/securityext/da/ServiceDaHandler.java
deleted file mode 100644
index d3de322..0000000
--- a/applications/securityext/src/org/ofbiz/securityext/da/ServiceDaHandler.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *******************************************************************************/
-package org.ofbiz.securityext.da;
-
-import java.util.Map;
-
-import javolution.util.FastMap;
-
-import org.ofbiz.base.util.Debug;
-import org.ofbiz.entity.Delegator;
-import org.ofbiz.security.authz.da.DynamicAccessHandler;
-import org.ofbiz.service.GenericDispatcher;
-import org.ofbiz.service.GenericServiceException;
-import org.ofbiz.service.LocalDispatcher;
-import org.ofbiz.service.ServiceUtil;
-
-public class ServiceDaHandler implements DynamicAccessHandler {
-
-    private static final String module = ServiceDaHandler.class.getName();
-    protected LocalDispatcher dispatcher;
-    protected Delegator delegator;
-
-    public String getPattern() {
-        return "^service:(.*)$";
-    }
-
-    public boolean handleDynamicAccess(String accessString, String userId, String permission, Map<String, ? extends Object> context) {
-        Map<String,Object> serviceContext = FastMap.newInstance();
-        serviceContext.put("userId", userId);
-        serviceContext.put("permission", permission);
-        serviceContext.put("accessString", accessString);
-        serviceContext.put("permissionContext", context);
-
-        String serviceName = accessString.substring(8);
-        Map<String, Object> result;
-        try {
-            result = dispatcher.runSync(serviceName, serviceContext, 60, true);
-        } catch (GenericServiceException e) {
-            Debug.logError(e, module);
-            return false;
-        }
-
-        if (result != null && !ServiceUtil.isError(result)) {
-            Boolean reply = (Boolean) result.get("permissionGranted");
-            if (reply == null) {
-                reply = Boolean.FALSE;
-            }
-            return reply;
-        } else {
-            return false;
-        }
-    }
-
-    public void setDelegator(Delegator delegator) {
-        this.delegator = delegator;
-        this.dispatcher = GenericDispatcher.getLocalDispatcher("SecurityDA", delegator);
-    }
-}
diff --git a/applications/securityext/src/org/ofbiz/securityext/test/AuthorizationTests.java b/applications/securityext/src/org/ofbiz/securityext/test/AuthorizationTests.java
deleted file mode 100644
index 2cc32ec..0000000
--- a/applications/securityext/src/org/ofbiz/securityext/test/AuthorizationTests.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *******************************************************************************/
-package org.ofbiz.securityext.test;
-
-import java.util.Map;
-
-import org.ofbiz.base.util.Debug;
-import org.ofbiz.security.SecurityConfigurationException;
-import org.ofbiz.security.authz.AbstractAuthorization;
-import org.ofbiz.security.authz.Authorization;
-import org.ofbiz.security.authz.AuthorizationFactory;
-import org.ofbiz.service.testtools.OFBizTestCase;
-
-public class AuthorizationTests extends OFBizTestCase {
-
-    private static final String module = AuthorizationTests.class.getName();
-    protected Authorization security = null;
-
-    public AuthorizationTests(String name) {
-        super(name);
-    }
-
-    @Override
-    public void setUp() throws SecurityConfigurationException {
-        if (security == null) {
-            security = AuthorizationFactory.getInstance(delegator);
-        }
-        AbstractAuthorization.clearThreadLocal();
-    }
-
-    public void testBasicAdminPermission() throws Exception {
-        Debug.logInfo("Running testBasicAdminPermission()", module);
-        assertTrue("User was not granted permission as expected", security.hasPermission("system", "access:foo:bar", null));
-    }
-
-    public void testBasePermissionFailure() throws Exception {
-        Debug.logInfo("Running testBasePermissionFailure()", module);
-        assertFalse("Permission did not fail as expected", security.hasPermission("system", "no:permission", null));
-    }
-
-    public void testDynamicAccessFromClasspath() throws Exception {
-        Debug.logInfo("Running testDynamicAccessFromClasspath()", module);
-        assertTrue("User was not granted dynamic access as expected", security.hasPermission("system", "test:groovy2:2000", null));
-    }
-
-    public void testDynamicAccessService() throws Exception {
-        Debug.logInfo("Running testDynamicAccessService()", module);
-        assertTrue("User was not granted dynamic access as expected", security.hasPermission("system", "test:service:2000", null));
-    }
-
-    public void testDynamicAccessFailure() throws Exception {
-        Debug.logInfo("Running testDynamicAccessFailure()", module);
-        assertFalse("Dynamic access did not fail as expected", security.hasPermission("system", "test:groovy1:2000", null));
-    }
-
-    public void testAutoGrantPermissions() throws Exception {
-        Debug.logInfo("Running testDynamicAccessFailure()", module);
-
-        // first verify the user does not have the initial permission
-        assertFalse("User already has the auto-granted permission", security.hasPermission("system", "test:autogranted", null));
-
-        // next run security check to setup the auto-grant
-        assertTrue("User was not granted dynamic access as expected", security.hasPermission("system", "test:groovy1:1000", null));
-
-        // as long as this runs in the same thread (and it should) access should now be granted
-        assertTrue("User was not auto-granted expected permission", security.hasPermission("system", "test:autogranted", null));
-    }
-
-    public void testAutoGrantCleanup() throws Exception {
-        Debug.logInfo("Running testAutoGrantCleanup()", module);
-        assertFalse("User was auto-granted an unexpected permission", security.hasPermission("user", "test:autogranted", null));
-    }
-
-    public void testDynamicAccessRecursion() throws Exception {
-        Debug.logInfo("Running testDynamicAccessRecursion()", module);
-        assertFalse("User was granted an unexpected permission", security.hasPermission("user", "test:recursion", null));
-    }
-
-    public void testFindAllPermissionRegexp() throws Exception {
-        Debug.logInfo("Running testFindAllPermissionRegexp()", module);
-        Map<String,Boolean> permResultMap = security.findMatchingPermission("system", ".*:example", null);
-        assertEquals("Invalid result map size; should be 5", 5, permResultMap.size());
-        assertTrue("User was not granted expected permission {access:example}", permResultMap.get("access:example"));
-        assertTrue("User was not granted expected permission {create:example}", permResultMap.get("create:example"));
-        assertTrue("User was not granted expected permission {read:example}", permResultMap.get("read:example"));
-        assertTrue("User was not granted expected permission {update:example}", permResultMap.get("update:example"));
-        assertTrue("User was not granted expected permission {delete:example}", permResultMap.get("delete:example"));
-    }
-
-    public void testFindLimitedPermissionRegexp() throws Exception {
-        Debug.logInfo("Running testFindLimitedPermissionRegexp()", module);
-        Map<String,Boolean> permResultMap = security.findMatchingPermission("user", "(access|read):example", null);
-        assertEquals("Invalid result map size; should be 2", 2, permResultMap.size());
-        assertFalse("User was granted an unexpected permission {access:example}", permResultMap.get("access:example"));
-        assertFalse("User was granted an unexpected permission {read:example}", permResultMap.get("read:example"));
-    }
-}
diff --git a/applications/securityext/src/org/ofbiz/securityext/test/DaTest2.groovy b/applications/securityext/src/org/ofbiz/securityext/test/DaTest2.groovy
deleted file mode 100644
index 0c2e894..0000000
--- a/applications/securityext/src/org/ofbiz/securityext/test/DaTest2.groovy
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *******************************************************************************/
-
- package org.ofbiz.securityext.test;
-
-import org.ofbiz.base.util.Debug;
-
-String recordNumber = permission.substring(permission.lastIndexOf(":") + 1)
-if ("system".equals(userId) && "2000".equals(recordNumber)) {
-    Debug.log("Matched approval requirements {system} - {2000}; returning true");
-    return true;
-}
-
-Debug.logInfo("Did not match expected requirements; returning false", "groovy");
-return false;
diff --git a/framework/jcr/build.xml b/framework/jcr/build.xml
index 1d08c7e..6d889d5 100644
--- a/framework/jcr/build.xml
+++ b/framework/jcr/build.xml
@@ -39,7 +39,7 @@
         <fileset dir="../../framework/entity/build/lib" includes="*.jar"/>
         <fileset dir="../../framework/service/build/lib" includes="*.jar"/>
         <fileset dir="../../framework/security/build/lib" includes="*.jar"/>
-        <fileset dir="../../framework/jetty/lib" includes="*.jar"/>
+        <fileset dir="../../specialpurpose/jetty/lib" includes="*.jar"/>
     </path>
 
     <target name="jar" depends="classes">
diff --git a/specialpurpose/example/webapp/example/jackrabbit/ContentChooser.ftl b/specialpurpose/example/webapp/example/jackrabbit/ContentChooser.ftl
new file mode 100644
index 0000000..17e62a9
--- /dev/null
+++ b/specialpurpose/example/webapp/example/jackrabbit/ContentChooser.ftl
@@ -0,0 +1,52 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+${uiLabelMap.ExampleJackrabbitQuickContentSelect}
+<form id="selectNode" action="EditRepositoryContent" type="post">
+    <select name="path" id="nodePath">
+        <option value="" selected></option>
+        <#list parameters.contentList as content>
+            <option value="${content}">${content}</option>
+        </#list>
+    </select>
+    <select name="language" id="nodeLanguage">
+        <option value="" selected></option>
+    </select>
+    <input type="submit" />
+</form>
+
+<script type="text/javascript">
+    var languageList = ${parameters.languageList}
+
+    jQuery("#nodePath").change(function() {
+        var newOptions = languageList[jQuery(this).val()];
+
+        var options = "";
+        for (option in newOptions) {
+            options = options + "<option value='" + newOptions[option] + "'>" + newOptions[option] + "</option>";
+
+        }
+        options = options + "<option value='' ></option>"
+
+        jQuery("#nodeLanguage").children().remove();
+        jQuery("#nodeLanguage").append(options);
+
+    });
+</script>
+
+<br />
\ No newline at end of file
diff --git a/specialpurpose/example/webapp/example/jackrabbit/JackrabbitDataTree.ftl b/specialpurpose/example/webapp/example/jackrabbit/JackrabbitDataTree.ftl
new file mode 100644
index 0000000..7848e3e
--- /dev/null
+++ b/specialpurpose/example/webapp/example/jackrabbit/JackrabbitDataTree.ftl
@@ -0,0 +1,94 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<script language="javascript" type="text/javascript" src="<@ofbizContentUrl>/images/jquery/plugins/jsTree/jquery.jstree.js</@ofbizContentUrl>"></script>
+
+<div id="jackrabbitDataTree">${parameters.dataTree!""}</div>
+
+<script type="text/javascript">
+    var rawdata = ${parameters.dataTree!};
+
+    jQuery(function () {
+        jQuery("#jackrabbitDataTree").jstree({
+            "plugins" : [ "themes", "json_data", "ui", "contextmenu"],
+            "json_data" : {
+                "data" : rawdata
+            },
+            'contextmenu': {
+                'items': {
+                    'ccp' : false,
+                    'create' : false,
+                    'rename' : false,
+                    'open' : {
+                        'label' : "${uiLabelMap.ExampelsJackrabbitOpenData}",
+                        'action' : function(obj) {
+                            openDataFromRepository(obj.attr('nodepath'), obj.attr('nodetype'));
+                        }
+                   },
+                    'remove' : {
+                        'label' : "${uiLabelMap.ExampelsJackrabbitRemoveData}",
+                        'action' : function(obj) {
+                            removeDataFromRepository(obj.attr('nodepath'), obj.attr('nodetype'));
+                         }
+                   }
+                 }
+             }
+        });
+    });
+
+    function removeDataFromRepository(nodepath, nodetype) {
+        var parameters = {"path" : nodepath};
+        var url = "RemoveRepositoryNode";
+
+        runPostRequest(url, parameters)
+    }
+
+    function openDataFromRepository(nodepath, nodetype) {
+
+        var parameters = {"path" : nodepath};
+        var url = "EditRepositoryContent";
+
+        runPostRequest(url, parameters)
+    }
+
+    function runPostRequest(url, parameters) {
+        // create a hidden form
+        var form = jQuery('<form></form>');
+
+        form.attr("method", "POST");
+        form.attr("action", url);
+
+        jQuery.each(parameters, function(key, value) {
+            var field = jQuery('<input></input>');
+
+            field.attr("type", "hidden");
+            field.attr("name", key);
+            field.attr("value", value);
+
+            form.append(field);
+        });
+
+        // The form needs to be apart of the document in
+        // order for us to be able to submit it.
+        jQuery(document.body).append(form);
+        form.submit();
+        form.remove();
+    }
+
+
+</script>
\ No newline at end of file
diff --git a/specialpurpose/example/webapp/example/jackrabbit/JackrabbitFileTree.ftl b/specialpurpose/example/webapp/example/jackrabbit/JackrabbitFileTree.ftl
new file mode 100644
index 0000000..68570d9
--- /dev/null
+++ b/specialpurpose/example/webapp/example/jackrabbit/JackrabbitFileTree.ftl
@@ -0,0 +1,110 @@
+<#--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<script language="javascript" type="text/javascript" src="<@ofbizContentUrl>/images/jquery/plugins/jsTree/jquery.jstree.js</@ofbizContentUrl>"></script>
+
+<div id="jackrabbitFileTree">${parameters.fileTree!""}</div>
+
+<script type="text/javascript">
+    var rawdata = ${parameters.fileTree!};
+
+    jQuery(function () {
+        jQuery("#jackrabbitFileTree").jstree({
+            "plugins" : [ "themes", "json_data", "ui", "contextmenu"],
+            "json_data" : {
+                "data" : rawdata
+            },
+            'contextmenu': {
+                'items': {
+                    'ccp' : false,
+                    'create' : false,
+                    'rename' : false,
+                    'open' : {
+                        'label' : "${uiLabelMap.ExampelsJackrabbitOpenFile}",
+                        'action' : function(obj) {
+                            openFileFromRepository(obj.attr('nodepath'), obj.attr('nodetype'));
+                         }
+                    },
+                    'remove' : {
+                        'label' : "${uiLabelMap.ExampelsJackrabbitRemoveFile}",
+                        'action' : function(obj) {
+                            removeFileFromRepository(obj.attr('nodepath'), obj.attr('nodetype'));
+                         }
+                        },
+                    'download' : {
+                        'label' : "${uiLabelMap.ExampelsJackrabbitDownloadFile}",
+                        'action' : function(obj) {
+                            downloadFileFromRepository(obj.attr('nodepath'), obj.attr('nodetype'));
+                        }
+                   }
+                 }
+             }
+        });
+    });
+
+    function openFileFromRepository(nodepath, nodetype) {
+        var parameters = {"path" : nodepath};
+        var url = "OpenFileInformation";
+
+        runPostRequest(url, parameters)
+    }
+
+    function removeFileFromRepository(nodepath, nodetype) {
+        var parameters = {"path" : nodepath};
+        var url = "RemoveRepositoryFile";
+
+        runPostRequest(url, parameters)
+    }
+
+    function downloadFileFromRepository(nodepath, nodetype) {
+        if ("nt:folder" == nodetype) { // the open function for foldes is not supported yet.
+            return;
+        }
+
+        var parameters = {"path" : nodepath};
+        var url = "GetFileFromRepository";
+
+        runPostRequest(url, parameters)
+    }
+
+    function runPostRequest(url, parameters) {
+        // create a hidden form
+        var form = jQuery('<form></form>');
+
+        form.attr("method", "POST");
+        form.attr("action", url);
+
+        jQuery.each(parameters, function(key, value) {
+            var field = jQuery('<input></input>');
+
+            field.attr("type", "hidden");
+            field.attr("name", key);
+            field.attr("value", value);
+
+            form.append(field);
+        });
+
+        // The form needs to be apart of the document in
+        // order for us to be able to submit it.
+        jQuery(document.body).append(form);
+        form.submit();
+        form.remove();
+    }
+
+
+</script>
\ No newline at end of file
diff --git a/specialpurpose/example/widget/example/CommonScreens.xml b/specialpurpose/example/widget/example/CommonScreens.xml
index 6dcba08..701e13b 100644
--- a/specialpurpose/example/widget/example/CommonScreens.xml
+++ b/specialpurpose/example/widget/example/CommonScreens.xml
@@ -256,6 +256,32 @@
         </section>
     </screen>
 
+    <screen name="CommonExampleJackrabbitDecorator">
+        <section>
+            <actions>
+                <set field="headerItem" value="ExampleJackrabbit" />
+                <set field="labelFieldName" value="exampleTypeId" />
+                <set field="dataFieldName" value="total" />
+            </actions>
+            <widgets>
+                <decorator-screen name="main-decorator"
+                    location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="pre-body">
+                        <include-menu name="ExampleJackrabbit" location="component://example/widget/example/ExampleMenus.xml"/>
+                    </decorator-section>
+                    <decorator-section name="body">
+                        <container style="clear" />
+                        <section>
+                            <widgets>
+                                <decorator-section-include name="body" />
+                            </widgets>
+                        </section>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+
     <screen name="main">
         <!-- This is the screen for the Main page in the Example component. A common pattern
             in OFBiz is to have each component include a Main page as a starting point for
diff --git a/specialpurpose/example/widget/example/ExampleJackrabbitForms.xml b/specialpurpose/example/widget/example/ExampleJackrabbitForms.xml
new file mode 100644
index 0000000..c45da2c
--- /dev/null
+++ b/specialpurpose/example/widget/example/ExampleJackrabbitForms.xml
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/widget-form.xsd">
+
+    <form name="ListRepositoryData" type="list" list-name="repositoryContent" separate-columns="true" odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar">
+        <field name="path">
+            <hyperlink target="EditRepositoryContent" description="${path}">
+                <parameter param-name="contentId" from-field="contentId" />
+                <parameter param-name="path" from-field="path" />
+            </hyperlink>
+        </field>
+        <field name="contentId">
+            <hyperlink target="EditRepositoryContent" description="${contentId}">
+                <parameter param-name="contentId" from-field="contentId" />
+                <parameter param-name="path" from-field="path" />
+            </hyperlink>
+        </field>
+        <field name="contentTypeId">
+            <display />
+        </field>
+        <field name="statusId">
+            <display />
+        </field>
+        <field name="statusId">
+            <display />
+        </field>
+    </form>
+
+    <form name="SelectContentObject" type="single" target="">
+        <field name="contentDropDown" position="1">
+            <drop-down ><list-options key-name="contentList" description="${contentList}" list-name="parameters.contentList" list-entry-name="contentList"/></drop-down>
+        </field>
+
+        <!--
+        <field name="languageDropDown" position="2" title="">
+            <drop-down><list-options key-name="languageList" list-name="parameters.languageList"/></drop-down>
+        </field>
+        -->
+        <field name="submit" position="2"><submit/></field>
+    </form>
+
+    <form name="AddRepositoryData" type="single" target="StoreNewRepositoryData">
+        <field name="path" title="${uiLabelMap.ExampleRepositoryNode}" tooltip="${uiLabelMap.ExampleAddNewNodePath}">
+            <text />
+        </field>
+        <field name="msgLocale" title="${uiLabelMap.CommonChooseLanguage}" >
+            <drop-down allow-empty="true" ><list-options key-name="localeId" list-name="parameters.localeList" description="${localeId}"/></drop-down>
+        </field>
+        <field name="title">
+            <text />
+        </field>
+        <field name="message" title="${uiLabelMap.ExampleRepositoryMessage}">
+            <textarea visual-editor-enable="true" />
+        </field>
+        <field name="submit">
+            <submit />
+        </field>
+    </form>
+
+    <form name="UploadRepositoryFileData" type="upload" target="StoreNewRepositoryFileData">
+        <field name="path" title="${uiLabelMap.ExampleRepositoryFolder}" tooltip="${uiLabelMap.ExampleAddNewNodePath}">
+            <text></text>
+        </field>
+        <field name="fileData" title="${uiLabelMap.ExampleRepositoryFile}">
+            <file size="28"></file>
+        </field>
+        <field name="fileLocale" title="${uiLabelMap.CommonChooseLanguage}" >
+            <drop-down allow-empty="true" ><list-options key-name="localeId" list-name="parameters.localeList" description="${localeId}"/></drop-down>
+        </field>
+        <field name="description"><textarea cols="30"/></field>
+        <field name="submit">
+            <submit />
+        </field>
+    </form>
+
+    <form name="EditRepositoryDataChangeLanguage" type="single" target="EditRepositoryContent" default-entity-name="Content">
+        <field name="path" title="${uiLabelMap.ExampleRepositoryNode}" map-name="content">
+            <hidden />
+        </field>
+        <field name="language" title="${uiLabelMap.CommonChooseLanguage}" >
+            <drop-down allow-empty="false" current="first-in-list" current-description="${parameters.selectedLanguage}"><list-options key-name="languageList" description="${languageList}" list-name="parameters.languageList" list-entry-name="languageList"/></drop-down>
+        </field>
+        <field name="versions" >
+            <drop-down allow-empty="true" current="selected" no-current-selected-key="${parameters.version}"><list-options key-name="versionList" description="${versionList}" list-name="parameters.versionList" list-entry-name="versionList"/></drop-down>
+        </field>
+        <field name="submit" ><submit/></field>
+    </form>
+
+    <form name="EditRepositoryData" type="single" target="UpdateRepositoryData" >
+        <field name="title">
+            <display />
+        </field>
+        <field name="path" title="${uiLabelMap.ExampleRepositoryNode}" >
+            <display />
+        </field>
+        <field name="language"  title="${uiLabelMap.CommonLanguageTitle}">
+            <display />
+        </field>
+        <field name="pubDate" >
+            <display />
+        </field>
+        <field name="createDate" >
+            <display />
+        </field>
+        <field name="version" >
+            <display />
+        </field>
+        <field name="content" title="${uiLabelMap.ExampleRepositoryMessage}" >
+            <textarea visual-editor-enable="true" default-value="${parameters.message}"/>
+        </field>
+        <field name="submit">
+            <submit />
+        </field>
+    </form>
+
+    <form name="ScanRepositoryStructure" type="list" list-name="listIt" default-entity-name="Content" separate-columns="true" odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar">
+        <field name="path">
+            <display />
+        </field>
+        <field name="primaryNodeType">
+            <display />
+        </field>
+    </form>
+
+    <form name="ExampleJackrabbitShowFileInformation" type="single" list-name="listIt" default-entity-name="Content" separate-columns="true" odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar">
+        <field name="fileName">
+            <display />
+        </field>
+        <field name="fileMimeType" use-when="parameters.get(&quot;fileMimeType&quot;)!=null">
+            <display />
+        </field>
+        <field name="fileLastModified" use-when="parameters.get(&quot;fileLastModified&quot;)!=null">
+            <display />
+        </field>
+        <field name="fileCreationDate">
+            <display />
+        </field>
+    </form>
+
+    <form name="QueryRepositoryDataForm" type="single" target="QueryRepositoryData">
+        <field name="queryData" ><text /></field>
+        <field name="submit"><submit/></field>
+    </form>
+
+    <form name="ExampleJackrabbitShowQueryResults" type="list" target="EditRepositoryContent" list-name="queryResult" separate-columns="true" odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar">
+        <field name="path" title="${uiLabelMap.ExampleRepositoryNode}" ><hyperlink target="EditRepositoryContent" description="${path}"><parameter param-name="path"/></hyperlink></field>
+        <field name="score" ><display /></field>
+    </form>
+</forms>
\ No newline at end of file
diff --git a/specialpurpose/example/widget/example/ExampleJackrabbitScreens.xml b/specialpurpose/example/widget/example/ExampleJackrabbitScreens.xml
new file mode 100644
index 0000000..6c02a41
--- /dev/null
+++ b/specialpurpose/example/widget/example/ExampleJackrabbitScreens.xml
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<screens xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/widget-screen.xsd">
+
+    <screen name="ListRepositoryData">
+        <section>
+            <actions>
+                <set field="titleProperty" value="PageTitleExampleJackrabbit" />
+                <set field="tabButtonItem" value="ExampleJackrabbitListNodes" />
+                <entity-condition list="repositoryContent" entity-name="Content">
+                    <condition-expr field-name="contentTypeId" operator="equals" value="REPOSITORY"/>
+                </entity-condition>
+            </actions>
+            <widgets>
+                <decorator-screen name="CommonExampleJackrabbitDecorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">
+                        <container>
+                            <include-form location="component://example/widget/example/ExampleJackrabbitForms.xml" name="ListRepositoryData" />
+                        </container>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+
+    <screen name="ExampleJackrabbitShowContentData">
+        <section>
+            <actions>
+                <set field="titleProperty" value="PageTitleExampleJackrabbit" />
+                <set field="tabButtonItem" value="ExampleJackrabbitShowContentData" />
+            </actions>
+            <widgets>
+                <decorator-screen name="CommonExampleJackrabbitDecorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">
+                        <container>
+                            <platform-specific>
+                                <html><html-template location="component://example/webapp/example/jackrabbit/ContentChooser.ftl"/></html>
+                            </platform-specific>
+                        </container>
+                        <container>
+                            <label>${uiLabelMap.ExampleJackrabbitQueryForContent}</label>
+                            <include-form location="component://example/widget/example/ExampleJackrabbitForms.xml" name="QueryRepositoryDataForm" />
+                        </container>
+                        <container>
+                            <label>${uiLabelMap.ExampleJackrabbitTryRightClick}</label>
+                            <platform-specific>
+                                <html><html-template location="component://example/webapp/example/jackrabbit/JackrabbitDataTree.ftl"/></html>
+                            </platform-specific>
+                        </container>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+
+    <screen name="ExampleJackrabbitAddData">
+        <section>
+            <actions>
+                <set field="titleProperty" value="PageTitleExampleJackrabbit" />
+                <set field="tabButtonItem" value="ExampleJackrabbitAddData" />
+                <script location="component://example/webapp/example/WEB-INF/actions/includes/PrepareLocalesForDropDown.groovy"/>
+            </actions>
+            <widgets>
+                <decorator-screen name="CommonExampleJackrabbitDecorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">
+                        <container>
+                            <include-form location="component://example/widget/example/ExampleJackrabbitForms.xml" name="AddRepositoryData" />
+                        </container>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+
+    <screen name="ExampleJackrabbitUploadFileData">
+        <section>
+            <actions>
+                <set field="titleProperty" value="PageTitleExampleJackrabbit" />
+                <set field="tabButtonItem" value="ExampleJackrabbitUploadFileData" />
+                <script location="component://example/webapp/example/WEB-INF/actions/includes/PrepareLocalesForDropDown.groovy"/>
+            </actions>
+            <widgets>
+                <decorator-screen name="CommonExampleJackrabbitDecorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">
+                        <container>
+                            <include-form location="component://example/widget/example/ExampleJackrabbitForms.xml" name="UploadRepositoryFileData" />
+                        </container>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+
+    <screen name="ExampleJackrabbitScanRepositoryStructure">
+        <section>
+            <actions>
+                <set field="titleProperty" value="PageTitleExampleJackrabbit" />
+                <set field="tabButtonItem" value="ExampleJackrabbitScanRepositoryStrukture" />
+                <set field="listIt" from-field="parameters.listIt"/>
+            </actions>
+            <widgets>
+                <decorator-screen name="CommonExampleJackrabbitDecorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">
+                        <container>
+                            <include-form location="component://example/widget/example/ExampleJackrabbitForms.xml" name="ScanRepositoryStructure" />
+                        </container>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+
+    <screen name="ExampleJackrabbitEditRepositoryContent">
+        <section>
+            <actions>
+                <set field="titleProperty" value="PageTitleExampleJackrabbit" />
+                <set field="tabButtonItem" value="ExampleJackrabbitMainPage" />
+            </actions>
+            <widgets>
+                <decorator-screen name="CommonExampleJackrabbitDecorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">
+                        <container>
+                            <include-form location="component://example/widget/example/ExampleJackrabbitForms.xml" name="EditRepositoryDataChangeLanguage" />
+                            <include-form location="component://example/widget/example/ExampleJackrabbitForms.xml" name="EditRepositoryData" />
+                            <link target="RemoveRepositoryNode" text="remove" style="buttontext">
+                                <parameter param-name="repositoryNode" from-field="content.repositoryNode" />
+                                <parameter param-name="contentId" from-field="content.contentId"/>
+                            </link>
+                        </container>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+
+    <screen name="ExampleJackrabbitShowUploadedFiles">
+        <section>
+            <actions>
+                <set field="titleProperty" value="PageTitleExampleJackrabbit" />
+                <set field="tabButtonItem" value="ExampleJackrabbitShowUploadedFiles" />
+            </actions>
+            <widgets>
+                <decorator-screen name="CommonExampleJackrabbitDecorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">
+                        <container>
+                            <label>${uiLabelMap.ExampleJackrabbitTryRightClick}</label>
+                            <platform-specific>
+                                <html><html-template location="component://example/webapp/example/jackrabbit/JackrabbitFileTree.ftl"/></html>
+                            </platform-specific>
+                        </container>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+
+    <screen name="ExampleJackrabbitShowFileInformation">
+        <section>
+            <actions>
+                <set field="titleProperty" value="PageTitleExampleJackrabbit" />
+                <set field="tabButtonItem" value="ExampleJackrabbitShowUploadedFiles" />
+            </actions>
+            <widgets>
+                <decorator-screen name="CommonExampleJackrabbitDecorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">
+                        <container>
+                            <include-form location="component://example/widget/example/ExampleJackrabbitForms.xml" name="ExampleJackrabbitShowFileInformation" />
+                        </container>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+
+    <screen name="ExampleJackrabbitShowQueryResult">
+        <section>
+            <actions>
+                <set field="titleProperty" value="PageTitleExampleJackrabbit" />
+                <set field="tabButtonItem" value="ExampleJackrabbitShowContentData" />
+                <set field="queryResult" from-field="parameters.queryResult"/>
+            </actions>
+            <widgets>
+                <decorator-screen name="CommonExampleJackrabbitDecorator" location="${parameters.mainDecoratorLocation}">
+                    <decorator-section name="body">
+                        <container>
+                            <include-form location="component://example/widget/example/ExampleJackrabbitForms.xml" name="ExampleJackrabbitShowQueryResults" />
+                        </container>
+                    </decorator-section>
+                </decorator-screen>
+            </widgets>
+        </section>
+    </screen>
+
+</screens>
\ No newline at end of file
diff --git a/specialpurpose/example/widget/example/ExampleMenus.xml b/specialpurpose/example/widget/example/ExampleMenus.xml
index f4b979d..3fe40ba 100644
--- a/specialpurpose/example/widget/example/ExampleMenus.xml
+++ b/specialpurpose/example/widget/example/ExampleMenus.xml
@@ -88,4 +88,12 @@
         <menu-item name="ExampleBarChart" title="Bar chart"><link target="ExampleBarChart"/></menu-item>
         <menu-item name="ExamplePieChart" title="Pie chart"><link target="ExamplePieChart"/></menu-item>
     </menu>
+
+    <menu name="ExampleJackrabbit" extends="CommonTabBarMenu" extends-resource="component://common/widget/CommonMenus.xml">
+        <menu-item name="ExampleJackrabbitShowContentData" title="${uiLabelMap.ExampleJackrabbitShowContentData}"><link target="ExampleJackrabbitShowContentData"/></menu-item>
+        <menu-item name="ExampleJackrabbitAddData" title="${uiLabelMap.ExampleAddNewContentEntry}"><link target="ExampleJackrabbitAddData"/></menu-item>
+        <menu-item name="ExampleJackrabbitUploadFileData" title="${uiLabelMap.ExampleJackrabbitUploadFileData}"><link target="ExampleJackrabbitUploadFileData"/></menu-item>
+        <menu-item name="ExampleJackrabbitShowUploadedFiles" title="${uiLabelMap.ExampleJackrabbitShowUploadedFiles}"><link target="ExampleJackrabbitShowUploadedFiles"/></menu-item>
+        <menu-item name="ExampleJackrabbitScanRepositoryStrukture" title="${uiLabelMap.ExampleScanRepositoryStrukture}"><link target="ExampleJackrabbitScanRepositoryStructure"/></menu-item>
+    </menu>
 </menus>
diff --git a/specialpurpose/example/widget/example/FormWidgetExampleScreens.xml b/specialpurpose/example/widget/example/FormWidgetExampleScreens.xml
index e2b8d74..3e870f2 100644
--- a/specialpurpose/example/widget/example/FormWidgetExampleScreens.xml
+++ b/specialpurpose/example/widget/example/FormWidgetExampleScreens.xml
@@ -82,7 +82,7 @@
                                         </widgets>
                                     </section>
                                 </container>
-                                <container style="screenlet-body">                                    
+                                <container style="screenlet-body">
                                     <container style="button-bar"><label style="h2">${uiLabelMap.ExampleLookupFieldsTitle}</label></container>
                                         <container style="screenlet-body">
                                             <label style="h3">${uiLabelMap.ExampleSourceCode}</label>
