diff --git a/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenuImpl.java b/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenuImpl.java
index bbef5c255..c6519c24b 100644
--- a/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenuImpl.java
+++ b/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenuImpl.java
@@ -36,15 +36,20 @@ public class HstSiteMenuImpl extends AbstractMenu implements HstSiteMenu {
         final boolean menuVisibleRegardlessRoles = hstRequestContext.isCmsRequest() && hstRequestContext.getResolvedMount().getMount().getVirtualHost().getVirtualHosts().isChannelMngrSiteAuthenticationSkipped();
         for(HstSiteMenuItemConfiguration hstSiteMenuItemConfiguration : siteMenuConfiguration.getSiteMenuConfigurationItems()) {
             if (hstSiteMenuItemConfiguration.getRoles() == null || menuVisibleRegardlessRoles) {
-                hstSiteMenuItems.add(new HstSiteMenuItemImpl(this, null, hstSiteMenuItemConfiguration , hstRequestContext));
+                hstSiteMenuItems.add(newHstSiteMenuItem(hstRequestContext, null, hstSiteMenuItemConfiguration));
             } else {
                 if (HstSiteMenuUtils.isUserInRole(hstSiteMenuItemConfiguration, hstRequestContext)) {
-                    hstSiteMenuItems.add(new HstSiteMenuItemImpl(this, null, hstSiteMenuItemConfiguration , hstRequestContext));
+                    hstSiteMenuItems.add(newHstSiteMenuItem(hstRequestContext, null, hstSiteMenuItemConfiguration));
                 }
             }
         }
     }
 
+    protected HstSiteMenuItem newHstSiteMenuItem(HstRequestContext hstRequestContext, final HstSiteMenuItem parent,
+            HstSiteMenuItemConfiguration hstSiteMenuItemConfiguration) {
+        return new HstSiteMenuItemImpl(this, parent, hstSiteMenuItemConfiguration , hstRequestContext);
+    }
+
     public List<HstSiteMenuItem> getSiteMenuItems() {
         return hstSiteMenuItems;
     }
diff --git a/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenuItemImpl.java b/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenuItemImpl.java
index a82bc3fee..31b02d6a3 100644
--- a/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenuItemImpl.java
+++ b/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenuItemImpl.java
@@ -91,10 +91,10 @@ public class HstSiteMenuItemImpl extends AbstractMenuItem implements HstSiteMenu
         final boolean menuVisibleRegardlessRoles = hstRequestContext.isCmsRequest() && hstRequestContext.getResolvedMount().getMount().getVirtualHost().getVirtualHosts().isChannelMngrSiteAuthenticationSkipped();
         for(HstSiteMenuItemConfiguration childItemConfiguration : hstSiteMenuItemConfiguration.getChildItemConfigurations()) {
             if (childItemConfiguration.getRoles() == null || menuVisibleRegardlessRoles) {
-                hstSiteMenuItems.add(new HstSiteMenuItemImpl(hstSiteMenu, this, childItemConfiguration, hstRequestContext));
+                hstSiteMenuItems.add(newHstSiteMenuItem(hstSiteMenu, this, childItemConfiguration, hstRequestContext));
             } else {
                 if (HstSiteMenuUtils.isUserInRole(childItemConfiguration, hstRequestContext)) {
-                    hstSiteMenuItems.add(new HstSiteMenuItemImpl(hstSiteMenu, this, childItemConfiguration, hstRequestContext));
+                    hstSiteMenuItems.add(newHstSiteMenuItem(hstSiteMenu, this, childItemConfiguration, hstRequestContext));
                 }
             }
         }
@@ -129,6 +129,11 @@ public class HstSiteMenuItemImpl extends AbstractMenuItem implements HstSiteMenu
         }
     }
 
+    protected HstSiteMenuItem newHstSiteMenuItem(HstSiteMenu hstSiteMenu, HstSiteMenuItem parent,
+            HstSiteMenuItemConfiguration childItemConfiguration, HstRequestContext hstRequestContext) {
+        return new HstSiteMenuItemImpl(hstSiteMenu, parent, childItemConfiguration, hstRequestContext);
+    }
+
     public List<HstSiteMenuItem> getChildMenuItems() {
         return hstSiteMenuItems;
     }
diff --git a/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenusImpl.java b/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenusImpl.java
index 1579fc89c..f787a0b7d 100644
--- a/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenusImpl.java
+++ b/components/core/src/main/java/org/hippoecm/hst/core/sitemenu/HstSiteMenusImpl.java
@@ -44,12 +44,17 @@ public class HstSiteMenusImpl implements HstSiteMenus {
         if(siteMenusConfiguration != null) {
           
             for(HstSiteMenuConfiguration siteMenuConfiguration : siteMenusConfiguration.getSiteMenuConfigurations().values()) {
-                HstSiteMenuImpl siteMenu = new HstSiteMenuImpl(this, siteMenuConfiguration, hstRequestContext);
+                HstSiteMenu siteMenu = newHstSiteMenu(hstRequestContext, siteMenuConfiguration);
                 siteMenus.put(siteMenu.getName(), siteMenu);
             }
         }
     }
 
+    protected HstSiteMenu newHstSiteMenu(HstRequestContext hstRequestContext,
+            HstSiteMenuConfiguration siteMenuConfiguration) {
+        return new HstSiteMenuImpl(this, siteMenuConfiguration, hstRequestContext);
+    }
+
     public HstSiteMenu getSiteMenu(String name) {
         return siteMenus.get(name);
     }
