diff --git a/data/quickstart/fragment-layout/authenticated-lo.fragment-layout.xml b/data/quickstart/fragment-layout/authenticated-lo.fragment-layout.xml
index 2b2385610c..e2c6fff6ba 100644
--- a/data/quickstart/fragment-layout/authenticated-lo.fragment-layout.xml
+++ b/data/quickstart/fragment-layout/authenticated-lo.fragment-layout.xml
@@ -43,6 +43,7 @@
+
diff --git a/data/quickstart/portlet-definition/content-menu.portlet-definition.xml b/data/quickstart/portlet-definition/content-menu.portlet-definition.xml
new file mode 100644
index 0000000000..c454c2a87d
--- /dev/null
+++ b/data/quickstart/portlet-definition/content-menu.portlet-definition.xml
@@ -0,0 +1,65 @@
+
+
+ Menu Header
+ Menu Header
+ content-menu
+ New kind of header menu
+ Portlet
+ 12000
+
+ true
+ JspInvoker
+
+ Everyone
+
+ disableDynamicTitle
+ true
+
+
+ JspInvokerPortletController.viewLocation
+ false
+ /jsp/Invoker/content-menu
+
+
+ JspInvokerPortletController.beans
+ false
+ personManager
+
+
+ portalLogoutUrl
+ false
+ /uPortal/Logout
+
+
+ alternativeBanner
+ true
+ https://www.toureiffel.paris/sites/default/files/styles/1440x810/public/2017-10/monument-landing-header-bg_0.jpg?itok=_dSLLBlZ
+
+
+ favoritesPortletCardSize
+ true
+ small
+
+
+ gridPortletCardSize
+ true
+ auto
+
+
+ hideActionMode
+ true
+ never
+
+
+
diff --git a/gradle.properties b/gradle.properties
index 41d08e1644..75a797ca00 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -26,6 +26,7 @@ webProxyPortletVersion=2.3.1
contentCarouselVersion=1.19.0
waffleMenuVersion=1.19.0
vueVersion=2.5.17
+contentMenuVersion=1.19.0
portletApiDependency=org.apache.portals:portlet-api_2.1.0_spec:1.0
servletApiDependency=javax.servlet:javax.servlet-api:3.0.1
diff --git a/overlays/resource-server/build.gradle b/overlays/resource-server/build.gradle
index 89a3b3a43b..21c9464f89 100644
--- a/overlays/resource-server/build.gradle
+++ b/overlays/resource-server/build.gradle
@@ -14,6 +14,7 @@ dependencies {
runtime "org.webjars.npm:uportal__content-carousel:${contentCarouselVersion}@jar"
runtime "org.webjars.npm:uportal__waffle-menu:${waffleMenuVersion}@jar"
runtime "org.webjars.npm:vue:${vueVersion}@jar"
+ runtime "org.webjars.npm:uportal__esco-content-menu:${contentMenuVersion}@jar"
}
war {
diff --git a/overlays/uPortal/src/main/webapp/WEB-INF/jsp/Invoker/content-menu.jsp b/overlays/uPortal/src/main/webapp/WEB-INF/jsp/Invoker/content-menu.jsp
new file mode 100644
index 0000000000..ce9293df48
--- /dev/null
+++ b/overlays/uPortal/src/main/webapp/WEB-INF/jsp/Invoker/content-menu.jsp
@@ -0,0 +1,67 @@
+<%--
+
+ Licensed to Apereo under one or more contributor license
+ agreements. See the NOTICE file distributed with this work
+ for additional information regarding copyright ownership.
+ Apereo 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 the following location:
+
+ 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="/WEB-INF/jsp/include.jsp" %>
+
+
+
+
+
+
+
+
+
+
+
+