You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by dk...@apache.org on 2019/06/24 21:30:51 UTC

[sling-org-apache-sling-app-cms] branch dklco/conf-cleanup updated (c253ab1 -> 892d7fa)

This is an automated email from the ASF dual-hosted git repository.

dklco pushed a change to branch dklco/conf-cleanup
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git.


    from c253ab1  Initial crack at a better structure for the /conf content and fixing the breadcrumbs
     new fed85ad  Trivial whitespace
     new 892d7fa  Completely re-vamped the CA Configuration structure to be more consistent

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 ...References.java => ComponentConfiguration.java} |  24 ++--
 .../{PageTemplate.java => ComponentPolicy.java}    |  45 ++------
 ...ileManager.java => ComponentPolicyManager.java} |  15 ++-
 .../java/org/apache/sling/cms/PageManager.java     |   5 +-
 .../java/org/apache/sling/cms/PageTemplate.java    |  16 +--
 .../org/apache/sling/cms/PageTemplateManager.java  |   4 +-
 .../java/org/apache/sling/cms/package-info.java    |   2 +-
 .../core/internal/filters/EditIncludeFilter.java   |   2 +-
 .../models/ComponentConfigurationImpl.java         |  55 ++++++++++
 .../core/internal/models/ComponentPolicyImpl.java  |  94 ++++++++++++++++
 ...erImpl.java => ComponentPolicyManagerImpl.java} |  42 +++----
 .../cms/core/internal/models/PageTemplateImpl.java |  40 ++-----
 .../internal/ResourceEditorAssociationTest.java    |   3 +-
 pom.xml                                            |   1 +
 .../components/general/codeblock/edit.json         |  28 ++---
 .../general/columncontrol/columncontrol.jsp        |  49 ++++-----
 .../components/general/columncontrol/config.json   |  40 ++++---
 .../components/general/columncontrol/edit.json     |  74 ++++++-------
 .../components/general/columncontrol/options.jsp   |   5 +-
 .../reference/components/general/cta/config.json   |  26 +++--
 .../apps/reference/components/general/cta/cta.jsp  |   6 +-
 .../reference/components/general/cta/edit.json     |  96 ++++++++--------
 .../reference/components/general/cta/options.jsp   |  11 +-
 .../components/general/iframe/config.json          |  40 ++++---
 .../reference/components/general/iframe/edit.json  |  84 +++++++-------
 .../reference/components/general/iframe/iframe.jsp |   5 +-
 .../components/general/iframe/options.jsp          |  11 +-
 .../reference/components/general/image/config.json |  26 +++--
 .../reference/components/general/image/edit.json   |  64 +++++------
 .../reference/components/general/image/image.jsp   |   2 +-
 .../reference/components/general/image/options.jsp |  11 +-
 .../reference/components/general/list/config.json  |  46 ++++----
 .../reference/components/general/list/edit.json    | 122 ++++++++++-----------
 .../reference/components/general/list/init.jsp     |   2 +-
 .../reference/components/general/list/item.jsp     |  22 ++--
 .../reference/components/general/list/list.jsp     |  18 +--
 .../components/general/list/pagination.jsp         |  74 ++++++-------
 .../components/general/search/config.json          |  88 +++++++--------
 .../reference/components/general/search/edit.json  |  44 ++++----
 .../components/general/search/pagination.jsp       |  74 ++++++-------
 .../reference/components/general/search/result.jsp |  24 ++--
 .../reference/components/general/search/search.jsp |  38 +++----
 .../components/general/searchform/config.json      |  46 ++++----
 .../components/general/searchform/edit.json        |  14 +--
 .../components/general/searchform/searchform.jsp   |   8 +-
 .../components/general/stylewrapper/config.json    |  20 ++--
 .../components/general/stylewrapper/edit.json      |  30 ++---
 .../components/general/stylewrapper/options.jsp    |   4 +-
 .../general/stylewrapper/stylewrapper.jsp          |   2 +-
 .../components/general/suffixheader/edit.json      | 106 +++++++++---------
 .../general/suffixheader/suffixheader.jsp          |  14 +--
 .../reference/components/general/tags/config.json  |  66 +++++------
 .../reference/components/general/tags/edit.json    |  14 +--
 .../reference/components/general/tags/tags.jsp     |  19 ++--
 ui/src/main/resources/jcr_root/conf/global.json    |  18 +--
 .../components/caconfig/component/component.jsp    |  44 ++++----
 .../components/caconfig/component/edit.json        |  38 +++----
 .../components/caconfig/fileeditor/config.json     |   3 +-
 .../components/caconfig/fileeditor/fileeditor.jsp  |   2 +-
 .../caconfig/{sitesettings.json => policies.json}  |   2 +-
 .../caconfig/{rewriter => policies}/include.jsp    |   3 +-
 .../libs/sling-cms/components/caconfig/policy.json |   5 +
 .../components/caconfig/policy/config.json         |   4 +
 .../policy}/config/config.jsp                      |  28 -----
 .../richtext => caconfig/policy/config}/edit.json  |  14 ++-
 .../components/caconfig/policy/policy.jsp          |   8 +-
 .../{readability.json => policymapping.json}       |   4 +-
 .../{rewriter/config => policymapping}/edit.json   |  19 ++--
 .../config.jsp => policymapping/policymapping.jsp} |  18 ++-
 .../components/caconfig/scripts/policyOptions.jsp  |  11 +-
 .../template}/config.json                          |   0
 .../template}/config/config.jsp                    |  25 +----
 .../template}/config/edit.json                     |   6 +-
 .../{base/base.jsp => template/template.jsp}       |  10 +-
 .../cms/templateeditor/templateeditor.jsp          |  45 --------
 .../{cms/templateeditor => }/config/config.jsp     |  25 +----
 .../{cms/templateeditor => }/config/edit.json      |   0
 .../editor/scripts/resourceTypeOptions.jsp         |  26 ++---
 .../components/general/container/container.jsp     |   7 +-
 .../libs/sling-cms/content/config/edit.json        |   6 +
 .../libs/sling-cms/content/template/edit.json      |  15 ++-
 ...rnal.ResourceEditorAssociation-confedit.config} |   4 +-
 82 files changed, 1124 insertions(+), 1087 deletions(-)
 copy api/src/main/java/org/apache/sling/cms/{References.java => ComponentConfiguration.java} (62%)
 copy api/src/main/java/org/apache/sling/cms/{PageTemplate.java => ComponentPolicy.java} (57%)
 copy api/src/main/java/org/apache/sling/cms/{FileManager.java => ComponentPolicyManager.java} (67%)
 create mode 100644 core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentConfigurationImpl.java
 create mode 100644 core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentPolicyImpl.java
 copy core/src/main/java/org/apache/sling/cms/core/internal/models/{PageManagerImpl.java => ComponentPolicyManagerImpl.java} (50%)
 copy ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/{sitesettings.json => policies.json} (74%)
 copy ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/{rewriter => policies}/include.jsp (87%)
 create mode 100644 ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy.json
 create mode 100644 ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/config.json
 copy ui/src/main/resources/jcr_root/libs/sling-cms/components/{cms/templateeditor => caconfig/policy}/config/config.jsp (68%)
 copy ui/src/main/resources/jcr_root/libs/sling-cms/components/{general/richtext => caconfig/policy/config}/edit.json (56%)
 copy reference/src/main/resources/jcr_root/apps/reference/components/pages/base/base.jsp => ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/policy.jsp (78%)
 copy ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/{readability.json => policymapping.json} (52%)
 copy ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/{rewriter/config => policymapping}/edit.json (62%)
 copy ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/{readability/config/config.jsp => policymapping/policymapping.jsp} (70%)
 copy reference/src/main/resources/jcr_root/apps/reference/components/general/cta/options.jsp => ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/scripts/policyOptions.jsp (58%)
 rename ui/src/main/resources/jcr_root/libs/sling-cms/components/{cms/templateeditor => caconfig/template}/config.json (100%)
 copy ui/src/main/resources/jcr_root/libs/sling-cms/components/{cms/templateeditor => caconfig/template}/config/config.jsp (77%)
 copy ui/src/main/resources/jcr_root/libs/sling-cms/components/{cms/templateeditor => caconfig/template}/config/edit.json (90%)
 copy ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/{base/base.jsp => template/template.jsp} (73%)
 delete mode 100644 ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/templateeditor.jsp
 rename ui/src/main/resources/jcr_root/libs/sling-cms/components/{cms/templateeditor => }/config/config.jsp (77%)
 rename ui/src/main/resources/jcr_root/libs/sling-cms/components/{cms/templateeditor => }/config/edit.json (100%)
 copy ui/src/main/resources/jcr_root/libs/sling-cms/install/{org.apache.sling.cms.core.internal.ResourceEditorAssociation-confbuckets.config => org.apache.sling.cms.core.internal.ResourceEditorAssociation-confedit.config} (89%)


[sling-org-apache-sling-app-cms] 02/02: Completely re-vamped the CA Configuration structure to be more consistent

Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dklco pushed a commit to branch dklco/conf-cleanup
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git

commit 892d7fa5820ea9851d842d8f68078b57483fd479
Author: Dan Klco <dk...@apache.org>
AuthorDate: Mon Jun 24 17:30:01 2019 -0400

    Completely re-vamped the CA Configuration structure to be more consistent
---
 ...ageManager.java => ComponentConfiguration.java} |  23 ++--
 .../{PageTemplate.java => ComponentPolicy.java}    |  45 ++------
 ...ageManager.java => ComponentPolicyManager.java} |  15 ++-
 .../java/org/apache/sling/cms/PageManager.java     |   5 +-
 .../java/org/apache/sling/cms/PageTemplate.java    |  16 +--
 .../org/apache/sling/cms/PageTemplateManager.java  |   4 +-
 .../java/org/apache/sling/cms/package-info.java    |   2 +-
 .../core/internal/filters/EditIncludeFilter.java   |   2 +-
 .../models/ComponentConfigurationImpl.java         |  55 ++++++++++
 .../core/internal/models/ComponentPolicyImpl.java  |  94 ++++++++++++++++
 .../models/ComponentPolicyManagerImpl.java         |  49 +++++++++
 .../cms/core/internal/models/PageTemplateImpl.java |  40 ++-----
 .../internal/ResourceEditorAssociationTest.java    |   3 +-
 pom.xml                                            |   1 +
 .../components/general/codeblock/edit.json         |  28 ++---
 .../general/columncontrol/columncontrol.jsp        |  49 ++++-----
 .../components/general/columncontrol/config.json   |  40 ++++---
 .../components/general/columncontrol/edit.json     |  74 ++++++-------
 .../components/general/columncontrol/options.jsp   |   5 +-
 .../reference/components/general/cta/config.json   |  26 +++--
 .../apps/reference/components/general/cta/cta.jsp  |   6 +-
 .../reference/components/general/cta/edit.json     |  96 ++++++++--------
 .../reference/components/general/cta/options.jsp   |  11 +-
 .../components/general/iframe/config.json          |  40 ++++---
 .../reference/components/general/iframe/edit.json  |  84 +++++++-------
 .../reference/components/general/iframe/iframe.jsp |   5 +-
 .../components/general/iframe/options.jsp          |  11 +-
 .../reference/components/general/image/config.json |  26 +++--
 .../reference/components/general/image/edit.json   |  64 +++++------
 .../reference/components/general/image/image.jsp   |   2 +-
 .../reference/components/general/image/options.jsp |  11 +-
 .../reference/components/general/list/config.json  |  46 ++++----
 .../reference/components/general/list/edit.json    | 122 ++++++++++-----------
 .../reference/components/general/list/init.jsp     |   2 +-
 .../reference/components/general/list/item.jsp     |  22 ++--
 .../reference/components/general/list/list.jsp     |  18 +--
 .../components/general/list/pagination.jsp         |  74 ++++++-------
 .../components/general/search/config.json          |  88 +++++++--------
 .../reference/components/general/search/edit.json  |  44 ++++----
 .../components/general/search/pagination.jsp       |  74 ++++++-------
 .../reference/components/general/search/result.jsp |  24 ++--
 .../reference/components/general/search/search.jsp |  38 +++----
 .../components/general/searchform/config.json      |  46 ++++----
 .../components/general/searchform/edit.json        |  14 +--
 .../components/general/searchform/searchform.jsp   |   8 +-
 .../components/general/stylewrapper/config.json    |  20 ++--
 .../components/general/stylewrapper/edit.json      |  30 ++---
 .../components/general/stylewrapper/options.jsp    |   4 +-
 .../general/stylewrapper/stylewrapper.jsp          |   2 +-
 .../components/general/suffixheader/edit.json      | 106 +++++++++---------
 .../general/suffixheader/suffixheader.jsp          |  14 +--
 .../reference/components/general/tags/config.json  |  66 +++++------
 .../reference/components/general/tags/edit.json    |  14 +--
 .../reference/components/general/tags/tags.jsp     |  19 ++--
 ui/src/main/resources/jcr_root/conf/global.json    |  18 +--
 .../components/caconfig/component/component.jsp    |  44 ++++----
 .../components/caconfig/component/edit.json        |  38 +++----
 .../components/caconfig/fileeditor/config.json     |   3 +-
 .../components/caconfig/fileeditor/fileeditor.jsp  |   2 +-
 .../sling-cms/components/caconfig/policies.json    |   6 +
 .../components/caconfig/policies/include.jsp       |   5 +-
 .../libs/sling-cms/components/caconfig/policy.json |   5 +
 .../components/caconfig/policy/config.json         |   4 +
 .../policy}/config/config.jsp                      |  28 -----
 .../components/caconfig/policy/config/edit.json    |  20 ++++
 .../components/caconfig/policy/policy.jsp          |   6 +-
 .../components/caconfig/policymapping.json         |   6 +
 .../components/caconfig/policymapping/edit.json    |  24 ++++
 .../caconfig/policymapping/policymapping.jsp       |  17 ++-
 .../components/caconfig/scripts/policyOptions.jsp  |  11 +-
 .../template}/config.json                          |   0
 .../template}/config/config.jsp                    |  25 +----
 .../template}/config/edit.json                     |   6 +-
 .../fileeditor.jsp => template/template.jsp}       |  11 +-
 .../cms/templateeditor/templateeditor.jsp          |  45 --------
 .../{cms/templateeditor => }/config/config.jsp     |  25 +----
 .../{cms/templateeditor => }/config/edit.json      |   0
 .../components/general/container/container.jsp     |   7 +-
 .../libs/sling-cms/content/config/edit.json        |   6 +
 .../libs/sling-cms/content/template/edit.json      |  15 ++-
 ...ernal.ResourceEditorAssociation-confedit.config |  20 ++++
 81 files changed, 1196 insertions(+), 1028 deletions(-)

diff --git a/api/src/main/java/org/apache/sling/cms/PageManager.java b/api/src/main/java/org/apache/sling/cms/ComponentConfiguration.java
similarity index 62%
copy from api/src/main/java/org/apache/sling/cms/PageManager.java
copy to api/src/main/java/org/apache/sling/cms/ComponentConfiguration.java
index 98a821f..114ca11 100644
--- a/api/src/main/java/org/apache/sling/cms/PageManager.java
+++ b/api/src/main/java/org/apache/sling/cms/ComponentConfiguration.java
@@ -16,19 +16,26 @@
  */
 package org.apache.sling.cms;
 
-import org.osgi.annotation.versioning.ProviderType;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ValueMap;
 
 /**
- * A interface used to retrieve sling:Page Resources. Adaptable from a child
- * Resource of a sling:Page.
+ * A class to retrieve the configuration for a Resource's component.
  */
-@ProviderType
-public interface PageManager {
+public interface ComponentConfiguration {
 
     /**
-     * Get the page containing the adapted resource
+     * Get the ValueMap for the resource's component configuration.
      * 
-     * @return the page
+     * @return the configuration properties
      */
-    Page getPage();
+    ValueMap getProperties();
+
+    /**
+     * Get the Resource backing for the resource's component configuration.
+     * 
+     * @return the configuration resource
+     */
+    Resource getResource();
+
 }
diff --git a/api/src/main/java/org/apache/sling/cms/PageTemplate.java b/api/src/main/java/org/apache/sling/cms/ComponentPolicy.java
similarity index 57%
copy from api/src/main/java/org/apache/sling/cms/PageTemplate.java
copy to api/src/main/java/org/apache/sling/cms/ComponentPolicy.java
index 66a9cb0..857c473 100644
--- a/api/src/main/java/org/apache/sling/cms/PageTemplate.java
+++ b/api/src/main/java/org/apache/sling/cms/ComponentPolicy.java
@@ -19,56 +19,35 @@ package org.apache.sling.cms;
 import java.util.Map;
 
 import org.apache.sling.api.resource.Resource;
-import org.osgi.annotation.versioning.ProviderType;
 
 /**
- * An interface for representing a page template. Adaptable from a
- * sling:Template Resource.
+ * A class to represent a component policy, e.g. the definition of what
+ * components are available for a particular container and their shared
+ * configurations.
  */
-@ProviderType
-public interface PageTemplate {
+public interface ComponentPolicy {
 
     /**
-     * Gets the paths under which pages for this template can be created.
+     * Returns true if the ComponentPolicy applies to the specified resource
      * 
-     * @return the allowedPaths
+     * @param resource the resource to check
+     * @return true if this policy should be enabled for the resource, false if not
      */
-    String[] getAllowedPaths();
+    boolean applies(Resource resource);
 
     /**
-     * Gets the list of Component Types which will be available for pages created
-     * with this template
+     * Gets the list of Component Types which will be available when using this
+     * component policy
      * 
-     * @return the availableComponentTypes
+     * @return the available ComponentTypes
      */
     String[] getAvailableComponentTypes();
 
     /**
-     * Gets the Component Configurations for this template
+     * Gets the Component Configurations when using this component policy
      * 
      * @return the componentConfigs
      */
     Map<String, Resource> getComponentConfigs();
 
-    /**
-     * Gets the Resource backing this template
-     * 
-     * @return the resource
-     */
-    Resource getResource();
-
-    /**
-     * Gets the Handlebars template to use for creating the content of the page
-     * 
-     * @return the template
-     */
-    String getTemplate();
-
-    /**
-     * Gets the title of the template
-     * 
-     * @return the title
-     */
-    String getTitle();
-
 }
diff --git a/api/src/main/java/org/apache/sling/cms/PageManager.java b/api/src/main/java/org/apache/sling/cms/ComponentPolicyManager.java
similarity index 67%
copy from api/src/main/java/org/apache/sling/cms/PageManager.java
copy to api/src/main/java/org/apache/sling/cms/ComponentPolicyManager.java
index 98a821f..c8bf831 100644
--- a/api/src/main/java/org/apache/sling/cms/PageManager.java
+++ b/api/src/main/java/org/apache/sling/cms/ComponentPolicyManager.java
@@ -16,19 +16,22 @@
  */
 package org.apache.sling.cms;
 
+import org.jetbrains.annotations.Nullable;
 import org.osgi.annotation.versioning.ProviderType;
 
 /**
- * A interface used to retrieve sling:Page Resources. Adaptable from a child
- * Resource of a sling:Page.
+ * An interface for retrieving the applicable component policy for a given
+ * resource.
  */
 @ProviderType
-public interface PageManager {
+public interface ComponentPolicyManager {
 
     /**
-     * Get the page containing the adapted resource
+     * Gets the applicable component policy based on the containing page's template
+     * and the path of the content resource
      * 
-     * @return the page
+     * @return the componentPolicy or null if the no component policy is applicable
      */
-    Page getPage();
+    @Nullable
+    ComponentPolicy getComponentPolicy();
 }
diff --git a/api/src/main/java/org/apache/sling/cms/PageManager.java b/api/src/main/java/org/apache/sling/cms/PageManager.java
index 98a821f..1a1996a 100644
--- a/api/src/main/java/org/apache/sling/cms/PageManager.java
+++ b/api/src/main/java/org/apache/sling/cms/PageManager.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.cms;
 
+import org.jetbrains.annotations.Nullable;
 import org.osgi.annotation.versioning.ProviderType;
 
 /**
@@ -28,7 +29,9 @@ public interface PageManager {
     /**
      * Get the page containing the adapted resource
      * 
-     * @return the page
+     * @return the page containing the adapted resource or null if the resource is
+     *         not a child of a page
      */
+    @Nullable
     Page getPage();
 }
diff --git a/api/src/main/java/org/apache/sling/cms/PageTemplate.java b/api/src/main/java/org/apache/sling/cms/PageTemplate.java
index 66a9cb0..dc6d35e 100644
--- a/api/src/main/java/org/apache/sling/cms/PageTemplate.java
+++ b/api/src/main/java/org/apache/sling/cms/PageTemplate.java
@@ -16,7 +16,7 @@
  */
 package org.apache.sling.cms;
 
-import java.util.Map;
+import java.util.List;
 
 import org.apache.sling.api.resource.Resource;
 import org.osgi.annotation.versioning.ProviderType;
@@ -36,19 +36,11 @@ public interface PageTemplate {
     String[] getAllowedPaths();
 
     /**
-     * Gets the list of Component Types which will be available for pages created
-     * with this template
+     * Gets the list of Component Policies for pages created with this template
      * 
-     * @return the availableComponentTypes
+     * @return the component policies
      */
-    String[] getAvailableComponentTypes();
-
-    /**
-     * Gets the Component Configurations for this template
-     * 
-     * @return the componentConfigs
-     */
-    Map<String, Resource> getComponentConfigs();
+    List<ComponentPolicy> getComponentPolicies();
 
     /**
      * Gets the Resource backing this template
diff --git a/api/src/main/java/org/apache/sling/cms/PageTemplateManager.java b/api/src/main/java/org/apache/sling/cms/PageTemplateManager.java
index f841540..dda00be 100644
--- a/api/src/main/java/org/apache/sling/cms/PageTemplateManager.java
+++ b/api/src/main/java/org/apache/sling/cms/PageTemplateManager.java
@@ -18,6 +18,7 @@ package org.apache.sling.cms;
 
 import java.util.List;
 
+import org.jetbrains.annotations.NotNull;
 import org.osgi.annotation.versioning.ProviderType;
 
 /**
@@ -29,9 +30,10 @@ public interface PageTemplateManager {
 
     /**
      * Gets the available templates for the current resource based on the templates
-     * in the repository and then limiting the templates by their allowed pathF
+     * in the repository and then limiting the templates by their allowed path
      * 
      * @return the list of available templates
      */
+    @NotNull
     List<PageTemplate> getAvailableTemplates();
 }
diff --git a/api/src/main/java/org/apache/sling/cms/package-info.java b/api/src/main/java/org/apache/sling/cms/package-info.java
index ed902f1..e0a8f8f 100644
--- a/api/src/main/java/org/apache/sling/cms/package-info.java
+++ b/api/src/main/java/org/apache/sling/cms/package-info.java
@@ -23,5 +23,5 @@
  *
  * @since 0.10.0
  */
-@org.osgi.annotation.versioning.Version("0.12.0")
+@org.osgi.annotation.versioning.Version("1.0.0")
 package org.apache.sling.cms;
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/filters/EditIncludeFilter.java b/core/src/main/java/org/apache/sling/cms/core/internal/filters/EditIncludeFilter.java
index b6c4256..b8e9993 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/filters/EditIncludeFilter.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/filters/EditIncludeFilter.java
@@ -123,7 +123,7 @@ public class EditIncludeFilter implements Filter {
         }
         String title = component != null ? component.getTitle()
                 : StringUtils.substringAfterLast(resource.getResourceType(), "/");
-        writer.write("<div class=\"sling-cms-component\" data-component=\"" + component + "\" data-sling-cms-title=\""
+        writer.write("<div class=\"sling-cms-component\" data-component=\"" + component.getResource().getPath() + "\" data-sling-cms-title=\""
                 + title + "\" data-sling-cms-resource-path=\"" + resource.getPath()
                 + "\" data-sling-cms-resource-type=\"" + resource.getResourceType() + "\" data-sling-cms-edit=\""
                 + editPath + "\"><div class=\"sling-cms-editor\">");
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentConfigurationImpl.java b/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentConfigurationImpl.java
new file mode 100644
index 0000000..7455ab6
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentConfigurationImpl.java
@@ -0,0 +1,55 @@
+/*
+ * 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.apache.sling.cms.core.internal.models;
+
+import java.util.Collections;
+import java.util.Optional;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.api.wrappers.ValueMapDecorator;
+import org.apache.sling.cms.ComponentConfiguration;
+import org.apache.sling.cms.ComponentPolicyManager;
+import org.apache.sling.models.annotations.Model;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Model(adaptables = Resource.class, adapters = ComponentConfiguration.class)
+public class ComponentConfigurationImpl implements ComponentConfiguration {
+
+    private static final Logger log = LoggerFactory.getLogger(ComponentConfigurationImpl.class);
+
+    private Optional<Resource> configRsrc;
+
+    public ComponentConfigurationImpl(Resource resource) {
+        configRsrc = Optional.ofNullable(resource.adaptTo(ComponentPolicyManager.class))
+                .map(ComponentPolicyManager::getComponentPolicy)
+                .map(p -> p.getComponentConfigs().get(resource.getResourceType()));
+        log.debug("Loaded configuration resource: {}", configRsrc);
+    }
+
+    @Override
+    public ValueMap getProperties() {
+        return configRsrc.map(Resource::getValueMap).orElse(new ValueMapDecorator(Collections.emptyMap()));
+    }
+
+    @Override
+    public Resource getResource() {
+        return configRsrc.orElse(null);
+    }
+
+}
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentPolicyImpl.java b/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentPolicyImpl.java
new file mode 100644
index 0000000..9922672
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentPolicyImpl.java
@@ -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.
+ */
+package org.apache.sling.cms.core.internal.models;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.cms.ComponentPolicy;
+import org.apache.sling.models.annotations.Model;
+import org.apache.sling.models.annotations.injectorspecific.ValueMapValue;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Model(adaptables = Resource.class, adapters = ComponentPolicy.class)
+public class ComponentPolicyImpl implements ComponentPolicy {
+
+    private static final Logger log = LoggerFactory.getLogger(ComponentPolicyImpl.class);
+
+    @ValueMapValue
+    private String pathPattern;
+
+    @ValueMapValue
+    private String policyPath;
+
+    private Optional<Resource> policyResource;
+
+    private final ResourceResolver resolver;
+
+    public ComponentPolicyImpl(Resource resource) {
+        resolver = resource.getResourceResolver();
+
+        log.debug("Initialized policy {} with pattern {} and path {}", resolver, pathPattern, policyPath);
+    }
+
+    @Override
+    public boolean applies(Resource resource) {
+        return Optional.ofNullable(new PageManagerImpl(resource).getPage())
+                .map(p -> StringUtils.removeStart(resource.getPath(), p.getPath())).map(p -> p.matches(pathPattern))
+                .orElse(false);
+    }
+
+    @Override
+    public String[] getAvailableComponentTypes() {
+        return policyResource.map(pr -> pr.getValueMap().get("availableComponentTypes", new String[0]))
+                .orElse(new String[0]);
+    }
+
+    @Override
+    public Map<String, Resource> getComponentConfigs() {
+        Map<String, Resource> configs = new HashMap<>();
+        Resource container = policyResource.map(pr -> pr.getChild("componentConfigurations")).orElse(null);
+        if (container != null) {
+            container.getChildren().forEach(c -> configs.put(c.getValueMap().get("type", String.class), c));
+        }
+        log.debug("Loaded configurations for components: {}", configs.keySet());
+
+        return configs;
+    }
+
+    @PostConstruct
+    public void init() {
+        policyResource = Optional.ofNullable(resolver.getResource(policyPath));
+    }
+
+    /* (non-Javadoc)
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return "ComponentPolicyImpl [pathPattern=" + pathPattern + ", policyPath=" + policyPath + ", resolver="
+                + resolver + ", policyResource=" + policyResource + "]";
+    }
+
+}
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentPolicyManagerImpl.java b/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentPolicyManagerImpl.java
new file mode 100644
index 0000000..d6c7e49
--- /dev/null
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/models/ComponentPolicyManagerImpl.java
@@ -0,0 +1,49 @@
+/*
+ * 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.apache.sling.cms.core.internal.models;
+
+import java.util.Optional;
+
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.cms.ComponentPolicy;
+import org.apache.sling.cms.ComponentPolicyManager;
+import org.apache.sling.cms.Page;
+import org.apache.sling.models.annotations.Model;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Model(adaptables = Resource.class, adapters = ComponentPolicyManager.class)
+public class ComponentPolicyManagerImpl implements ComponentPolicyManager {
+
+    private static final Logger log = LoggerFactory.getLogger(ComponentPolicyManagerImpl.class);
+
+    private final ComponentPolicy componentPolicy;
+
+    public ComponentPolicyManagerImpl(Resource resource) {
+        componentPolicy = Optional.ofNullable(new PageManagerImpl(resource).getPage()).map(Page::getTemplate).map(t -> {
+            log.debug("Loading policies for template: {}", t);
+            return t.getComponentPolicies().stream().filter(cp -> cp.applies(resource)).findFirst().orElse(null);
+        }).orElse(null);
+        log.debug("Loaded component policy: {}", componentPolicy);
+    }
+
+    @Override
+    public ComponentPolicy getComponentPolicy() {
+        return componentPolicy;
+    }
+
+}
diff --git a/core/src/main/java/org/apache/sling/cms/core/internal/models/PageTemplateImpl.java b/core/src/main/java/org/apache/sling/cms/core/internal/models/PageTemplateImpl.java
index 9e121b4..5459f01 100644
--- a/core/src/main/java/org/apache/sling/cms/core/internal/models/PageTemplateImpl.java
+++ b/core/src/main/java/org/apache/sling/cms/core/internal/models/PageTemplateImpl.java
@@ -17,15 +17,15 @@
 package org.apache.sling.cms.core.internal.models;
 
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.cms.CMSConstants;
+import org.apache.sling.cms.ComponentPolicy;
 import org.apache.sling.cms.PageTemplate;
 import org.apache.sling.models.annotations.Model;
 import org.apache.sling.models.annotations.Optional;
@@ -41,15 +41,10 @@ public class PageTemplateImpl implements PageTemplate {
     private String[] allowedPaths;
 
     @Inject
-    @Optional
-    private String[] availableComponentTypes;
-
-    @Inject
-    @Optional
-    private List<Resource> componentConfigurations;
+    private List<Resource> fields;
 
     @Inject
-    private List<Resource> fields;
+    private List<Resource> policies;
 
     private Resource resource;
 
@@ -76,26 +71,9 @@ public class PageTemplateImpl implements PageTemplate {
         return allowedPaths;
     }
 
-    /**
-     * @return the availableComponentTypes
-     */
-    @Override
-    public String[] getAvailableComponentTypes() {
-        return availableComponentTypes;
-    }
-
-    /**
-     * @return the componentConfigs
-     */
     @Override
-    public Map<String, Resource> getComponentConfigs() {
-        Map<String, Resource> configs = new HashMap<>();
-        if (componentConfigurations != null) {
-            for (Resource cfg : componentConfigurations) {
-                configs.put(cfg.getValueMap().get("type", String.class), cfg);
-            }
-        }
-        return configs;
+    public List<ComponentPolicy> getComponentPolicies() {
+        return policies.stream().map(p -> p.adaptTo(ComponentPolicy.class)).collect(Collectors.toList());
     }
 
     /**
@@ -136,9 +114,9 @@ public class PageTemplateImpl implements PageTemplate {
      */
     @Override
     public String toString() {
-        return "PageTemplate [allowedPaths=" + Arrays.toString(allowedPaths) + ", availableComponentTypes="
-                + Arrays.toString(availableComponentTypes) + ", fields=" + fields + ", resource=" + resource
-                + ", template=" + template + ", title=" + title + "]";
+        return "PageTemplateImpl [allowedPaths=" + Arrays.toString(allowedPaths) + ", fields=" + fields + ", policies="
+                + getComponentPolicies() + ", resource=" + resource + ", template=" + template + ", title=" + title
+                + "]";
     }
 
 }
diff --git a/core/src/test/java/org/apache/sling/cms/core/internal/ResourceEditorAssociationTest.java b/core/src/test/java/org/apache/sling/cms/core/internal/ResourceEditorAssociationTest.java
index 2410942..95c40c9 100644
--- a/core/src/test/java/org/apache/sling/cms/core/internal/ResourceEditorAssociationTest.java
+++ b/core/src/test/java/org/apache/sling/cms/core/internal/ResourceEditorAssociationTest.java
@@ -34,7 +34,8 @@ public class ResourceEditorAssociationTest {
 
     @Before
     public void init() {
-        rea = new ResourceEditorAssociation(new ResourceEditorAssociationConfig() {
+        rea = new ResourceEditorAssociation();
+        rea.activate(new ResourceEditorAssociationConfig() {
 
             @Override
             public Class<? extends Annotation> annotationType() {
diff --git a/pom.xml b/pom.xml
index 4f2bab5..445bf98 100644
--- a/pom.xml
+++ b/pom.xml
@@ -304,6 +304,7 @@
                         <!-- Fixing issues with deleted modules -->
                         <exclude>**/target/*</exclude>
                         <exclude>**/target/**/*</exclude>
+                        <exclude>vagrant/**/*</exclude>
                     </excludes>
                 </configuration>
                 <executions>
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/codeblock/edit.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/codeblock/edit.json
index d3ff62f..5cfb83f 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/codeblock/edit.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/codeblock/edit.json
@@ -1,16 +1,16 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "Save Code Block",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container",
-		"code": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/textarea",
-			"label": "Code",
-			"name": "code",
-			"required": true
-		}
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save Code Block",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "code": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/textarea",
+            "label": "Code",
+            "name": "code",
+            "required": true
+        }
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/columncontrol.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/columncontrol.jsp
index 5920d3a..a673a3e 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/columncontrol.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/columncontrol.jsp
@@ -17,28 +17,27 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
- <c:choose>
- 	<c:when test="${properties.container == true}">
- 		<sling:adaptTo var="pageMgr" adaptable="${resource}" adaptTo="org.apache.sling.cms.PageManager" />
-		<c:set var="configRsrc" value="${pageMgr.page.template.componentConfigs['reference/components/general/columncontrol']}" />
- 		<div class="${configRsrc.valueMap.containerclass}">
- 			<div class="row">
-				<c:forEach var="col" items="${fn:split(properties.layout,',')}" varStatus="status">
-					<div class="${sling:encode(col,'HTML_ATTR')}">
-						<sling:include path="col-${status.index}" resourceType="sling-cms/components/general/container" />
-					</div>
-				</c:forEach>
-			</div>
- 		</div>
- 	</c:when>
- 	<c:otherwise>
- 		<div class="row">
-			<c:forEach var="col" items="${fn:split(properties.layout,',')}" varStatus="status">
-				<div class="${sling:encode(col,'HTML_ATTR')}">
-					<sling:include path="col-${status.index}" resourceType="sling-cms/components/general/container" />
-				</div>
-			</c:forEach>
-		</div>
- 	</c:otherwise>
- </c:choose>
-
+<c:choose>
+    <c:when test="${properties.container == true}">
+        <sling:adaptTo adaptable="${resource}" adaptTo="org.apache.sling.cms.ComponentPolicyManager" var="componentPolicyMgr" />
+        <c:set var="configRsrc" value="${componentPolicyMgr.componentPolicy.componentConfigs['reference/components/general/columncontrol']}" />
+        <div class="${configRsrc.valueMap.containerclass}">
+            <div class="row">
+                <c:forEach var="col" items="${fn:split(properties.layout,',')}" varStatus="status">
+                    <div class="${sling:encode(col,'HTML_ATTR')}">
+                        <sling:include path="col-${status.index}" resourceType="sling-cms/components/general/container" />
+                    </div>
+                </c:forEach>
+            </div>
+         </div>
+     </c:when>
+     <c:otherwise>
+         <div class="row">
+            <c:forEach var="col" items="${fn:split(properties.layout,',')}" varStatus="status">
+                <div class="${sling:encode(col,'HTML_ATTR')}">
+                    <sling:include path="col-${status.index}" resourceType="sling-cms/components/general/container" />
+                </div>
+            </c:forEach>
+        </div>
+    </c:otherwise>
+</c:choose>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/config.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/config.json
index 3032090..0fc0f9c 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/config.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/config.json
@@ -1,19 +1,25 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType" : "sling-cms/components/general/container",
-	"columns": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/repeating",
-		"label": "Columns",
-		"name": "columns",
-		"type": "text",
-		"required": true
-	},
-	"containerclass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "Container Class",
-		"name": "containerclass",
-		"required": true
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/general/container",
+    "columns": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/repeating",
+        "label": "Columns",
+        "name": "columns",
+        "type": "text",
+        "required": true
+    },
+    "columnsTypeHint": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+        "name": "columns@TypeHint",
+        "value": "String[]"
+    },
+    "containerclass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Container Class",
+        "name": "containerclass",
+        "required": true
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/edit.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/edit.json
index 8fb7aa3..db69071 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/edit.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/edit.json
@@ -1,39 +1,39 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "Save",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container",
-		"layout": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Layout",
-			"name": "layout",
-			"required": true,
-			"optionsScript": "/apps/reference/components/general/columncontrol/options.jsp"
-		},
-		"container": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Wrap In Container?",
-			"name": "container",
-			"required": true,
-			"options": {
-				"no": {
-					"label": "No",
-					"value": false
-				},
-				"yes": {
-					"label": "Yes",
-					"value": true
-				}
-			}
-		},
-		"containerTypeHint": {
-			"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-			"name": "container@TypeHint",
-			"value": "Boolean"
-		}
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "layout": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "Layout",
+            "name": "layout",
+            "required": true,
+            "optionsScript": "/apps/reference/components/general/columncontrol/options.jsp"
+        },
+        "container": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "Wrap In Container?",
+            "name": "container",
+            "required": true,
+            "options": {
+                "no": {
+                    "label": "No",
+                    "value": false
+                },
+                "yes": {
+                    "label": "Yes",
+                    "value": true
+                }
+            }
+        },
+        "containerTypeHint": {
+            "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+            "name": "container@TypeHint",
+            "value": "Boolean"
+        }
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/options.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/options.jsp
index 53b08bb..7962cbb 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/options.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/options.jsp
@@ -17,9 +17,8 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:adaptTo var="pageMgr" adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.PageManager" />
-<c:set var="configRsrc" value="${pageMgr.page.template.componentConfigs['reference/components/general/columncontrol']}" />
-<c:forEach var="layout" items="${configRsrc.valueMap.columns}">
+<sling:adaptTo adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.ComponentConfiguration" var="cmpCfg" />
+<c:forEach var="layout" items="${cmpCfg.properties.columns}">
     <option ${slingRequest.requestPathInfo.suffixResource.valueMap.layout == fn:split(layout,'=')[1] ? 'selected' : ''} value="${sling:encode(fn:split(layout,'=')[1],'HTML_ATTR')}">
         ${sling:encode(fn:split(layout,'=')[0],'HTML')}
     </option>
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/config.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/config.json
index f4a138e..60d348f 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/config.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/config.json
@@ -1,12 +1,18 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType" : "sling-cms/components/general/container",
-	"ctaClasses": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/repeating",
-		"label": "CTA Classes",
-		"name": "ctaClasses",
-		"type": "text",
-		"required": true
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/general/container",
+    "ctaClasses": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/repeating",
+        "label": "CTA Classes",
+        "name": "ctaClasses",
+        "type": "text",
+        "required": true
+    },
+    "ctaClassesTypeHint": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+        "name": "ctaClasses@TypeHint",
+        "value": "String[]"
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/cta.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/cta.jsp
index 25f57b6..cad7ef8 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/cta.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/cta.jsp
@@ -18,7 +18,7 @@
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
 <c:if test="${not empty properties.href}">
-	<a href="${properties.href }" class="${properties.ctaClass}" ${target}>
-		<sling:encode value="${properties.text}" mode="HTML" />
-	</a>
+    <a href="${properties.href}" class="${properties.ctaClass}" ${target}>
+        <sling:encode value="${properties.text}" mode="HTML" />
+    </a>
 </c:if>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/edit.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/edit.json
index a06a441..4b07360 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/edit.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/edit.json
@@ -1,50 +1,50 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "Save CTA",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container",
-		"ctaClass": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "CTA Class",
-			"name": "ctaClass",
-			"required": true,
-			"optionsScript": "/apps/reference/components/general/cta/options.jsp"
-		},
-		"text": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/text",
-			"label": "Text",
-			"name": "text",
-			"required": true
-		},
-		"href": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/path",
-			"basePath": "/content",
-			"type": "page",
-			"label": "CTA Link",
-			"name": "href",
-			"titleProperty": "jcr:content/jcr:title"
-		},
-		"target": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Open In New Window?",
-			"name": "target",
-			"options": {
-				"jcr:primaryType": "nt:unstructured",
-				"yes": {
-					"label": "Yes",
-					"value": " target=\"_blank\""
-				},
-				"no": {
-					"label": "No",
-					"value": ""
-				}
-			}
-		}
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save CTA",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "ctaClass": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "CTA Class",
+            "name": "ctaClass",
+            "required": true,
+            "optionsScript": "/apps/reference/components/general/cta/options.jsp"
+        },
+        "text": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "Text",
+            "name": "text",
+            "required": true
+        },
+        "href": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/path",
+            "basePath": "/content",
+            "type": "page",
+            "label": "CTA Link",
+            "name": "href",
+            "titleProperty": "jcr:content/jcr:title"
+        },
+        "target": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "Open In New Window?",
+            "name": "target",
+            "options": {
+                "jcr:primaryType": "nt:unstructured",
+                "yes": {
+                    "label": "Yes",
+                    "value": " target=\"_blank\""
+                },
+                "no": {
+                    "label": "No",
+                    "value": ""
+                }
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/options.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/options.jsp
index 1d6436c..e414d9f 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/options.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/options.jsp
@@ -17,10 +17,9 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:adaptTo var="pageMgr" adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.PageManager" />
-<c:set var="configRsrc" value="${pageMgr.page.template.componentConfigs['reference/components/general/cta']}" />
-<c:forEach var="ctaClass" items="${configRsrc.valueMap.ctaClasses}">
-	<option ${slingRequest.requestPathInfo.suffixResource.valueMap.ctaClass == sling:encode(fn:split(ctaClass,'=')[1],'HTML_ATTR') ? 'selected' : ''} value="${sling:encode(fn:split(ctaClass,'=')[1],'HTML_ATTR')}">
-		${sling:encode(fn:split(ctaClass,'=')[0],'HTML')}
-	</option>
+<sling:adaptTo adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.ComponentConfiguration" var="cmpCfg" />
+<c:forEach var="ctaClass" items="${cmpCfg.properties.ctaClasses}">
+    <option ${slingRequest.requestPathInfo.suffixResource.valueMap.ctaClass == sling:encode(fn:split(ctaClass,'=')[1],'HTML_ATTR') ? 'selected' : ''} value="${sling:encode(fn:split(ctaClass,'=')[1],'HTML_ATTR')}">
+        ${sling:encode(fn:split(ctaClass,'=')[0],'HTML')}
+    </option>
 </c:forEach>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/config.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/config.json
index c1bc419..f1afea8 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/config.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/config.json
@@ -1,19 +1,25 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType" : "sling-cms/components/general/container",
-	"wrapperClasses": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/repeating",
-		"label": "Wrapper Classes",
-		"name": "wrapperClasses",
-		"type": "text",
-		"required": true
-	},
-	"iframeClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "IFrame Class",
-		"name": "iframeClass",
-		"required": true
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/general/container",
+    "wrapperClasses": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/repeating",
+        "label": "Wrapper Classes",
+        "name": "wrapperClasses",
+        "type": "text",
+        "required": true
+    },
+    "wrapperClassesTypeHint": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+        "name": "wrapperClasses@TypeHint",
+        "value": "String[]"
+    },
+    "iframeClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "IFrame Class",
+        "name": "iframeClass",
+        "required": true
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/edit.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/edit.json
index 4cc817a..a9c903d 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/edit.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/edit.json
@@ -1,44 +1,44 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "Save IFrame",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container",
-		"src": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/path",
-			"basePath": "/content",
-			"type": "page",
-			"label": "Frame Source",
-			"name": "src",
-			"titleProperty": "jcr:content/jcr:title",
-			"required": true
-		},
-		"layout": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Wrapper Class",
-			"name": "wrapperClass",
-			"required": true,
-			"optionsScript": "/apps/reference/components/general/iframe/options.jsp"
-		},
-		"allowFullscreen": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Allow Fullscreen",
-			"name": "allowFullscreen",
-			"options": {
-				"jcr:primaryType": "nt:unstructured",
-				"yes": {
-					"label": "Yes",
-					"value": " allowfullscreen=\"allowfullscreen\""
-				},
-				"no": {
-					"label": "No",
-					"value": " allowfullscreen=\"allowfullscreen\""
-				}
-			}
-		}
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save IFrame",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "src": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/path",
+            "basePath": "/content",
+            "type": "page",
+            "label": "Frame Source",
+            "name": "src",
+            "titleProperty": "jcr:content/jcr:title",
+            "required": true
+        },
+        "layout": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "Wrapper Class",
+            "name": "wrapperClass",
+            "required": true,
+            "optionsScript": "/apps/reference/components/general/iframe/options.jsp"
+        },
+        "allowFullscreen": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "Allow Fullscreen",
+            "name": "allowFullscreen",
+            "options": {
+                "jcr:primaryType": "nt:unstructured",
+                "yes": {
+                    "label": "Yes",
+                    "value": " allowfullscreen=\"allowfullscreen\""
+                },
+                "no": {
+                    "label": "No",
+                    "value": " allowfullscreen=\"allowfullscreen\""
+                }
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/iframe.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/iframe.jsp
index abc081b..1c903e0 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/iframe.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/iframe.jsp
@@ -18,9 +18,8 @@
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
 <c:if test="${not empty properties.src}">
-    <sling:adaptTo var="pageMgr" adaptable="${resource}" adaptTo="org.apache.sling.cms.PageManager" />
-    <c:set var="configRsrc" value="${pageMgr.page.template.componentConfigs['reference/components/general/iframe']}" />
+    <sling:adaptTo adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.ComponentConfiguration" var="cmpCfg" />
     <div class="${properties.wrapperClass}">
-        <iframe src="${properties.src}" class="${configRsrc.valueMap.iframeClass}" ${properties.allowFullscreen}></iframe>
+        <iframe src="${properties.src}" class="${cmpCfg.properties.iframeClass}" ${properties.allowFullscreen}></iframe>
     </div>
 </c:if>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/options.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/options.jsp
index eeeb013..7688ffa 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/options.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/iframe/options.jsp
@@ -17,10 +17,9 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:adaptTo var="pageMgr" adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.PageManager" />
-<c:set var="configRsrc" value="${pageMgr.page.template.componentConfigs['reference/components/general/iframe']}" />
-<c:forEach var="wrapperClass" items="${configRsrc.valueMap.wrapperClasses}">
-	<option ${slingRequest.requestPathInfo.suffixResource.valueMap.wrapperClass == sling:encode(fn:split(wrapperClass,'=')[1],'HTML_ATTR') ? 'selected' : ''} value="${sling:encode(fn:split(wrapperClass,'=')[1],'HTML_ATTR')}">
-		${sling:encode(fn:split(wrapperClass,'=')[0],'HTML')}
-	</option>
+<sling:adaptTo adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.ComponentConfiguration" var="cmpCfg" />
+<c:forEach var="wrapperClass" items="${cmpCfg.properties.wrapperClasses}">
+    <option ${slingRequest.requestPathInfo.suffixResource.valueMap.wrapperClass == sling:encode(fn:split(wrapperClass,'=')[1],'HTML_ATTR') ? 'selected' : ''} value="${sling:encode(fn:split(wrapperClass,'=')[1],'HTML_ATTR')}">
+        ${sling:encode(fn:split(wrapperClass,'=')[0],'HTML')}
+    </option>
 </c:forEach>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/image/config.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/image/config.json
index 186deb4..2c0691f 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/image/config.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/image/config.json
@@ -1,12 +1,18 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType" : "sling-cms/components/general/container",
-	"imageClasses": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/repeating",
-		"label": "Image Classes",
-		"name": "imageClasses",
-		"type": "text",
-		"required": true
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/general/container",
+    "imageClasses": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/repeating",
+        "label": "Image Classes",
+        "name": "imageClasses",
+        "type": "text",
+        "required": true
+    },
+    "imageClassesTypeHint": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+        "name": "imageClasses@TypeHint",
+        "value": "String[]"
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/image/edit.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/image/edit.json
index 6e4b0d7..f123dd8 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/image/edit.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/image/edit.json
@@ -1,34 +1,34 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "Save Image",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container",
-		"src": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/path",
-			"basePath": "/content",
-			"type": "file",
-			"label": "Image Source",
-			"name": "src",
-			"titleProperty": "jcr:content/jcr:title",
-			"required": true
-		},
-		"alt": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/text",
-			"label": "Alt Text",
-			"name": "alt",
-			"required": true
-		},
-		"imageClass": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Image Class",
-			"name": "imageClass",
-			"required": true,
-			"optionsScript": "/apps/reference/components/general/image/options.jsp"
-		}
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save Image",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "src": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/path",
+            "basePath": "/content",
+            "type": "file",
+            "label": "Image Source",
+            "name": "src",
+            "titleProperty": "jcr:content/jcr:title",
+            "required": true
+        },
+        "alt": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "Alt Text",
+            "name": "alt",
+            "required": true
+        },
+        "imageClass": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "Image Class",
+            "name": "imageClass",
+            "required": true,
+            "optionsScript": "/apps/reference/components/general/image/options.jsp"
+        }
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/image/image.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/image/image.jsp
index 363ad86..49658b3 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/image/image.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/image/image.jsp
@@ -18,5 +18,5 @@
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
 <c:if test="${not empty properties.src}">
-	<img src="${properties.src}" alt="${properties.alt}" class="${properties.imageClass}" />
+    <img src="${properties.src}" alt="${properties.alt}" class="${properties.imageClass}" />
 </c:if>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/image/options.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/image/options.jsp
index f702354..af6f30d 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/image/options.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/image/options.jsp
@@ -17,10 +17,9 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:adaptTo var="pageMgr" adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.PageManager" />
-<c:set var="configRsrc" value="${pageMgr.page.template.componentConfigs['reference/components/general/image']}" />
-<c:forEach var="imageClass" items="${configRsrc.valueMap.imageClasses}">
-	<option ${slingRequest.requestPathInfo.suffixResource.valueMap.imageClass == sling:encode(fn:split(imageClass,'=')[1],'HTML_ATTR') ? 'selected' : ''} value="${sling:encode(fn:split(imageClass,'=')[1],'HTML_ATTR')}">
-		${sling:encode(fn:split(imageClass,'=')[0],'HTML')}
-	</option>
+<sling:adaptTo adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.ComponentConfiguration" var="cmpCfg" />
+<c:forEach var="imageClass" items="${cmpCfg.properties.imageClasses}">
+    <option ${slingRequest.requestPathInfo.suffixResource.valueMap.imageClass == sling:encode(fn:split(imageClass,'=')[1],'HTML_ATTR') ? 'selected' : ''} value="${sling:encode(fn:split(imageClass,'=')[1],'HTML_ATTR')}">
+        ${sling:encode(fn:split(imageClass,'=')[0],'HTML')}
+    </option>
 </c:forEach>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/config.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/config.json
index 696f63e..e7daa2e 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/config.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/config.json
@@ -1,25 +1,25 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType" : "sling-cms/components/general/container",
-	"paginationClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "Pagination Class",
-		"name": "paginationClass",
-		"required": true
-	},
-	"pageItemClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "Page Item Class",
-		"name": "pageItemClass",
-		"required": true
-	},
-	"pageLinkClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "PageLink Class",
-		"name": "pageLinkClass",
-		"required": true
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/general/container",
+    "paginationClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Pagination Class",
+        "name": "paginationClass",
+        "required": true
+    },
+    "pageItemClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Page Item Class",
+        "name": "pageItemClass",
+        "required": true
+    },
+    "pageLinkClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "PageLink Class",
+        "name": "pageLinkClass",
+        "required": true
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/edit.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/edit.json
index 607c520..acccc51 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/edit.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/edit.json
@@ -1,63 +1,63 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "Save",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container",
-		"query": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/textarea",
-			"label": "Query",
-			"name": "query",
-			"required": true
-		},
-		"limit": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/text",
-			"label": "Limit",
-			"name": "limit",
-			"required": true,
-			"type": "number"
-		},
-		"includePagination": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Include Pagination",
-			"name": "includePagination",
-			"required": true,
-			"options": {
-				"yes": {
-					"jcr:primaryType": "nt:unstructured",
-					"label": "Yes",
-					"value": "true"
-				},
-				"no": {
-					"jcr:primaryType": "nt:unstructured",
-					"label": "No",
-					"value": "false"
-				}
-			}
-		},
-		"includePaginationTypeHint": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/hidden",
-			"name": "includePagination@TypeHint",
-			"value": "Boolean"
-		},
-		"tag": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/text",
-			"label": "List Tag",
-			"name": "tag",
-			"required": false
-		},
-		"class": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/text",
-			"label": "List Class",
-			"name": "class",
-			"required": false
-		}
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "query": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/textarea",
+            "label": "Query",
+            "name": "query",
+            "required": true
+        },
+        "limit": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "Limit",
+            "name": "limit",
+            "required": true,
+            "type": "number"
+        },
+        "includePagination": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "Include Pagination",
+            "name": "includePagination",
+            "required": true,
+            "options": {
+                "yes": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "label": "Yes",
+                    "value": "true"
+                },
+                "no": {
+                    "jcr:primaryType": "nt:unstructured",
+                    "label": "No",
+                    "value": "false"
+                }
+            }
+        },
+        "includePaginationTypeHint": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/hidden",
+            "name": "includePagination@TypeHint",
+            "value": "Boolean"
+        },
+        "tag": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "List Tag",
+            "name": "tag",
+            "required": false
+        },
+        "class": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "List Class",
+            "name": "class",
+            "required": false
+        }
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/init.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/init.jsp
index 7a3cc93..2935fd8 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/init.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/init.jsp
@@ -23,7 +23,7 @@
 <c:set var="includePagination" value="${properties.includePagination}" scope="request" />
 <c:set var="tag" value="${not empty properties.tag ? properties.tag : 'ul'}" scope="request" />
 <c:set var="clazz" value="${not empty properties.class ? properties.class : ''}" scope="request" />
-<c:set var="listConfig" value="${pageMgr.page.template.componentConfigs['reference/components/general/list']}" scope="request" />
+<c:set var="listConfig" value="${sling:adaptTo(resource,'org.apache.sling.cms.ComponentConfiguration').resource}" scope="request" />
 <c:if test="${not empty query}">
 	<c:set var="list" value="${sling:adaptTo(slingRequest, 'org.apache.sling.cms.reference.models.ItemList')}" scope="request"  />
 </c:if>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/item.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/item.jsp
index 0f39089..27ad99c 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/item.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/item.jsp
@@ -18,15 +18,15 @@
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
 <li>
-	<c:choose>
-		<c:when test="${item.resourceType == 'sling:File' || item.resourceType == 'nt:file'}">
-			<c:set var="url" value="${item.path }" />
-		</c:when>
-		<c:otherwise>
-			<c:set var="url" value="${item.path}.html" />
-		</c:otherwise>
-	</c:choose>
-	<a href="${url}">
-		<sling:encode value="${item.valueMap['jcr:content/jcr:title']}" default="${item.name}" mode="HTML" />
-	</a>
+    <c:choose>
+        <c:when test="${item.resourceType == 'sling:File' || item.resourceType == 'nt:file'}">
+            <c:set var="url" value="${item.path }" />
+        </c:when>
+        <c:otherwise>
+            <c:set var="url" value="${item.path}.html" />
+        </c:otherwise>
+    </c:choose>
+    <a href="${url}">
+        <sling:encode value="${item.valueMap['jcr:content/jcr:title']}" default="${item.name}" mode="HTML" />
+    </a>
 </li>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/list.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/list.jsp
index 3c165e2..71a24f3 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/list.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/list.jsp
@@ -19,13 +19,13 @@
  <%@include file="/libs/sling-cms/global.jsp"%>
 <sling:call script="init.jsp" />
 <c:if test="${list != null}">
-	<${tag} class="list ${clazz}">
-		<c:forEach var="it" items="${list.items}">
-			<c:set var="item" value="${it}" scope="request" />
-			<sling:call script="item.jsp" />
-		</c:forEach>
-		<c:if test="${includePagination}">
-			<sling:call script="pagination.jsp" />
-		</c:if>
-	</${tag}>
+    <${tag} class="list ${clazz}">
+        <c:forEach var="it" items="${list.items}">
+            <c:set var="item" value="${it}" scope="request" />
+            <sling:call script="item.jsp" />
+        </c:forEach>
+        <c:if test="${includePagination}">
+            <sling:call script="pagination.jsp" />
+        </c:if>
+    </${tag}>
 </c:if>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/pagination.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/pagination.jsp
index cd8277d..1081d59 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/list/pagination.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/list/pagination.jsp
@@ -18,41 +18,41 @@
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
 <nav>
-	<ul class="${listConfig.valueMap.paginationClass}">
-		<c:choose>
-			<c:when test="${list.first == true}">
-				<li class="${listConfig.valueMap.pageItemClass} disabled">
-					<span class="${listConfig.valueMap.pageLinkClass}">
-						&lt;
-					</span>
-				</li>
-			</c:when>
-			<c:otherwise>
-				<li class="${listConfig.valueMap.pageItemClass}">
-					<a class="${listConfig.valueMap.pageLinkClass}" href="?page=${list.currentPage - 1}">&lt;</a>
-				</li>
-			</c:otherwise>
-		</c:choose>
-		<c:forEach var="page" items="${list.pages}">
-			<li class="${listConfig.valueMap.pageItemClass} ${page == list.currentPage ? 'active' : ''}">
-				<a href="?page=${page}" class="${listConfig.valueMap.pageLinkClass}">
-					${page}
-				</a>
-			</li>
-		</c:forEach>
-		<c:choose>
-			<c:when test="${list.last}">
-				<li class="${listConfig.valueMap.pageItemClass} disabled">
-					<span class="${listConfig.valueMap.pageLinkClass}">
-						&gt;
-					</span>
-				</li>
-			</c:when>
-			<c:otherwise>
-				<li class="${listConfig.valueMap.pageItemClass}">
-					<a class="${listConfig.valueMap.pageLinkClass}" href="?page=${list.currentPage + 1}">&gt;</a>
-				</li>
-			</c:otherwise>
-		</c:choose>
-	</ul>
+    <ul class="${listConfig.valueMap.paginationClass}">
+        <c:choose>
+            <c:when test="${list.first == true}">
+                <li class="${listConfig.valueMap.pageItemClass} disabled">
+                    <span class="${listConfig.valueMap.pageLinkClass}">
+                        &lt;
+                    </span>
+                </li>
+            </c:when>
+            <c:otherwise>
+                <li class="${listConfig.valueMap.pageItemClass}">
+                    <a class="${listConfig.valueMap.pageLinkClass}" href="?page=${list.currentPage - 1}">&lt;</a>
+                </li>
+            </c:otherwise>
+        </c:choose>
+        <c:forEach var="page" items="${list.pages}">
+            <li class="${listConfig.valueMap.pageItemClass} ${page == list.currentPage ? 'active' : ''}">
+                <a href="?page=${page}" class="${listConfig.valueMap.pageLinkClass}">
+                    ${page}
+                </a>
+            </li>
+        </c:forEach>
+        <c:choose>
+            <c:when test="${list.last}">
+                <li class="${listConfig.valueMap.pageItemClass} disabled">
+                    <span class="${listConfig.valueMap.pageLinkClass}">
+                        &gt;
+                    </span>
+                </li>
+            </c:when>
+            <c:otherwise>
+                <li class="${listConfig.valueMap.pageItemClass}">
+                    <a class="${listConfig.valueMap.pageLinkClass}" href="?page=${list.currentPage + 1}">&gt;</a>
+                </li>
+            </c:otherwise>
+        </c:choose>
+    </ul>
 </nav>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/search/config.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/search/config.json
index ee549b1..572506f 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/search/config.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/search/config.json
@@ -1,46 +1,46 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType" : "sling-cms/components/general/container",
-	"searchClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "Search Class",
-		"name": "searchClass",
-		"type": "text"
-	},
-	"resultClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "Result Class",
-		"name": "resultClass",
-		"type": "text"
-	},
-	"resultHeaderClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "Result Header Class",
-		"name": "resultHeaderClass",
-		"type": "text"
-	},
-	"paginationClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "Pagination Class",
-		"name": "paginationClass",
-		"required": true
-	},
-	"pageItemClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "Page Item Class",
-		"name": "pageItemClass",
-		"required": true
-	},
-	"pageLinkClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "PageLink Class",
-		"name": "pageLinkClass",
-		"required": true
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/general/container",
+    "searchClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Search Class",
+        "name": "searchClass",
+        "type": "text"
+    },
+    "resultClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Result Class",
+        "name": "resultClass",
+        "type": "text"
+    },
+    "resultHeaderClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Result Header Class",
+        "name": "resultHeaderClass",
+        "type": "text"
+    },
+    "paginationClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Pagination Class",
+        "name": "paginationClass",
+        "required": true
+    },
+    "pageItemClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Page Item Class",
+        "name": "pageItemClass",
+        "required": true
+    },
+    "pageLinkClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "PageLink Class",
+        "name": "pageLinkClass",
+        "required": true
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/search/edit.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/search/edit.json
index c77aaaf..57c2f8c 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/search/edit.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/search/edit.json
@@ -1,24 +1,24 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "Save",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container",
-		"limit": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/text",
-			"label": "Limit",
-			"name": "limit",
-			"required": true,
-			"type": "number"
-		},
-		"basePath": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/text",
-			"label": "Base Path",
-			"name": "basePath",
-			"required": true
-		}
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "limit": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "Limit",
+            "name": "limit",
+            "required": true,
+            "type": "number"
+        },
+        "basePath": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "Base Path",
+            "name": "basePath",
+            "required": true
+        }
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/search/pagination.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/search/pagination.jsp
index f7bf5fb..d74ebfd 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/search/pagination.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/search/pagination.jsp
@@ -19,41 +19,41 @@
 <%@include file="/libs/sling-cms/global.jsp"%>
 <c:set var="pageParam" value="${not empty param.q ? param.q : '1'}" />
 <nav>
-	<ul class="${searchConfig.valueMap.paginationClass}">
-		<c:choose>
-			<c:when test="${search.first == true}">
-				<li class="${searchConfig.valueMap.pageItemClass} disabled">
-					<span class="${searchConfig.valueMap.pageLinkClass}">
-						&lt;
-					</span>
-				</li>
-			</c:when>
-			<c:otherwise>
-				<li class="${searchConfig.valueMap.pageItemClass}">
-					<a class="${searchConfig.valueMap.pageLinkClass}" href="?q=${sling:encode(search.term,'HTML_ATTR')}">&lt;</a>
-				</li>
-			</c:otherwise>
-		</c:choose>
-		<c:forEach var="page" items="${search.pages}">
-			<li class="${searchConfig.valueMap.pageItemClass}${page == pageParam ? ' active' : ''}">
-				<a href="?q=${sling:encode(search.term,'HTML_ATTR')}&page=${page}" class="${searchConfig.valueMap.pageLinkClass}${page == param.page ? ' active' : ''}">
-					${page}
-				</a>
-			</li>
-		</c:forEach>
-		<c:choose>
-			<c:when test="${search.last}">
-				<li class="${searchConfig.valueMap.pageItemClass} disabled">
-					<span class="${searchConfig.valueMap.pageLinkClass}">
-						&gt;
-					</span>
-				</li>
-			</c:when>
-			<c:otherwise>
-				<li class="${searchConfig.valueMap.pageItemClass}">
-					<a class="${searchConfig.valueMap.pageLinkClass}" href="?q=${sling:encode(search.term,'HTML_ATTR')}&page=${search.currentPage + 1}">&gt;</a>
-				</li>
-			</c:otherwise>
-		</c:choose>
-	</ul>
+    <ul class="${searchConfig.paginationClass}">
+        <c:choose>
+            <c:when test="${search.first == true}">
+                <li class="${searchConfig.pageItemClass} disabled">
+                    <span class="${searchConfig.pageLinkClass}">
+                        &lt;
+                    </span>
+                </li>
+            </c:when>
+            <c:otherwise>
+                <li class="${searchConfig.pageItemClass}">
+                    <a class="${searchConfig.pageLinkClass}" href="?q=${sling:encode(search.term,'HTML_ATTR')}">&lt;</a>
+                </li>
+            </c:otherwise>
+        </c:choose>
+        <c:forEach var="page" items="${search.pages}">
+            <li class="${searchConfig.pageItemClass}${page == pageParam ? ' active' : ''}">
+                <a href="?q=${sling:encode(search.term,'HTML_ATTR')}&page=${page}" class="${searchConfig.pageLinkClass}${page == param.page ? ' active' : ''}">
+                    ${page}
+                </a>
+            </li>
+        </c:forEach>
+        <c:choose>
+            <c:when test="${search.last}">
+                <li class="${searchConfig.pageItemClass} disabled">
+                    <span class="${searchConfig.pageLinkClass}">
+                        &gt;
+                    </span>
+                </li>
+            </c:when>
+            <c:otherwise>
+                <li class="${searchConfig.pageItemClass}">
+                    <a class="${searchConfig.pageLinkClass}" href="?q=${sling:encode(search.term,'HTML_ATTR')}&page=${search.currentPage + 1}">&gt;</a>
+                </li>
+            </c:otherwise>
+        </c:choose>
+    </ul>
 </nav>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/search/result.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/search/result.jsp
index 0d86a95..6b4176c 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/search/result.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/search/result.jsp
@@ -17,16 +17,16 @@
  * under the License.
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
-<div class="searchresult ${searchConfig.valueMap.resultClass}">
-	<div class="searchresult__header ${searchConfig.valueMap.resultHeaderClass}">
-		<a href="${result.path}.html" class="searchresult__link">
-			<sling:encode value="${result.valueMap['jcr:content/jcr:title']}" mode="HTML" />
-		</a>
-	</div>
-	<p class="searchresult__body">
-		<sling:encode value="${result.valueMap['jcr:content/jcr:description']}" mode="HTML" />
-	</p>
-	<a href="${result.path}.html" class="searchresult__link">
-		${fn:replace(result.path,sling:getAbsoluteParent(result,3).path,'')}.html
-	</a>
+<div class="searchresult ${searchConfig.resultClass}">
+    <div class="searchresult__header ${searchConfig.resultHeaderClass}">
+        <a href="${result.path}.html" class="searchresult__link">
+            <sling:encode value="${result.valueMap['jcr:content/jcr:title']}" mode="HTML" />
+        </a>
+    </div>
+    <p class="searchresult__body">
+        <sling:encode value="${result.valueMap['jcr:content/jcr:description']}" mode="HTML" />
+    </p>
+    <a href="${result.path}.html" class="searchresult__link">
+        ${fn:replace(result.path,sling:getAbsoluteParent(result,3).path,'')}.html
+    </a>
 </div>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/search/search.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/search/search.jsp
index 498f969..f9f42d1 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/search/search.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/search/search.jsp
@@ -18,24 +18,24 @@
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
 <sling:adaptTo var="pageMgr" adaptable="${resource}" adaptTo="org.apache.sling.cms.PageManager" />
-<c:set var="searchConfig" value="${pageMgr.page.template.componentConfigs['reference/components/general/search']}" scope="request" />
+<c:set var="searchConfig" value="${sling:adaptTo(resource,'org.apache.sling.cms.ComponentConfiguration').properties}" scope="request" />
 <c:if test="${not empty properties.limit && not empty param.q}">
-	<c:set var="search" value="${sling:adaptTo(slingRequest, 'org.apache.sling.cms.reference.models.Search')}" scope="request"  />
-	<div class="search ${searchConfig.valueMap.searchClass}">
-		<div class="search__header">
-			<fmt:message key="slingcms.search.header">
-				<fmt:param value="${sling:encode(search.term,'HTML')}" />
-				<fmt:param value="${search.start + 1}" />
-				<fmt:param value="${search.end}" />
-				<fmt:param value="${search.count}" />
-			</fmt:message>
-		</div>
-		<div class="search__results">
-			<c:forEach var="result" items="${search.results}">
-				<c:set var="result" value="${result}" scope="request" />
-				<sling:call script="result.jsp" />
-			</c:forEach>
-		</div>
-		<sling:call script="pagination.jsp" />
-	</div>
+    <c:set var="search" value="${sling:adaptTo(slingRequest, 'org.apache.sling.cms.reference.models.Search')}" scope="request"  />
+    <div class="search ${searchConfig.searchClass}">
+        <div class="search__header">
+            <fmt:message key="slingcms.search.header">
+                <fmt:param value="${sling:encode(search.term,'HTML')}" />
+                <fmt:param value="${search.start + 1}" />
+                <fmt:param value="${search.end}" />
+                <fmt:param value="${search.count}" />
+            </fmt:message>
+        </div>
+        <div class="search__results">
+            <c:forEach var="result" items="${search.results}">
+                <c:set var="result" value="${result}" scope="request" />
+                <sling:call script="result.jsp" />
+            </c:forEach>
+        </div>
+        <sling:call script="pagination.jsp" />
+    </div>
 </c:if>${search.finalize}
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/config.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/config.json
index 29143ec..f223e16 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/config.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/config.json
@@ -1,25 +1,25 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType" : "sling-cms/components/general/container",
-	"formClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "Form Class",
-		"name": "formClass",
-		"type": "text"
-	},
-	"buttonClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "Button Class",
-		"name": "buttonClass",
-		"type": "text"
-	},
-	"inputClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/text",
-		"label": "Input Class",
-		"name": "inputClass",
-		"type": "text"
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/general/container",
+    "formClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Form Class",
+        "name": "formClass",
+        "type": "text"
+    },
+    "buttonClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Button Class",
+        "name": "buttonClass",
+        "type": "text"
+    },
+    "inputClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Input Class",
+        "name": "inputClass",
+        "type": "text"
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/edit.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/edit.json
index b956aab..631afb2 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/edit.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/edit.json
@@ -1,9 +1,9 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "No Edit Needed",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container"
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "No Edit Needed",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container"
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/searchform.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/searchform.jsp
index 671640c..3b9171d 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/searchform.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/searchform/searchform.jsp
@@ -18,8 +18,8 @@
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
 <sling:adaptTo var="pageMgr" adaptable="${resource}" adaptTo="org.apache.sling.cms.PageManager" />
-<c:set var="searchConfig" value="${pageMgr.page.template.componentConfigs['reference/components/general/searchform']}" scope="request" />
-<form action="${pageMgr.page.path}.html" method="GET" class="${searchConfig.valueMap.formClass}">
-	<input type="text" name="q" class="${searchConfig.valueMap.inputClass}" placeholder="<fmt:message key="slingcms.search"/>" />
-	<input type="submit" class="${searchConfig.valueMap.buttonClass}" value="<fmt:message key="slingcms.search"/>" />
+<c:set var="searchConfig" value="${sling:adaptTo(resource,'org.apache.sling.cms.ComponentConfiguration').properties}" scope="request" />
+<form action="${pageMgr.page.path}.html" method="GET" class="${searchConfig.formClass}">
+    <input type="text" name="q" class="${searchConfig.inputClass}" placeholder="<fmt:message key="slingcms.search"/>" />
+    <input type="submit" class="${searchConfig.buttonClass}" value="<fmt:message key="slingcms.search"/>" />
 </form>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/config.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/config.json
index 7910776..f79cb44 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/config.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/config.json
@@ -1,12 +1,12 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType" : "sling-cms/components/general/container",
-	"styles": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType" : "sling-cms/components/editor/fields/repeating",
-		"label": "Style Options",
-		"name": "styles",
-		"type": "text",
-		"required": true
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/general/container",
+    "styles": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/repeating",
+        "label": "Style Options",
+        "name": "styles",
+        "type": "text",
+        "required": true
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/edit.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/edit.json
index cfec221..e577436 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/edit.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/edit.json
@@ -1,17 +1,17 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "Save",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container",
-		"style": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Style Option",
-			"name": "style",
-			"required": true,
-			"optionsScript": "/apps/reference/components/general/stylewrapper/options.jsp"
-		}
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "style": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "Style Option",
+            "name": "style",
+            "required": true,
+            "optionsScript": "/apps/reference/components/general/stylewrapper/options.jsp"
+        }
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/options.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/options.jsp
index 0fe314e..1a87293 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/options.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/options.jsp
@@ -17,9 +17,7 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:adaptTo var="pageMgr" adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.PageManager" />
-<c:set var="configRsrc" value="${pageMgr.page.template.componentConfigs['reference/components/general/stylewrapper']}" />
-<c:forEach var="style" items="${configRsrc.valueMap.styles}">
+<c:forEach var="style" items="${sling:adaptTo(slingRequest.requestPathInfo.suffixResource,'org.apache.sling.cms.ComponentConfiguration').properties.styles}">
     <option ${slingRequest.requestPathInfo.suffixResource.valueMap.style == fn:split(style,'=')[1] ? 'selected' : ''} value="${sling:encode(fn:split(style,'=')[1],'HTML_ATTR')}">
         ${sling:encode(fn:split(style,'=')[0],'HTML')}
     </option>
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/stylewrapper.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/stylewrapper.jsp
index 84e2083..8aecba7 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/stylewrapper.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/stylewrapper.jsp
@@ -18,5 +18,5 @@
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
 <div class="${properties.style}">
-	<sling:include path="container" resourceType="sling-cms/components/general/container" />
+    <sling:include path="container" resourceType="sling-cms/components/general/container" />
 </div>
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/suffixheader/edit.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/suffixheader/edit.json
index d6cad4f..789bc11 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/suffixheader/edit.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/suffixheader/edit.json
@@ -1,55 +1,55 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "Save",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container",
-		"subString": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/text",
-			"label": "Subsitution String",
-			"name": "subString",
-			"required": true
-		},
-		"property": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/text",
-			"label": "Suffix Resource Property",
-			"name": "property"
-		},
-		"tag": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Tag",
-			"name": "tag",
-			"required": true,
-			"options": {
-				"h1": {
-					"label": "Header 1",
-					"value": "h1"
-				},
-				"h2": {
-					"label": "Header 2",
-					"value": "h2"
-				},
-				"h3": {
-					"label": "Header 3",
-					"value": "h3"
-				},
-				"h4": {
-					"label": "Header 4",
-					"value": "h4"
-				},
-				"h5": {
-					"label": "Header 5",
-					"value": "h5"
-				},
-				"p": {
-					"label": "Paragraph",
-					"value": "p"
-				}
-			}
-		}
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "subString": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "Subsitution String",
+            "name": "subString",
+            "required": true
+        },
+        "property": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "Suffix Resource Property",
+            "name": "property"
+        },
+        "tag": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "Tag",
+            "name": "tag",
+            "required": true,
+            "options": {
+                "h1": {
+                    "label": "Header 1",
+                    "value": "h1"
+                },
+                "h2": {
+                    "label": "Header 2",
+                    "value": "h2"
+                },
+                "h3": {
+                    "label": "Header 3",
+                    "value": "h3"
+                },
+                "h4": {
+                    "label": "Header 4",
+                    "value": "h4"
+                },
+                "h5": {
+                    "label": "Header 5",
+                    "value": "h5"
+                },
+                "p": {
+                    "label": "Paragraph",
+                    "value": "p"
+                }
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/suffixheader/suffixheader.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/suffixheader/suffixheader.jsp
index d5285ce..5bbdade 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/suffixheader/suffixheader.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/suffixheader/suffixheader.jsp
@@ -18,13 +18,13 @@
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
 <c:choose>
-	<c:when test="${not empty properties.property}">
-		<c:set var="value" value="${slingRequest.requestPathInfo.suffixResource.valueMap[properties.property]}" />
-	</c:when>
-	<c:otherwise>
-		<c:set var="value" value="${slingRequest.requestPathInfo.suffixResource.name}" />
-	</c:otherwise>
+    <c:when test="${not empty properties.property}">
+        <c:set var="value" value="${slingRequest.requestPathInfo.suffixResource.valueMap[properties.property]}" />
+    </c:when>
+    <c:otherwise>
+        <c:set var="value" value="${slingRequest.requestPathInfo.suffixResource.name}" />
+    </c:otherwise>
 </c:choose>
 <${properties.tag}>
-	<sling:encode value="${fn:replace(properties.subString,'{SUFFIX}',value)}" mode="HTML" />
+    <sling:encode value="${fn:replace(properties.subString,'{SUFFIX}',value)}" mode="HTML" />
 </${properties.tag}>
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/config.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/config.json
index b11b927..d946173 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/config.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/config.json
@@ -1,35 +1,35 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/general/container",
-	"tagPage": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/editor/fields/path",
-		"label": "Tag Page",
-		"name": "tagPage",
-		"type": "page"
-	},
-	"listTag": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/editor/fields/text",
-		"label": "List Tag",
-		"name": "listTag"
-	},
-	"listClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/editor/fields/text",
-		"label": "List Class",
-		"name": "listClass"
-	},
-	"itemTag": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/editor/fields/text",
-		"label": "Item Tag",
-		"name": "itemTag"
-	},
-	"itemClass": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/editor/fields/text",
-		"label": "Item Class",
-		"name": "itemClass"
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/general/container",
+    "tagPage": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/path",
+        "label": "Tag Page",
+        "name": "tagPage",
+        "type": "page"
+    },
+    "listTag": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "List Tag",
+        "name": "listTag"
+    },
+    "listClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "List Class",
+        "name": "listClass"
+    },
+    "itemTag": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Item Tag",
+        "name": "itemTag"
+    },
+    "itemClass": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/editor/fields/text",
+        "label": "Item Class",
+        "name": "itemClass"
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/edit.json b/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/edit.json
index 67a9d32..a254ed4 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/edit.json
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/edit.json
@@ -1,9 +1,9 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "No Need to Edit",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container"
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "No Need to Edit",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container"
+    }
 }
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/tags.jsp b/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/tags.jsp
index 7161621..622fb6b 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/tags.jsp
+++ b/reference/src/main/resources/jcr_root/apps/reference/components/general/tags/tags.jsp
@@ -17,18 +17,19 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
+<sling:adaptTo adaptable="${resource}" adaptTo="org.apache.sling.cms.ComponentConfiguration" var="cmpCfg" />
 <sling:adaptTo adaptable="${resource}" adaptTo="org.apache.sling.cms.PageManager" var="pageMgr" />
-<c:set var="config" value="${sling:adaptTo(pageMgr.page.template.componentConfigs['reference/components/general/tags'],'org.apache.sling.api.resource.ValueMap')}" scope="request" />
+<c:set var="config" value="${cmpCfg.properties}" />
 <c:set var="contentResource" value="${sling:getRelativeResource(pageMgr.page.resource,'jcr:content')}" />
 <c:set var="listTag" value="${empty config.listTag ? 'div' : config.listTag}" />
 <c:set var="itemTag" value="${empty config.listTag ? 'span' : config.itemTag}"  />
 <${listTag} class="${config.listClass}">
-	<c:forEach var="tagPath" items="${contentResource.valueMap['sling:taxonomy']}">
-		<c:set var="tag" value="${sling:getResource(resourceResolver,tagPath)}" />
-		<${itemTag} class="${config.itemClass}">
-			<a href="${config.tagPage}.html${tag.path}.html">
-				<sling:encode value="${tag.valueMap['jcr:title']}" default="${tag.name}" mode="HTML" />
-			</a>
-		</${itemTag}>
-	</c:forEach>
+    <c:forEach var="tagPath" items="${contentResource.valueMap['sling:taxonomy']}">
+        <c:set var="tag" value="${sling:getResource(resourceResolver,tagPath)}" />
+        <${itemTag} class="${config.itemClass}">
+            <a href="${config.tagPage}.html${tag.path}.html">
+                <sling:encode value="${tag.valueMap['jcr:title']}" default="${tag.name}" mode="HTML" />
+            </a>
+        </${itemTag}>
+    </c:forEach>
 </${listTag}>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/conf/global.json b/ui/src/main/resources/jcr_root/conf/global.json
index 11c4fd0..0225cac 100644
--- a/ui/src/main/resources/jcr_root/conf/global.json
+++ b/ui/src/main/resources/jcr_root/conf/global.json
@@ -109,13 +109,10 @@
                 "jcr:primaryType": "nt:unstructured",
                 "jcr:title": "Base Page",
                 "template": "{\r\n  \"jcr:primaryType\": \"sling:Page\",\r\n  \"jcr:content\": {\r\n    \"jcr:primaryType\": \"nt:unstructured\",\r\n    \"jcr:title\": \"{{title}}\",\r\n    \"sling:template\": \"/conf/global/site/templates/base-page\",\r\n    \"sling:resourceType\": \"reference/components/pages/base\",\r\n    \"published\": false\r\n  }\r\n}",
-                "availableComponentTypes": [
-                    "General"
-                ],
                 "allowedPaths": [
                     "/content/apache/sling-apache-org.*"
                 ],
-                "sling:resourceType": "sling-cms/components/cms/pagetemplate",
+                "sling:resourceType": "sling-cms/components/caconfig/template",
                 "fields": {
                     "jcr:primaryType": "nt:unstructured",
                     "text": {
@@ -134,19 +131,6 @@
                         "label": "Name",
                         "sling:resourceType": "sling-cms/components/editor/fields/text"
                     }
-                },
-                "componentConfigurations": {
-                    "jcr:primaryType": "nt:unstructured",
-                    "componentconfig": {
-                        "jcr:primaryType": "nt:unstructured",
-                        "type": "reference/components/general/columncontrol",
-                        "containerclass": "container",
-                        "columns": [
-                            "50-50=col-md-6 col-md-6",
-                            "100=col-md-12"
-                        ],
-                        "sling:resourceType": "sling-cms/components/caconfig/component"
-                    }
                 }
             }
         }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/component/component.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/component/component.jsp
index c1bc911..9b34ddb 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/component/component.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/component/component.jsp
@@ -18,26 +18,26 @@
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
 <c:if test="${not empty properties.type}">
-	<h4>
-		<sling:encode value="${properties.type}" mode="HTML" />
-	</h4>
-	<dl>
-		<c:forEach var="val" items="${properties}">
-			<c:if test="${not fn:contains(val.key,':') and val.key != 'type'}">
-				<dt>
-					<sling:encode value="${val.key}" mode="HTML" />
-				</dt>
-				<dd>
-	      			<c:catch var="ex">
-						<c:forEach var="item" items="${val.value}">
-							<sling:encode value="${item}" mode="HTML" />
-						</c:forEach>
-					</c:catch>
-					<c:if test="${ex != null}">
-						<sling:encode value="${val.value}" mode="HTML" />
-					</c:if>
-				</dd>
-			</c:if>
-	</c:forEach>
-	</dl>
+    <h4>
+        <sling:encode value="${properties.type}" mode="HTML" />
+    </h4>
+    <dl>
+        <c:forEach var="val" items="${properties}">
+            <c:if test="${not fn:contains(val.key,':') and val.key != 'type'}">
+                <dt>
+                    <sling:encode value="${val.key}" mode="HTML" />
+                </dt>
+                <dd>
+                      <c:catch var="ex">
+                        <c:forEach var="item" items="${val.value}">
+                            <sling:encode value="${item}" mode="HTML" />
+                        </c:forEach>
+                    </c:catch>
+                    <c:if test="${ex != null}">
+                        <sling:encode value="${val.value}" mode="HTML" />
+                    </c:if>
+                </dd>
+            </c:if>
+    </c:forEach>
+    </dl>
 </c:if>
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/component/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/component/edit.json
index 649b7ae..198683c 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/component/edit.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/component/edit.json
@@ -1,21 +1,21 @@
  {
-	"jcr:primaryType": "nt:unstructured",
-	"sling:resourceType": "sling-cms/components/editor/slingform",
-	"button": "Save Component Config",
-	"fields": {
-		"jcr:primaryType": "nt:unstructured",
-		"sling:resourceType": "sling-cms/components/general/container",
-		"type": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/editor/fields/select",
-			"label": "Component",
-			"name": "type",
-			"optionsScript": "/libs/sling-cms/components/editor/scripts/componentConfigOptions.jsp",
-			"required": true
-		},
-		"includeconfig": {
-			"jcr:primaryType": "nt:unstructured",
-			"sling:resourceType": "sling-cms/components/cms/includeconfig"
-		}
-	}
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save Component Config",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "type": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "Component",
+            "name": "type",
+            "optionsScript": "/libs/sling-cms/components/editor/scripts/componentConfigOptions.jsp",
+            "required": true
+        },
+        "includeconfig": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/cms/includeconfig"
+        }
+    }
 }
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/fileeditor/config.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/fileeditor/config.json
index 67035e4..c3e3fae 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/fileeditor/config.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/fileeditor/config.json
@@ -1,4 +1,5 @@
 {
 	"jcr:primaryType": "sling:Component",
-    "jcr:title": "Sling CMS - File Editor"
+    "jcr:title": "Sling CMS - File Editor",
+    "componentType": "SlingCMS-FileEditor"
 }
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/fileeditor/fileeditor.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/fileeditor/fileeditor.jsp
index 9fe38da..b2c1bee 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/fileeditor/fileeditor.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/fileeditor/fileeditor.jsp
@@ -22,7 +22,7 @@
 
 <c:set var="oldAvailableTypes" value="${availableTypes}" />
 <c:set var="availableTypes" value="SlingCMS-FileEditor" scope="request" />
-<sling:include path="${slingRequest.requestPathInfo.suffix}" resourceType="sling-cms/components/caconfig/fileeditor/config" />
+<sling:include path="${slingRequest.requestPathInfo.suffix}" resourceType="sling-cms/components/general/container" />
 <c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
 
 <sling:call script="/libs/sling-cms/components/editor/scripts/finalize.jsp" />
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policies.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policies.json
new file mode 100644
index 0000000..6cba73c
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policies.json
@@ -0,0 +1,6 @@
+{
+    "jcr:primaryType": "sling:Component",
+    "jcr:title": "Sling CMS - Component Policies",
+    "sling:resourceSuperType": "sling-cms/components/caconfig/base",
+    "componentType": "SlingCMS-Config"
+}
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/stylewrapper.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policies/include.jsp
similarity index 81%
copy from reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/stylewrapper.jsp
copy to ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policies/include.jsp
index 84e2083..8575917 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/stylewrapper.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policies/include.jsp
@@ -17,6 +17,5 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<div class="${properties.style}">
-	<sling:include path="container" resourceType="sling-cms/components/general/container" />
-</div>
+ <c:set var="availableTypes" value="SlingCMS-PolicyConfig" scope="request" />
+<sling:include path="${slingRequest.requestPathInfo.suffix}" resourceType="sling-cms/components/general/container" />
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy.json
new file mode 100644
index 0000000..8257ab5
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy.json
@@ -0,0 +1,5 @@
+{
+    "jcr:primaryType": "sling:Component",
+    "jcr:title": "Sling CMS - Component Policy",
+    "componentType": "SlingCMS-PolicyConfig"
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/config.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/config.json
new file mode 100644
index 0000000..1ba4a95
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/config.json
@@ -0,0 +1,4 @@
+{
+	"jcr:primaryType": "sling:Component",
+    "jcr:title": "Sling CMS - Policy Configuration"
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/config.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/config/config.jsp
similarity index 68%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/config.jsp
copy to ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/config/config.jsp
index c1d48ef..a06ea08 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/config.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/config/config.jsp
@@ -19,17 +19,6 @@
 <%@include file="/libs/sling-cms/global.jsp"%>
 <br/>
 <h3><sling:encode value="${properties['jcr:title']}" mode="HTML" /> (${resource.path})</h3>
-<br/>
-<div>
-    <h4>Allowed Paths</h4>
-    <ul>
-        <c:forEach var="allowedPath" items="${properties.allowedPaths}">
-            <li>
-                <pre><sling:encode value="${allowedPath}" mode="HTML" /></pre>
-            </li>
-        </c:forEach>
-    </ul>
-</div>
 <hr/>
 <div>
     <h4>
@@ -46,23 +35,6 @@
 <hr/>
 <div>
     <h4>
-        Template Content
-    </h4>
-    <pre><sling:encode value="${properties.template}" mode="HTML" /></pre>
-</div>
-<hr/>
-<div>
-    <h4>
-        Configuration Fields
-    </h4>
-    <c:set var="oldAvailableTypes" value="${availableTypes}" />
-    <c:set var="availableTypes" value="SlingCMS-FieldConfig" scope="request" />
-    <sling:include path="fields" resourceType="sling-cms/components/general/container" />
-    <c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
-</div>
-<hr/>
-<div>
-    <h4>
         Component Configurations
     </h4>
     <c:set var="oldAvailableTypes" value="${availableTypes}" />
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/config/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/config/edit.json
new file mode 100644
index 0000000..d1f581c
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/config/edit.json
@@ -0,0 +1,20 @@
+ {
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save Page Type",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "title": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "Title",
+            "name": "jcr:title",
+            "required": true
+        },
+        "availableComponentTypes": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/cms/availablecomponenttypes"
+        }
+    }
+}
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/stylewrapper.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/policy.jsp
similarity index 78%
copy from reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/stylewrapper.jsp
copy to ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/policy.jsp
index 84e2083..ba8476b 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/stylewrapper/stylewrapper.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policy/policy.jsp
@@ -17,6 +17,6 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<div class="${properties.style}">
-	<sling:include path="container" resourceType="sling-cms/components/general/container" />
-</div>
+<c:set var="oldAvailableTypes" value="${availableTypes}" />
+<sling:include path="${resource.path}" resourceType="sling-cms/components/caconfig/policy/config" />
+<c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policymapping.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policymapping.json
new file mode 100644
index 0000000..ceddd9b
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policymapping.json
@@ -0,0 +1,6 @@
+{
+    "jcr:primaryType": "sling:Component",
+    "jcr:title": "Sling CMS - Component Policies",
+    "sling:resourceSuperType": "sling-cms/components/caconfig/base",
+    "componentType": "SlingCMS-PolicyMappingConfig"
+}
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policymapping/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policymapping/edit.json
new file mode 100644
index 0000000..a007f12
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policymapping/edit.json
@@ -0,0 +1,24 @@
+ {
+    "jcr:primaryType": "nt:unstructured",
+    "sling:resourceType": "sling-cms/components/editor/slingform",
+    "button": "Save Policy Mapping",
+    "fields": {
+        "jcr:primaryType": "nt:unstructured",
+        "sling:resourceType": "sling-cms/components/general/container",
+        "pathPattern": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/text",
+            "label": "Path Pattern",
+            "name": "pathPattern",
+            "required": true
+        },
+        "policyPath": {
+            "jcr:primaryType": "nt:unstructured",
+            "sling:resourceType": "sling-cms/components/editor/fields/select",
+            "label": "Policy Path",
+            "name": "policyPath",
+            "optionsScript": "/libs/sling-cms/components/caconfig/scripts/policyOptions.jsp",
+            "required": true
+        }
+    }
+}
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/cta.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policymapping/policymapping.jsp
similarity index 68%
copy from reference/src/main/resources/jcr_root/apps/reference/components/general/cta/cta.jsp
copy to ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policymapping/policymapping.jsp
index 25f57b6..6f660ca 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/cta/cta.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/policymapping/policymapping.jsp
@@ -17,8 +17,15 @@
  * under the License.
  */ --%>
 <%@include file="/libs/sling-cms/global.jsp"%>
-<c:if test="${not empty properties.href}">
-	<a href="${properties.href }" class="${properties.ctaClass}" ${target}>
-		<sling:encode value="${properties.text}" mode="HTML" />
-	</a>
-</c:if>
\ No newline at end of file
+<dl>
+    <dt>Path Pattern</dt>
+    <dd><sling:encode value="${properties.pathPattern}" mode="HTML" /></dd>
+    
+    <dt>Policy</dt>
+    <dd>
+        <c:if test="${not empty properties.policyPath}">
+            <sling:getResource var="policy" path="${properties.policyPath}" />
+            <sling:encode value="${policy.valueMap['jcr:title']}" mode="HTML" />
+        </c:if>
+    </dd>
+</dl>
\ No newline at end of file
diff --git a/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/options.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/scripts/policyOptions.jsp
similarity index 58%
copy from reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/options.jsp
copy to ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/scripts/policyOptions.jsp
index 53b08bb..83d995c 100644
--- a/reference/src/main/resources/jcr_root/apps/reference/components/general/columncontrol/options.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/scripts/policyOptions.jsp
@@ -17,10 +17,9 @@
  * under the License.
  */ --%>
  <%@include file="/libs/sling-cms/global.jsp"%>
-<sling:adaptTo var="pageMgr" adaptable="${slingRequest.requestPathInfo.suffixResource}" adaptTo="org.apache.sling.cms.PageManager" />
-<c:set var="configRsrc" value="${pageMgr.page.template.componentConfigs['reference/components/general/columncontrol']}" />
-<c:forEach var="layout" items="${configRsrc.valueMap.columns}">
-    <option ${slingRequest.requestPathInfo.suffixResource.valueMap.layout == fn:split(layout,'=')[1] ? 'selected' : ''} value="${sling:encode(fn:split(layout,'=')[1],'HTML_ATTR')}">
-        ${sling:encode(fn:split(layout,'=')[0],'HTML')}
-    </option>
+<option value="">Select Policy</option>
+<sling:getParent var="parent" resource="${slingRequest.requestPathInfo.suffixResource}" level="4" />
+<c:set var="query" value="SELECT * FROM [nt:unstructured] WHERE [sling:resourceType] = 'sling-cms/components/caconfig/policy' AND ISDESCENDANTNODE([${parent.path}]) ORDER BY [jcr:title]" />
+<c:forEach var="policy" items="${sling:findResources(resourceResolver,query,'JCR-SQL2')}">
+    <option value="${policy.path}" ${policy.path == editProperties.policyPath ? 'selected' : ''}><sling:encode value="${policy.valueMap['jcr:title']}" mode="HTML" /></option>
 </c:forEach>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/template/config.json
similarity index 100%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config.json
rename to ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/template/config.json
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/config.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/template/config/config.jsp
similarity index 77%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/config.jsp
copy to ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/template/config/config.jsp
index c1d48ef..0a97fe2 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/config.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/template/config/config.jsp
@@ -33,15 +33,12 @@
 <hr/>
 <div>
     <h4>
-        Available Component Types
+        Component Policies
     </h4>
-    <ul>
-        <c:forEach var="availableComponentType" items="${properties.availableComponentTypes}">
-            <li>
-                <sling:encode value="${availableComponentType}" mode="HTML" />
-            </li>
-        </c:forEach>
-    </ul>
+    <c:set var="oldAvailableTypes" value="${availableTypes}" />
+    <c:set var="availableTypes" value="SlingCMS-PolicyMappingConfig" scope="request" />
+    <sling:include path="policies" resourceType="sling-cms/components/general/container" />
+    <c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
 </div>
 <hr/>
 <div>
@@ -59,14 +56,4 @@
     <c:set var="availableTypes" value="SlingCMS-FieldConfig" scope="request" />
     <sling:include path="fields" resourceType="sling-cms/components/general/container" />
     <c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
-</div>
-<hr/>
-<div>
-    <h4>
-        Component Configurations
-    </h4>
-    <c:set var="oldAvailableTypes" value="${availableTypes}" />
-    <c:set var="availableTypes" value="SlingCMS-ComponentConfig" scope="request" />
-    <sling:include path="componentConfigurations" resourceType="sling-cms/components/general/container" />
-    <c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
-</div>
+</div>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/template/config/edit.json
similarity index 90%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/edit.json
copy to ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/template/config/edit.json
index 37c1e23..cba3207 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/edit.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/template/config/edit.json
@@ -1,7 +1,7 @@
  {
     "jcr:primaryType": "nt:unstructured",
     "sling:resourceType": "sling-cms/components/editor/slingform",
-    "button": "Save Page Type",
+    "button": "Save Page Template",
     "fields": {
         "jcr:primaryType": "nt:unstructured",
         "sling:resourceType": "sling-cms/components/general/container",
@@ -26,10 +26,6 @@
             "name": "allowedPaths@TypeHint",
             "value": "String[]"
         },
-        "availableComponentTypes": {
-            "jcr:primaryType": "nt:unstructured",
-            "sling:resourceType": "sling-cms/components/cms/availablecomponenttypes"
-        },
         "template": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/editor/fields/textarea",
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/fileeditor/fileeditor.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/template/template.jsp
similarity index 70%
copy from ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/fileeditor/fileeditor.jsp
copy to ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/template/template.jsp
index 9fe38da..f90e8b8 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/fileeditor/fileeditor.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/caconfig/template/template.jsp
@@ -16,14 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */ --%>
- <%@include file="/libs/sling-cms/global.jsp"%>
-<c:set var="cmsEditEnabled" value="true" scope="request" />
+<%@include file="/libs/sling-cms/global.jsp"%>
+ <c:set var="cmsEditEnabled" value="true" scope="request" />
 <sling:call script="/libs/sling-cms/components/editor/scripts/init.jsp" />
-
-<c:set var="oldAvailableTypes" value="${availableTypes}" />
-<c:set var="availableTypes" value="SlingCMS-FileEditor" scope="request" />
-<sling:include path="${slingRequest.requestPathInfo.suffix}" resourceType="sling-cms/components/caconfig/fileeditor/config" />
-<c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
-
+<sling:include path="${slingRequest.requestPathInfo.suffix}" resourceType="sling-cms/components/caconfig/template/config" />
 <sling:call script="/libs/sling-cms/components/editor/scripts/finalize.jsp" />
 <c:set var="cmsEditEnabled" value="false" scope="request" />
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/templateeditor.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/templateeditor.jsp
deleted file mode 100644
index bdb76b1..0000000
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/templateeditor.jsp
+++ /dev/null
@@ -1,45 +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.
- */ --%>
-<%@include file="/libs/sling-cms/global.jsp"%>
-<nav class="breadcrumb" aria-label="breadcrumbs">
-    <c:set var="siteCfgResource" value="${slingRequest.requestPathInfo.suffixResource.parent.parent}" />
-    <c:set var="cfgResource" value="${siteCfgResource.parent}" />
-    <ul>
-        <li>
-            <a href="/cms/config/list.html${cfgResource.path}">
-                <sling:encode value="${cfgResource.valueMap['jcr:content/jcr:title']}" mode="HTML" default="${cfgResource.name}" />
-            </a>
-        </li>
-        <li>
-            <a href="/cms/config/edit.html${siteCfgResource.path}">
-                <sling:encode value="${siteCfgResource.valueMap['jcr:title']}" mode="HTML" default="${siteCfgResource.name}" />
-            </a>
-        </li>
-        <li class="is-active">
-            <a href="#">
-                <sling:encode value="${resource.valueMap['jcr:title']}" mode="HTML" />
-            </a>
-        </li>
-    </ul>
-</nav>
- <c:set var="cmsEditEnabled" value="true" scope="request" />
-<sling:call script="/libs/sling-cms/components/editor/scripts/init.jsp" />
-<sling:include path="${slingRequest.requestPathInfo.suffix}" resourceType="sling-cms/components/cms/templateeditor/config" />
-<sling:call script="/libs/sling-cms/components/editor/scripts/finalize.jsp" />
-<c:set var="cmsEditEnabled" value="false" scope="request" />
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/config.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/config/config.jsp
similarity index 77%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/config.jsp
rename to ui/src/main/resources/jcr_root/libs/sling-cms/components/config/config.jsp
index c1d48ef..0a97fe2 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/config.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/config/config.jsp
@@ -33,15 +33,12 @@
 <hr/>
 <div>
     <h4>
-        Available Component Types
+        Component Policies
     </h4>
-    <ul>
-        <c:forEach var="availableComponentType" items="${properties.availableComponentTypes}">
-            <li>
-                <sling:encode value="${availableComponentType}" mode="HTML" />
-            </li>
-        </c:forEach>
-    </ul>
+    <c:set var="oldAvailableTypes" value="${availableTypes}" />
+    <c:set var="availableTypes" value="SlingCMS-PolicyMappingConfig" scope="request" />
+    <sling:include path="policies" resourceType="sling-cms/components/general/container" />
+    <c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
 </div>
 <hr/>
 <div>
@@ -59,14 +56,4 @@
     <c:set var="availableTypes" value="SlingCMS-FieldConfig" scope="request" />
     <sling:include path="fields" resourceType="sling-cms/components/general/container" />
     <c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
-</div>
-<hr/>
-<div>
-    <h4>
-        Component Configurations
-    </h4>
-    <c:set var="oldAvailableTypes" value="${availableTypes}" />
-    <c:set var="availableTypes" value="SlingCMS-ComponentConfig" scope="request" />
-    <sling:include path="componentConfigurations" resourceType="sling-cms/components/general/container" />
-    <c:set var="availableTypes" value="${oldAvailableTypes}" scope="request" />
-</div>
+</div>
\ No newline at end of file
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/components/config/edit.json
similarity index 100%
rename from ui/src/main/resources/jcr_root/libs/sling-cms/components/cms/templateeditor/config/edit.json
rename to ui/src/main/resources/jcr_root/libs/sling-cms/components/config/edit.json
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/general/container/container.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/general/container/container.jsp
index b6b41c8..5f031d7 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/general/container/container.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/general/container/container.jsp
@@ -22,8 +22,11 @@
         <c:set var="availableTypes" value="${requestScope.availableTypes}" />
     </c:when>
     <c:when test="${empty requestScope.availableTypes}">
-        <sling:adaptTo var="pageMgr" adaptable="${resource}" adaptTo="org.apache.sling.cms.PageManager" />
-        <c:set var="availableTypes" value="${fn:join(pageMgr.page.template.availableComponentTypes,',')}" />
+        <sling:adaptTo var="policyMgr" adaptable="${resource}" adaptTo="org.apache.sling.cms.ComponentPolicyManager" />
+        <c:set var="policy" value="${policyMgr.componentPolicy}" />
+        <c:if test="${policy != null && not empty policy.availableComponentTypes}">
+            <c:set var="availableTypes" value="${fn:join(policy.availableComponentTypes,',')}" />
+        </c:if>
     </c:when>
 </c:choose>
 <c:forEach var="child" items="${sling:listChildren(resource)}">
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/edit.json
index 59be611..e1bf644 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/edit.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/config/edit.json
@@ -12,6 +12,12 @@
                 "sling:resourceType": "sling-cms/components/general/richtext",
                 "text": "<h2>Edit Configuration</h2>"
             },
+            "contentbreadcrumb": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
+                "depth": 1,
+                "rootTitle": "Configuration"
+            },
             "editconfig": {
                 "jcr:primaryType": "nt:unstructured",
                 "sling:resourceType": "sling-cms/components/caconfig/edit"
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/edit.json b/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/edit.json
index f895837..d8674db 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/edit.json
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/content/template/edit.json
@@ -7,9 +7,20 @@
         "container": {
             "jcr:primaryType": "nt:unstructured",
             "sling:resourceType": "sling-cms/components/general/container",
-            "siteconfig": {
+            "richtext": {
                 "jcr:primaryType": "nt:unstructured",
-                "sling:resourceType": "sling-cms/components/cms/templateeditor"
+                "sling:resourceType": "sling-cms/components/general/richtext",
+                "text": "<h2>Edit Template</h2>"
+            },
+            "contentbreadcrumb": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/cms/contentbreadcrumb",
+                "depth": 1,
+                "rootTitle": "Configuration"
+            },
+            "templateeditor": {
+                "jcr:primaryType": "nt:unstructured",
+                "sling:resourceType": "sling-cms/components/caconfig/template"
             }
         }
     }
diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/install/org.apache.sling.cms.core.internal.ResourceEditorAssociation-confedit.config b/ui/src/main/resources/jcr_root/libs/sling-cms/install/org.apache.sling.cms.core.internal.ResourceEditorAssociation-confedit.config
new file mode 100644
index 0000000..9269f4e
--- /dev/null
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/install/org.apache.sling.cms.core.internal.ResourceEditorAssociation-confedit.config
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+pathPattern="\\/conf\\/[\\w\\d\\-_]+\\/[\\w\\d\\-_]+\\/.+"
+editor="/cms/config/edit.html"


[sling-org-apache-sling-app-cms] 01/02: Trivial whitespace

Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dklco pushed a commit to branch dklco/conf-cleanup
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git

commit fed85ad29ff7e6d8727d3eef363d7d8b1f1cb73b
Author: Dan Klco <dk...@apache.org>
AuthorDate: Thu Jun 13 21:37:08 2019 -0500

    Trivial whitespace
---
 .../editor/scripts/resourceTypeOptions.jsp         | 26 +++++++++++-----------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/scripts/resourceTypeOptions.jsp b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/scripts/resourceTypeOptions.jsp
index ec9102a..89cbb3a 100644
--- a/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/scripts/resourceTypeOptions.jsp
+++ b/ui/src/main/resources/jcr_root/libs/sling-cms/components/editor/scripts/resourceTypeOptions.jsp
@@ -19,17 +19,17 @@
  <%@include file="/libs/sling-cms/global.jsp"%>
 <option value="">Select Component</option>
 <c:forEach var="type" items="${fn:split(param.availableTypes,',')}">
-	<optgroup label="${sling:encode(type,'HTML_ATTR')}">
-		<c:set var="query" value="SELECT * FROM [sling:Component] WHERE [componentType]='${type}' ORDER BY [jcr:title]" />
-		<c:forEach var="component" items="${sling:findResources(resourceResolver,query,'JCR-SQL2')}">
-			<c:choose>
-				<c:when test="${fn:startsWith(component.path,'/apps/')}">
-					<option value="${fn:substringAfter(component.path,'/apps/')}"><sling:encode value="${component.valueMap['jcr:title']}" mode="HTML" /></option>
-				</c:when>
-				<c:otherwise>
-					<option value="${fn:substringAfter(component.path,'/libs/')}"><sling:encode value="${component.valueMap['jcr:title']}" mode="HTML" /></option>
-				</c:otherwise>
-			</c:choose>
-		</c:forEach>
-	</optgroup>
+    <optgroup label="${sling:encode(type,'HTML_ATTR')}">
+        <c:set var="query" value="SELECT * FROM [sling:Component] WHERE [componentType]='${type}' ORDER BY [jcr:title]" />
+        <c:forEach var="component" items="${sling:findResources(resourceResolver,query,'JCR-SQL2')}">
+            <c:choose>
+                <c:when test="${fn:startsWith(component.path,'/apps/')}">
+                    <option value="${fn:substringAfter(component.path,'/apps/')}"><sling:encode value="${component.valueMap['jcr:title']}" mode="HTML" /></option>
+                </c:when>
+                <c:otherwise>
+                    <option value="${fn:substringAfter(component.path,'/libs/')}"><sling:encode value="${component.valueMap['jcr:title']}" mode="HTML" /></option>
+                </c:otherwise>
+            </c:choose>
+        </c:forEach>
+    </optgroup>
 </c:forEach>
\ No newline at end of file