diff --git a/assembly/broker-artemis/descriptors/kapua-broker-artemis.xml b/assembly/broker-artemis/descriptors/kapua-broker-artemis.xml
index a70d694dfdb..2ca720af36b 100644
--- a/assembly/broker-artemis/descriptors/kapua-broker-artemis.xml
+++ b/assembly/broker-artemis/descriptors/kapua-broker-artemis.xml
@@ -130,6 +130,8 @@
                 <include>${pom.groupId}:kapua-openid-api</include>
                 <include>${pom.groupId}:kapua-openid-provider</include>
                 <include>${pom.groupId}:kapua-service-api</include>
+                <include>${pom.groupId}:kapua-service-commons-utils-api</include>
+                <include>${pom.groupId}:kapua-service-commons-utils-internal</include>
                 <include>${pom.groupId}:kapua-security-authentication-api</include>
                 <include>${pom.groupId}:kapua-security-authorization-api</include>
                 <include>${pom.groupId}:kapua-security-certificate-api</include>
diff --git a/commons/src/main/java/org/eclipse/kapua/commons/configuration/AbstractKapuaConfigurableResourceLimitedService.java b/commons/src/main/java/org/eclipse/kapua/commons/configuration/AbstractKapuaConfigurableResourceLimitedService.java
index 96db40ad7fa..719a0a0addf 100644
--- a/commons/src/main/java/org/eclipse/kapua/commons/configuration/AbstractKapuaConfigurableResourceLimitedService.java
+++ b/commons/src/main/java/org/eclipse/kapua/commons/configuration/AbstractKapuaConfigurableResourceLimitedService.java
@@ -71,7 +71,7 @@ public abstract class AbstractKapuaConfigurableResourceLimitedService<
 
 
     //TODO: make final as soon as deprecated constructors are removed
-    private AccountChildrenFinder accountChildrenFinder;
+    private AccountRelativeFinder accountRelativeFinder;
     private F factory;
     //TODO: remove as soon as deprecated constructors are removed
     private final Class<F> factoryClass;
@@ -109,7 +109,7 @@ protected AbstractKapuaConfigurableResourceLimitedService(
      * @param entityManagerFactory The {@link EntityManagerFactory} that handles persistence unit
      * @param abstractCacheFactory The {@link CacheFactory} that handles caching of the entities
      * @since 1.2.0
-     * @deprecated Since 2.0.0. Please use {@link #AbstractKapuaConfigurableResourceLimitedService(String, Domain, EntityManagerFactory, EntityCacheFactory, KapuaEntityFactory, PermissionFactory, AuthorizationService, AccountChildrenFinder, RootUserTester)} This constructor may be removed in a next release
+     * @deprecated Since 2.0.0. Please use {@link #AbstractKapuaConfigurableResourceLimitedService(String, Domain, EntityManagerFactory, EntityCacheFactory, KapuaEntityFactory, PermissionFactory, AuthorizationService, AccountRelativeFinder, RootUserTester)} This constructor may be removed in a next release
      */
     @Deprecated
     protected AbstractKapuaConfigurableResourceLimitedService(
@@ -127,7 +127,7 @@ protected AbstractKapuaConfigurableResourceLimitedService(
         */
         this.factoryClass = factoryClass;
         this.factory = null;
-        this.accountChildrenFinder = null;
+        this.accountRelativeFinder = null;
     }
 
     /**
@@ -149,12 +149,12 @@ protected AbstractKapuaConfigurableResourceLimitedService(String pid,
                                                               F factory,
                                                               PermissionFactory permissionFactory,
                                                               AuthorizationService authorizationService,
-                                                              AccountChildrenFinder accountChildrenFinder,
+                                                              AccountRelativeFinder accountRelativeFinder,
                                                               RootUserTester rootUserTester) {
         super(pid, domain, entityManagerFactory, abstractCacheFactory, permissionFactory, authorizationService, rootUserTester);
         this.factory = factory;
         this.factoryClass = null; //TODO: not needed for this construction path, remove as soon as the deprecated constructor is removed
-        this.accountChildrenFinder = accountChildrenFinder;
+        this.accountRelativeFinder = accountRelativeFinder;
     }
 
     @Override
@@ -244,7 +244,7 @@ private long allowedChildEntities(KapuaId scopeId, KapuaId targetScopeId, Map<St
             // Current used entities
             long currentUsedEntities = this.count(countQuery);
 
-            final KapuaListResult<Account> childAccounts = txManager.execute(tx -> getAccountChildrenFinder().findChildren(scopeId, Optional.ofNullable(targetScopeId)));
+            final KapuaListResult<Account> childAccounts = txManager.execute(tx -> getAccountRelativeFinder().findChildren(scopeId, Optional.ofNullable(targetScopeId)));
             // Resources assigned to children
             long childCount = 0;
             for (Account childAccount : childAccounts.getItems()) {
@@ -285,14 +285,14 @@ protected F getFactory() {
      * This instance should be provided by the Locator, but in most cases when this class is instantiated through the deprecated constructor the Locator is not yet ready,
      * therefore fetching of the required instance is demanded to this artificial getter.
      *
-     * @return The instantiated (hopefully) {@link AccountChildrenFinder} instance
+     * @return The instantiated (hopefully) {@link AccountRelativeFinder} instance
      */
-    private AccountChildrenFinder getAccountChildrenFinder() {
-        if (accountChildrenFinder == null) {
+    private AccountRelativeFinder getAccountRelativeFinder() {
+        if (accountRelativeFinder == null) {
             KapuaLocator locator = KapuaLocator.getInstance();
-            this.accountChildrenFinder = locator.getService(AccountChildrenFinder.class);
+            this.accountRelativeFinder = locator.getService(AccountRelativeFinder.class);
         }
 
-        return accountChildrenFinder;
+        return accountRelativeFinder;
     }
 }
diff --git a/commons/src/main/java/org/eclipse/kapua/commons/configuration/AccountChildrenFinder.java b/commons/src/main/java/org/eclipse/kapua/commons/configuration/AccountRelativeFinder.java
similarity index 74%
rename from commons/src/main/java/org/eclipse/kapua/commons/configuration/AccountChildrenFinder.java
rename to commons/src/main/java/org/eclipse/kapua/commons/configuration/AccountRelativeFinder.java
index f1756bc9281..0d5118b5721 100644
--- a/commons/src/main/java/org/eclipse/kapua/commons/configuration/AccountChildrenFinder.java
+++ b/commons/src/main/java/org/eclipse/kapua/commons/configuration/AccountRelativeFinder.java
@@ -17,14 +17,15 @@
 import org.eclipse.kapua.service.KapuaService;
 import org.eclipse.kapua.service.account.AccountListResult;
 
+import java.util.List;
 import java.util.Optional;
 
 /**
- * Service to retrieve all child accounts for a given scope
+ * Service to retrieve relative accounts for a given scope
  *
  * @since 2.0.0
  */
-public interface AccountChildrenFinder extends KapuaService {
+public interface AccountRelativeFinder extends KapuaService {
 
     /**
      * @param scopeId       The scope id - must be provided
@@ -33,4 +34,11 @@ public interface AccountChildrenFinder extends KapuaService {
      * @throws KapuaException
      */
     AccountListResult findChildren(KapuaId scopeId, Optional<KapuaId> targetScopeId) throws KapuaException;
+
+    /**
+     * @param accountId    The id of the account to lookup
+     * @return             The list of parent ids for the target account
+     * @throws KapuaException
+     */
+    List<KapuaId> findParentIds(KapuaId accountId) throws KapuaException;
 }
diff --git a/commons/src/main/java/org/eclipse/kapua/commons/configuration/ResourceLimitedServiceConfigurationManagerImpl.java b/commons/src/main/java/org/eclipse/kapua/commons/configuration/ResourceLimitedServiceConfigurationManagerImpl.java
index 931b8f1c357..e7518c120ce 100644
--- a/commons/src/main/java/org/eclipse/kapua/commons/configuration/ResourceLimitedServiceConfigurationManagerImpl.java
+++ b/commons/src/main/java/org/eclipse/kapua/commons/configuration/ResourceLimitedServiceConfigurationManagerImpl.java
@@ -32,17 +32,17 @@ public class ResourceLimitedServiceConfigurationManagerImpl
         extends ServiceConfigurationManagerImpl
         implements ServiceConfigurationManager {
 
-    private final AccountChildrenFinder accountChildrenFinder;
+    private final AccountRelativeFinder accountRelativeFinder;
     private final UsedEntitiesCounter usedEntitiesCounter;
 
     public ResourceLimitedServiceConfigurationManagerImpl(
             String pid,
             ServiceConfigRepository serviceConfigRepository,
             RootUserTester rootUserTester,
-            AccountChildrenFinder accountChildrenFinder,
+            AccountRelativeFinder accountRelativeFinder,
             UsedEntitiesCounter usedEntitiesCounter) {
         super(pid, serviceConfigRepository, rootUserTester);
-        this.accountChildrenFinder = accountChildrenFinder;
+        this.accountRelativeFinder = accountRelativeFinder;
         this.usedEntitiesCounter = usedEntitiesCounter;
     }
 
@@ -135,7 +135,7 @@ private long allowedChildEntities(TxContext txContext, KapuaId scopeId, Optional
             // Current used entities
             long currentUsedEntities = usedEntitiesCounter.countEntitiesInScope(txContext, scopeId);
 
-            final AccountListResult childAccounts = accountChildrenFinder.findChildren(scopeId, targetScopeId);
+            final AccountListResult childAccounts = accountRelativeFinder.findChildren(scopeId, targetScopeId);
             // Resources assigned to children
             long childCount = 0;
             for (Account childAccount : childAccounts.getItems()) {
diff --git a/commons/src/main/java/org/eclipse/kapua/commons/model/query/AbstractKapuaForwardableEntityQuery.java b/commons/src/main/java/org/eclipse/kapua/commons/model/query/AbstractKapuaForwardableEntityQuery.java
new file mode 100644
index 00000000000..40b0954c96c
--- /dev/null
+++ b/commons/src/main/java/org/eclipse/kapua/commons/model/query/AbstractKapuaForwardableEntityQuery.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Eurotech - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.kapua.commons.model.query;
+
+import org.eclipse.kapua.model.id.KapuaId;
+import org.eclipse.kapua.model.query.KapuaForwardableEntityQuery;
+import org.eclipse.kapua.model.query.KapuaQuery;
+
+public class AbstractKapuaForwardableEntityQuery extends AbstractKapuaNamedQuery implements KapuaForwardableEntityQuery {
+
+    protected Boolean includeInherited = Boolean.FALSE;
+
+    /**
+     * Constructor.
+     *
+     */
+    public AbstractKapuaForwardableEntityQuery() {
+        super();
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param scopeId The {@link #getScopeId()}.
+     */
+    public AbstractKapuaForwardableEntityQuery(KapuaId scopeId) {
+        super(scopeId);
+    }
+
+    /**
+     * Clone constructor.
+     *
+     * @param query The {@link AbstractKapuaForwardableEntityQuery} to clone.
+     */
+    public AbstractKapuaForwardableEntityQuery(KapuaQuery query) {
+        super(query);
+        if(query instanceof KapuaForwardableEntityQuery) {
+            this.includeInherited = ((KapuaForwardableEntityQuery) query).getIncludeInherited();
+        }
+    }
+
+    @Override
+    public Boolean getIncludeInherited() {
+        return includeInherited;
+    }
+
+    @Override
+    public void setIncludeInherited(Boolean includeInherited) {
+        this.includeInherited = includeInherited;
+    }
+}
diff --git a/pom.xml b/pom.xml
index 7c81df1a888..9eecf90a22e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1012,6 +1012,16 @@
                 <artifactId>kapua-service-api</artifactId>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.eclipse.kapua</groupId>
+                <artifactId>kapua-service-commons-utils-api</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.kapua</groupId>
+                <artifactId>kapua-service-commons-utils-internal</artifactId>
+                <version>${project.version}</version>
+            </dependency>
             <dependency>
                 <groupId>org.eclipse.kapua</groupId>
                 <artifactId>kapua-service-elasticsearch-client-api</artifactId>
@@ -1032,6 +1042,16 @@
                 <artifactId>kapua-service-storable-internal</artifactId>
                 <version>${project.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.eclipse.kapua</groupId>
+                <artifactId>kapua-service-utils-api</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.kapua</groupId>
+                <artifactId>kapua-service-utils-internal</artifactId>
+                <version>${project.version}</version>
+            </dependency>
             <dependency>
                 <groupId>org.eclipse.kapua</groupId>
                 <artifactId>kapua-service-client</artifactId>
diff --git a/service/account/internal/src/main/java/org/eclipse/kapua/service/account/internal/AccountModule.java b/service/account/internal/src/main/java/org/eclipse/kapua/service/account/internal/AccountModule.java
index 550eb1a9a5d..65dcd0b5d55 100644
--- a/service/account/internal/src/main/java/org/eclipse/kapua/service/account/internal/AccountModule.java
+++ b/service/account/internal/src/main/java/org/eclipse/kapua/service/account/internal/AccountModule.java
@@ -15,7 +15,7 @@
 import com.google.inject.Module;
 import com.google.inject.Provides;
 import com.google.inject.multibindings.ProvidesIntoSet;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.CachingServiceConfigRepository;
 import org.eclipse.kapua.commons.configuration.ResourceLimitedServiceConfigurationManagerImpl;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
@@ -71,10 +71,10 @@ public Domain accountDomain() {
 
     @Provides
     @Singleton
-    AccountChildrenFinder accountChildrenFinder(
+    AccountRelativeFinder accountRelativeFinder(
             AccountFactory accountFactory,
             AccountService accountService) {
-        return new AccountChildrenFinderImpl(
+        return new AccountRelativeFinderImpl(
                 accountFactory,
                 accountService);
     }
@@ -132,7 +132,7 @@ AccountService accountService(AccountRepository accountRepository,
     ServiceConfigurationManager accountServiceConfigurationManager(
             AccountFactory factory,
             RootUserTester rootUserTester,
-            AccountChildrenFinder accountChildrenFinder,
+            AccountRelativeFinder accountRelativeFinder,
             AccountRepository accountRepository,
             KapuaJpaRepositoryConfiguration jpaRepoConfig,
             EntityCacheFactory entityCacheFactory
@@ -145,7 +145,7 @@ ServiceConfigurationManager accountServiceConfigurationManager(
                                 entityCacheFactory.createCache("AbstractKapuaConfigurableServiceCacheId")
                         ),
                         rootUserTester,
-                        accountChildrenFinder,
+                        accountRelativeFinder,
                         new UsedEntitiesCounterImpl(
                                 factory,
                                 accountRepository)
diff --git a/service/account/internal/src/main/java/org/eclipse/kapua/service/account/internal/AccountChildrenFinderImpl.java b/service/account/internal/src/main/java/org/eclipse/kapua/service/account/internal/AccountRelativeFinderImpl.java
similarity index 61%
rename from service/account/internal/src/main/java/org/eclipse/kapua/service/account/internal/AccountChildrenFinderImpl.java
rename to service/account/internal/src/main/java/org/eclipse/kapua/service/account/internal/AccountRelativeFinderImpl.java
index b2c35fdc121..d187ccab8d8 100644
--- a/service/account/internal/src/main/java/org/eclipse/kapua/service/account/internal/AccountChildrenFinderImpl.java
+++ b/service/account/internal/src/main/java/org/eclipse/kapua/service/account/internal/AccountRelativeFinderImpl.java
@@ -12,28 +12,35 @@
  *******************************************************************************/
 package org.eclipse.kapua.service.account.internal;
 
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+
+import javax.inject.Inject;
+
 import org.eclipse.kapua.KapuaException;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
+import org.eclipse.kapua.commons.model.id.KapuaEid;
 import org.eclipse.kapua.commons.security.KapuaSecurityUtils;
 import org.eclipse.kapua.model.KapuaEntityAttributes;
 import org.eclipse.kapua.model.id.KapuaId;
 import org.eclipse.kapua.model.query.predicate.AttributePredicate;
 import org.eclipse.kapua.service.KapuaService;
+import org.eclipse.kapua.service.account.Account;
 import org.eclipse.kapua.service.account.AccountFactory;
 import org.eclipse.kapua.service.account.AccountListResult;
 import org.eclipse.kapua.service.account.AccountQuery;
 import org.eclipse.kapua.service.account.AccountService;
 
-import javax.inject.Inject;
-import java.util.Optional;
-
-public class AccountChildrenFinderImpl implements AccountChildrenFinder, KapuaService {
+public class AccountRelativeFinderImpl implements AccountRelativeFinder, KapuaService {
 
     private final AccountFactory accountFactory;
     private final AccountService accountService;
 
     @Inject
-    public AccountChildrenFinderImpl(AccountFactory accountFactory, AccountService accountService) {
+    public AccountRelativeFinderImpl(AccountFactory accountFactory, AccountService accountService) {
         this.accountFactory = accountFactory;
         this.accountService = accountService;
     }
@@ -53,4 +60,29 @@ public AccountListResult findChildren(KapuaId scopeId, Optional<KapuaId> exclude
 
         return KapuaSecurityUtils.doPrivileged(() -> accountService.query(childAccountsQuery));
     }
+
+    @Override
+    public List<KapuaId> findParentIds(KapuaId accountId) throws KapuaException {
+        Account account = KapuaSecurityUtils.doPrivileged(() -> accountService.find(accountId));
+
+        if(account == null || account.getParentAccountPath() == null) {
+            return Collections.emptyList();
+        }
+
+        ArrayList<KapuaId> parentAccountIds = new ArrayList<KapuaId>();
+
+        String[] splitIds = account.getParentAccountPath().split("/");
+        String accountIdStr = accountId.getId().toString();
+
+        // Iterate in reverse order to get parent first, then grandparent, etc
+        for(int i = splitIds.length - 1; i >= 0; i--) {
+            String id = splitIds[i];
+
+            if(id != null && !id.isEmpty() && !id.equals(accountIdStr)) {
+                parentAccountIds.add(new KapuaEid(new BigInteger(id)));
+            }
+        }
+
+        return parentAccountIds;
+    }
 }
\ No newline at end of file
diff --git a/service/account/test/src/test/java/org/eclipse/kapua/service/account/test/AccountLocatorConfiguration.java b/service/account/test/src/test/java/org/eclipse/kapua/service/account/test/AccountLocatorConfiguration.java
index 7f244466360..7353db3ce3b 100644
--- a/service/account/test/src/test/java/org/eclipse/kapua/service/account/test/AccountLocatorConfiguration.java
+++ b/service/account/test/src/test/java/org/eclipse/kapua/service/account/test/AccountLocatorConfiguration.java
@@ -20,7 +20,7 @@
 import com.google.inject.name.Names;
 import io.cucumber.java.Before;
 import org.eclipse.kapua.KapuaException;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.ResourceLimitedServiceConfigurationManagerImpl;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
 import org.eclipse.kapua.commons.configuration.ServiceConfigImplJpaRepository;
@@ -109,7 +109,7 @@ protected void configure() {
 //                bind(AccountEntityManagerFactory.class).toInstance(entityManagerFactory);
                 final AccountFactory accountFactory = new AccountFactoryImpl();
                 bind(AccountFactory.class).toInstance(accountFactory);
-                bind(AccountChildrenFinder.class).toInstance(Mockito.mock(AccountChildrenFinder.class));
+                bind(AccountRelativeFinder.class).toInstance(Mockito.mock(AccountRelativeFinder.class));
                 final KapuaJpaRepositoryConfiguration jpaRepoConfig = new KapuaJpaRepositoryConfiguration();
                 final AccountRepository accountRepository = new AccountImplJpaRepository(jpaRepoConfig);
                 bind(AccountService.class).toInstance(new AccountServiceImpl(
@@ -121,7 +121,7 @@ protected void configure() {
                                 AccountService.class.getName(),
                                 new ServiceConfigImplJpaRepository(jpaRepoConfig),
                                 Mockito.mock(RootUserTester.class),
-                                Mockito.mock(AccountChildrenFinder.class),
+                                Mockito.mock(AccountRelativeFinder.class),
                                 new UsedEntitiesCounterImpl(
                                         accountFactory,
                                         accountRepository)
diff --git a/service/api/src/main/java/org/eclipse/kapua/model/KapuaForwardableEntity.java b/service/api/src/main/java/org/eclipse/kapua/model/KapuaForwardableEntity.java
new file mode 100644
index 00000000000..693e3be1200
--- /dev/null
+++ b/service/api/src/main/java/org/eclipse/kapua/model/KapuaForwardableEntity.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Eurotech - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.kapua.model;
+
+import javax.xml.bind.annotation.XmlElement;
+
+/**
+ * {@link KapuaForwardableEntity} definition.
+ *
+ * @since 2.0.0
+ */
+public interface KapuaForwardableEntity extends KapuaNamedEntity {
+
+    @XmlElement(name = "forwardable")
+    Boolean getForwardable();
+
+    void setForwardable(Boolean forwardable);
+}
\ No newline at end of file
diff --git a/service/api/src/main/java/org/eclipse/kapua/model/KapuaForwardableEntityAttributes.java b/service/api/src/main/java/org/eclipse/kapua/model/KapuaForwardableEntityAttributes.java
new file mode 100644
index 00000000000..46ac0260671
--- /dev/null
+++ b/service/api/src/main/java/org/eclipse/kapua/model/KapuaForwardableEntityAttributes.java
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Eurotech - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.kapua.model;
+
+/**
+ * {@link KapuaForwardableEntityAttributes} attributes.
+ *
+ * @see org.eclipse.kapua.model.KapuaEntityAttributes
+ * @since 2.0.0
+ */
+public class KapuaForwardableEntityAttributes extends KapuaNamedEntityAttributes {
+
+    public static final String FORWARDABLE = "forwardable";
+}
diff --git a/service/api/src/main/java/org/eclipse/kapua/model/query/KapuaForwardableEntityQuery.java b/service/api/src/main/java/org/eclipse/kapua/model/query/KapuaForwardableEntityQuery.java
new file mode 100644
index 00000000000..7208cacb780
--- /dev/null
+++ b/service/api/src/main/java/org/eclipse/kapua/model/query/KapuaForwardableEntityQuery.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Eurotech - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.kapua.model.query;
+
+import javax.xml.bind.annotation.XmlElement;
+
+public interface KapuaForwardableEntityQuery extends KapuaQuery {
+    /**
+     * Gets whether to query for inherited entities
+     *
+     * @return {@code true} if set to query for inherited entities, {@code false} otherwise.
+     * @since 2.0.0
+     */
+    @XmlElement(name = "includeInherited")
+    Boolean getIncludeInherited();
+
+    /**
+     * Sets whether to query for inherited entities
+     *
+     * @param includeInherited {@code true} to query for inherited entities, {@code false} otherwise.
+     * @since 2.0.0
+     */
+    void setIncludeInherited(Boolean includeInherited);
+
+}
diff --git a/service/commons/pom.xml b/service/commons/pom.xml
index ce49e66c6f3..ad240da38e3 100644
--- a/service/commons/pom.xml
+++ b/service/commons/pom.xml
@@ -28,5 +28,6 @@
     <modules>
         <module>elasticsearch</module>
         <module>storable</module>
+        <module>utils</module>
     </modules>
 </project>
diff --git a/service/commons/utils/api/pom.xml b/service/commons/utils/api/pom.xml
new file mode 100644
index 00000000000..f2431fa01d5
--- /dev/null
+++ b/service/commons/utils/api/pom.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<!--
+    Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others
+
+    This program and the accompanying materials are made
+    available under the terms of the Eclipse Public License 2.0
+    which is available at https://www.eclipse.org/legal/epl-2.0/
+
+    SPDX-License-Identifier: EPL-2.0
+
+    Contributors:
+        Eurotech - initial API and implementation
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>kapua-service-commons-utils</artifactId>
+        <groupId>org.eclipse.kapua</groupId>
+        <version>2.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>kapua-service-commons-utils-api</artifactId>
+
+    <dependencies>
+        <!-- Internal Dependencies-->
+        <dependency>
+            <groupId>org.eclipse.kapua</groupId>
+            <artifactId>kapua-commons</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/service/commons/utils/api/src/main/java/org/eclipse/kapua/service/utils/KapuaEntityQueryUtil.java b/service/commons/utils/api/src/main/java/org/eclipse/kapua/service/utils/KapuaEntityQueryUtil.java
new file mode 100644
index 00000000000..1dcc441eee7
--- /dev/null
+++ b/service/commons/utils/api/src/main/java/org/eclipse/kapua/service/utils/KapuaEntityQueryUtil.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Eurotech - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.kapua.service.utils;
+
+import javax.validation.constraints.NotNull;
+
+import org.eclipse.kapua.KapuaException;
+import org.eclipse.kapua.model.query.KapuaForwardableEntityQuery;
+import org.eclipse.kapua.model.query.KapuaQuery;
+import org.eclipse.kapua.service.KapuaService;
+
+/**
+ * Service to help process/transform queries
+ *
+ * @since 2.0.0
+ */
+public interface KapuaEntityQueryUtil extends KapuaService {
+
+    /**
+     * Transform the specified query for the {@link KapuaForwardableEntityQuery} getIncludeInherited() option (i.e.
+     * to also query the parent accounts).
+     * 
+     * @param query
+     * @return
+     * @throws KapuaException
+     */
+    public KapuaQuery transformInheritedQuery(@NotNull KapuaForwardableEntityQuery query) throws KapuaException;
+}
diff --git a/service/commons/utils/api/src/main/java/org/eclipse/kapua/service/utils/KapuaForwardableEntityRepository.java b/service/commons/utils/api/src/main/java/org/eclipse/kapua/service/utils/KapuaForwardableEntityRepository.java
new file mode 100644
index 00000000000..c13e7b097f0
--- /dev/null
+++ b/service/commons/utils/api/src/main/java/org/eclipse/kapua/service/utils/KapuaForwardableEntityRepository.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2022 Eurotech and/or its affiliates and others
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Eurotech - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.kapua.service.utils;
+
+import org.eclipse.kapua.KapuaException;
+import org.eclipse.kapua.model.KapuaEntity;
+import org.eclipse.kapua.model.KapuaForwardableEntity;
+import org.eclipse.kapua.model.KapuaNamedEntity;
+import org.eclipse.kapua.model.query.KapuaForwardableEntityQuery;
+import org.eclipse.kapua.model.query.KapuaListResult;
+import org.eclipse.kapua.storage.KapuaEntityRepository;
+import org.eclipse.kapua.storage.KapuaNamedEntityRepository;
+import org.eclipse.kapua.storage.KapuaUpdatableEntityRepository;
+import org.eclipse.kapua.storage.TxContext;
+
+/**
+ * This contract builds upon {@link KapuaUpdatableEntityRepository} (and in turn {@link KapuaEntityRepository},
+ * adding functionalities specific to Kapua Entities that are implement the contract {@link KapuaNamedEntity} (as in: have a name and description fields)
+ *
+ * @param <E> The specific subclass of {@link KapuaEntity} handled by this repository
+ * @param <L> The specific subclass of {@link KapuaListResult}&lt;E&gt; meant to hold list results for the kapua entity handled by this repo
+ * @since 2.0.0
+ */
+public interface KapuaForwardableEntityRepository<E extends KapuaForwardableEntity, L extends KapuaListResult<E>>
+        extends KapuaNamedEntityRepository<E, L> {
+    L query(TxContext txContext, KapuaForwardableEntityQuery kapuaQuery) throws KapuaException;
+
+    long count(TxContext txContext, KapuaForwardableEntityQuery kapuaQuery) throws KapuaException;
+
+}
diff --git a/service/commons/utils/internal/pom.xml b/service/commons/utils/internal/pom.xml
new file mode 100644
index 00000000000..6f85ee08f14
--- /dev/null
+++ b/service/commons/utils/internal/pom.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<!--
+    Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others
+
+    This program and the accompanying materials are made
+    available under the terms of the Eclipse Public License 2.0
+    which is available at https://www.eclipse.org/legal/epl-2.0/
+
+    SPDX-License-Identifier: EPL-2.0
+
+    Contributors:
+        Eurotech - initial API and implementation
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>kapua-service-commons-utils</artifactId>
+        <groupId>org.eclipse.kapua</groupId>
+        <version>2.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>kapua-service-commons-utils-internal</artifactId>
+
+    <dependencies>
+        <!-- Implemented Interface-->
+        <dependency>
+            <groupId>org.eclipse.kapua</groupId>
+            <artifactId>kapua-service-commons-utils-api</artifactId>
+        </dependency>
+
+        <!-- Internal Dependencies-->
+        <dependency>
+            <groupId>org.eclipse.kapua</groupId>
+            <artifactId>kapua-commons</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/service/commons/utils/internal/src/main/java/org/eclipse/kapua/service/utils/internal/KapuaEntityQueryUtilImpl.java b/service/commons/utils/internal/src/main/java/org/eclipse/kapua/service/utils/internal/KapuaEntityQueryUtilImpl.java
new file mode 100644
index 00000000000..7c0125e7914
--- /dev/null
+++ b/service/commons/utils/internal/src/main/java/org/eclipse/kapua/service/utils/internal/KapuaEntityQueryUtilImpl.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Eurotech - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.kapua.service.utils.internal;
+
+import org.eclipse.kapua.KapuaException;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
+import org.eclipse.kapua.model.KapuaEntityAttributes;
+import org.eclipse.kapua.model.KapuaForwardableEntityAttributes;
+import org.eclipse.kapua.model.id.KapuaId;
+import org.eclipse.kapua.model.query.KapuaForwardableEntityQuery;
+import org.eclipse.kapua.model.query.KapuaQuery;
+import org.eclipse.kapua.model.query.predicate.AndPredicate;
+import org.eclipse.kapua.model.query.predicate.OrPredicate;
+import org.eclipse.kapua.service.utils.KapuaEntityQueryUtil;
+
+import javax.inject.Inject;
+import javax.validation.constraints.NotNull;
+
+/**
+ * Implementation of converter between {@link KapuaForwardableEntityQuery} and {@link KapuaQuery}
+ *
+ * @since 2.0.0
+ */
+public class KapuaEntityQueryUtilImpl implements KapuaEntityQueryUtil {
+
+    private final AccountRelativeFinder accountRelativeFinder;
+
+    @Inject
+    public KapuaEntityQueryUtilImpl(AccountRelativeFinder accountRelativeFinder) {
+        this.accountRelativeFinder = accountRelativeFinder;
+    }
+
+    @Override
+    public KapuaQuery transformInheritedQuery(@NotNull KapuaForwardableEntityQuery query) throws KapuaException {
+        // Transform only if this option is enabled
+        if (!query.getIncludeInherited()) {
+            return query;
+        }
+
+        KapuaId scopeId = query.getScopeId();
+
+        // Replacement predicate root
+        AndPredicate newPred = query.andPredicate(query.getPredicate());
+
+        // Create predicate to query ancestor accounts for entities that are forwardable
+        query.setScopeId(KapuaId.ANY);
+        OrPredicate forwardableAncestorPreds = query.orPredicate();
+
+        for (KapuaId id : accountRelativeFinder.findParentIds(scopeId)) {
+            AndPredicate scopedForwardablePred = query.andPredicate(query.attributePredicate(KapuaEntityAttributes.SCOPE_ID, id));
+            scopedForwardablePred = scopedForwardablePred.and(query.attributePredicate(KapuaForwardableEntityAttributes.FORWARDABLE, true));
+
+            forwardableAncestorPreds = forwardableAncestorPreds.or(scopedForwardablePred);
+        }
+        // include the original scope (which doesn't need to be forwardable)
+        forwardableAncestorPreds = forwardableAncestorPreds.or(query.attributePredicate(KapuaEntityAttributes.SCOPE_ID, scopeId));
+
+        // Use the original query predicate AND the forwardable parent scopes
+        query.setPredicate(newPred.and(forwardableAncestorPreds));
+
+        // Disable this option so that it does not get transformed again in case of subsequent calls to this function
+        query.setIncludeInherited(false);
+
+        return query;
+    }
+}
diff --git a/service/commons/utils/internal/src/main/java/org/eclipse/kapua/service/utils/internal/KapuaForwardableEntityJpaRepository.java b/service/commons/utils/internal/src/main/java/org/eclipse/kapua/service/utils/internal/KapuaForwardableEntityJpaRepository.java
new file mode 100644
index 00000000000..fbcf093960b
--- /dev/null
+++ b/service/commons/utils/internal/src/main/java/org/eclipse/kapua/service/utils/internal/KapuaForwardableEntityJpaRepository.java
@@ -0,0 +1,76 @@
+/*******************************************************************************
+ * Copyright (c) 2016, 2022 Eurotech and/or its affiliates and others
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Eurotech - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.kapua.service.utils.internal;
+
+import org.eclipse.kapua.KapuaException;
+import org.eclipse.kapua.commons.jpa.KapuaJpaRepositoryConfiguration;
+import org.eclipse.kapua.commons.jpa.KapuaNamedEntityJpaRepository;
+import org.eclipse.kapua.model.KapuaForwardableEntity;
+import org.eclipse.kapua.model.query.KapuaForwardableEntityQuery;
+import org.eclipse.kapua.model.query.KapuaListResult;
+import org.eclipse.kapua.model.query.KapuaQuery;
+import org.eclipse.kapua.service.utils.KapuaEntityQueryUtil;
+import org.eclipse.kapua.service.utils.KapuaForwardableEntityRepository;
+import org.eclipse.kapua.storage.TxContext;
+
+import java.util.function.Supplier;
+
+public class KapuaForwardableEntityJpaRepository<E extends KapuaForwardableEntity, C extends E, L extends KapuaListResult<E>>
+        extends KapuaNamedEntityJpaRepository<E, C, L>
+        implements KapuaForwardableEntityRepository<E, L> {
+    private final KapuaEntityQueryUtil kapuaEntityQueryUtil;
+
+    public KapuaForwardableEntityJpaRepository(
+            Class<C> concreteClass,
+            String entityName,
+            Supplier<L> listSupplier,
+            KapuaJpaRepositoryConfiguration jpaRepoConfig,
+            KapuaEntityQueryUtil kapuaEntityQueryUtil) {
+        super(concreteClass, entityName, listSupplier, jpaRepoConfig);
+        this.kapuaEntityQueryUtil = kapuaEntityQueryUtil;
+    }
+
+    @Override
+    public L query(TxContext txContext, KapuaForwardableEntityQuery kapuaQuery) throws KapuaException {
+        return doQuery(txContext, kapuaQuery);
+    }
+
+    @Override
+    public L query(TxContext txContext, KapuaQuery listQuery) throws KapuaException {
+        // Transform the query for the includeInherited option
+        return (listQuery instanceof KapuaForwardableEntityQuery)
+                ? this.doQuery(txContext, (KapuaForwardableEntityQuery) listQuery) : super.query(txContext, listQuery);
+    }
+
+    private L doQuery(TxContext txContext, KapuaForwardableEntityQuery kapuaQuery) throws KapuaException {
+        final KapuaQuery query = kapuaEntityQueryUtil.transformInheritedQuery(kapuaQuery);
+        return super.query(txContext, query);
+    }
+
+    @Override
+    public long count(TxContext txContext, KapuaForwardableEntityQuery kapuaQuery) throws KapuaException {
+        return doCount(txContext, kapuaQuery);
+    }
+
+    @Override
+    public long count(TxContext txContext, KapuaQuery countQuery) throws KapuaException {
+        // Transform the query for the includeInherited option
+        return (countQuery instanceof KapuaForwardableEntityQuery)
+                ? this.count(txContext, (KapuaForwardableEntityQuery) countQuery) : super.count(txContext, countQuery);
+    }
+
+    private long doCount(TxContext txContext, KapuaForwardableEntityQuery kapuaQuery) throws KapuaException {
+        final KapuaQuery query = kapuaEntityQueryUtil.transformInheritedQuery(kapuaQuery);
+        return super.count(txContext, query);
+    }
+}
diff --git a/service/commons/utils/internal/src/main/java/org/eclipse/kapua/service/utils/internal/KapuaServiceUtilsModule.java b/service/commons/utils/internal/src/main/java/org/eclipse/kapua/service/utils/internal/KapuaServiceUtilsModule.java
new file mode 100644
index 00000000000..ff695eb83c1
--- /dev/null
+++ b/service/commons/utils/internal/src/main/java/org/eclipse/kapua/service/utils/internal/KapuaServiceUtilsModule.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others
+ *
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     Eurotech - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.kapua.service.utils.internal;
+
+import org.eclipse.kapua.commons.core.AbstractKapuaModule;
+import org.eclipse.kapua.service.utils.KapuaEntityQueryUtil;
+
+import javax.inject.Singleton;
+
+public class KapuaServiceUtilsModule extends AbstractKapuaModule {
+
+    @Override
+    protected void configureModule() {
+        bind(KapuaEntityQueryUtil.class).to(KapuaEntityQueryUtilImpl.class).in(Singleton.class);
+        // nothing to do here
+    }
+}
diff --git a/service/commons/utils/pom.xml b/service/commons/utils/pom.xml
new file mode 100644
index 00000000000..00eeeaf9db8
--- /dev/null
+++ b/service/commons/utils/pom.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!--
+    Copyright (c) 2024, 2022 Eurotech and/or its affiliates and others
+
+    This program and the accompanying materials are made
+    available under the terms of the Eclipse Public License 2.0
+    which is available at https://www.eclipse.org/legal/epl-2.0/
+
+    SPDX-License-Identifier: EPL-2.0
+
+    Contributors:
+        Eurotech - initial API and implementation
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>kapua-service-commons</artifactId>
+        <groupId>org.eclipse.kapua</groupId>
+        <version>2.0.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>kapua-service-commons-utils</artifactId>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>api</module>
+        <module>internal</module>
+    </modules>
+
+</project>
diff --git a/service/device/registry/internal/src/main/java/org/eclipse/kapua/service/device/registry/DeviceRegistryModule.java b/service/device/registry/internal/src/main/java/org/eclipse/kapua/service/device/registry/DeviceRegistryModule.java
index 1ebbb662492..1f01bdef9ce 100644
--- a/service/device/registry/internal/src/main/java/org/eclipse/kapua/service/device/registry/DeviceRegistryModule.java
+++ b/service/device/registry/internal/src/main/java/org/eclipse/kapua/service/device/registry/DeviceRegistryModule.java
@@ -14,7 +14,7 @@
 
 import com.google.inject.Provides;
 import com.google.inject.multibindings.ProvidesIntoSet;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.CachingServiceConfigRepository;
 import org.eclipse.kapua.commons.configuration.ResourceLimitedServiceConfigurationManagerImpl;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
@@ -226,7 +226,7 @@ protected TxManager deviceRegistryTxManager(KapuaJpaTxManagerFactory jpaTxManage
     protected ServiceConfigurationManager deviceRegistryServiceConfigurationManager(
             DeviceFactory factory,
             RootUserTester rootUserTester,
-            AccountChildrenFinder accountChildrenFinder,
+            AccountRelativeFinder accountRelativeFinder,
             DeviceRepository deviceRepository,
             KapuaJpaRepositoryConfiguration jpaRepoConfig,
             EntityCacheFactory entityCacheFactory
@@ -239,7 +239,7 @@ protected ServiceConfigurationManager deviceRegistryServiceConfigurationManager(
                                 entityCacheFactory.createCache("AbstractKapuaConfigurableServiceCacheId")
                         ),
                         rootUserTester,
-                        accountChildrenFinder,
+                        accountRelativeFinder,
                         new UsedEntitiesCounterImpl(
                                 factory,
                                 deviceRepository)
diff --git a/service/device/registry/test/src/test/java/org/eclipse/kapua/service/device/registry/test/DeviceRegistryLocatorConfiguration.java b/service/device/registry/test/src/test/java/org/eclipse/kapua/service/device/registry/test/DeviceRegistryLocatorConfiguration.java
index 3d820c8f7be..8064339b11b 100644
--- a/service/device/registry/test/src/test/java/org/eclipse/kapua/service/device/registry/test/DeviceRegistryLocatorConfiguration.java
+++ b/service/device/registry/test/src/test/java/org/eclipse/kapua/service/device/registry/test/DeviceRegistryLocatorConfiguration.java
@@ -20,7 +20,7 @@
 import com.google.inject.name.Names;
 import io.cucumber.java.Before;
 import org.eclipse.kapua.KapuaException;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
 import org.eclipse.kapua.commons.configuration.ServiceConfigurationManager;
 import org.eclipse.kapua.commons.configuration.metatype.KapuaMetatypeFactoryImpl;
@@ -128,7 +128,7 @@ protected void configure() {
                 bind(AuthorizationService.class).toInstance(mockedAuthorization);
                 bind(CredentialsFactory.class).toInstance(credentialsFactory);
                 bind(KapuaJpaRepositoryConfiguration.class).toInstance(new KapuaJpaRepositoryConfiguration());
-                bind(AccountChildrenFinder.class).toInstance(Mockito.mock(AccountChildrenFinder.class));
+                bind(AccountRelativeFinder.class).toInstance(Mockito.mock(AccountRelativeFinder.class));
                 bind(AccountFactory.class).toInstance(Mockito.mock(AccountFactory.class));
                 bind(AccountService.class).toInstance(Mockito.mock(AccountService.class));
 
diff --git a/service/job/internal/src/main/java/org/eclipse/kapua/service/job/internal/JobModule.java b/service/job/internal/src/main/java/org/eclipse/kapua/service/job/internal/JobModule.java
index 6724cb59a1d..8ea7c28fa8f 100644
--- a/service/job/internal/src/main/java/org/eclipse/kapua/service/job/internal/JobModule.java
+++ b/service/job/internal/src/main/java/org/eclipse/kapua/service/job/internal/JobModule.java
@@ -14,7 +14,7 @@
 
 import com.google.inject.Provides;
 import com.google.inject.multibindings.ProvidesIntoSet;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.CachingServiceConfigRepository;
 import org.eclipse.kapua.commons.configuration.ResourceLimitedServiceConfigurationManagerImpl;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
@@ -80,7 +80,7 @@ JobService jobService(
     public ServiceConfigurationManager jobServiceConfigurationManager(
             JobFactory factory,
             RootUserTester rootUserTester,
-            AccountChildrenFinder accountChildrenFinder,
+            AccountRelativeFinder accountRelativeFinder,
             JobRepository jobRepository,
             KapuaJpaRepositoryConfiguration jpaRepoConfig,
             EntityCacheFactory entityCacheFactory
@@ -93,7 +93,7 @@ public ServiceConfigurationManager jobServiceConfigurationManager(
                                 entityCacheFactory.createCache("AbstractKapuaConfigurableServiceCacheId")
                         ),
                         rootUserTester,
-                        accountChildrenFinder,
+                        accountRelativeFinder,
                         new UsedEntitiesCounterImpl(
                                 factory,
                                 jobRepository
diff --git a/service/job/test/src/test/java/org/eclipse/kapua/service/job/test/JobLocatorConfiguration.java b/service/job/test/src/test/java/org/eclipse/kapua/service/job/test/JobLocatorConfiguration.java
index 95e5d97240c..651c2c92520 100644
--- a/service/job/test/src/test/java/org/eclipse/kapua/service/job/test/JobLocatorConfiguration.java
+++ b/service/job/test/src/test/java/org/eclipse/kapua/service/job/test/JobLocatorConfiguration.java
@@ -19,7 +19,7 @@
 import com.google.inject.Singleton;
 import com.google.inject.name.Names;
 import io.cucumber.java.Before;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
 import org.eclipse.kapua.commons.configuration.ServiceConfigurationManager;
 import org.eclipse.kapua.commons.configuration.metatype.KapuaMetatypeFactoryImpl;
@@ -121,7 +121,7 @@ protected void configure() {
                 bind(QueryFactory.class).toInstance(new QueryFactoryImpl());
 
                 // Account
-                bind(AccountChildrenFinder.class).toInstance(Mockito.mock(AccountChildrenFinder.class));
+                bind(AccountRelativeFinder.class).toInstance(Mockito.mock(AccountRelativeFinder.class));
                 bind(AccountService.class).toInstance(Mockito.mock(AccountService.class));
                 bind(AccountFactory.class).toInstance(Mockito.spy(new AccountFactoryImpl()));
                 bind(KapuaJpaRepositoryConfiguration.class).toInstance(new KapuaJpaRepositoryConfiguration());
diff --git a/service/scheduler/test/src/test/java/org/eclipse/kapua/service/scheduler/test/SchedulerLocatorConfiguration.java b/service/scheduler/test/src/test/java/org/eclipse/kapua/service/scheduler/test/SchedulerLocatorConfiguration.java
index 45a7cc44273..7d753810f64 100644
--- a/service/scheduler/test/src/test/java/org/eclipse/kapua/service/scheduler/test/SchedulerLocatorConfiguration.java
+++ b/service/scheduler/test/src/test/java/org/eclipse/kapua/service/scheduler/test/SchedulerLocatorConfiguration.java
@@ -20,7 +20,7 @@
 import com.google.inject.name.Names;
 import io.cucumber.java.Before;
 import org.eclipse.kapua.KapuaException;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
 import org.eclipse.kapua.commons.configuration.ServiceConfigurationManager;
 import org.eclipse.kapua.commons.configuration.metatype.KapuaMetatypeFactoryImpl;
@@ -110,7 +110,7 @@ protected void configure() {
                 bind(KapuaMetatypeFactory.class).toInstance(new KapuaMetatypeFactoryImpl());
 
                 // binding Account related services
-                bind(AccountChildrenFinder.class).toInstance(Mockito.mock(AccountChildrenFinder.class));
+                bind(AccountRelativeFinder.class).toInstance(Mockito.mock(AccountRelativeFinder.class));
                 bind(AccountService.class).toInstance(Mockito.mock(AccountService.class));
                 bind(AccountFactory.class).toInstance(Mockito.spy(new AccountFactoryImpl()));
                 bind(RootUserTester.class).toInstance(Mockito.mock(RootUserTester.class));
diff --git a/service/security/certificate/api/pom.xml b/service/security/certificate/api/pom.xml
index 4e7b1f349c1..86acf1a5507 100644
--- a/service/security/certificate/api/pom.xml
+++ b/service/security/certificate/api/pom.xml
@@ -36,6 +36,10 @@
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.eclipse.kapua</groupId>
+            <artifactId>kapua-service-commons-utils-api</artifactId>
+        </dependency>
     </dependencies>
 
 
diff --git a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateQuery.java b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateQuery.java
index 75a32582951..bce32852b6c 100644
--- a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateQuery.java
+++ b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateQuery.java
@@ -12,8 +12,8 @@
  *******************************************************************************/
 package org.eclipse.kapua.service.certificate;
 
+import org.eclipse.kapua.model.query.KapuaForwardableEntityQuery;
 import org.eclipse.kapua.model.query.KapuaQuery;
-import org.eclipse.kapua.service.certificate.info.CertificateInfo;
 import org.eclipse.kapua.service.certificate.xml.CertificateXmlRegistry;
 
 import javax.xml.bind.annotation.XmlAccessType;
@@ -31,8 +31,9 @@
 @XmlRootElement(name = "query")
 @XmlAccessorType(XmlAccessType.PROPERTY)
 @XmlType(factoryClass = CertificateXmlRegistry.class, factoryMethod = "newQuery")
-public interface CertificateQuery extends KapuaQuery {
+public interface CertificateQuery extends KapuaForwardableEntityQuery {
 
+    @Override
     /**
      * Gets whether or not to get also inherited {@link CertificateInfo}s
      *
@@ -42,6 +43,7 @@ public interface CertificateQuery extends KapuaQuery {
     @XmlElement(name = "includeInherited")
     Boolean getIncludeInherited();
 
+    @Override
     /**
      * Sets whether or not to get also inherited {@link CertificateInfo}s
      *
diff --git a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateRepository.java b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateRepository.java
index a207fe2d3ca..84e6fbdc7e5 100644
--- a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateRepository.java
+++ b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateRepository.java
@@ -12,8 +12,8 @@
  *******************************************************************************/
 package org.eclipse.kapua.service.certificate;
 
-import org.eclipse.kapua.storage.KapuaNamedEntityRepository;
+import org.eclipse.kapua.service.utils.KapuaForwardableEntityRepository;
 
 public interface CertificateRepository
-        extends KapuaNamedEntityRepository<Certificate, CertificateListResult> {
+        extends KapuaForwardableEntityRepository<Certificate, CertificateListResult> {
 }
diff --git a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateService.java b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateService.java
index e7fb31376c0..5a3f60338b0 100644
--- a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateService.java
+++ b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/CertificateService.java
@@ -35,5 +35,13 @@ public interface CertificateService extends KapuaEntityService<Certificate, Cert
 
     Certificate generate(CertificateGenerator generator) throws KapuaException;
 
+    /**
+     * @param scopeId
+     * @param usage
+     * @return
+     * @throws KapuaException
+     * @deprecated Since 2.0.0 Use the query method with CertificateQuery.setIncludeInherited(true) instead
+     */
+    @Deprecated
     List<Certificate> findAncestorsCertificates(KapuaId scopeId, CertificateUsage usage) throws KapuaException;
 }
diff --git a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfo.java b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfo.java
index 5209aa5505a..fa38f37a669 100644
--- a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfo.java
+++ b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfo.java
@@ -12,15 +12,8 @@
  *******************************************************************************/
 package org.eclipse.kapua.service.certificate.info;
 
-import org.eclipse.kapua.model.KapuaNamedEntity;
-import org.eclipse.kapua.model.id.KapuaId;
-import org.eclipse.kapua.model.id.KapuaIdAdapter;
-import org.eclipse.kapua.model.xml.BinaryXmlAdapter;
-import org.eclipse.kapua.model.xml.DateXmlAdapter;
-import org.eclipse.kapua.service.certificate.CertificateStatus;
-import org.eclipse.kapua.service.certificate.CertificateUsage;
-import org.eclipse.kapua.service.certificate.KeyUsageSetting;
-import org.eclipse.kapua.service.certificate.info.xml.CertificateInfoXmlRegistry;
+import java.util.Date;
+import java.util.Set;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -29,8 +22,16 @@
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import java.util.Date;
-import java.util.Set;
+
+import org.eclipse.kapua.model.KapuaForwardableEntity;
+import org.eclipse.kapua.model.id.KapuaId;
+import org.eclipse.kapua.model.id.KapuaIdAdapter;
+import org.eclipse.kapua.model.xml.BinaryXmlAdapter;
+import org.eclipse.kapua.model.xml.DateXmlAdapter;
+import org.eclipse.kapua.service.certificate.CertificateStatus;
+import org.eclipse.kapua.service.certificate.CertificateUsage;
+import org.eclipse.kapua.service.certificate.KeyUsageSetting;
+import org.eclipse.kapua.service.certificate.info.xml.CertificateInfoXmlRegistry;
 
 /**
  * @since 1.1.0
@@ -38,7 +39,7 @@
 @XmlRootElement(name = "certificateInfo")
 @XmlAccessorType(XmlAccessType.PROPERTY)
 @XmlType(factoryClass = CertificateInfoXmlRegistry.class, factoryMethod = "newCertificateInfo")
-public interface CertificateInfo extends KapuaNamedEntity {
+public interface CertificateInfo extends KapuaForwardableEntity {
 
     String TYPE = "CertificateInfo";
 
@@ -139,9 +140,4 @@ default String getType() {
     void addCertificateUsage(CertificateUsage certificateUsage);
 
     void removeCertificateUsage(CertificateUsage certificateUsage);
-
-    @XmlElement(name = "forwardable")
-    Boolean getForwardable();
-
-    void setForwardable(Boolean forwardable);
 }
diff --git a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoQuery.java b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoQuery.java
index c9f7cad5225..e8fc64aca09 100644
--- a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoQuery.java
+++ b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoQuery.java
@@ -12,6 +12,7 @@
  *******************************************************************************/
 package org.eclipse.kapua.service.certificate.info;
 
+import org.eclipse.kapua.model.query.KapuaForwardableEntityQuery;
 import org.eclipse.kapua.model.query.KapuaQuery;
 import org.eclipse.kapua.service.certificate.info.xml.CertificateInfoXmlRegistry;
 
@@ -30,8 +31,9 @@
 @XmlRootElement(name = "query")
 @XmlAccessorType(XmlAccessType.PROPERTY)
 @XmlType(factoryClass = CertificateInfoXmlRegistry.class, factoryMethod = "newQuery")
-public interface CertificateInfoQuery extends KapuaQuery {
+public interface CertificateInfoQuery extends KapuaForwardableEntityQuery {
 
+    @Override
     /**
      * Gets whether or not to get also inherited {@link CertificateInfo}s
      *
@@ -41,6 +43,7 @@ public interface CertificateInfoQuery extends KapuaQuery {
     @XmlElement(name = "includeInherited")
     Boolean getIncludeInherited();
 
+    @Override
     /**
      * Sets whether or not to get also inherited {@link CertificateInfo}s
      *
diff --git a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoRepository.java b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoRepository.java
index c2607e5a1e8..7d6f6f445f7 100644
--- a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoRepository.java
+++ b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoRepository.java
@@ -12,8 +12,8 @@
  *******************************************************************************/
 package org.eclipse.kapua.service.certificate.info;
 
-import org.eclipse.kapua.storage.KapuaNamedEntityRepository;
+import org.eclipse.kapua.service.utils.KapuaForwardableEntityRepository;
 
 public interface CertificateInfoRepository
-        extends KapuaNamedEntityRepository<CertificateInfo, CertificateInfoListResult> {
+        extends KapuaForwardableEntityRepository<CertificateInfo, CertificateInfoListResult> {
 }
diff --git a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoService.java b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoService.java
index b7067df6eb6..b29aa22bb84 100644
--- a/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoService.java
+++ b/service/security/certificate/api/src/main/java/org/eclipse/kapua/service/certificate/info/CertificateInfoService.java
@@ -36,6 +36,8 @@ public interface CertificateInfoService extends KapuaEntityService<CertificateIn
      * @return
      * @throws KapuaException
      * @since 1.1.0
+     * @deprecated Since 2.0.0 Use the query method with CertificateQuery.setIncludeInherited(true) instead
      */
+    @Deprecated
     List<CertificateInfo> findAncestorsCertificates(KapuaId scopeId, CertificateUsage usage) throws KapuaException;
 }
diff --git a/service/security/certificate/internal/pom.xml b/service/security/certificate/internal/pom.xml
index 1416bbaf5cd..15bf91914ea 100644
--- a/service/security/certificate/internal/pom.xml
+++ b/service/security/certificate/internal/pom.xml
@@ -33,5 +33,13 @@
             <groupId>org.eclipse.kapua</groupId>
             <artifactId>kapua-commons</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.eclipse.kapua</groupId>
+            <artifactId>kapua-service-commons-utils-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.kapua</groupId>
+            <artifactId>kapua-service-commons-utils-internal</artifactId>
+        </dependency>
     </dependencies>
 </project>
diff --git a/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/info/internal/CertificateInfoModule.java b/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/info/internal/CertificateInfoModule.java
index 6a8b3b5f8bd..7cc9a29e225 100644
--- a/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/info/internal/CertificateInfoModule.java
+++ b/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/info/internal/CertificateInfoModule.java
@@ -12,14 +12,28 @@
  *******************************************************************************/
 package org.eclipse.kapua.service.certificate.info.internal;
 
+import com.google.inject.Provides;
 import org.eclipse.kapua.commons.core.AbstractKapuaModule;
+import org.eclipse.kapua.service.certificate.CertificateService;
 import org.eclipse.kapua.service.certificate.info.CertificateInfoFactory;
 import org.eclipse.kapua.service.certificate.info.CertificateInfoService;
 
+import javax.inject.Singleton;
+
 public class CertificateInfoModule extends AbstractKapuaModule {
     @Override
     protected void configureModule() {
         bind(CertificateInfoFactory.class).to(CertificateInfoFactoryImpl.class);
-        bind(CertificateInfoService.class).to(CertificateInfoServiceImpl.class);
+    }
+
+
+    @Provides
+    @Singleton
+    CertificateInfoService certificateInfoService(
+            CertificateService certificateService) {
+
+        return new CertificateInfoServiceImpl(
+                certificateService
+        );
     }
 }
diff --git a/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/info/internal/CertificateInfoServiceImpl.java b/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/info/internal/CertificateInfoServiceImpl.java
index 0980122ac7c..1d99a7c42d1 100644
--- a/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/info/internal/CertificateInfoServiceImpl.java
+++ b/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/info/internal/CertificateInfoServiceImpl.java
@@ -55,7 +55,6 @@ public CertificateInfoListResult query(KapuaQuery query) throws KapuaException {
         ArgumentValidator.notNull(query, "query");
 
         CertificateQuery certificateQuery = new CertificateQueryImpl(query);
-        certificateQuery.setIncludeInherited(((CertificateInfoQuery) query).getIncludeInherited());
 
         CertificateInfoListResult publicCertificates = new CertificateInfoListResultImpl();
         publicCertificates.addItem(certificateService.query(certificateQuery).getFirstItem());
diff --git a/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/internal/CertificateQueryImpl.java b/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/internal/CertificateQueryImpl.java
index bfa22b312e7..5a7fc108e9a 100644
--- a/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/internal/CertificateQueryImpl.java
+++ b/service/security/certificate/internal/src/main/java/org/eclipse/kapua/service/certificate/internal/CertificateQueryImpl.java
@@ -12,7 +12,7 @@
  *******************************************************************************/
 package org.eclipse.kapua.service.certificate.internal;
 
-import org.eclipse.kapua.commons.model.query.AbstractKapuaNamedQuery;
+import org.eclipse.kapua.commons.model.query.AbstractKapuaForwardableEntityQuery;
 import org.eclipse.kapua.model.id.KapuaId;
 import org.eclipse.kapua.model.query.KapuaQuery;
 import org.eclipse.kapua.service.certificate.CertificateQuery;
@@ -22,9 +22,7 @@
  *
  * @since 1.0.0
  */
-public class CertificateQueryImpl extends AbstractKapuaNamedQuery implements CertificateQuery {
-
-    private Boolean includeInherited = Boolean.FALSE;
+public class CertificateQueryImpl extends AbstractKapuaForwardableEntityQuery implements CertificateQuery {
 
     /**
      * Constructor.
@@ -55,14 +53,4 @@ public CertificateQueryImpl(KapuaId scopeId) {
     public CertificateQueryImpl(KapuaQuery query) {
         super(query);
     }
-
-    @Override
-    public Boolean getIncludeInherited() {
-        return includeInherited;
-    }
-
-    @Override
-    public void setIncludeInherited(Boolean includeInherited) {
-        this.includeInherited = includeInherited;
-    }
 }
diff --git a/service/security/shiro/src/main/java/org/eclipse/kapua/service/authorization/shiro/AuthorizationModule.java b/service/security/shiro/src/main/java/org/eclipse/kapua/service/authorization/shiro/AuthorizationModule.java
index 86b1ac1196f..ea15523375f 100644
--- a/service/security/shiro/src/main/java/org/eclipse/kapua/service/authorization/shiro/AuthorizationModule.java
+++ b/service/security/shiro/src/main/java/org/eclipse/kapua/service/authorization/shiro/AuthorizationModule.java
@@ -14,7 +14,7 @@
 
 import com.google.inject.Provides;
 import com.google.inject.multibindings.ProvidesIntoSet;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.CachingServiceConfigRepository;
 import org.eclipse.kapua.commons.configuration.ResourceLimitedServiceConfigurationManagerImpl;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
@@ -264,7 +264,7 @@ RoleService roleService(PermissionFactory permissionFactory,
     public ServiceConfigurationManager roleServiceConfigurationManager(
             RoleFactory roleFactory,
             RootUserTester rootUserTester,
-            AccountChildrenFinder accountChildrenFinder,
+            AccountRelativeFinder accountRelativeFinder,
             RoleRepository roleRepository,
             KapuaJpaRepositoryConfiguration jpaRepoConfig,
             EntityCacheFactory entityCacheFactory
@@ -277,7 +277,7 @@ public ServiceConfigurationManager roleServiceConfigurationManager(
                                 entityCacheFactory.createCache("AbstractKapuaConfigurableServiceCacheId")
                         ),
                         rootUserTester,
-                        accountChildrenFinder,
+                        accountRelativeFinder,
                         new UsedEntitiesCounterImpl(
                                 roleFactory,
                                 roleRepository
@@ -317,7 +317,7 @@ GroupService groupService(PermissionFactory permissionFactory,
     public ServiceConfigurationManager groupServiceConfigurationManager(
             GroupFactory factory,
             RootUserTester rootUserTester,
-            AccountChildrenFinder accountChildrenFinder,
+            AccountRelativeFinder accountRelativeFinder,
             GroupRepository groupRepository,
             KapuaJpaRepositoryConfiguration jpaRepoConfig,
             EntityCacheFactory entityCacheFactory
@@ -330,7 +330,7 @@ public ServiceConfigurationManager groupServiceConfigurationManager(
                                 entityCacheFactory.createCache("AbstractKapuaConfigurableServiceCacheId")
                         ),
                         rootUserTester,
-                        accountChildrenFinder,
+                        accountRelativeFinder,
                         new UsedEntitiesCounterImpl(
                                 factory,
                                 groupRepository
diff --git a/service/security/test/src/test/java/org/eclipse/kapua/service/security/test/SecurityLocatorConfiguration.java b/service/security/test/src/test/java/org/eclipse/kapua/service/security/test/SecurityLocatorConfiguration.java
index c5ec5887526..e040a2b61ff 100644
--- a/service/security/test/src/test/java/org/eclipse/kapua/service/security/test/SecurityLocatorConfiguration.java
+++ b/service/security/test/src/test/java/org/eclipse/kapua/service/security/test/SecurityLocatorConfiguration.java
@@ -21,7 +21,7 @@
 import io.cucumber.java.Before;
 import org.eclipse.kapua.KapuaException;
 import org.eclipse.kapua.KapuaRuntimeException;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
 import org.eclipse.kapua.commons.configuration.ServiceConfigImplJpaRepository;
 import org.eclipse.kapua.commons.configuration.ServiceConfigurationManager;
@@ -179,8 +179,8 @@ protected void configure() {
                 bind(UserFactory.class).toInstance(userFactory);
                 final RootUserTester rootUserTester = Mockito.mock(RootUserTester.class);
                 bind(RootUserTester.class).toInstance(rootUserTester);
-                final AccountChildrenFinder accountChildrenFinder = Mockito.mock(AccountChildrenFinder.class);
-                bind(AccountChildrenFinder.class).toInstance(accountChildrenFinder);
+                final AccountRelativeFinder accountRelativeFinder = Mockito.mock(AccountRelativeFinder.class);
+                bind(AccountRelativeFinder.class).toInstance(accountRelativeFinder);
                 bind(UserService.class).toInstance(new UserServiceImpl(
                         Mockito.mock(ServiceConfigurationManager.class),
                         mockedAuthorization,
diff --git a/service/tag/internal/src/main/java/org/eclipse/kapua/service/tag/internal/TagModule.java b/service/tag/internal/src/main/java/org/eclipse/kapua/service/tag/internal/TagModule.java
index 4305f4da826..694d1ed1f0f 100644
--- a/service/tag/internal/src/main/java/org/eclipse/kapua/service/tag/internal/TagModule.java
+++ b/service/tag/internal/src/main/java/org/eclipse/kapua/service/tag/internal/TagModule.java
@@ -14,7 +14,7 @@
 
 import com.google.inject.Provides;
 import com.google.inject.multibindings.ProvidesIntoSet;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.CachingServiceConfigRepository;
 import org.eclipse.kapua.commons.configuration.ResourceLimitedServiceConfigurationManagerImpl;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
@@ -71,7 +71,7 @@ public Domain tagDomain() {
     ServiceConfigurationManager tagServiceConfigurationManager(
             TagFactory factory,
             RootUserTester rootUserTester,
-            AccountChildrenFinder accountChildrenFinder,
+            AccountRelativeFinder accountRelativeFinder,
             TagRepository tagRepository,
             EntityCacheFactory entityCacheFactory
     ) {
@@ -83,7 +83,7 @@ ServiceConfigurationManager tagServiceConfigurationManager(
                                 entityCacheFactory.createCache("AbstractKapuaConfigurableServiceCacheId")
                         ),
                         rootUserTester,
-                        accountChildrenFinder,
+                        accountRelativeFinder,
                         new UsedEntitiesCounterImpl(
                                 factory,
                                 tagRepository
diff --git a/service/tag/test/src/test/java/org/eclipse/kapua/service/tag/test/TagLocatorConfiguration.java b/service/tag/test/src/test/java/org/eclipse/kapua/service/tag/test/TagLocatorConfiguration.java
index b3e747c5b4b..f867da80f3f 100644
--- a/service/tag/test/src/test/java/org/eclipse/kapua/service/tag/test/TagLocatorConfiguration.java
+++ b/service/tag/test/src/test/java/org/eclipse/kapua/service/tag/test/TagLocatorConfiguration.java
@@ -20,7 +20,7 @@
 import com.google.inject.name.Names;
 import io.cucumber.java.Before;
 import org.eclipse.kapua.KapuaException;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
 import org.eclipse.kapua.commons.configuration.ServiceConfigurationManager;
 import org.eclipse.kapua.commons.configuration.metatype.KapuaMetatypeFactoryImpl;
@@ -137,7 +137,7 @@ protected void configure() {
                 bind(KapuaMetatypeFactory.class).toInstance(new KapuaMetatypeFactoryImpl());
 
                 // binding Account related services
-                bind(AccountChildrenFinder.class).toInstance(Mockito.mock(AccountChildrenFinder.class));
+                bind(AccountRelativeFinder.class).toInstance(Mockito.mock(AccountRelativeFinder.class));
                 bind(AccountService.class).toInstance(Mockito.mock(AccountService.class));
                 bind(AccountFactory.class).toInstance(Mockito.spy(new AccountFactoryImpl()));
                 bind(RootUserTester.class).toInstance(Mockito.mock(RootUserTester.class));
diff --git a/service/user/internal/src/main/java/org/eclipse/kapua/service/user/internal/UserModule.java b/service/user/internal/src/main/java/org/eclipse/kapua/service/user/internal/UserModule.java
index f32314316ec..b5314fe2d5d 100644
--- a/service/user/internal/src/main/java/org/eclipse/kapua/service/user/internal/UserModule.java
+++ b/service/user/internal/src/main/java/org/eclipse/kapua/service/user/internal/UserModule.java
@@ -14,7 +14,7 @@
 
 import com.google.inject.Provides;
 import com.google.inject.multibindings.ProvidesIntoSet;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.CachingServiceConfigRepository;
 import org.eclipse.kapua.commons.configuration.ResourceLimitedServiceConfigurationManagerImpl;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
@@ -124,7 +124,7 @@ public ServiceModule userServiceModule(UserService userService,
     ServiceConfigurationManager userServiceConfigurationManager(
             UserFactory userFactory,
             RootUserTester rootUserTester,
-            AccountChildrenFinder accountChildrenFinder,
+            AccountRelativeFinder accountRelativeFinder,
             UserRepository userRepository,
             KapuaJpaRepositoryConfiguration jpaRepoConfig,
             EntityCacheFactory entityCacheFactory
@@ -136,7 +136,7 @@ ServiceConfigurationManager userServiceConfigurationManager(
                                 entityCacheFactory.createCache("AbstractKapuaConfigurableServiceCacheId")
                         ),
                         rootUserTester,
-                        accountChildrenFinder,
+                        accountRelativeFinder,
                         new UsedEntitiesCounterImpl(
                                 userFactory,
                                 userRepository
diff --git a/service/user/test/src/test/java/org/eclipse/kapua/service/user/test/UserLocatorConfiguration.java b/service/user/test/src/test/java/org/eclipse/kapua/service/user/test/UserLocatorConfiguration.java
index a7aaecbb482..110fa9a5995 100644
--- a/service/user/test/src/test/java/org/eclipse/kapua/service/user/test/UserLocatorConfiguration.java
+++ b/service/user/test/src/test/java/org/eclipse/kapua/service/user/test/UserLocatorConfiguration.java
@@ -20,7 +20,7 @@
 import com.google.inject.name.Names;
 import io.cucumber.java.Before;
 import org.eclipse.kapua.KapuaException;
-import org.eclipse.kapua.commons.configuration.AccountChildrenFinder;
+import org.eclipse.kapua.commons.configuration.AccountRelativeFinder;
 import org.eclipse.kapua.commons.configuration.ResourceLimitedServiceConfigurationManagerImpl;
 import org.eclipse.kapua.commons.configuration.RootUserTester;
 import org.eclipse.kapua.commons.configuration.ServiceConfigImplJpaRepository;
@@ -109,8 +109,8 @@ protected void configure() {
                 bind(KapuaMetatypeFactory.class).toInstance(new KapuaMetatypeFactoryImpl());
 
                 // binding Account related services
-                final AccountChildrenFinder accountChildrenFinder = Mockito.mock(AccountChildrenFinder.class);
-                bind(AccountChildrenFinder.class).toInstance(accountChildrenFinder);
+                final AccountRelativeFinder accountRelativeFinder = Mockito.mock(AccountRelativeFinder.class);
+                bind(AccountRelativeFinder.class).toInstance(accountRelativeFinder);
 
                 // Inject actual User service related services
                 final UserFactoryImpl userFactory = new UserFactoryImpl();
@@ -122,7 +122,7 @@ protected void configure() {
                 final ResourceLimitedServiceConfigurationManagerImpl userConfigurationManager = new ResourceLimitedServiceConfigurationManagerImpl(UserService.class.getName(),
                         new ServiceConfigImplJpaRepository(jpaRepoConfig),
                         Mockito.mock(RootUserTester.class),
-                        accountChildrenFinder,
+                        accountRelativeFinder,
                         new UsedEntitiesCounterImpl(
                                 userFactory,
                                 userRepository)