[java-idp-plugin-oidc-op-oidfed] branch dev/CACHE-REFACTOR updated: Restructured metadata cache packages

Codeberg noreply at shibboleth.net
Fri Jan 30 06:32:29 UTC 2026


This is an automated email from the git hooks/post-receive script.

codeberg pushed a commit to branch dev/CACHE-REFACTOR
in repository java-idp-plugin-oidc-op-oidfed.

View the commit online:
https://codeberg.org/Shibboleth/java-idp-plugin-oidc-op-oidfed/commit/45d2abdd933335bbcf2e21876e409965538ff918

The following commit(s) were added to refs/heads/dev/CACHE-REFACTOR by this push:
     new 45d2abd  Restructured metadata cache packages
45d2abd is described below

commit 45d2abdd933335bbcf2e21876e409965538ff918
Author: Henri Mikkonen <henri.mikkonen at iki.fi>
AuthorDate: Fri Jan 30 08:32:02 2026 +0200

    Restructured metadata cache packages
    
    - Removed package 'net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote'
      - Move classes parts into 'net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache'
      - configuration/resolver/subordinate/trustchain/trustmark -specific classes into subpackges
---
 ...FederationEndpointResponseFetchingStrategy.java |   2 +-
 .../BaseExpirableMetadataContainer.java            |   2 +-
 .../BaseExpirableStatementContainer.java           |   2 +-
 ...tEntityStatementContentValidationCondition.java |   4 +-
 ...faultEntityStatementMetadataFilterStrategy.java |   2 +-
 ...ntityStatementSignatureValidationCondition.java |   3 +-
 ...atementValidationCriteriaSetLookupFunction.java |  10 +-
 ...ultResponseContainerExpirationTimeStrategy.java |   2 +-
 .../IssuerEntityStatementCriterion.java            |   2 +-
 .../SubjectEntityStatementCriterion.java           |   2 +-
 .../{remote => }/SubjectStatementCriterion.java    |   2 +-
 ...tityConfigurationCriteriaSetLookupFunction.java |   6 +-
 ...DefaultEntityConfigurationFetchingStrategy.java |  25 +++--
 .../EntityConfigurationContainer.java}             |   7 +-
 .../ProvidedEntityConfigurationContainer.java      |   5 +-
 ...videdEntityConfigurationContainerCriterion.java |   2 +-
 ...StatementSignatureValidationFilterStrategy.java |   2 +-
 ...actTrustEngineSignatureValidationComponent.java | 103 ---------------------
 ...ultResolveEntityTrustChainFetchingStrategy.java |  32 +++----
 .../ResolveEntityCacheContainerIdentifier.java}    |  10 +-
 .../ResolveEntityCacheIdentifierCriterion.java}    |  12 +--
 .../ResolveEntityResponseContainer.java}           |  12 +--
 ...inateStatementCriteriaToIdentifierStrategy.java |   3 +-
 ...efaultSubordinateStatementFetchingStrategy.java |  34 ++++---
 .../SubordinateStatementCacheIdentifier.java       |   4 +-
 .../SubordinateStatementContainer.java}            |   7 +-
 .../DefaultTrustChainFetchingStrategy.java         |  29 +++---
 ...ustChainSignatureValidationFilterStrategy.java} |  27 +++---
 ...stChainSubjectIdentifierExtractionStrategy.java |   2 +-
 .../ProvidedTrustChainContainer.java               |   5 +-
 .../ProvidedTrustChainContainerCriterion.java      |   2 +-
 .../TrustChainsContainer.java}                     |  11 ++-
 .../DefaultTrustMarkFetchingStrategy.java          |  24 ++---
 .../DefaultTrustMarkStatusFetchingStrategy.java    |  24 ++---
 ...ustMarkValidationCriteriaSetLookupFunction.java |  16 ++--
 .../trustmark/TrustMarkCacheIdentifier.java        |   4 +-
 .../TrustMarkContainer.java}                       |   8 +-
 .../trustmark/TrustMarkIdentifierCriterion.java    |   2 +-
 .../trustmark/TrustMarkStatusCacheIdentifier.java  |   2 +-
 .../TrustMarkStatusContainer.java}                 |   8 +-
 .../TrustMarkStatusIdentifierCriterion.java        |   2 +-
 .../metadata/util/EntityStatementHelper.java       |   6 +-
 .../oidfed/profile/impl/CallResolveEntityApi.java  |  28 +++---
 ...TrustMarkFromMetadataCacheFetchingFunction.java |  18 ++--
 .../op/oidfed/profile/impl/ResolveTrustChains.java |  10 +-
 .../op/oidfed/profile/impl/ResolveTrustMarks.java  |  10 +-
 .../profile/impl/ValidateSelectedTrustChain.java   |   8 +-
 ...videdEntityConfigurationValidationStrategy.java |  12 +--
 ...efaultProvidedTrustChainValidationStrategy.java |  12 +--
 ...faultEntityConfigurationCredentialResolver.java |   2 +-
 .../DefaultLocalTrustAnchorCredentialResolver.java |   2 +-
 ...aultSubordinateStatementCredentialResolver.java |   6 +-
 .../META-INF/net.shibboleth.idp/postconfig.xml     |  64 ++++++-------
 .../idp/flows/oidfed/register/register-beans.xml   |  20 ++--
 .../DefaultTrustChainFetchingStrategyTest.java     |  95 +++++++++----------
 .../flow/oidfed/EntityConfigurationFlowTest.java   |   2 +-
 .../EntityConfigurationMetadataCacheTest.java      |  10 +-
 .../SubordinateStatementMetadataCacheTest.java     |  10 +-
 .../oidfed/cache/TrustChainMetadataCacheTest.java  |  14 +--
 .../CustomEntityConfigurationFilterStrategy.java   |   8 +-
 .../CustomSubordinateStatementFilterStrategy.java  |   8 +-
 .../support/CustomTrustChainFilterStrategy.java    |   6 +-
 62 files changed, 353 insertions(+), 461 deletions(-)

diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/AbstractFederationEndpointResponseFetchingStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/AbstractFederationEndpointResponseFetchingStrategy.java
similarity index 99%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/AbstractFederationEndpointResponseFetchingStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/AbstractFederationEndpointResponseFetchingStrategy.java
index 7897a17..2c11ff5 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/AbstractFederationEndpointResponseFetchingStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/AbstractFederationEndpointResponseFetchingStrategy.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache;
 
 import java.io.IOException;
 import java.net.URISyntaxException;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/BaseExpirableMetadataContainer.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/BaseExpirableMetadataContainer.java
similarity index 96%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/BaseExpirableMetadataContainer.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/BaseExpirableMetadataContainer.java
index 4e50da4..cf156a2 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/BaseExpirableMetadataContainer.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/BaseExpirableMetadataContainer.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache;
 
 import java.io.Serializable;
 import java.time.Instant;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/BaseExpirableStatementContainer.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/BaseExpirableStatementContainer.java
similarity index 97%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/BaseExpirableStatementContainer.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/BaseExpirableStatementContainer.java
index 12283dc..d5bb2dd 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/BaseExpirableStatementContainer.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/BaseExpirableStatementContainer.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache;
 
 import java.io.Serializable;
 import java.time.Instant;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementContentValidationCondition.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementContentValidationCondition.java
similarity index 96%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementContentValidationCondition.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementContentValidationCondition.java
index 4513abe..1fa5054 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementContentValidationCondition.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementContentValidationCondition.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache;
 
 import java.text.ParseException;
 import java.util.Optional;
@@ -40,7 +40,7 @@ import net.shibboleth.shared.primitive.NonnullSupplier;
 
 /**
  * Default content validating filter for entity statement. Verifies that the 
- * {@link RemoteEntityConfigurationContainer#getEntityId()} matches with the subject of the entity statement and
+ * {@link BaseExpirableStatementContainer#getEntityId()} matches with the subject of the entity statement and
  * validates the claims via configurable claims validator. The {@link ProfileRequestContext} that is fed to the claims
  * validator is fetched from the {@link HttpServletRequest} attributes. An empty context is fed if the attribute was
  * null.
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementMetadataFilterStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementMetadataFilterStrategy.java
similarity index 98%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementMetadataFilterStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementMetadataFilterStrategy.java
index 5b8a512..d975c95 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementMetadataFilterStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementMetadataFilterStrategy.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache;
 
 import java.util.List;
 import java.util.function.BiFunction;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementSignatureValidationCondition.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementSignatureValidationCondition.java
similarity index 95%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementSignatureValidationCondition.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementSignatureValidationCondition.java
index 975177b..70b77f5 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementSignatureValidationCondition.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementSignatureValidationCondition.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache;
 
 import java.util.function.BiPredicate;
 import java.util.function.Function;
@@ -23,7 +23,6 @@ import javax.annotation.Nullable;
 import org.opensaml.security.trust.TrustEngine;
 import org.slf4j.Logger;
 
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.AbstractTrustEngineSignatureValidationComponent;
 import net.shibboleth.oidc.metadata.filter.MetadataFilterContext;
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementValidationCriteriaSetLookupFunction.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementValidationCriteriaSetLookupFunction.java
similarity index 91%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementValidationCriteriaSetLookupFunction.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementValidationCriteriaSetLookupFunction.java
index e3f09a6..3dd595b 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultEntityStatementValidationCriteriaSetLookupFunction.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultEntityStatementValidationCriteriaSetLookupFunction.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache;
 
 import java.util.List;
 import java.util.function.Function;
@@ -24,7 +24,7 @@ import org.slf4j.Logger;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.BaseJWTWrapper;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityConfiguration;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.EntityConfigurationContainer;
 import net.shibboleth.oidc.metadata.cache.MetadataCache;
 import net.shibboleth.oidc.metadata.cache.MetadataCacheException;
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
@@ -48,14 +48,14 @@ public class DefaultEntityStatementValidationCriteriaSetLookupFunction
     private Logger log = LoggerFactory.getLogger(DefaultEntityStatementValidationCriteriaSetLookupFunction.class);
 
     /** Metadata cache used for fetching issuer entity configuration. */
-    @NonnullAfterInit private MetadataCache<RemoteEntityConfigurationContainer> entityConfigurationCache;
+    @NonnullAfterInit private MetadataCache<EntityConfigurationContainer> entityConfigurationCache;
 
     /**
      * Set the metadata cache used for fetching issuer entity configuration.
      * 
      * @param cache entity configuration cache
      */
-    public void setEntityConfigurationCache(@Nonnull final MetadataCache<RemoteEntityConfigurationContainer> cache) {
+    public void setEntityConfigurationCache(@Nonnull final MetadataCache<EntityConfigurationContainer> cache) {
         checkSetterPreconditions();
         entityConfigurationCache = Constraint.isNotNull(cache, "Entity configuration cache cannot be null");
     }
@@ -100,7 +100,7 @@ public class DefaultEntityStatementValidationCriteriaSetLookupFunction
         final String issuer = statement.getIssuer();
         final CriteriaSet criteria = new CriteriaSet(new SubjectEntityIDCriterion(issuer));
         try {
-            final List<RemoteEntityConfigurationContainer> result = entityConfigurationCache.get(criteria);
+            final List<EntityConfigurationContainer> result = entityConfigurationCache.get(criteria);
             if (!result.isEmpty()) {
                 final EntityConfiguration issuerStatement = result.get(0).getStatement();
                 if (issuerStatement != null) {
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultResponseContainerExpirationTimeStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultResponseContainerExpirationTimeStrategy.java
similarity index 96%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultResponseContainerExpirationTimeStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultResponseContainerExpirationTimeStrategy.java
index 5657e59..8451dcf 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/DefaultResponseContainerExpirationTimeStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/DefaultResponseContainerExpirationTimeStrategy.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache;
 
 import java.time.Instant;
 import java.util.function.Function;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/IssuerEntityStatementCriterion.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/IssuerEntityStatementCriterion.java
similarity index 96%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/IssuerEntityStatementCriterion.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/IssuerEntityStatementCriterion.java
index 51ae1ec..05d3616 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/IssuerEntityStatementCriterion.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/IssuerEntityStatementCriterion.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache;
 
 import java.util.Objects;
 
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/SubjectEntityStatementCriterion.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/SubjectEntityStatementCriterion.java
similarity index 96%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/SubjectEntityStatementCriterion.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/SubjectEntityStatementCriterion.java
index b6b2d22..11accbd 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/SubjectEntityStatementCriterion.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/SubjectEntityStatementCriterion.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache;
 
 import java.util.Objects;
 
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/SubjectStatementCriterion.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/SubjectStatementCriterion.java
similarity index 96%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/SubjectStatementCriterion.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/SubjectStatementCriterion.java
index 4ed9abf..30e9b2c 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/SubjectStatementCriterion.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/SubjectStatementCriterion.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache;
 
 import java.util.Objects;
 
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/configuration/DefaultEntityConfigurationCriteriaSetLookupFunction.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/DefaultEntityConfigurationCriteriaSetLookupFunction.java
similarity index 88%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/configuration/DefaultEntityConfigurationCriteriaSetLookupFunction.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/DefaultEntityConfigurationCriteriaSetLookupFunction.java
index fef612f..0002890 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/configuration/DefaultEntityConfigurationCriteriaSetLookupFunction.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/DefaultEntityConfigurationCriteriaSetLookupFunction.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.configuration;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration;
 
 import java.util.Optional;
 import java.util.function.Function;
@@ -21,8 +21,8 @@ import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityConfiguration;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.BaseExpirableStatementContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubjectEntityStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.BaseExpirableStatementContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityStatementCriterion;
 import net.shibboleth.shared.resolver.CriteriaSet;
 
 /**
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/configuration/DefaultEntityConfigurationFetchingStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/DefaultEntityConfigurationFetchingStrategy.java
similarity index 81%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/configuration/DefaultEntityConfigurationFetchingStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/DefaultEntityConfigurationFetchingStrategy.java
index f59a82a..2c9ad0b 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/configuration/DefaultEntityConfigurationFetchingStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/DefaultEntityConfigurationFetchingStrategy.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.configuration;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration;
 
 import java.io.IOException;
 import java.net.URI;
@@ -35,9 +35,8 @@ import com.nimbusds.jose.JOSEObjectType;
 import com.nimbusds.jwt.SignedJWT;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityConfiguration;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.AbstractFederationEndpointResponseFetchingStrategy;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.AbstractFederationEndpointResponseFetchingStrategy;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.impl.EntityConfigurationImpl;
 import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
 import net.shibboleth.shared.logic.ConstraintViolationException;
@@ -46,11 +45,11 @@ import net.shibboleth.shared.resolver.CriteriaSet;
 
 /**
  * Default strategy for fetching entity configuration for the request specified in the criteria set. The parsed
- * response details are stored inside a {@link RemoteEntityConfigurationContainer}.
+ * response details are stored inside a {@link EntityConfigurationContainer}.
  */
 @ThreadSafeAfterInit
 public class DefaultEntityConfigurationFetchingStrategy
-    extends AbstractFederationEndpointResponseFetchingStrategy<String, RemoteEntityConfigurationContainer> {
+    extends AbstractFederationEndpointResponseFetchingStrategy<String, EntityConfigurationContainer> {
 
     /** The JWT type header. */
     @Nonnull
@@ -94,25 +93,25 @@ public class DefaultEntityConfigurationFetchingStrategy
     }
 
     /** {@inheritDoc} */
-    @Nullable protected RemoteEntityConfigurationContainer parseHttpResponse(@Nonnull final CriteriaSet criteria,
+    @Nullable protected EntityConfigurationContainer parseHttpResponse(@Nonnull final CriteriaSet criteria,
             @Nonnull final String entityId, @Nullable final ClassicHttpResponse response,
             @Nonnull final Instant validExpiration, @Nonnull final Instant invalidExpiration,
             @Nonnull final Instant nullExpiration) throws ProtocolException, IOException {
         if (response != null) {
             if (!HTTP_RESPONSE_CONTENT_TYPE.equals(response.getEntity().getContentType())) {
                 log.warn("Unexpected content type: {}", response.getEntity().getContentType());
-                return new RemoteEntityConfigurationContainer(entityId, null, validExpiration, invalidExpiration);
+                return new EntityConfigurationContainer(entityId, null, validExpiration, invalidExpiration);
             }
 
             try {
                 final SignedJWT jwt = SignedJWT.parse(EntityUtils.toString(response.getEntity()));
                 if (!JWT_TYPE_HEADER.equals(jwt.getHeader().getType())) {
                     log.warn("Unexpected JWT type header {}", jwt.getHeader().getType());
-                    return new RemoteEntityConfigurationContainer(entityId, null, validExpiration, invalidExpiration);
+                    return new EntityConfigurationContainer(entityId, null, validExpiration, invalidExpiration);
                 }
                 assert objectMapper != null;
                 final EntityConfiguration entityConfiguration = EntityConfigurationImpl.parse(jwt, objectMapper);
-                return new RemoteEntityConfigurationContainer(
+                return new EntityConfigurationContainer(
                         entityId, entityConfiguration, validExpiration, invalidExpiration);
             } catch (final JsonProcessingException e) {
                 log.warn("Could not deserialize entity statement payload from the response", e);
@@ -121,17 +120,17 @@ public class DefaultEntityConfigurationFetchingStrategy
             } catch (java.text.ParseException e) {
                 log.warn("Could not parse JWT from the response", e);
             }
-            return new RemoteEntityConfigurationContainer(entityId, null, validExpiration, invalidExpiration);
+            return new EntityConfigurationContainer(entityId, null, validExpiration, invalidExpiration);
         } else {
             log.debug("Unable to fetch entity configuration for: {} (null response)", entityId);
-            return new RemoteEntityConfigurationContainer(entityId, null, validExpiration, nullExpiration);
+            return new EntityConfigurationContainer(entityId, null, validExpiration, nullExpiration);
         }
     }
 
     /** {@inheritDoc} */
-    @Nullable protected RemoteEntityConfigurationContainer handleException(@Nonnull final CriteriaSet criteria,
+    @Nullable protected EntityConfigurationContainer handleException(@Nonnull final CriteriaSet criteria,
             @Nonnull final String entityId, @Nonnull final Throwable throwable, @Nonnull final Instant expiration) {
-        return new RemoteEntityConfigurationContainer(entityId, null, expiration, expiration);
+        return new EntityConfigurationContainer(entityId, null, expiration, expiration);
     }
 
 }
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/RemoteEntityConfigurationContainer.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/EntityConfigurationContainer.java
similarity index 87%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/RemoteEntityConfigurationContainer.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/EntityConfigurationContainer.java
index 6242db0..848bd46 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/RemoteEntityConfigurationContainer.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/EntityConfigurationContainer.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration;
 
 import java.io.Serializable;
 import java.time.Instant;
@@ -21,13 +21,14 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityConfiguration;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.BaseExpirableStatementContainer;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A container class for metadata caches carrying entity ID and statement details related to Entity Configuration.
  */
-public class RemoteEntityConfigurationContainer extends BaseExpirableStatementContainer<EntityConfiguration>
+public class EntityConfigurationContainer extends BaseExpirableStatementContainer<EntityConfiguration>
     implements Serializable {
 
     /** Serial version UID. */
@@ -44,7 +45,7 @@ public class RemoteEntityConfigurationContainer extends BaseExpirableStatementCo
      * @param validExpirationInstant expiration instant for valid statement, must not be null
      * @param invalidExpirationInstant expiration instant for invalid statement, must not be null
      */
-    public RemoteEntityConfigurationContainer(@Nonnull @NotEmpty final String entity,
+    public EntityConfigurationContainer(@Nonnull @NotEmpty final String entity,
             @Nullable final EntityConfiguration configuration, @Nonnull final Instant validExpirationInstant,
             @Nonnull final Instant invalidExpirationInstant) {
         super(validExpirationInstant, configuration, invalidExpirationInstant);
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedEntityConfigurationContainer.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/ProvidedEntityConfigurationContainer.java
similarity index 90%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedEntityConfigurationContainer.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/ProvidedEntityConfigurationContainer.java
index a7186d8..46be49f 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedEntityConfigurationContainer.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/ProvidedEntityConfigurationContainer.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration;
 
 import java.time.Instant;
 import java.util.Optional;
@@ -20,12 +20,11 @@ import java.util.Optional;
 import javax.annotation.Nonnull;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityConfiguration;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
 
 /**
  * Metadata cache container for provided entity configuration.
  */
-public class ProvidedEntityConfigurationContainer extends RemoteEntityConfigurationContainer {
+public class ProvidedEntityConfigurationContainer extends EntityConfigurationContainer {
 
     /** Serial version UID. */
     private static final long serialVersionUID = -6322735237721678470L;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedEntityConfigurationContainerCriterion.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/ProvidedEntityConfigurationContainerCriterion.java
similarity index 99%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedEntityConfigurationContainerCriterion.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/ProvidedEntityConfigurationContainerCriterion.java
index 81f5b37..4953de1 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedEntityConfigurationContainerCriterion.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/configuration/ProvidedEntityConfigurationContainerCriterion.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration;
 
 import java.util.Objects;
 
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/DefaultEntityStatementSignatureValidationFilterStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/DefaultEntityStatementSignatureValidationFilterStrategy.java
index 1f04dd7..4400056 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/DefaultEntityStatementSignatureValidationFilterStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/DefaultEntityStatementSignatureValidationFilterStrategy.java
@@ -24,7 +24,7 @@ import org.slf4j.Logger;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.AbstractTrustEngineSignatureValidationComponent;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubjectEntityStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityStatementCriterion;
 import net.shibboleth.oidc.metadata.filter.MetadataFilterContext;
 import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
 import net.shibboleth.shared.primitive.LoggerFactory;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/AbstractTrustEngineSignatureValidationComponent.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/AbstractTrustEngineSignatureValidationComponent.java
deleted file mode 100644
index 29c8bb9..0000000
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/AbstractTrustEngineSignatureValidationComponent.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed 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 net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
-
-import java.text.ParseException;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-
-import org.opensaml.security.SecurityException;
-import org.opensaml.security.trust.TrustEngine;
-import org.slf4j.Logger;
-
-import com.nimbusds.jwt.SignedJWT;
-
-import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.shared.component.ComponentInitializationException;
-import net.shibboleth.shared.logic.Constraint;
-import net.shibboleth.shared.primitive.LoggerFactory;
-import net.shibboleth.shared.resolver.CriteriaSet;
-
-/**
- * Abstract component performing signature validation via {@link TrustEngine}.
- */
-public class AbstractTrustEngineSignatureValidationComponent extends AbstractIdentifiableInitializableComponent {
-
-    /** Class logger. */
-    @Nonnull private Logger log = LoggerFactory.getLogger(AbstractTrustEngineSignatureValidationComponent.class);
-
-    /** Trust engine used to validate a signature. */
-    @NonnullAfterInit private TrustEngine<SignedJWT> trustEngine;
-
-    /** Set of externally specified default criteria for input to the trust engine. */
-    @Nullable private CriteriaSet defaultCriteria;
-
-    /**
-     * Set trust engine used to validate a signature.
-     * 
-     * @param engine trust engine
-     */
-    public void setTrustEngine(@Nonnull final TrustEngine<SignedJWT> engine) {
-        checkSetterPreconditions();
-        trustEngine = Constraint.isNotNull(engine, "Trust Engine cannot be null");
-    }
-
-    /**
-     * Set the optional set of default criteria used as input to the trust engine.
-     * 
-     * @param criteria criteria set to use
-     */
-    public void setDefaultCriteria(@Nullable final CriteriaSet criteria) {
-        checkSetterPreconditions();
-        defaultCriteria = criteria;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected void doInitialize() throws ComponentInitializationException {
-        super.doInitialize();
-        if (trustEngine == null) {
-            throw new ComponentInitializationException("Trust Engine cannot be null");
-        }
-    }
-
-    /**
-     * Validates the given JWT via trust engine and the given criteria.
-     * 
-     * @param jwt the JWT to be validated
-     * @param criteria the criteria (expanded with the optional default criteria)
-     * @param entityId the entity ID used for logging
-     * @return true if validation was successful, false otherwise
-     */
-    protected boolean validateJwt(@Nonnull final SignedJWT jwt, @Nonnull final CriteriaSet criteria,
-            @Nullable final String entityId) {
-        if (defaultCriteria != null && !defaultCriteria.isEmpty()) {
-            criteria.addAll(defaultCriteria);
-        }
-        try {
-            if (trustEngine.validate(jwt, criteria)) {
-                log.debug("Successfully validated entity statement for {}", entityId);
-                return true;
-            }
-            log.warn("Trust Engine validation failed for {}, issued by {}", entityId,
-                    jwt.getJWTClaimsSet().getIssuer());
-        } catch (final SecurityException | ParseException e) {
-            log.warn("Could not validate entity statement for {}", entityId, e);
-        }
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/DefaultResolveEntityTrustChainFetchingStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/DefaultResolveEntityTrustChainFetchingStrategy.java
similarity index 78%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/DefaultResolveEntityTrustChainFetchingStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/DefaultResolveEntityTrustChainFetchingStrategy.java
index 284c4dd..2208eeb 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/DefaultResolveEntityTrustChainFetchingStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/DefaultResolveEntityTrustChainFetchingStrategy.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.resolver;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.resolver;
 
 import java.io.IOException;
 import java.net.URI;
@@ -39,7 +39,7 @@ import com.nimbusds.jose.JOSEObjectType;
 import com.nimbusds.jwt.SignedJWT;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.ResolveEntityResponse;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.AbstractFederationEndpointResponseFetchingStrategy;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.AbstractFederationEndpointResponseFetchingStrategy;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.impl.ResolveEntityResponseImpl;
 import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
 import net.shibboleth.shared.logic.ConstraintViolationException;
@@ -52,7 +52,7 @@ import net.shibboleth.shared.resolver.CriteriaSet;
 @ThreadSafeAfterInit
 public class DefaultResolveEntityTrustChainFetchingStrategy
     extends AbstractFederationEndpointResponseFetchingStrategy
-        <RemoteResolveEntityCacheContainerIdentifier, RemoteResolveEntityResponseContainer> {
+        <ResolveEntityCacheContainerIdentifier, ResolveEntityResponseContainer> {
 
     /** The JWT type header. */
     @Nonnull
@@ -69,8 +69,8 @@ public class DefaultResolveEntityTrustChainFetchingStrategy
      */
     public DefaultResolveEntityTrustChainFetchingStrategy() {
         setCriteriaToRequestDataStrategy(criteria -> {
-            final RemoteResolveEntityCacheIdentifierCriterion identifierCriterion =
-                    criteria.get(RemoteResolveEntityCacheIdentifierCriterion.class);
+            final ResolveEntityCacheIdentifierCriterion identifierCriterion =
+                    criteria.get(ResolveEntityCacheIdentifierCriterion.class);
             if (identifierCriterion == null) {
                 log.debug("No identifier criterion given, returning null");
                 return null;
@@ -81,7 +81,7 @@ public class DefaultResolveEntityTrustChainFetchingStrategy
 
     /** {@inheritDoc} */
     @Nullable protected ClassicHttpRequest initializeHttpRequest(@Nonnull final CriteriaSet criteria,
-            @Nonnull RemoteResolveEntityCacheContainerIdentifier identifier) {
+            @Nonnull ResolveEntityCacheContainerIdentifier identifier) {
         final HttpGet httpRequest = new HttpGet(identifier.getEndpoint());
         final List<NameValuePair> nvps = new ArrayList<>();
         nvps.add(new BasicNameValuePair("sub", identifier.getSubject()));
@@ -97,27 +97,27 @@ public class DefaultResolveEntityTrustChainFetchingStrategy
     }
 
     /** {@inheritDoc} */
-    @Nullable protected RemoteResolveEntityResponseContainer parseHttpResponse(@Nonnull final CriteriaSet criteria,
-            @Nonnull final RemoteResolveEntityCacheContainerIdentifier identifier,
+    @Nullable protected ResolveEntityResponseContainer parseHttpResponse(@Nonnull final CriteriaSet criteria,
+            @Nonnull final ResolveEntityCacheContainerIdentifier identifier,
             @Nullable final ClassicHttpResponse response, @Nonnull final Instant validExpiration,
             @Nonnull final Instant invalidExpiration, @Nonnull final Instant nullExpiration)
                     throws ProtocolException, IOException {
         if (response != null) {
             if (!HTTP_RESPONSE_CONTENT_TYPE.equals(response.getEntity().getContentType())) {
                 log.warn("Unexpected content type: {}", response.getEntity().getContentType());
-                return new RemoteResolveEntityResponseContainer(identifier, null, validExpiration, invalidExpiration);
+                return new ResolveEntityResponseContainer(identifier, null, validExpiration, invalidExpiration);
             }
 
             try {
                 final SignedJWT jwt = SignedJWT.parse(EntityUtils.toString(response.getEntity()));
                 if (!JWT_TYPE_HEADER.equals(jwt.getHeader().getType())) {
                     log.warn("Unexpected JWT type header {}", jwt.getHeader().getType());
-                    return new RemoteResolveEntityResponseContainer(identifier, null, validExpiration,
+                    return new ResolveEntityResponseContainer(identifier, null, validExpiration,
                             invalidExpiration);
                 }
                 assert objectMapper != null;
                 final ResolveEntityResponse resolveEntity = ResolveEntityResponseImpl.parse(jwt, objectMapper);
-                return new RemoteResolveEntityResponseContainer(
+                return new ResolveEntityResponseContainer(
                         identifier, resolveEntity, validExpiration, invalidExpiration);
             } catch (final JsonProcessingException e) {
                 log.warn("Could not deserialize entity statement payload from the response", e);
@@ -126,18 +126,18 @@ public class DefaultResolveEntityTrustChainFetchingStrategy
             } catch (java.text.ParseException e) {
                 log.warn("Could not parse JWT from the response", e);
             }
-            return new RemoteResolveEntityResponseContainer(identifier, null, validExpiration, invalidExpiration);
+            return new ResolveEntityResponseContainer(identifier, null, validExpiration, invalidExpiration);
         } else {
             log.debug("Unable to fetch resolve entity response: {} (null response)", identifier.getEndpoint());
-            return new RemoteResolveEntityResponseContainer(identifier, null, validExpiration, nullExpiration);
+            return new ResolveEntityResponseContainer(identifier, null, validExpiration, nullExpiration);
         }
     }
 
     /** {@inheritDoc} */
-    @Nullable protected RemoteResolveEntityResponseContainer handleException(@Nonnull final CriteriaSet criteria,
-            @Nonnull final RemoteResolveEntityCacheContainerIdentifier identifier, @Nonnull final Throwable exception,
+    @Nullable protected ResolveEntityResponseContainer handleException(@Nonnull final CriteriaSet criteria,
+            @Nonnull final ResolveEntityCacheContainerIdentifier identifier, @Nonnull final Throwable exception,
             @Nonnull final Instant expiration) {
-        return new RemoteResolveEntityResponseContainer(identifier, null, expiration, expiration);
+        return new ResolveEntityResponseContainer(identifier, null, expiration, expiration);
     }
 
 }
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/RemoteResolveEntityCacheContainerIdentifier.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/ResolveEntityCacheContainerIdentifier.java
similarity index 91%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/RemoteResolveEntityCacheContainerIdentifier.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/ResolveEntityCacheContainerIdentifier.java
index c937b9b..d4ebb71 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/RemoteResolveEntityCacheContainerIdentifier.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/ResolveEntityCacheContainerIdentifier.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.resolver;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.resolver;
 
 import java.io.Serializable;
 import java.util.List;
@@ -28,9 +28,9 @@ import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
- * Default identifier for trust mark within {@link RemoteResolveEntityResponseContainer}.
+ * Default identifier for trust mark within {@link ResolveEntityResponseContainer}.
  */
-public class RemoteResolveEntityCacheContainerIdentifier implements Serializable {
+public class ResolveEntityCacheContainerIdentifier implements Serializable {
 
     /** Serial version UID. */
     private static final long serialVersionUID = -4143516153785776493L;
@@ -56,7 +56,7 @@ public class RemoteResolveEntityCacheContainerIdentifier implements Serializable
      * @param anchors trust anchors
      * @param types optional entity types
      */
-    public RemoteResolveEntityCacheContainerIdentifier(@Nonnull final String uri,
+    public ResolveEntityCacheContainerIdentifier(@Nonnull final String uri,
                   @Nonnull @NotEmpty final String sub,
                   @Nonnull @NotEmpty final List<String> anchors,
                   @Nullable final List<String>  types) {
@@ -133,7 +133,7 @@ public class RemoteResolveEntityCacheContainerIdentifier implements Serializable
         if (getClass() != obj.getClass()) {
             return false;
         }
-        final RemoteResolveEntityCacheContainerIdentifier other = (RemoteResolveEntityCacheContainerIdentifier) obj;
+        final ResolveEntityCacheContainerIdentifier other = (ResolveEntityCacheContainerIdentifier) obj;
         return endpoint.equals(other.endpoint) && subject.equals(other.subject)
                 && trustAnchors.containsAll(other.trustAnchors) && other.trustAnchors.containsAll(trustAnchors)
                 && entityTypes.containsAll(other.entityTypes) && other.entityTypes.containsAll(entityTypes);
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/RemoteResolveEntityCacheIdentifierCriterion.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/ResolveEntityCacheIdentifierCriterion.java
similarity index 78%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/RemoteResolveEntityCacheIdentifierCriterion.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/ResolveEntityCacheIdentifierCriterion.java
index bc057b7..7bbca27 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/RemoteResolveEntityCacheIdentifierCriterion.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/ResolveEntityCacheIdentifierCriterion.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.resolver;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.resolver;
 
 import java.util.Objects;
 
@@ -24,17 +24,17 @@ import net.shibboleth.shared.resolver.Criterion;
 /**
  * A {@link Criterion} representing request message details to Resolve Entity API.
  */
-public class RemoteResolveEntityCacheIdentifierCriterion implements Criterion {
+public class ResolveEntityCacheIdentifierCriterion implements Criterion {
 
     /** The trust mark identifier. */
-    @Nonnull private final RemoteResolveEntityCacheContainerIdentifier identifier;
+    @Nonnull private final ResolveEntityCacheContainerIdentifier identifier;
 
     /**
      * Constructor.
      *
      * @param id identifier, must not be null
      */
-    public RemoteResolveEntityCacheIdentifierCriterion(@Nonnull final RemoteResolveEntityCacheContainerIdentifier id) {
+    public ResolveEntityCacheIdentifierCriterion(@Nonnull final ResolveEntityCacheContainerIdentifier id) {
         identifier = Constraint.isNotNull(id, "Identifier cannot be null");
     }
 
@@ -43,7 +43,7 @@ public class RemoteResolveEntityCacheIdentifierCriterion implements Criterion {
      * 
      * @return the identifier
      */
-    @Nonnull public RemoteResolveEntityCacheContainerIdentifier getIdentifier() {
+    @Nonnull public ResolveEntityCacheContainerIdentifier getIdentifier() {
         return identifier;
     }
 
@@ -71,7 +71,7 @@ public class RemoteResolveEntityCacheIdentifierCriterion implements Criterion {
         if (getClass() != obj.getClass()) {
             return false;
         }
-        final RemoteResolveEntityCacheIdentifierCriterion other = (RemoteResolveEntityCacheIdentifierCriterion) obj;
+        final ResolveEntityCacheIdentifierCriterion other = (ResolveEntityCacheIdentifierCriterion) obj;
         return identifier.equals(other.identifier);
     }
 
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/RemoteResolveEntityResponseContainer.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/ResolveEntityResponseContainer.java
similarity index 80%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/RemoteResolveEntityResponseContainer.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/ResolveEntityResponseContainer.java
index 07a5c25..fb4f757 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/resolver/RemoteResolveEntityResponseContainer.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/resolver/ResolveEntityResponseContainer.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.resolver;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.resolver;
 
 import java.io.Serializable;
 import java.time.Instant;
@@ -21,21 +21,21 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.ResolveEntityResponse;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.BaseExpirableStatementContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.BaseExpirableStatementContainer;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A container class for metadata caches carrying ID and statement details related to Resolve Entity.
  */
-public class RemoteResolveEntityResponseContainer extends BaseExpirableStatementContainer<ResolveEntityResponse>
+public class ResolveEntityResponseContainer extends BaseExpirableStatementContainer<ResolveEntityResponse>
     implements Serializable {
 
     /** Serial version UID. */
     private static final long serialVersionUID = 756269564456865370L;
 
     /** Requested entity ID. */
-    @Nonnull private final RemoteResolveEntityCacheContainerIdentifier identifier;
+    @Nonnull private final ResolveEntityCacheContainerIdentifier identifier;
 
     /**
      * Constructor.
@@ -45,7 +45,7 @@ public class RemoteResolveEntityResponseContainer extends BaseExpirableStatement
      * @param validExpirationInstant expiration instant for valid statement, must not be null
      * @param invalidExpirationInstant expiration instant for invalid statement, must not be null
      */
-    public RemoteResolveEntityResponseContainer(@Nonnull final RemoteResolveEntityCacheContainerIdentifier id,
+    public ResolveEntityResponseContainer(@Nonnull final ResolveEntityCacheContainerIdentifier id,
             @Nullable final ResolveEntityResponse resolveEntity, @Nonnull final Instant validExpirationInstant,
             @Nonnull final Instant invalidExpirationInstant) {
         super(validExpirationInstant, resolveEntity, invalidExpirationInstant);
@@ -57,7 +57,7 @@ public class RemoteResolveEntityResponseContainer extends BaseExpirableStatement
      * 
      * @return entity ID
      */
-    @Nonnull @NotEmpty public RemoteResolveEntityCacheContainerIdentifier getIdentifier() {
+    @Nonnull @NotEmpty public ResolveEntityCacheContainerIdentifier getIdentifier() {
         return identifier;
     }
 
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/subordinate/DefaultSubordinateStatementCriteriaToIdentifierStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/DefaultSubordinateStatementCriteriaToIdentifierStrategy.java
similarity index 96%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/subordinate/DefaultSubordinateStatementCriteriaToIdentifierStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/DefaultSubordinateStatementCriteriaToIdentifierStrategy.java
index d5b4b4c..7292d1b 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/subordinate/DefaultSubordinateStatementCriteriaToIdentifierStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/DefaultSubordinateStatementCriteriaToIdentifierStrategy.java
@@ -12,14 +12,13 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.subordinate;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.subordinate;
 
 import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubordinateStatementCacheIdentifier;
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
 import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/subordinate/DefaultSubordinateStatementFetchingStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/DefaultSubordinateStatementFetchingStrategy.java
similarity index 83%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/subordinate/DefaultSubordinateStatementFetchingStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/DefaultSubordinateStatementFetchingStrategy.java
index d031e0b..7535bd7 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/subordinate/DefaultSubordinateStatementFetchingStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/DefaultSubordinateStatementFetchingStrategy.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.subordinate;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.subordinate;
 
 import java.io.IOException;
 import java.net.URI;
@@ -39,12 +39,10 @@ import com.nimbusds.jwt.SignedJWT;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.SubordinateStatement;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.AbstractFederationEndpointResponseFetchingStrategy;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.IssuerEntityIDCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.AbstractFederationEndpointResponseFetchingStrategy;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteSubordinateStatementContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubordinateStatementCacheIdentifier;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.EntityConfigurationContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.impl.SubordinateStatementImpl;
 import net.shibboleth.oidc.metadata.cache.MetadataCache;
 import net.shibboleth.oidc.metadata.cache.MetadataCacheException;
@@ -58,12 +56,12 @@ import net.shibboleth.shared.resolver.CriteriaSet;
 
 /**
  * Default strategy for fetching entity configuration for the request specified in the criteria set. The parsed
- * response details are stored inside a {@link RemoteEntityConfigurationContainer}.
+ * response details are stored inside a {@link EntityConfigurationContainer}.
  */
 @ThreadSafeAfterInit
 public class DefaultSubordinateStatementFetchingStrategy
     extends AbstractFederationEndpointResponseFetchingStrategy
-      <SubordinateStatementCacheIdentifier, RemoteSubordinateStatementContainer> {
+      <SubordinateStatementCacheIdentifier, SubordinateStatementContainer> {
 
     /** The JWT type header. */
     @Nonnull
@@ -76,7 +74,7 @@ public class DefaultSubordinateStatementFetchingStrategy
     @Nonnull private Logger log = LoggerFactory.getLogger(DefaultSubordinateStatementFetchingStrategy.class);
 
     /** The entity configuration cache used for fetching issuer statement. */
-    @NonnullAfterInit private MetadataCache<RemoteEntityConfigurationContainer> entityConfigurationCache;
+    @NonnullAfterInit private MetadataCache<EntityConfigurationContainer> entityConfigurationCache;
 
     /**
      * Constructor.
@@ -102,7 +100,7 @@ public class DefaultSubordinateStatementFetchingStrategy
      * 
      * @param cache entity configuration cache
      */
-    public void setEntityConfigurationCache(@Nonnull final MetadataCache<RemoteEntityConfigurationContainer> cache) {
+    public void setEntityConfigurationCache(@Nonnull final MetadataCache<EntityConfigurationContainer> cache) {
         checkSetterPreconditions();
         entityConfigurationCache = Constraint.isNotNull(cache, "Entity configuration cache cannot be null");
     }
@@ -120,7 +118,7 @@ public class DefaultSubordinateStatementFetchingStrategy
     @Nullable protected ClassicHttpRequest initializeHttpRequest(@Nonnull final CriteriaSet criteria,
             @Nonnull final SubordinateStatementCacheIdentifier id) {
         final String issuerEntityId = id.getIssuer();
-        final List<RemoteEntityConfigurationContainer> issuerStatements;
+        final List<EntityConfigurationContainer> issuerStatements;
         try {
             issuerStatements =
                     entityConfigurationCache.get(new CriteriaSet(new SubjectEntityIDCriterion(issuerEntityId)));
@@ -161,26 +159,26 @@ public class DefaultSubordinateStatementFetchingStrategy
     }
 
     /** {@inheritDoc} */
-    @Nullable protected RemoteSubordinateStatementContainer parseHttpResponse(@Nonnull final CriteriaSet criteria,
+    @Nullable protected SubordinateStatementContainer parseHttpResponse(@Nonnull final CriteriaSet criteria,
             @Nonnull final SubordinateStatementCacheIdentifier id, @Nullable final ClassicHttpResponse response,
             @Nonnull final Instant validExpiration, @Nonnull final Instant invalidExpiration,
             @Nonnull final Instant nullExpiration) throws ProtocolException, IOException {
         if (response != null) {
             if (!HTTP_RESPONSE_CONTENT_TYPE.equals(response.getEntity().getContentType())) {
                 log.warn("Unexpected content type: {}", response.getEntity().getContentType());
-                return new RemoteSubordinateStatementContainer(id, null, validExpiration, invalidExpiration);
+                return new SubordinateStatementContainer(id, null, validExpiration, invalidExpiration);
             }
 
             try {
                 final SignedJWT jwt = SignedJWT.parse(EntityUtils.toString(response.getEntity()));
                 if (!JWT_TYPE_HEADER.equals(jwt.getHeader().getType())) {
                     log.warn("Unexpected JWT type header {}", jwt.getHeader().getType());
-                    return new RemoteSubordinateStatementContainer(id, null, validExpiration, invalidExpiration);
+                    return new SubordinateStatementContainer(id, null, validExpiration, invalidExpiration);
                 }
                 assert objectMapper != null;
                 final SubordinateStatement statement = SubordinateStatementImpl.parse(jwt, objectMapper);
                 log.trace("Subordinate statement successfully parsed and stored into the container");
-                return new RemoteSubordinateStatementContainer(id, statement, validExpiration, invalidExpiration);
+                return new SubordinateStatementContainer(id, statement, validExpiration, invalidExpiration);
             } catch (final JsonProcessingException e) {
                 log.warn("Could not deserialize entity statement payload from the response", e);
             } catch (final ConstraintViolationException e) {
@@ -188,17 +186,17 @@ public class DefaultSubordinateStatementFetchingStrategy
             } catch (java.text.ParseException e) {
                 log.warn("Could not parse JWT from the response", e);
             }
-            return new RemoteSubordinateStatementContainer(id, null, validExpiration, invalidExpiration);
+            return new SubordinateStatementContainer(id, null, validExpiration, invalidExpiration);
         } else {
             log.debug("Unable to fetch entity configuration for: {} (null response)", id);
-            return new RemoteSubordinateStatementContainer(id, null, validExpiration, nullExpiration);
+            return new SubordinateStatementContainer(id, null, validExpiration, nullExpiration);
         }
     }
 
     /** {@inheritDoc} */
-    @Nullable protected RemoteSubordinateStatementContainer handleException(@Nonnull final CriteriaSet criteria,
+    @Nullable protected SubordinateStatementContainer handleException(@Nonnull final CriteriaSet criteria,
             @Nonnull final SubordinateStatementCacheIdentifier id, @Nonnull final Throwable exception,
             @Nonnull final Instant expiration) {
-        return new RemoteSubordinateStatementContainer(id, null, expiration, expiration);
+        return new SubordinateStatementContainer(id, null, expiration, expiration);
     }
 }
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/SubordinateStatementCacheIdentifier.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/SubordinateStatementCacheIdentifier.java
similarity index 96%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/SubordinateStatementCacheIdentifier.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/SubordinateStatementCacheIdentifier.java
index 2719b3f..9c51af0 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/SubordinateStatementCacheIdentifier.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/SubordinateStatementCacheIdentifier.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.subordinate;
 
 import java.io.Serializable;
 import java.util.Objects;
@@ -25,7 +25,7 @@ import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
- * Default identifier for subordinate statement within {@link RemoteSubordinateStatementContainer}.
+ * Default identifier for subordinate statement within {@link SubordinateStatementContainer}.
  */
 public class SubordinateStatementCacheIdentifier implements Serializable {
 
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/RemoteSubordinateStatementContainer.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/SubordinateStatementContainer.java
similarity index 88%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/RemoteSubordinateStatementContainer.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/SubordinateStatementContainer.java
index 268bef3..6a890a4 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/RemoteSubordinateStatementContainer.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/subordinate/SubordinateStatementContainer.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.subordinate;
 
 import java.io.Serializable;
 import java.time.Instant;
@@ -21,13 +21,14 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.SubordinateStatement;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.BaseExpirableStatementContainer;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A container class for metadata caches carrying ID and statement details related to Subordinate Statement.
  */
-public class RemoteSubordinateStatementContainer extends BaseExpirableStatementContainer<SubordinateStatement>
+public class SubordinateStatementContainer extends BaseExpirableStatementContainer<SubordinateStatement>
     implements Serializable {
 
     /** Serial version UID. */
@@ -44,7 +45,7 @@ public class RemoteSubordinateStatementContainer extends BaseExpirableStatementC
      * @param validExpirationInstant expiration instant for valid statement, must not be null
      * @param invalidExpirationInstant expiration instant for invalid statement, must not be null
      */
-    public RemoteSubordinateStatementContainer(@Nonnull final SubordinateStatementCacheIdentifier id,
+    public SubordinateStatementContainer(@Nonnull final SubordinateStatementCacheIdentifier id,
             @Nullable final SubordinateStatement statement, @Nonnull final Instant validExpirationInstant,
             @Nonnull final Instant invalidExpirationInstant) {
         super(validExpirationInstant, statement, invalidExpirationInstant);
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultTrustChainFetchingStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainFetchingStrategy.java
similarity index 94%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultTrustChainFetchingStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainFetchingStrategy.java
index 14f72f6..b1f59ce 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultTrustChainFetchingStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainFetchingStrategy.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustchain;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain;
 
 import java.time.Duration;
 import java.time.Instant;
@@ -32,11 +32,10 @@ import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.SubordinateStatement;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.IssuerEntityIDCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.PreSelectedTrustChainCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.EntityConfigurationContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local.LocalKeyContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteSubordinateStatementContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteTrustChainsContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubjectEntityStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.subordinate.SubordinateStatementContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.util.EntityStatementHelper;
 import net.shibboleth.oidc.metadata.cache.MetadataCache;
 import net.shibboleth.oidc.metadata.cache.MetadataCacheException;
@@ -59,7 +58,7 @@ import net.shibboleth.shared.resolver.CriteriaSet;
  */
 @ThreadSafeAfterInit
 public class DefaultTrustChainFetchingStrategy extends AbstractIdentifiableInitializableComponent
-        implements Function<CriteriaSet, RemoteTrustChainsContainer> {
+        implements Function<CriteriaSet, TrustChainsContainer> {
 
     /** Class logger. */
     @Nonnull private Logger log = LoggerFactory.getLogger(DefaultTrustChainFetchingStrategy.class);
@@ -68,10 +67,10 @@ public class DefaultTrustChainFetchingStrategy extends AbstractIdentifiableIniti
     @NonnullAfterInit private Function<CriteriaSet, String> criteriaToSubjectEntityIdStrategy;
 
     /** Cache for entity configurations. */
-    @NonnullAfterInit private MetadataCache<RemoteEntityConfigurationContainer> entityConfigurationCache;
+    @NonnullAfterInit private MetadataCache<EntityConfigurationContainer> entityConfigurationCache;
 
     /** Cache for subordinate entity statements. */
-    @NonnullAfterInit private MetadataCache<RemoteSubordinateStatementContainer> subordinateStatementCache;
+    @NonnullAfterInit private MetadataCache<SubordinateStatementContainer> subordinateStatementCache;
 
     /** Cache containing local copies of trusted trust anchor keys. */
     @NonnullAfterInit private MetadataCache<Map<String, LocalKeyContainer>> localTrustAnchorsCache;
@@ -98,7 +97,7 @@ public class DefaultTrustChainFetchingStrategy extends AbstractIdentifiableIniti
      * 
      * @param cache entity configurations cache
      */
-    public void setEntityConfigurationCache(@Nonnull final MetadataCache<RemoteEntityConfigurationContainer> cache) {
+    public void setEntityConfigurationCache(@Nonnull final MetadataCache<EntityConfigurationContainer> cache) {
         checkSetterPreconditions();
         entityConfigurationCache = Constraint.isNotNull(cache, "Entity Configuration cache cannot be null");
     }
@@ -108,7 +107,7 @@ public class DefaultTrustChainFetchingStrategy extends AbstractIdentifiableIniti
      * 
      * @param cache subordinate statements cache.
      */
-    public void setSubordinateStatementCache(@Nonnull final MetadataCache<RemoteSubordinateStatementContainer> cache) {
+    public void setSubordinateStatementCache(@Nonnull final MetadataCache<SubordinateStatementContainer> cache) {
         checkSetterPreconditions();
         subordinateStatementCache = Constraint.isNotNull(cache, "Subordinate statement cache cannot be null");
     }
@@ -175,7 +174,7 @@ public class DefaultTrustChainFetchingStrategy extends AbstractIdentifiableIniti
 
     /** {@inheritDoc} */
     @Override @Nullable
-    public RemoteTrustChainsContainer apply(@Nullable final CriteriaSet criteria) {
+    public TrustChainsContainer apply(@Nullable final CriteriaSet criteria) {
         checkComponentActive();
         if (criteria == null) {
             return null;
@@ -200,7 +199,7 @@ public class DefaultTrustChainFetchingStrategy extends AbstractIdentifiableIniti
                 criteria.get(SubjectEntityStatementCriterion.class);
         if (subjectStatementCriterion == null) {
             try {
-                final List<RemoteEntityConfigurationContainer> containers = entityConfigurationCache.get(criteria);
+                final List<EntityConfigurationContainer> containers = entityConfigurationCache.get(criteria);
                 if (containers.isEmpty()) {
                     return null;
                 }
@@ -232,7 +231,7 @@ public class DefaultTrustChainFetchingStrategy extends AbstractIdentifiableIniti
                 .map(wrapper -> wrapper.getTrustChain())
                 .toList();
         assert result != null; assert invalidExpiration != null; assert validExpiration != null;
-        return new RemoteTrustChainsContainer(result.isEmpty() ? invalidExpiration : validExpiration,
+        return new TrustChainsContainer(result.isEmpty() ? invalidExpiration : validExpiration,
                 entityConfiguration.getSubject(), result);
     }
 
@@ -383,10 +382,10 @@ public class DefaultTrustChainFetchingStrategy extends AbstractIdentifiableIniti
         }
 
         try {
-            final List<RemoteEntityConfigurationContainer> authorityConfigurations = 
+            final List<EntityConfigurationContainer> authorityConfigurations = 
                     entityConfigurationCache.get(new CriteriaSet(new SubjectEntityIDCriterion(authorityHint)));
             log.trace("Fetched comfigurations {} for authority {}", authorityConfigurations, authorityHint);
-            final List<RemoteSubordinateStatementContainer> subordinateStatements =
+            final List<SubordinateStatementContainer> subordinateStatements =
                     subordinateStatementCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId),
                             new IssuerEntityIDCriterion(authorityHint)));
             log.trace("Fetched subordinate statements {} for authority {}", subordinateStatements, authorityHint);
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultRemoteTrustChainSignatureValidationFilterStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainSignatureValidationFilterStrategy.java
similarity index 87%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultRemoteTrustChainSignatureValidationFilterStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainSignatureValidationFilterStrategy.java
index 83c4249..be7b674 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultRemoteTrustChainSignatureValidationFilterStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainSignatureValidationFilterStrategy.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustchain;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain;
 
 import java.util.List;
 import java.util.function.BiFunction;
@@ -28,7 +28,6 @@ import com.nimbusds.jwt.SignedJWT;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.AbstractTrustEngineSignatureValidationComponent;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SignatureValidationKeyContainerJwtCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteTrustChainsContainer;
 import net.shibboleth.oidc.metadata.filter.MetadataFilterContext;
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
 import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
@@ -51,26 +50,26 @@ import net.shibboleth.shared.resolver.CriteriaSet;
  * All the chains that don't pass the full validation are filtered out from the result.
  */
 @ThreadSafeAfterInit
-public class DefaultRemoteTrustChainSignatureValidationFilterStrategy
+public class DefaultTrustChainSignatureValidationFilterStrategy
     extends AbstractTrustEngineSignatureValidationComponent
-    implements BiFunction<RemoteTrustChainsContainer, MetadataFilterContext, RemoteTrustChainsContainer> {
+    implements BiFunction<TrustChainsContainer, MetadataFilterContext, TrustChainsContainer> {
 
     /** Class logger. */
     @Nonnull private Logger log =
-            LoggerFactory.getLogger(DefaultRemoteTrustChainSignatureValidationFilterStrategy.class);
+            LoggerFactory.getLogger(DefaultTrustChainSignatureValidationFilterStrategy.class);
 
     /** Signature validation filter strategy for trust anchor entity statements. */
     @NonnullAfterInit private BiFunction<EntityStatement<?>, MetadataFilterContext, EntityStatement<?>>
         entityStatementSignatureValidationFilterStrategy;
 
     /** List of custom metadata filter strategies. */
-    @Nonnull private List<BiFunction<RemoteTrustChainsContainer,
-        MetadataFilterContext, RemoteTrustChainsContainer>> customFilterStrategies;
+    @Nonnull private List<BiFunction<TrustChainsContainer,
+        MetadataFilterContext, TrustChainsContainer>> customFilterStrategies;
 
     /**
      * Constructor.
      */
-    public DefaultRemoteTrustChainSignatureValidationFilterStrategy() {
+    public DefaultTrustChainSignatureValidationFilterStrategy() {
         customFilterStrategies = CollectionSupport.emptyList();
     }
 
@@ -91,8 +90,8 @@ public class DefaultRemoteTrustChainSignatureValidationFilterStrategy
      * 
      * @param strategies metadata filter strategies
      */
-    public void setCustomFilterStrategies(@Nullable final List<BiFunction<RemoteTrustChainsContainer,
-            MetadataFilterContext, RemoteTrustChainsContainer>> strategies) {
+    public void setCustomFilterStrategies(@Nullable final List<BiFunction<TrustChainsContainer,
+            MetadataFilterContext, TrustChainsContainer>> strategies) {
         checkSetterPreconditions();
         customFilterStrategies = strategies == null ? CollectionSupport.emptyList() : strategies;
     }
@@ -109,7 +108,7 @@ public class DefaultRemoteTrustChainSignatureValidationFilterStrategy
 
     /** {@inheritDoc} */
     @Override @Nullable
-    public RemoteTrustChainsContainer apply(@Nullable final RemoteTrustChainsContainer container,
+    public TrustChainsContainer apply(@Nullable final TrustChainsContainer container,
             @Nullable final MetadataFilterContext filterContext) {
         checkComponentActive();
         if (container == null) {
@@ -161,9 +160,9 @@ public class DefaultRemoteTrustChainSignatureValidationFilterStrategy
             }
         }
 
-        RemoteTrustChainsContainer result = container;
-        for (final BiFunction<RemoteTrustChainsContainer, MetadataFilterContext,
-                RemoteTrustChainsContainer> customFilterStrategy : customFilterStrategies) {
+        TrustChainsContainer result = container;
+        for (final BiFunction<TrustChainsContainer, MetadataFilterContext,
+                TrustChainsContainer> customFilterStrategy : customFilterStrategies) {
             log.trace("Applying custom filter strategy {}", customFilterStrategy);
             result = customFilterStrategy.apply(result, filterContext);
             if (result == null) {
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultTrustChainSubjectIdentifierExtractionStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainSubjectIdentifierExtractionStrategy.java
similarity index 98%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultTrustChainSubjectIdentifierExtractionStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainSubjectIdentifierExtractionStrategy.java
index 15877c8..a43184c 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultTrustChainSubjectIdentifierExtractionStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainSubjectIdentifierExtractionStrategy.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustchain;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain;
 
 import java.util.List;
 import java.util.function.Function;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedTrustChainContainer.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/ProvidedTrustChainContainer.java
similarity index 90%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedTrustChainContainer.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/ProvidedTrustChainContainer.java
index 1ecce44..a9b22bb 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedTrustChainContainer.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/ProvidedTrustChainContainer.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain;
 
 import java.time.Instant;
 import java.util.List;
@@ -20,7 +20,6 @@ import java.util.List;
 import javax.annotation.Nonnull;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteTrustChainsContainer;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.logic.Constraint;
@@ -30,7 +29,7 @@ import net.shibboleth.shared.logic.Constraint;
  * that the container is solely used with fetch-through caches and the expiration validation is done during the
  * filtering phase.
  */
-public class ProvidedTrustChainContainer extends RemoteTrustChainsContainer {
+public class ProvidedTrustChainContainer extends TrustChainsContainer {
 
     /** Serial version UID. */
     private static final long serialVersionUID = -6322735111721678470L;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedTrustChainContainerCriterion.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/ProvidedTrustChainContainerCriterion.java
similarity index 99%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedTrustChainContainerCriterion.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/ProvidedTrustChainContainerCriterion.java
index 86fee10..07c91df 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/local/ProvidedTrustChainContainerCriterion.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/ProvidedTrustChainContainerCriterion.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain;
 
 import java.util.Objects;
 
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/RemoteTrustChainsContainer.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/TrustChainsContainer.java
similarity index 87%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/RemoteTrustChainsContainer.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/TrustChainsContainer.java
index a04a091..fa5c1b3 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/RemoteTrustChainsContainer.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/TrustChainsContainer.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain;
 
 import java.io.Serializable;
 import java.time.Instant;
@@ -22,6 +22,7 @@ import java.util.List;
 import javax.annotation.Nonnull;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.BaseExpirableMetadataContainer;
 import net.shibboleth.shared.annotation.constraint.Live;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
@@ -31,7 +32,7 @@ import net.shibboleth.shared.logic.Constraint;
 /**
  * A container class for metadata caches carrying ID and trust chains details related to Trust Chains of the entity.
  */
-public class RemoteTrustChainsContainer extends BaseExpirableMetadataContainer implements Serializable {
+public class TrustChainsContainer extends BaseExpirableMetadataContainer implements Serializable {
 
     /** Serial version UID. */
     private static final long serialVersionUID = 656434369356432370L;
@@ -48,7 +49,7 @@ public class RemoteTrustChainsContainer extends BaseExpirableMetadataContainer i
      * @param expirationInstant expiration instant, must not be null
      * @param entity entity ID, must not be null
      */
-    public RemoteTrustChainsContainer(@Nonnull final Instant expirationInstant,
+    public TrustChainsContainer(@Nonnull final Instant expirationInstant,
             @Nonnull @NotEmpty final String entity) {
         this(expirationInstant, entity, CollectionSupport.emptyList());
     }
@@ -61,7 +62,7 @@ public class RemoteTrustChainsContainer extends BaseExpirableMetadataContainer i
      * @param entity entity ID, must not be null
      * @param chains initial trust chains value
      */
-    public RemoteTrustChainsContainer(@Nonnull final Instant expirationInstant, @Nonnull @NotEmpty final String entity,
+    public TrustChainsContainer(@Nonnull final Instant expirationInstant, @Nonnull @NotEmpty final String entity,
             @Nonnull @NonnullElements final List<List<EntityStatement<?>>> chains) {
         super(expirationInstant);
         entityId = Constraint.isNotNull(entity, "Entity ID cannot be empty");
@@ -89,7 +90,7 @@ public class RemoteTrustChainsContainer extends BaseExpirableMetadataContainer i
      * @param trustChain trust chain to be removed
      * @return this object
      */
-    @Nonnull public RemoteTrustChainsContainer removeTrustChain(
+    @Nonnull public TrustChainsContainer removeTrustChain(
             @Nonnull @NonnullElements final List<EntityStatement<?>> trustChain) {
         trustChains.remove(trustChain);
         return this;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/DefaultTrustMarkFetchingStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/DefaultTrustMarkFetchingStrategy.java
similarity index 84%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/DefaultTrustMarkFetchingStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/DefaultTrustMarkFetchingStrategy.java
index 8ac59e1..d753486 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/DefaultTrustMarkFetchingStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/DefaultTrustMarkFetchingStrategy.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark;
 
 import java.io.IOException;
 import java.net.URI;
@@ -39,7 +39,7 @@ import com.nimbusds.jose.JOSEObjectType;
 import com.nimbusds.jwt.SignedJWT;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.TrustMark;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.AbstractFederationEndpointResponseFetchingStrategy;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.AbstractFederationEndpointResponseFetchingStrategy;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.impl.TrustMarkImpl;
 import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
 import net.shibboleth.shared.logic.ConstraintViolationException;
@@ -48,11 +48,11 @@ import net.shibboleth.shared.resolver.CriteriaSet;
 
 /**
  * Default strategy for fetching trust mark via Trust Mark API for the request specified in the criteria set. The
- * response is stored inside a {@link RemoteTrustMarkContainer}.
+ * response is stored inside a {@link TrustMarkContainer}.
  */
 @ThreadSafeAfterInit
 public class DefaultTrustMarkFetchingStrategy
-    extends AbstractFederationEndpointResponseFetchingStrategy<TrustMarkCacheIdentifier, RemoteTrustMarkContainer> {
+    extends AbstractFederationEndpointResponseFetchingStrategy<TrustMarkCacheIdentifier, TrustMarkContainer> {
 
     /** The JWT type header. */
     @Nonnull
@@ -95,25 +95,25 @@ public class DefaultTrustMarkFetchingStrategy
     }
 
     /** {@inheritDoc} */
-    @Nullable protected RemoteTrustMarkContainer parseHttpResponse(@Nonnull final CriteriaSet criteria,
+    @Nullable protected TrustMarkContainer parseHttpResponse(@Nonnull final CriteriaSet criteria,
             @Nonnull final TrustMarkCacheIdentifier request, @Nullable final ClassicHttpResponse response,
             @Nonnull final Instant validExpiration, @Nonnull final Instant invalidExpiration,
             @Nonnull final Instant nullExpiration) throws ProtocolException, IOException {
         if (response != null) {
             if (!HTTP_RESPONSE_CONTENT_TYPE.equals(response.getEntity().getContentType())) {
                 log.warn("Unexpected content type: {}", response.getEntity().getContentType());
-                return new RemoteTrustMarkContainer(request, null, validExpiration, invalidExpiration);
+                return new TrustMarkContainer(request, null, validExpiration, invalidExpiration);
             }
 
             try {
                 final SignedJWT jwt = SignedJWT.parse(EntityUtils.toString(response.getEntity()));
                 if (!JWT_TYPE_HEADER.equals(jwt.getHeader().getType())) {
                     log.warn("Unexpected JWT type header {}", jwt.getHeader().getType());
-                    return new RemoteTrustMarkContainer(request, null, validExpiration, invalidExpiration);
+                    return new TrustMarkContainer(request, null, validExpiration, invalidExpiration);
                 }
                 assert objectMapper != null;
                 final TrustMark trustMark = TrustMarkImpl.parse(jwt, objectMapper);
-                return new RemoteTrustMarkContainer(
+                return new TrustMarkContainer(
                         request, trustMark, validExpiration, invalidExpiration);
             } catch (final JsonProcessingException e) {
                 log.warn("Could not deserialize entity statement payload from the response", e);
@@ -122,18 +122,18 @@ public class DefaultTrustMarkFetchingStrategy
             } catch (java.text.ParseException e) {
                 log.warn("Could not parse JWT from the response", e);
             }
-            return new RemoteTrustMarkContainer(request, null, validExpiration, invalidExpiration);
+            return new TrustMarkContainer(request, null, validExpiration, invalidExpiration);
         } else {
             log.debug("Unable to fetch trust mark: {} (null response)", request.getTrustMarkType());
-            return new RemoteTrustMarkContainer(request, null, validExpiration, nullExpiration);
+            return new TrustMarkContainer(request, null, validExpiration, nullExpiration);
         }
     }
 
     /** {@inheritDoc} */
-    @Nullable protected RemoteTrustMarkContainer handleException(@Nonnull final CriteriaSet criteria,
+    @Nullable protected TrustMarkContainer handleException(@Nonnull final CriteriaSet criteria,
             @Nonnull final TrustMarkCacheIdentifier request, @Nonnull final Throwable exception,
             @Nonnull final Instant expiration) {
-        return new RemoteTrustMarkContainer(request, null, expiration, expiration);
+        return new TrustMarkContainer(request, null, expiration, expiration);
     }
 
 }
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/DefaultTrustMarkStatusFetchingStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/DefaultTrustMarkStatusFetchingStrategy.java
similarity index 83%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/DefaultTrustMarkStatusFetchingStrategy.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/DefaultTrustMarkStatusFetchingStrategy.java
index e6f87c4..c4b01c2 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/DefaultTrustMarkStatusFetchingStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/DefaultTrustMarkStatusFetchingStrategy.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
@@ -40,7 +40,7 @@ import com.nimbusds.jose.JOSEObjectType;
 import com.nimbusds.jwt.SignedJWT;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.TrustMarkStatus;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.AbstractFederationEndpointResponseFetchingStrategy;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.AbstractFederationEndpointResponseFetchingStrategy;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.impl.TrustMarkStatusImpl;
 import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
 import net.shibboleth.shared.logic.ConstraintViolationException;
@@ -49,12 +49,12 @@ import net.shibboleth.shared.resolver.CriteriaSet;
 
 /**
  * Default strategy for fetching trust mark status via Trust Mark Status API for the request specified in the criteria
- * set. The status response is stored inside a {@link RemoteTrustMarkStatusContainer}.
+ * set. The status response is stored inside a {@link TrustMarkStatusContainer}.
  */
 @ThreadSafeAfterInit
 public class DefaultTrustMarkStatusFetchingStrategy
     extends AbstractFederationEndpointResponseFetchingStrategy
-        <TrustMarkStatusCacheIdentifier, RemoteTrustMarkStatusContainer> {
+        <TrustMarkStatusCacheIdentifier, TrustMarkStatusContainer> {
 
     /** The JWT type header. */
     @Nonnull
@@ -94,25 +94,25 @@ public class DefaultTrustMarkStatusFetchingStrategy
     }
 
     /** {@inheritDoc} */
-    @Nullable protected RemoteTrustMarkStatusContainer parseHttpResponse(@Nonnull final CriteriaSet criteria,
+    @Nullable protected TrustMarkStatusContainer parseHttpResponse(@Nonnull final CriteriaSet criteria,
             @Nonnull final TrustMarkStatusCacheIdentifier identifier, @Nullable final ClassicHttpResponse response,
             @Nonnull final Instant validExpiration, @Nonnull final Instant invalidExpiration,
             @Nonnull final Instant nullExpiration) throws ProtocolException, IOException {
         if (response != null) {
             if (!HTTP_RESPONSE_CONTENT_TYPE.equals(response.getEntity().getContentType())) {
                 log.warn("Unexpected content type: {}", response.getEntity().getContentType());
-                return new RemoteTrustMarkStatusContainer(identifier, null, validExpiration, invalidExpiration);
+                return new TrustMarkStatusContainer(identifier, null, validExpiration, invalidExpiration);
             }
 
             try {
                 final SignedJWT jwt = SignedJWT.parse(EntityUtils.toString(response.getEntity()));
                 if (!JWT_TYPE_HEADER.equals(jwt.getHeader().getType())) {
                     log.warn("Unexpected JWT type header {}", jwt.getHeader().getType());
-                    return new RemoteTrustMarkStatusContainer(identifier, null, validExpiration, invalidExpiration);
+                    return new TrustMarkStatusContainer(identifier, null, validExpiration, invalidExpiration);
                 }
                 assert objectMapper != null;
                 final TrustMarkStatus trustMarkStatus = TrustMarkStatusImpl.parse(jwt, objectMapper);
-                return new RemoteTrustMarkStatusContainer(
+                return new TrustMarkStatusContainer(
                         identifier, trustMarkStatus, validExpiration, invalidExpiration);
             } catch (final JsonProcessingException e) {
                 log.warn("Could not deserialize trust mark status payload from the response", e);
@@ -121,18 +121,18 @@ public class DefaultTrustMarkStatusFetchingStrategy
             } catch (java.text.ParseException e) {
                 log.warn("Could not parse JWT from the response", e);
             }
-            return new RemoteTrustMarkStatusContainer(identifier, null, validExpiration, invalidExpiration);
+            return new TrustMarkStatusContainer(identifier, null, validExpiration, invalidExpiration);
         } else {
             log.debug("Unable to fetch trust mark status: {} (null response)", identifier.getEndpoint());
-            return new RemoteTrustMarkStatusContainer(identifier, null, validExpiration, nullExpiration);
+            return new TrustMarkStatusContainer(identifier, null, validExpiration, nullExpiration);
         }
     }
 
     /** {@inheritDoc} */
-    @Nullable protected RemoteTrustMarkStatusContainer handleException(@Nonnull final CriteriaSet criteria,
+    @Nullable protected TrustMarkStatusContainer handleException(@Nonnull final CriteriaSet criteria,
             @Nonnull final TrustMarkStatusCacheIdentifier identifier, @Nonnull final Throwable exception,
             @Nonnull final Instant expiration) {
-        return new RemoteTrustMarkStatusContainer(identifier, null, expiration, expiration);
+        return new TrustMarkStatusContainer(identifier, null, expiration, expiration);
     }
 
 }
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/DefaultTrustMarkValidationCriteriaSetLookupFunction.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/DefaultTrustMarkValidationCriteriaSetLookupFunction.java
similarity index 88%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/DefaultTrustMarkValidationCriteriaSetLookupFunction.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/DefaultTrustMarkValidationCriteriaSetLookupFunction.java
index 0d727f3..d33a38f 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/DefaultTrustMarkValidationCriteriaSetLookupFunction.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/DefaultTrustMarkValidationCriteriaSetLookupFunction.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark;
 
 import java.util.List;
 import java.util.function.Function;
@@ -24,11 +24,11 @@ import org.slf4j.Logger;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.BaseJWTWrapper;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.BaseExpirableStatementContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.IssuerEntityStatementCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.BaseExpirableStatementContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.IssuerEntityStatementCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteTrustChainsContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubjectStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.TrustChainsContainer;
 import net.shibboleth.oidc.metadata.cache.MetadataCache;
 import net.shibboleth.oidc.metadata.cache.MetadataCacheException;
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
@@ -53,14 +53,14 @@ public class DefaultTrustMarkValidationCriteriaSetLookupFunction
     private Logger log = LoggerFactory.getLogger(DefaultTrustMarkValidationCriteriaSetLookupFunction.class);
 
     /** Cache used to fetch the issuer entity configuration from. */
-    @NonnullAfterInit private MetadataCache<RemoteTrustChainsContainer> trustChainCache;
+    @NonnullAfterInit private MetadataCache<TrustChainsContainer> trustChainCache;
 
     /**
      * Set the cache used to fetch the trust chain for the trust mark issuer from.
      * 
      * @param cache cache used to fetch the trust chain for the trust mark issuer from
      */
-    public void setTrustChainCache(@Nonnull final MetadataCache<RemoteTrustChainsContainer> cache) {
+    public void setTrustChainCache(@Nonnull final MetadataCache<TrustChainsContainer> cache) {
         checkSetterPreconditions();
         trustChainCache = Constraint.isNotNull(cache, "Trust Chain cache cannot be null");
     }
@@ -105,7 +105,7 @@ public class DefaultTrustMarkValidationCriteriaSetLookupFunction
         final String issuer = statement.getIssuer();
         final CriteriaSet criteria = new CriteriaSet(new SubjectEntityIDCriterion(issuer));
         try {
-            final List<RemoteTrustChainsContainer> result = trustChainCache.get(criteria);
+            final List<TrustChainsContainer> result = trustChainCache.get(criteria);
             if (!result.isEmpty()) {
                 final List<List<EntityStatement<?>>> chains = result.get(0).getTrustChains();
                 if (!chains.isEmpty()) {
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkCacheIdentifier.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkCacheIdentifier.java
similarity index 97%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkCacheIdentifier.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkCacheIdentifier.java
index 75bb22d..bdb3d14 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkCacheIdentifier.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkCacheIdentifier.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark;
 
 import java.io.Serializable;
 import java.util.Objects;
@@ -25,7 +25,7 @@ import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
- * Default identifier for trust mark within {@link RemoteTrustMarkContainer}.
+ * Default identifier for trust mark within {@link TrustMarkContainer}.
  */
 public class TrustMarkCacheIdentifier implements Serializable {
 
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/RemoteTrustMarkContainer.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkContainer.java
similarity index 87%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/RemoteTrustMarkContainer.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkContainer.java
index 2dbe6ee..3130105 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/RemoteTrustMarkContainer.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkContainer.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark;
 
 import java.io.Serializable;
 import java.time.Instant;
@@ -21,14 +21,14 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.TrustMark;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.BaseExpirableStatementContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.BaseExpirableStatementContainer;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A container class for metadata caches carrying ID and statement details related to Trust Mark.
  */
-public class RemoteTrustMarkContainer extends BaseExpirableStatementContainer<TrustMark> implements Serializable {
+public class TrustMarkContainer extends BaseExpirableStatementContainer<TrustMark> implements Serializable {
 
     /** Serial version UID. */
     private static final long serialVersionUID = 756269369356865370L;
@@ -44,7 +44,7 @@ public class RemoteTrustMarkContainer extends BaseExpirableStatementContainer<Tr
      * @param validExpirationInstant expiration instant for valid statement, must not be null
      * @param invalidExpirationInstant expiration instant for invalid statement, must not be null
      */
-    public RemoteTrustMarkContainer(@Nonnull final TrustMarkCacheIdentifier id,
+    public TrustMarkContainer(@Nonnull final TrustMarkCacheIdentifier id,
             @Nullable final TrustMark trustMark, @Nonnull final Instant validExpirationInstant,
             @Nonnull final Instant invalidExpirationInstant) {
         super(validExpirationInstant, trustMark, invalidExpirationInstant);
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkIdentifierCriterion.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkIdentifierCriterion.java
similarity index 99%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkIdentifierCriterion.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkIdentifierCriterion.java
index 4045f40..4131812 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkIdentifierCriterion.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkIdentifierCriterion.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark;
 
 import java.util.Objects;
 
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkStatusCacheIdentifier.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkStatusCacheIdentifier.java
similarity index 99%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkStatusCacheIdentifier.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkStatusCacheIdentifier.java
index 7d066e1..3fa3378 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkStatusCacheIdentifier.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkStatusCacheIdentifier.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark;
 
 import java.io.Serializable;
 import java.util.Objects;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/RemoteTrustMarkStatusContainer.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkStatusContainer.java
similarity index 87%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/RemoteTrustMarkStatusContainer.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkStatusContainer.java
index 33f902d..f461aa7 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/RemoteTrustMarkStatusContainer.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkStatusContainer.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark;
 
 import java.io.Serializable;
 import java.time.Instant;
@@ -21,14 +21,14 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.TrustMarkStatus;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.BaseExpirableStatementContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.BaseExpirableStatementContainer;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A container class for metadata caches carrying ID and statement details related to Trust Mark status.
  */
-public class RemoteTrustMarkStatusContainer extends BaseExpirableStatementContainer implements Serializable {
+public class TrustMarkStatusContainer extends BaseExpirableStatementContainer implements Serializable {
 
     /** Serial version UID. */
     private static final long serialVersionUID = 756269369356884270L;
@@ -44,7 +44,7 @@ public class RemoteTrustMarkStatusContainer extends BaseExpirableStatementContai
      * @param validExpirationInstant expiration instant for valid statement, must not be null
      * @param invalidExpirationInstant expiration instant for invalid statement, must not be null
      */
-    public RemoteTrustMarkStatusContainer(@Nonnull final TrustMarkStatusCacheIdentifier id,
+    public TrustMarkStatusContainer(@Nonnull final TrustMarkStatusCacheIdentifier id,
             @Nullable final TrustMarkStatus trustMarkStatus, @Nonnull final Instant validExpirationInstant,
             @Nonnull final Instant invalidExpirationInstant) {
         super(validExpirationInstant, trustMarkStatus, invalidExpirationInstant);
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkStatusIdentifierCriterion.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkStatusIdentifierCriterion.java
similarity index 99%
rename from idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkStatusIdentifierCriterion.java
rename to idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkStatusIdentifierCriterion.java
index 4b69075..46b737f 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustmark/TrustMarkStatusIdentifierCriterion.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustmark/TrustMarkStatusIdentifierCriterion.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark;
 
 import java.util.Objects;
 
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/util/EntityStatementHelper.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/util/EntityStatementHelper.java
index d46e9a1..e3ab216 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/util/EntityStatementHelper.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/util/EntityStatementHelper.java
@@ -26,7 +26,7 @@ import org.slf4j.Logger;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.EntityConfigurationContainer;
 import net.shibboleth.oidc.metadata.cache.MetadataCache;
 import net.shibboleth.oidc.metadata.cache.MetadataCacheException;
 import net.shibboleth.shared.primitive.LoggerFactory;
@@ -73,11 +73,11 @@ public class EntityStatementHelper {
      * @return endpoint URI
      */
     @Nullable public static URI fetchEndpointUriFromFederationEntity(
-            @Nonnull MetadataCache<RemoteEntityConfigurationContainer> cache,
+            @Nonnull MetadataCache<EntityConfigurationContainer> cache,
             @Nonnull final String entityId, @Nonnull final String endpointId) {
         final CriteriaSet criteria = new CriteriaSet(new SubjectEntityIDCriterion(entityId));
         try {
-            final List<RemoteEntityConfigurationContainer> result = cache.get(criteria);
+            final List<EntityConfigurationContainer> result = cache.get(criteria);
             if (!result.isEmpty()) {
                 return Optional.ofNullable(result.get(0).getStatement())
                         .map(statement -> statement.getParsedPayload().getMetadata())
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/CallResolveEntityApi.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/CallResolveEntityApi.java
index d2d9f61..13e3df2 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/CallResolveEntityApi.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/CallResolveEntityApi.java
@@ -50,11 +50,11 @@ import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.ResolveEntityResponse;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.ResponseContainerExpirationCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubjectEntityStatementCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.resolver.RemoteResolveEntityCacheContainerIdentifier;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.resolver.RemoteResolveEntityCacheIdentifierCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.resolver.RemoteResolveEntityResponseContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.EntityConfigurationContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.resolver.ResolveEntityCacheContainerIdentifier;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.resolver.ResolveEntityCacheIdentifierCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.resolver.ResolveEntityResponseContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.impl.EntityConfigurationImpl;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.impl.SubordinateStatementImpl;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.payload.ResolveEntityResponsePayload;
@@ -99,10 +99,10 @@ public class CallResolveEntityApi extends AbstractProfileAction {
     @Nonnull private Function<ProfileRequestContext, RelyingPartyTrustChainContext> trustChainContextCreationStrategy;
 
     /** Cache used to fetch the issuer entity configuration from. */
-    @NonnullAfterInit private MetadataCache<RemoteEntityConfigurationContainer> entityConfigurationCache;
+    @NonnullAfterInit private MetadataCache<EntityConfigurationContainer> entityConfigurationCache;
 
     /** Cache containing responses from resolve entity APIs. */
-    @NonnullAfterInit private MetadataCache<RemoteResolveEntityResponseContainer> resolveEntityTrustChainMetadataCache;
+    @NonnullAfterInit private MetadataCache<ResolveEntityResponseContainer> resolveEntityTrustChainMetadataCache;
 
     /** Strategy used to obtain the client id value of the request. */
     @NonnullAfterInit private Function<MessageContext, ClientID> clientIDLookupStrategy;
@@ -172,13 +172,13 @@ public class CallResolveEntityApi extends AbstractProfileAction {
      * 
      * @param cache cache used to fetch the issuer entity configuration from
      */
-    public void setEntityConfigurationCache(@Nonnull final MetadataCache<RemoteEntityConfigurationContainer> cache) {
+    public void setEntityConfigurationCache(@Nonnull final MetadataCache<EntityConfigurationContainer> cache) {
         checkSetterPreconditions();
         entityConfigurationCache = Constraint.isNotNull(cache, "Entity Configuration cache cannot be null");
     }
 
     public void setResolveEntityTrustChainMetadataCache(
-            @Nonnull final MetadataCache<RemoteResolveEntityResponseContainer> cache) {
+            @Nonnull final MetadataCache<ResolveEntityResponseContainer> cache) {
         checkSetterPreconditions();
         resolveEntityTrustChainMetadataCache =
                 Constraint.isNotNull(cache, "ResolveEntityTrustChainMetadataCache cannot be null");
@@ -387,7 +387,7 @@ public class CallResolveEntityApi extends AbstractProfileAction {
             final CriteriaSet criteria = new CriteriaSet(new SubjectEntityIDCriterion(trustedEntity.getEntityId()),
                     new ResponseContainerExpirationCriterion(expirationTime));
 
-            final List<RemoteEntityConfigurationContainer> configurationCacheResult;
+            final List<EntityConfigurationContainer> configurationCacheResult;
             try {
                 configurationCacheResult = entityConfigurationCache.get(criteria);
             } catch (final MetadataCacheException e) {
@@ -409,14 +409,14 @@ public class CallResolveEntityApi extends AbstractProfileAction {
             }
             final String uriValue = uri.toString();
             assert uriValue != null;
-            final RemoteResolveEntityCacheContainerIdentifier entityRequest =
-                    new RemoteResolveEntityCacheContainerIdentifier(
+            final ResolveEntityCacheContainerIdentifier entityRequest =
+                    new ResolveEntityCacheContainerIdentifier(
                             uriValue, nonNullClientId, CollectionSupport.copyToList(trustedEntity.getTrustAnchors()),
                             entityTypesLookupStrategy.apply(profileRequestContext));
             final CriteriaSet criteriaSet = new CriteriaSet();
             baseCriteriaSet.forEach(c -> criteriaSet.add(c));
-            criteriaSet.add(new RemoteResolveEntityCacheIdentifierCriterion(entityRequest));
-            final List<RemoteResolveEntityResponseContainer> cacheResult;
+            criteriaSet.add(new ResolveEntityCacheIdentifierCriterion(entityRequest));
+            final List<ResolveEntityResponseContainer> cacheResult;
             try {
                 cacheResult = resolveEntityTrustChainMetadataCache.get(criteriaSet);
             } catch (final MetadataCacheException e) {
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/DefaultTrustMarkFromMetadataCacheFetchingFunction.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/DefaultTrustMarkFromMetadataCacheFetchingFunction.java
index aa6b859..0e22ad2 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/DefaultTrustMarkFromMetadataCacheFetchingFunction.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/DefaultTrustMarkFromMetadataCacheFetchingFunction.java
@@ -26,10 +26,10 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.TrustMark;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark.RemoteTrustMarkContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark.TrustMarkCacheIdentifier;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark.TrustMarkIdentifierCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark.TrustMarkContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.EntityConfigurationContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark.TrustMarkCacheIdentifier;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark.TrustMarkIdentifierCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.util.EntityStatementHelper;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.profile.TrustedRemoteEntity;
 import net.shibboleth.oidc.metadata.cache.MetadataCache;
@@ -53,10 +53,10 @@ public class DefaultTrustMarkFromMetadataCacheFetchingFunction extends AbstractI
     @Nonnull private Logger log = LoggerFactory.getLogger(DefaultTrustMarkFromMetadataCacheFetchingFunction.class);
 
     /** Cache used to fetch the issuer entity configuration from. */
-    @NonnullAfterInit private MetadataCache<RemoteEntityConfigurationContainer> entityConfigurationCache;
+    @NonnullAfterInit private MetadataCache<EntityConfigurationContainer> entityConfigurationCache;
 
     /** Cache containing responses from Trust Mark APIs. */
-    @NonnullAfterInit private MetadataCache<RemoteTrustMarkContainer> trustMarkCache;
+    @NonnullAfterInit private MetadataCache<TrustMarkContainer> trustMarkCache;
 
     /** Trusted trust mark API entity. */
     @NonnullAfterInit private TrustedRemoteEntity trustedEntity;
@@ -72,7 +72,7 @@ public class DefaultTrustMarkFromMetadataCacheFetchingFunction extends AbstractI
      * 
      * @param cache cache used to fetch the issuer entity configuration from
      */
-    public void setEntityConfigurationCache(@Nonnull final MetadataCache<RemoteEntityConfigurationContainer> cache) {
+    public void setEntityConfigurationCache(@Nonnull final MetadataCache<EntityConfigurationContainer> cache) {
         checkSetterPreconditions();
         entityConfigurationCache = Constraint.isNotNull(cache, "Entity Configuration cache cannot be null");
     }
@@ -82,7 +82,7 @@ public class DefaultTrustMarkFromMetadataCacheFetchingFunction extends AbstractI
      * 
      * @param cache cache containing responses from Trust Mark APIs
      */
-    public void setTrustMarkCache(@Nonnull final MetadataCache<RemoteTrustMarkContainer> cache) {
+    public void setTrustMarkCache(@Nonnull final MetadataCache<TrustMarkContainer> cache) {
         checkSetterPreconditions();
         trustMarkCache = Constraint.isNotNull(cache, "Trust Mark cache cannot be null");
     }
@@ -154,7 +154,7 @@ public class DefaultTrustMarkFromMetadataCacheFetchingFunction extends AbstractI
         final TrustMarkCacheIdentifier trustMarkIdentifier =
                 new TrustMarkCacheIdentifier(uriValue, trustMarkType, subject);
         final CriteriaSet criteriaSet = new CriteriaSet(new TrustMarkIdentifierCriterion(trustMarkIdentifier));
-        final List<RemoteTrustMarkContainer> cacheResult;
+        final List<TrustMarkContainer> cacheResult;
         try {
             cacheResult = trustMarkCache.get(criteriaSet);
         } catch (final MetadataCacheException e) {
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ResolveTrustChains.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ResolveTrustChains.java
index 788bb55..1ca9a89 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ResolveTrustChains.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ResolveTrustChains.java
@@ -35,8 +35,8 @@ import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityConfiguration;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteTrustChainsContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubjectEntityStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.TrustChainsContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.profile.context.RelyingPartyTrustChainContext;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.profile.context.VerifiedTrustChain;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.profile.navigate.DefaultPreSelectedTrustChainIDsLookupStrategy;
@@ -69,7 +69,7 @@ public class ResolveTrustChains extends AbstractTrustChainResolutionAction {
     @Nonnull private Logger log = LoggerFactory.getLogger(ResolveTrustChains.class);
 
     /** Metadata cache for trust chains. */
-    @NonnullAfterInit private MetadataCache<RemoteTrustChainsContainer> trustChainCache;
+    @NonnullAfterInit private MetadataCache<TrustChainsContainer> trustChainCache;
 
     /** Strategy used to obtain the client id value of the request. */
     @NonnullAfterInit private Function<MessageContext, ClientID> clientIDLookupStrategy;
@@ -105,7 +105,7 @@ public class ResolveTrustChains extends AbstractTrustChainResolutionAction {
      * 
      * @param cache metadata cache
      */
-    public void setTrustChainCache(@Nonnull final MetadataCache<RemoteTrustChainsContainer> cache) {
+    public void setTrustChainCache(@Nonnull final MetadataCache<TrustChainsContainer> cache) {
         checkSetterPreconditions();
         trustChainCache = Constraint.isNotNull(cache, "TrustChainCache cannot be null");
     }
@@ -217,7 +217,7 @@ public class ResolveTrustChains extends AbstractTrustChainResolutionAction {
             ActionSupport.buildEvent(profileRequestContext, AuthnEventIds.INVALID_CREDENTIALS);
             return;
         }
-        final List<RemoteTrustChainsContainer> cacheResult;
+        final List<TrustChainsContainer> cacheResult;
         try {
             cacheResult = trustChainCache.get(criteriaSet);
         } catch (final MetadataCacheException e) {
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ResolveTrustMarks.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ResolveTrustMarks.java
index 19e31b4..30bb795 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ResolveTrustMarks.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ResolveTrustMarks.java
@@ -41,9 +41,9 @@ import com.nimbusds.jwt.SignedJWT;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityStatementCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.TrustMarkOwnersCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteTrustChainsContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubjectEntityStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.TrustChainsContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.profile.context.RelyingPartyTrustChainContext;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.profile.context.VerifiedTrustChain;
 import net.shibboleth.idp.profile.AbstractProfileAction;
@@ -92,7 +92,7 @@ public class ResolveTrustMarks extends AbstractProfileAction {
     @Nonnull private Predicate<ProfileRequestContext> trustedTrustMarkIssuersOnlyCondition;
 
     /** Metadata cache for trust chains (for trust mark issuers). */
-    @NonnullAfterInit private MetadataCache<RemoteTrustChainsContainer> trustChainCache;
+    @NonnullAfterInit private MetadataCache<TrustChainsContainer> trustChainCache;
 
     /** Trust engine used to validate a trust mark signature. */
     @NonnullAfterInit private TrustEngine<SignedJWT> trustEngine;
@@ -195,7 +195,7 @@ public class ResolveTrustMarks extends AbstractProfileAction {
      * 
      * @param cache metadata cache
      */
-    public void setTrustChainCache(@Nonnull final MetadataCache<RemoteTrustChainsContainer> cache) {
+    public void setTrustChainCache(@Nonnull final MetadataCache<TrustChainsContainer> cache) {
         checkSetterPreconditions();
         trustChainCache = Constraint.isNotNull(cache, "TrustChainCache cannot be null");
     }
@@ -467,7 +467,7 @@ public class ResolveTrustMarks extends AbstractProfileAction {
         final String issuer = trustMarkClaims.getIssuer();
         assert issuer != null;
         log.debug("{} Resolving trust chain for {}", getLogPrefix(), issuer);
-        final List<RemoteTrustChainsContainer> cacheResult;
+        final List<TrustChainsContainer> cacheResult;
         try {
             cacheResult = trustChainCache.get(new CriteriaSet(new SubjectEntityIDCriterion(issuer)));
         } catch (final MetadataCacheException e) {
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ValidateSelectedTrustChain.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ValidateSelectedTrustChain.java
index c734cdd..7e9913f 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ValidateSelectedTrustChain.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/impl/ValidateSelectedTrustChain.java
@@ -28,7 +28,7 @@ import org.slf4j.Logger;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.messaging.impl.ResolveEntityRequest;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.EntityConfigurationContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.profile.context.RelyingPartyTrustChainContext;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.profile.context.VerifiedTrustChain;
 import net.shibboleth.idp.profile.AbstractProfileAction;
@@ -63,7 +63,7 @@ public class ValidateSelectedTrustChain extends AbstractProfileAction {
     @Nonnull private Logger log = LoggerFactory.getLogger(ValidateSelectedTrustChain.class);
 
     /** Metadata cache for entity configurations. */
-    @NonnullAfterInit private MetadataCache<RemoteEntityConfigurationContainer> entityConfigurationCache;
+    @NonnullAfterInit private MetadataCache<EntityConfigurationContainer> entityConfigurationCache;
 
     /** Strategy used to lookup the trust chain context. */
     @Nonnull private Function<ProfileRequestContext, RelyingPartyTrustChainContext> trustChainContextLookupStrategy;
@@ -96,7 +96,7 @@ public class ValidateSelectedTrustChain extends AbstractProfileAction {
      * 
      * @param cache What to set.
      */
-    public void setEntityConfigurationCache(@Nonnull final MetadataCache<RemoteEntityConfigurationContainer> cache) {
+    public void setEntityConfigurationCache(@Nonnull final MetadataCache<EntityConfigurationContainer> cache) {
         checkSetterPreconditions();
         entityConfigurationCache = Constraint.isNotNull(cache, "Entity configuration metadata cache cannot be null");
     }
@@ -217,7 +217,7 @@ public class ValidateSelectedTrustChain extends AbstractProfileAction {
     protected boolean isSubjectValid(@Nonnull final String subject) {
         final SubjectEntityIDCriterion subjectCriterion = new SubjectEntityIDCriterion(subject);
         try {
-            final List<RemoteEntityConfigurationContainer> result =
+            final List<EntityConfigurationContainer> result =
                     entityConfigurationCache.get(new CriteriaSet(subjectCriterion));
             if (result.size() == 1 && result.get(0).getStatement() != null) {
                 return true;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/logic/DefaultProvidedEntityConfigurationValidationStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/logic/DefaultProvidedEntityConfigurationValidationStrategy.java
index fd42bd6..54603bb 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/logic/DefaultProvidedEntityConfigurationValidationStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/logic/DefaultProvidedEntityConfigurationValidationStrategy.java
@@ -25,9 +25,9 @@ import org.slf4j.Logger;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityConfiguration;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local.ProvidedEntityConfigurationContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local.ProvidedEntityConfigurationContainerCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.EntityConfigurationContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.ProvidedEntityConfigurationContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.ProvidedEntityConfigurationContainerCriterion;
 import net.shibboleth.oidc.metadata.cache.MetadataCache;
 import net.shibboleth.oidc.metadata.cache.MetadataCacheException;
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
@@ -48,14 +48,14 @@ public class DefaultProvidedEntityConfigurationValidationStrategy extends Abstra
     @Nonnull private Logger log = LoggerFactory.getLogger(DefaultProvidedEntityConfigurationValidationStrategy.class);
 
     /** Metadata cache for entity configuration validation. */
-    @NonnullAfterInit private MetadataCache<RemoteEntityConfigurationContainer> metadataCache;
+    @NonnullAfterInit private MetadataCache<EntityConfigurationContainer> metadataCache;
 
     /**
      * Set the metadata cache for entity configuration validation.
      * 
      * @param cache What to set.
      */
-    public void setMetadataCache(@Nonnull final MetadataCache<RemoteEntityConfigurationContainer> cache) {
+    public void setMetadataCache(@Nonnull final MetadataCache<EntityConfigurationContainer> cache) {
         checkSetterPreconditions();
         metadataCache = Constraint.isNotNull(cache, "Metadata cache cannot be null");
     }
@@ -80,7 +80,7 @@ public class DefaultProvidedEntityConfigurationValidationStrategy extends Abstra
             final ProvidedEntityConfigurationContainerCriterion criterion =
                     new ProvidedEntityConfigurationContainerCriterion(container);
             try {
-                final List<RemoteEntityConfigurationContainer> result =
+                final List<EntityConfigurationContainer> result =
                         metadataCache.get(new CriteriaSet(criterion));
                 if (result.size() == 1 && result.get(0).getStatement() != null) {
                     return true;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/logic/DefaultProvidedTrustChainValidationStrategy.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/logic/DefaultProvidedTrustChainValidationStrategy.java
index 2ff1715..97ee6c1 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/logic/DefaultProvidedTrustChainValidationStrategy.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/profile/logic/DefaultProvidedTrustChainValidationStrategy.java
@@ -24,9 +24,9 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local.ProvidedTrustChainContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local.ProvidedTrustChainContainerCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteTrustChainsContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.ProvidedTrustChainContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.ProvidedTrustChainContainerCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.TrustChainsContainer;
 import net.shibboleth.oidc.metadata.cache.MetadataCache;
 import net.shibboleth.oidc.metadata.cache.MetadataCacheException;
 import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
@@ -47,14 +47,14 @@ public class DefaultProvidedTrustChainValidationStrategy extends AbstractIdentif
     @Nonnull private Logger log = LoggerFactory.getLogger(DefaultProvidedTrustChainValidationStrategy.class);
 
     /** Metadata cache for trust chain validation. */
-    @NonnullAfterInit private MetadataCache<RemoteTrustChainsContainer> metadataCache;
+    @NonnullAfterInit private MetadataCache<TrustChainsContainer> metadataCache;
 
     /**
      * Set the metadata cache for trust chain validation.
      * 
      * @param cache What to set.
      */
-    public void setMetadataCache(@Nonnull final MetadataCache<RemoteTrustChainsContainer> cache) {
+    public void setMetadataCache(@Nonnull final MetadataCache<TrustChainsContainer> cache) {
         checkSetterPreconditions();
         metadataCache = Constraint.isNotNull(cache, "Metadata cache cannot be null");
     }
@@ -79,7 +79,7 @@ public class DefaultProvidedTrustChainValidationStrategy extends AbstractIdentif
             final ProvidedTrustChainContainerCriterion criterion =
                     new ProvidedTrustChainContainerCriterion(container);
             try {
-                final List<RemoteTrustChainsContainer> result = metadataCache.get(new CriteriaSet(criterion));
+                final List<TrustChainsContainer> result = metadataCache.get(new CriteriaSet(criterion));
                 if (result.size() == 1 && !result.get(0).getTrustChains().isEmpty()) {
                     return true;
                 }
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultEntityConfigurationCredentialResolver.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultEntityConfigurationCredentialResolver.java
index 73a1834..260a517 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultEntityConfigurationCredentialResolver.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultEntityConfigurationCredentialResolver.java
@@ -26,7 +26,7 @@ import org.slf4j.Logger;
 import com.nimbusds.jose.jwk.JWKSet;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubjectEntityStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityStatementCriterion;
 import net.shibboleth.oidc.security.credential.impl.BasicJOSEObjectCredentialResolver;
 import net.shibboleth.shared.primitive.LoggerFactory;
 import net.shibboleth.shared.resolver.CriteriaSet;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultLocalTrustAnchorCredentialResolver.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultLocalTrustAnchorCredentialResolver.java
index 2b3379e..4c9be9c 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultLocalTrustAnchorCredentialResolver.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultLocalTrustAnchorCredentialResolver.java
@@ -27,8 +27,8 @@ import org.slf4j.Logger;
 import com.nimbusds.jose.jwk.JWK;
 import com.nimbusds.jose.jwk.JWKSet;
 
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityStatementCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local.LocalKeyContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubjectEntityStatementCriterion;
 import net.shibboleth.oidc.metadata.cache.MetadataCache;
 import net.shibboleth.oidc.metadata.cache.MetadataCacheException;
 import net.shibboleth.oidc.security.credential.impl.BasicJOSEObjectCredentialResolver;
diff --git a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultSubordinateStatementCredentialResolver.java b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultSubordinateStatementCredentialResolver.java
index afafd7b..4c70222 100644
--- a/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultSubordinateStatementCredentialResolver.java
+++ b/idp-oidfed-op-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oidfed/security/credential/DefaultSubordinateStatementCredentialResolver.java
@@ -26,9 +26,9 @@ import org.slf4j.Logger;
 import com.nimbusds.jose.jwk.JWKSet;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.IssuerEntityStatementCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubjectEntityStatementCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubjectStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.IssuerEntityStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityStatementCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectStatementCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.payload.BaseExpirableSubjectPayload;
 import net.shibboleth.oidc.security.credential.impl.BasicJOSEObjectCredentialResolver;
 import net.shibboleth.shared.primitive.LoggerFactory;
diff --git a/idp-oidfed-op-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml b/idp-oidfed-op-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
index 3b5b4ce..a146e31 100644
--- a/idp-oidfed-op-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
+++ b/idp-oidfed-op-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
@@ -84,7 +84,7 @@
     </bean>
 
     <bean id="DefaultResponseContainerExpirationTimeStrategy"
-        class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultResponseContainerExpirationTimeStrategy"/>
+        class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultResponseContainerExpirationTimeStrategy"/>
 
     <bean id="shibboleth.oidfed.EntityConfigurationMetadataCacheBuilderSpec"
         class="net.shibboleth.oidc.metadata.cache.impl.DynamicMetadataCacheBuilderSpec"
@@ -96,7 +96,7 @@
             <bean parent="shibboleth.Functions.Expression" c:expression="#input?.getEntityId()"/>
         </property>
         <property name="fetchStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.configuration.DefaultEntityConfigurationFetchingStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.DefaultEntityConfigurationFetchingStrategy"
                 p:httpClient="#{getObject('shibboleth.oidfed.HttpClient') ?: getObject('shibboleth.InternalHttpClient')}"
                 p:httpClientSecurityParameters="#{getObject('shibboleth.oidfed.NonBrowser.HttpClientSecurityParameters')}"
                 p:objectMapper-ref="shibboleth.oidfed.JWTPayloadJSONObjectMapper">
@@ -124,17 +124,17 @@
             </bean>
         </property>
         <property name="metadataFilterStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementMetadataFilterStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementMetadataFilterStrategy"
                 p:customFilterStrategies="#{getObject('%{idp.oidfed.cache.entityConfiguration.customFilterStrategies:}'.trim())}">
                 <property name="validationConditions">
                     <util:list value-type="java.util.function.BiPredicate">
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementSignatureValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementSignatureValidationCondition"
                             p:trustEngine-ref="shibboleth.oidfed.DefaultEntityConfigurationTrustEngine">
                             <property name="criteriaSetLookupStrategy">
-                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.configuration.DefaultEntityConfigurationCriteriaSetLookupFunction"/>
+                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.DefaultEntityConfigurationCriteriaSetLookupFunction"/>
                             </property>
                         </bean>
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementContentValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementContentValidationCondition"
                             p:claimsValidator-ref="%{idp.oidfed.entityConfiguration.claimsValidator:shibboleth.oidfed.DefaultEntityConfigurationClaimsValidator}"
                             p:httpServletRequestSupplier-ref="shibboleth.HttpServletRequestSupplier"/>
                     </util:list>
@@ -207,7 +207,7 @@
             <bean parent="shibboleth.Functions.Expression" c:expression="#input?.getIdentifier()"/>
         </property>
         <property name="criteriaToIdentifierStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.subordinate.DefaultSubordinateStatementCriteriaToIdentifierStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.subordinate.DefaultSubordinateStatementCriteriaToIdentifierStrategy"
                 p:criteriaToSubjectEntityIdStrategy-ref="shibboleth.oidfed.DefaultSubjectEntityIDCriteriaToIdentifierStrategy">
                 <property name="criteriaToIssuerEntityIdStrategy">
                     <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultIssuerEntityIDCriteriaToIdentifierStrategy"/>
@@ -215,18 +215,18 @@
             </bean>
         </property>
         <property name="metadataFilterStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementMetadataFilterStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementMetadataFilterStrategy"
                 p:customFilterStrategies="#{getObject('%{idp.oidfed.cache.subordinateStatement.customFilterStrategies:}'.trim())}">
                 <property name="validationConditions">
                     <util:list value-type="java.util.function.BiPredicate">
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementSignatureValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementSignatureValidationCondition"
                             p:trustEngine-ref="shibboleth.oidfed.DefaultSubordinateStatementTrustEngine">
                             <property name="criteriaSetLookupStrategy">
-                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementValidationCriteriaSetLookupFunction"
+                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementValidationCriteriaSetLookupFunction"
                                     p:entityConfigurationCache-ref="shibboleth.oidfed.EntityConfigurationMetadataCache"/>
                             </property>
                         </bean>
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementContentValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementContentValidationCondition"
                             p:claimsValidator-ref="%{idp.oidfed.subordinateStatement.claimsValidator:shibboleth.oidfed.DefaultSubordinateStatementClaimsValidator}"
                             p:httpServletRequestSupplier-ref="shibboleth.HttpServletRequestSupplier"/>
                     </util:list>
@@ -234,7 +234,7 @@
             </bean>
         </property>
         <property name="fetchStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.subordinate.DefaultSubordinateStatementFetchingStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.subordinate.DefaultSubordinateStatementFetchingStrategy"
                 p:httpClient="#{getObject('shibboleth.oidfed.HttpClient') ?: getObject('shibboleth.InternalHttpClient')}"
                 p:httpClientSecurityParameters="#{getObject('shibboleth.oidfed.NonBrowser.HttpClientSecurityParameters')}"
                 p:objectMapper-ref="shibboleth.oidfed.JWTPayloadJSONObjectMapper"
@@ -321,7 +321,7 @@
             <bean parent="shibboleth.Functions.Expression" c:expression="#input?.getEntityId()"/>
         </property>
         <property name="metadataFilterStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustchain.DefaultRemoteTrustChainSignatureValidationFilterStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.DefaultTrustChainSignatureValidationFilterStrategy"
                 p:customFilterStrategies="#{getObject('%{idp.oidfed.cache.trustChain.customFilterStrategies:}'.trim())}">
                 <property name="trustEngine">
                     <bean class="net.shibboleth.oidc.security.impl.ExplicitKeySignedJWTTrustEngine">
@@ -351,7 +351,7 @@
             </bean>
         </property>
         <property name="fetchStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustchain.DefaultTrustChainFetchingStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.DefaultTrustChainFetchingStrategy"
                 p:criteriaToSubjectEntityIdStrategy-ref="shibboleth.oidfed.DefaultSubjectEntityIDCriteriaToIdentifierStrategy"
                 p:entityConfigurationCache-ref="shibboleth.oidfed.EntityConfigurationMetadataCache"
                 p:subordinateStatementCache-ref="shibboleth.oidfed.SubordinateEntityStatementMetadataCache"
@@ -380,24 +380,24 @@
         p:maxCacheDuration="%{idp.oidfed.cache.resolveEntity.maxRefreshDelay:PT30M}"
         p:metadataExpirationTimeStrategy-ref="DefaultResponseContainerExpirationTimeStrategy">
         <property name="criteriaToIdentifierStrategy">
-            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.resolver.RemoteResolveEntityCacheIdentifierCriterion))?.getIdentifier()"/>
+            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.resolver.ResolveEntityCacheIdentifierCriterion))?.getIdentifier()"/>
         </property>
         <property name="identifierExtractionStrategy">
             <bean parent="shibboleth.Functions.Expression" c:expression="#input?.getIdentifier()"/>
         </property>
         <property name="metadataFilterStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementMetadataFilterStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementMetadataFilterStrategy"
                 p:customFilterStrategies="#{getObject('%{idp.oidfed.cache.resolveEntity.customFilterStrategies:}'.trim())}">
                 <property name="validationConditions">
                     <util:list value-type="java.util.function.BiPredicate">
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementSignatureValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementSignatureValidationCondition"
                             p:trustEngine-ref="shibboleth.oidfed.DefaultSubordinateStatementTrustEngine">
                             <property name="criteriaSetLookupStrategy">
-                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementValidationCriteriaSetLookupFunction"
+                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementValidationCriteriaSetLookupFunction"
                                     p:entityConfigurationCache-ref="shibboleth.oidfed.EntityConfigurationMetadataCache"/>
                             </property>
                         </bean>
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementContentValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementContentValidationCondition"
                             p:claimsValidator-ref="%{idp.oidfed.remoteResolver.claimsValidator:shibboleth.oidfed.DefaultResolveEntityResponseClaimsValidator}"
                             p:httpServletRequestSupplier-ref="shibboleth.HttpServletRequestSupplier"/>
                     </util:list>
@@ -405,7 +405,7 @@
             </bean>
         </property>
         <property name="fetchStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.resolver.DefaultResolveEntityTrustChainFetchingStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.resolver.DefaultResolveEntityTrustChainFetchingStrategy"
                 p:httpClient="#{getObject('shibboleth.oidfed.HttpClient') ?: getObject('shibboleth.InternalHttpClient')}"
                 p:httpClientSecurityParameters="#{getObject('shibboleth.oidfed.NonBrowser.HttpClientSecurityParameters')}"
                 p:objectMapper-ref="shibboleth.oidfed.JWTPayloadJSONObjectMapper">
@@ -511,21 +511,21 @@
             <bean parent="shibboleth.Functions.Expression" c:expression="#input?.getRequest().getTrustMark().serialize()"/>
         </property>
         <property name="criteriaToIdentifierStrategy">
-            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark.TrustMarkStatusIdentifierCriterion))?.getIdentifier()"/>
+            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark.TrustMarkStatusIdentifierCriterion))?.getIdentifier()"/>
         </property>
         <property name="metadataFilterStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementMetadataFilterStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementMetadataFilterStrategy"
                 p:customFilterStrategies="#{getObject('%{idp.oidfed.cache.trustMarkStatus.customFilterStrategies:}'.trim())}">
                 <property name="validationConditions">
                     <util:list value-type="java.util.function.BiPredicate">
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementSignatureValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementSignatureValidationCondition"
                             p:trustEngine-ref="shibboleth.oidfed.DefaultSubordinateStatementTrustEngine">
                             <property name="criteriaSetLookupStrategy">
-                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark.DefaultTrustMarkValidationCriteriaSetLookupFunction"
+                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark.DefaultTrustMarkValidationCriteriaSetLookupFunction"
                                     p:trustChainCache-ref="shibboleth.oidfed.TrustChainMetadataCache"/>
                             </property>
                         </bean>
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementContentValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementContentValidationCondition"
                             p:claimsValidator-ref="%{idp.oidfed.trustMarkStatus.claimsValidator:shibboleth.oidfed.DefaultTrustMarkStatusClaimsValidator}"
                             p:httpServletRequestSupplier-ref="shibboleth.HttpServletRequestSupplier"/>
                     </util:list>
@@ -533,7 +533,7 @@
             </bean>
         </property>
         <property name="fetchStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark.DefaultTrustMarkStatusFetchingStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark.DefaultTrustMarkStatusFetchingStrategy"
                 p:httpClient="#{getObject('shibboleth.oidfed.HttpClient') ?: getObject('shibboleth.InternalHttpClient')}"
                 p:httpClientSecurityParameters="#{getObject('shibboleth.oidfed.NonBrowser.HttpClientSecurityParameters')}"
                 p:objectMapper-ref="shibboleth.oidfed.JWTPayloadJSONObjectMapper">
@@ -598,21 +598,21 @@
             <bean parent="shibboleth.Functions.Expression" c:expression="#input?.getIdentifier()"/>
         </property>
         <property name="criteriaToIdentifierStrategy">
-            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark.TrustMarkIdentifierCriterion))?.getIdentifier()"/>
+            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark.TrustMarkIdentifierCriterion))?.getIdentifier()"/>
         </property>
         <property name="metadataFilterStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementMetadataFilterStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementMetadataFilterStrategy"
                 p:customFilterStrategies="#{getObject('%{idp.oidfed.cache.trustMark.customFilterStrategies:}'.trim())}">
                 <property name="validationConditions">
                     <util:list value-type="java.util.function.BiPredicate">
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementSignatureValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementSignatureValidationCondition"
                             p:trustEngine-ref="shibboleth.oidfed.DefaultSubordinateStatementTrustEngine">
                             <property name="criteriaSetLookupStrategy">
-                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark.DefaultTrustMarkValidationCriteriaSetLookupFunction"
+                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark.DefaultTrustMarkValidationCriteriaSetLookupFunction"
                                     p:trustChainCache-ref="shibboleth.oidfed.TrustChainMetadataCache"/>
                             </property>
                         </bean>
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementContentValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementContentValidationCondition"
                             p:claimsValidator-ref="%{idp.oidfed.trustMark.claimsValidator:shibboleth.oidfed.DefaultTrustMarkClaimsValidator}"
                             p:httpServletRequestSupplier-ref="shibboleth.HttpServletRequestSupplier"/>
                     </util:list>
@@ -620,7 +620,7 @@
             </bean>
         </property>
         <property name="fetchStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark.DefaultTrustMarkFetchingStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark.DefaultTrustMarkFetchingStrategy"
                 p:httpClient="#{getObject('shibboleth.oidfed.HttpClient') ?: getObject('shibboleth.InternalHttpClient')}"
                 p:httpClientSecurityParameters="#{getObject('shibboleth.oidfed.NonBrowser.HttpClientSecurityParameters')}"
                 p:objectMapper-ref="shibboleth.oidfed.JWTPayloadJSONObjectMapper">
diff --git a/idp-oidfed-op-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidfed/register/register-beans.xml b/idp-oidfed-op-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidfed/register/register-beans.xml
index 6ad1232..ecc29a0 100644
--- a/idp-oidfed-op-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidfed/register/register-beans.xml
+++ b/idp-oidfed-op-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidfed/register/register-beans.xml
@@ -63,16 +63,16 @@
     <bean id="FetchThroughProvidedTrustChainMetadataCacheBuilderSpec"
         class="net.shibboleth.oidc.metadata.cache.impl.FetchThroughMetadataCacheBuilderSpec">
         <property name="criteriaToIdentifierStrategy">
-            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local.ProvidedTrustChainContainerCriterion))?.getValue()?.getEntityId()" />
+            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.ProvidedTrustChainContainerCriterion))?.getValue()?.getEntityId()" />
         </property>
         <property name="identifierExtractionStrategy">
             <bean parent="shibboleth.Functions.Expression" c:expression="#input?.getEntityId()"/>
         </property>
         <property name="fetchStrategy">
-            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local.ProvidedTrustChainContainerCriterion))?.getValue()" />
+            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.ProvidedTrustChainContainerCriterion))?.getValue()" />
         </property>
         <property name="metadataFilterStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustchain.DefaultRemoteTrustChainSignatureValidationFilterStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.DefaultTrustChainSignatureValidationFilterStrategy"
                 p:customFilterStrategies="#{getObject('%{idp.oidfed.cache.explicitRegistration.trustChain.customFilterStrategies:}'.trim())}">
                 <property name="trustEngine">
                     <bean class="net.shibboleth.oidc.security.impl.ExplicitKeySignedJWTTrustEngine">
@@ -124,26 +124,26 @@
     <bean id="FetchThroughProvidedEntityConfigurationMetadataCacheBuilderSpec"
         class="net.shibboleth.oidc.metadata.cache.impl.FetchThroughMetadataCacheBuilderSpec">
         <property name="criteriaToIdentifierStrategy">
-            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local.ProvidedEntityConfigurationContainerCriterion))?.getValue()?.getEntityId()" />
+            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.ProvidedEntityConfigurationContainerCriterion))?.getValue()?.getEntityId()" />
         </property>
         <property name="identifierExtractionStrategy">
             <bean parent="shibboleth.Functions.Expression" c:expression="#input?.getEntityId()"/>
         </property>
         <property name="fetchStrategy">
-            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local.ProvidedEntityConfigurationContainerCriterion))?.getValue()" />
+            <bean parent="shibboleth.Functions.Expression" c:expression="#input?.get(T(net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.ProvidedEntityConfigurationContainerCriterion))?.getValue()" />
         </property>
         <property name="metadataFilterStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementMetadataFilterStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementMetadataFilterStrategy"
                 p:customFilterStrategies="#{getObject('%{idp.oidfed.cache.explicitRegistration.entityConfiguration.customFilterStrategies:}'.trim())}">
                 <property name="validationConditions">
                     <util:list value-type="java.util.function.BiPredicate">
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementSignatureValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementSignatureValidationCondition"
                             p:trustEngine-ref="shibboleth.oidfed.DefaultEntityConfigurationTrustEngine">
                             <property name="criteriaSetLookupStrategy">
-                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.configuration.DefaultEntityConfigurationCriteriaSetLookupFunction"/>
+                                <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.DefaultEntityConfigurationCriteriaSetLookupFunction"/>
                             </property>
                         </bean>
-                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.DefaultEntityStatementContentValidationCondition"
+                        <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.DefaultEntityStatementContentValidationCondition"
                             p:claimsValidator-ref="%{idp.oidfed.cache.explicitRegistrationRequest.claimsValidator:shibboleth.oidfed.DefaultExplicitRegistrationRequestClaimsValidator}"
                             p:httpServletRequestSupplier-ref="shibboleth.HttpServletRequestSupplier"/>
                     </util:list>
@@ -197,7 +197,7 @@
             <bean parent="shibboleth.Functions.Expression" c:expression="#input?.getEntityId()"/>
         </property>
         <property name="fetchStrategy">
-            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustchain.DefaultTrustChainFetchingStrategy"
+            <bean class="net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.DefaultTrustChainFetchingStrategy"
                 p:criteriaToSubjectEntityIdStrategy-ref="shibboleth.oidfed.DefaultSubjectEntityIDCriteriaToIdentifierStrategy"
                 p:entityConfigurationCache-ref="shibboleth.oidfed.EntityConfigurationMetadataCache"
                 p:subordinateStatementCache-ref="shibboleth.oidfed.SubordinateEntityStatementMetadataCache"
diff --git a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultTrustChainFetchingStrategyTest.java b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainFetchingStrategyTest.java
similarity index 82%
rename from idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultTrustChainFetchingStrategyTest.java
rename to idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainFetchingStrategyTest.java
index 7c30d93..71a0b8f 100644
--- a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/remote/trustchain/DefaultTrustChainFetchingStrategyTest.java
+++ b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oidfed/metadata/cache/trustchain/DefaultTrustChainFetchingStrategyTest.java
@@ -12,7 +12,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustchain;
+package net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain;
 
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
@@ -31,11 +31,12 @@ import org.testng.annotations.Test;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityConfiguration;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.SubordinateStatement;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.PreSelectedTrustChainCriterion;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.EntityConfigurationContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.local.LocalKeyContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteSubordinateStatementContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteTrustChainsContainer;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.SubordinateStatementCacheIdentifier;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.subordinate.SubordinateStatementCacheIdentifier;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.subordinate.SubordinateStatementContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.DefaultTrustChainFetchingStrategy;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.TrustChainsContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.payload.EntityConfigurationPayload;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.util.EntityStatementHelper;
 import net.shibboleth.oidc.metadata.cache.MetadataCache;
@@ -53,8 +54,8 @@ public class DefaultTrustChainFetchingStrategyTest {
     DefaultTrustChainFetchingStrategy function;
 
     Function<CriteriaSet, String> criteriaToSubjectEntityIdStrategy;
-    MetadataCache<RemoteEntityConfigurationContainer> entityConfigurationCache;
-    MetadataCache<RemoteSubordinateStatementContainer> subordinateStatementCache;
+    MetadataCache<EntityConfigurationContainer> entityConfigurationCache;
+    MetadataCache<SubordinateStatementContainer> subordinateStatementCache;
     MetadataCache<Map<String, LocalKeyContainer>> localTrustAnchorsCache;
     Function<CriteriaSet, Duration> criteriaToValidContainerLifetimeStrategy;
     Function<CriteriaSet, Duration> criteriaToInvalidContainerLifetimeStrategy;
@@ -126,7 +127,7 @@ public class DefaultTrustChainFetchingStrategyTest {
     public void entityConfigurationNoHints_returnsNull() throws MetadataCacheException {
         when(criteriaToValidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
         when(criteriaToInvalidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
-        final RemoteEntityConfigurationContainer ecContainer =
+        final EntityConfigurationContainer ecContainer =
                 ecContainer("mockEntityId", CollectionSupport.emptyList());
         when(entityConfigurationCache.get(any())).thenReturn(CollectionSupport.listOf(ecContainer));
         Assert.assertEquals(function.apply(new CriteriaSet()), null);
@@ -136,7 +137,7 @@ public class DefaultTrustChainFetchingStrategyTest {
     public void entityConfigurationOneUnresolvableHint_returnsEmptyContainer() throws MetadataCacheException {
         when(criteriaToValidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
         when(criteriaToInvalidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
-        final RemoteEntityConfigurationContainer ecContainer =
+        final EntityConfigurationContainer ecContainer =
                 ecContainer("mockEntityId", CollectionSupport.listOf("https://federation.local/immediate"));
         when(entityConfigurationCache.get(any())).thenReturn(CollectionSupport.listOf(ecContainer));
         assertEmptyResult(function.apply(new CriteriaSet()));
@@ -149,17 +150,17 @@ public class DefaultTrustChainFetchingStrategyTest {
         final String anchor = "https://federation.local/immediate";
         when(criteriaToValidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
         when(criteriaToInvalidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
-        final RemoteEntityConfigurationContainer ecContainer =
+        final EntityConfigurationContainer ecContainer =
                 ecContainer(leaf, CollectionSupport.listOf(anchor, "https://federation.local/other"));
-        final RemoteEntityConfigurationContainer authorityContainer =
+        final EntityConfigurationContainer authorityContainer =
                 ecContainer(anchor, CollectionSupport.emptyList());
         when(entityConfigurationCache.get(any()))
             .thenReturn(CollectionSupport.listOf(ecContainer), CollectionSupport.listOf(authorityContainer),
                     CollectionSupport.emptyList());
-        final RemoteSubordinateStatementContainer ssContainer = ssContainer(leaf, anchor);
+        final SubordinateStatementContainer ssContainer = ssContainer(leaf, anchor);
         when(subordinateStatementCache.get(any())).thenReturn(CollectionSupport.listOf(ssContainer),
                 CollectionSupport.emptyList());
-        final RemoteTrustChainsContainer result = function.apply(new CriteriaSet());
+        final TrustChainsContainer result = function.apply(new CriteriaSet());
         Assert.assertNotNull(result);
         assert result != null;
         Assert.assertEquals(result.getTrustChains().size(), 1);
@@ -176,19 +177,19 @@ public class DefaultTrustChainFetchingStrategyTest {
         final String anchor = "https://federation.local/anchor";
         when(criteriaToValidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
         when(criteriaToInvalidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
-        final RemoteEntityConfigurationContainer ecContainer =
+        final EntityConfigurationContainer ecContainer =
                 ecContainer(leaf, CollectionSupport.listOf(immediate, "https://federation.local/other"));
-        final RemoteEntityConfigurationContainer immediateContainer =
+        final EntityConfigurationContainer immediateContainer =
                 ecContainer(immediate, CollectionSupport.listOf(anchor));
         when(entityConfigurationCache.get(any()))
             .thenReturn(CollectionSupport.listOf(ecContainer), CollectionSupport.listOf(immediateContainer),
                     CollectionSupport.emptyList());
-        final RemoteSubordinateStatementContainer ssContainer = ssContainer(leaf, immediate);
+        final SubordinateStatementContainer ssContainer = ssContainer(leaf, immediate);
         when(subordinateStatementCache.get(any())).thenReturn(CollectionSupport.listOf(ssContainer),
                 CollectionSupport.emptyList());
         when(localTrustAnchorsCache.get(any())).thenReturn(
                 CollectionSupport.listOf(CollectionSupport.singletonMap(immediate, mock(LocalKeyContainer.class))));
-        final RemoteTrustChainsContainer result = function.apply(new CriteriaSet());
+        final TrustChainsContainer result = function.apply(new CriteriaSet());
         Assert.assertNotNull(result);
         assert result != null;
         Assert.assertEquals(result.getTrustChains().size(), 1);
@@ -205,23 +206,23 @@ public class DefaultTrustChainFetchingStrategyTest {
         final String anchor = "https://federation.local/anchor";
         when(criteriaToValidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
         when(criteriaToInvalidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
-        final RemoteEntityConfigurationContainer ecContainer =
+        final EntityConfigurationContainer ecContainer =
                 ecContainer(leaf, CollectionSupport.listOf(immediate));
-        final RemoteEntityConfigurationContainer immediateContainer =
+        final EntityConfigurationContainer immediateContainer =
                 ecContainer(immediate, CollectionSupport.listOf(anchor));
-        final RemoteEntityConfigurationContainer authorityContainer =
+        final EntityConfigurationContainer authorityContainer =
                 ecContainer(anchor, CollectionSupport.emptyList());
         when(entityConfigurationCache.get(any()))
             .thenReturn(CollectionSupport.listOf(ecContainer), CollectionSupport.listOf(immediateContainer),
                     CollectionSupport.listOf(authorityContainer), CollectionSupport.emptyList());
-        final RemoteSubordinateStatementContainer ssContainer1 = ssContainer(leaf, immediate);
-        final RemoteSubordinateStatementContainer ssContainer2 = ssContainer(immediate, anchor);
+        final SubordinateStatementContainer ssContainer1 = ssContainer(leaf, immediate);
+        final SubordinateStatementContainer ssContainer2 = ssContainer(immediate, anchor);
         when(subordinateStatementCache.get(any())).thenReturn(CollectionSupport.listOf(ssContainer1),
                 CollectionSupport.listOf(ssContainer2), CollectionSupport.emptyList());
         when(localTrustAnchorsCache.get(any())).thenReturn(
                 CollectionSupport.listOf(CollectionSupport.singletonMap(immediate, mock(LocalKeyContainer.class))),
                 CollectionSupport.emptyList());
-        final RemoteTrustChainsContainer result = function.apply(new CriteriaSet());
+        final TrustChainsContainer result = function.apply(new CriteriaSet());
         Assert.assertNotNull(result);
         assert result != null;
         Assert.assertEquals(result.getTrustChains().size(), 2);
@@ -241,17 +242,17 @@ public class DefaultTrustChainFetchingStrategyTest {
                 new PreSelectedTrustChainCriterion(CollectionSupport.listOf(leaf, anchor));
         when(criteriaToValidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
         when(criteriaToInvalidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
-        final RemoteEntityConfigurationContainer ecContainer =
+        final EntityConfigurationContainer ecContainer =
                 ecContainer(leaf, CollectionSupport.listOf(anchor, "https://federation.local/other"));
-        final RemoteEntityConfigurationContainer authorityContainer =
+        final EntityConfigurationContainer authorityContainer =
                 ecContainer(anchor, CollectionSupport.emptyList());
         when(entityConfigurationCache.get(any()))
             .thenReturn(CollectionSupport.listOf(ecContainer), CollectionSupport.listOf(authorityContainer),
                     CollectionSupport.emptyList());
-        final RemoteSubordinateStatementContainer ssContainer = ssContainer(leaf, anchor);
+        final SubordinateStatementContainer ssContainer = ssContainer(leaf, anchor);
         when(subordinateStatementCache.get(any())).thenReturn(CollectionSupport.listOf(ssContainer),
                 CollectionSupport.emptyList());
-        final RemoteTrustChainsContainer result = function.apply(new CriteriaSet(preSelectedCriterion));
+        final TrustChainsContainer result = function.apply(new CriteriaSet(preSelectedCriterion));
         Assert.assertNotNull(result);
         assert result != null;
         Assert.assertEquals(result.getTrustChains().size(), 1);
@@ -269,14 +270,14 @@ public class DefaultTrustChainFetchingStrategyTest {
                 new PreSelectedTrustChainCriterion(CollectionSupport.listOf(leaf, "https://federation.local/not"));
         when(criteriaToValidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
         when(criteriaToInvalidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
-        final RemoteEntityConfigurationContainer ecContainer =
+        final EntityConfigurationContainer ecContainer =
                 ecContainer(leaf, CollectionSupport.listOf(anchor, "https://federation.local/other"));
-        final RemoteEntityConfigurationContainer authorityContainer =
+        final EntityConfigurationContainer authorityContainer =
                 ecContainer(anchor, CollectionSupport.emptyList());
         when(entityConfigurationCache.get(any()))
             .thenReturn(CollectionSupport.listOf(ecContainer), CollectionSupport.listOf(authorityContainer),
                     CollectionSupport.emptyList());
-        final RemoteSubordinateStatementContainer ssContainer = ssContainer(leaf, anchor);
+        final SubordinateStatementContainer ssContainer = ssContainer(leaf, anchor);
         when(subordinateStatementCache.get(any())).thenReturn(CollectionSupport.listOf(ssContainer),
                 CollectionSupport.emptyList());
         assertEmptyResult(function.apply(new CriteriaSet(preSelectedCriterion)));
@@ -290,20 +291,20 @@ public class DefaultTrustChainFetchingStrategyTest {
         final String anchor2 = "https://federation.local/immediate2";
         when(criteriaToValidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
         when(criteriaToInvalidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
-        final RemoteEntityConfigurationContainer ecContainer =
+        final EntityConfigurationContainer ecContainer =
                 ecContainer(leaf, CollectionSupport.listOf(anchor1, anchor2));
-        final RemoteEntityConfigurationContainer authorityContainer1 =
+        final EntityConfigurationContainer authorityContainer1 =
                 ecContainer(anchor1, CollectionSupport.emptyList());
-        final RemoteEntityConfigurationContainer authorityContainer2 =
+        final EntityConfigurationContainer authorityContainer2 =
                 ecContainer(anchor2, CollectionSupport.emptyList());
         when(entityConfigurationCache.get(any()))
             .thenReturn(CollectionSupport.listOf(ecContainer), CollectionSupport.listOf(authorityContainer1),
                     CollectionSupport.listOf(authorityContainer2));
-        final RemoteSubordinateStatementContainer ssContainer1 = ssContainer(leaf, anchor1);
-        final RemoteSubordinateStatementContainer ssContainer2 = ssContainer(leaf, anchor2);
+        final SubordinateStatementContainer ssContainer1 = ssContainer(leaf, anchor1);
+        final SubordinateStatementContainer ssContainer2 = ssContainer(leaf, anchor2);
         when(subordinateStatementCache.get(any())).thenReturn(CollectionSupport.listOf(ssContainer1),
                 CollectionSupport.listOf(ssContainer2));
-        final RemoteTrustChainsContainer result = function.apply(new CriteriaSet());
+        final TrustChainsContainer result = function.apply(new CriteriaSet());
         Assert.assertNotNull(result);
         assert result != null;
         Assert.assertEquals(result.getTrustChains().size(), 2);
@@ -321,44 +322,44 @@ public class DefaultTrustChainFetchingStrategyTest {
         final String anchor2 = "https://federation.local/immediate2";
         when(criteriaToValidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
         when(criteriaToInvalidContainerLifetimeStrategy.apply(any())).thenReturn(Duration.ofMinutes(5));
-        final RemoteEntityConfigurationContainer ecContainer =
+        final EntityConfigurationContainer ecContainer =
                 ecContainer(leaf, CollectionSupport.listOf(anchor1));
-        final RemoteEntityConfigurationContainer authorityContainer1 =
+        final EntityConfigurationContainer authorityContainer1 =
                 ecContainer(anchor1, CollectionSupport.listOf(anchor2));
-        final RemoteEntityConfigurationContainer authorityContainer2 =
+        final EntityConfigurationContainer authorityContainer2 =
                 ecContainer(anchor2, CollectionSupport.listOf(anchor1));
         when(entityConfigurationCache.get(any()))
             .thenReturn(CollectionSupport.listOf(ecContainer), CollectionSupport.listOf(authorityContainer1),
                     CollectionSupport.listOf(authorityContainer2));
-        final RemoteSubordinateStatementContainer ssContainer1 = ssContainer(leaf, anchor1);
-        final RemoteSubordinateStatementContainer ssContainer2 = ssContainer(anchor1, anchor2);
-        final RemoteSubordinateStatementContainer ssContainer3 = ssContainer(anchor2, anchor1);
+        final SubordinateStatementContainer ssContainer1 = ssContainer(leaf, anchor1);
+        final SubordinateStatementContainer ssContainer2 = ssContainer(anchor1, anchor2);
+        final SubordinateStatementContainer ssContainer3 = ssContainer(anchor2, anchor1);
         when(subordinateStatementCache.get(any())).thenReturn(CollectionSupport.listOf(ssContainer1),
                 CollectionSupport.listOf(ssContainer2), CollectionSupport.listOf(ssContainer3));
         assertEmptyResult(function.apply(new CriteriaSet()));
     }
 
-    protected void assertEmptyResult(final RemoteTrustChainsContainer container) {
+    protected void assertEmptyResult(final TrustChainsContainer container) {
         Assert.assertNotNull(container);
         Assert.assertEquals(container.getTrustChains(), CollectionSupport.emptyList());
     }
     
-    protected RemoteEntityConfigurationContainer ecContainer(final String id, final List<String> authorityHints) {
+    protected EntityConfigurationContainer ecContainer(final String id, final List<String> authorityHints) {
         final Instant expiration = Instant.now().plusSeconds(300);
         final EntityConfiguration configuration = mock(EntityConfiguration.class);
         final EntityConfigurationPayload payload = mock(EntityConfigurationPayload.class);
         when(payload.getAuthorityHints()).thenReturn(authorityHints);
         when(configuration.getParsedPayload()).thenReturn(payload);
         when(configuration.getSubject()).thenReturn(id);
-        return new RemoteEntityConfigurationContainer(id, configuration, expiration, expiration);
+        return new EntityConfigurationContainer(id, configuration, expiration, expiration);
     }
 
-    protected RemoteSubordinateStatementContainer ssContainer(final String subject, final String issuer) {
+    protected SubordinateStatementContainer ssContainer(final String subject, final String issuer) {
         final Instant expiration = Instant.now().plusSeconds(300);
         final SubordinateStatement statement = mock(SubordinateStatement.class);
         when(statement.getSubject()).thenReturn(subject);
         when(statement.getIssuer()).thenReturn(issuer);
-        return new RemoteSubordinateStatementContainer(
+        return new SubordinateStatementContainer(
                 new SubordinateStatementCacheIdentifier(issuer, subject), statement, expiration, expiration);
     }
 }
diff --git a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/EntityConfigurationFlowTest.java b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/EntityConfigurationFlowTest.java
index 18e8fda..2ba6ed9 100644
--- a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/EntityConfigurationFlowTest.java
+++ b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/EntityConfigurationFlowTest.java
@@ -46,7 +46,7 @@ import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 import net.minidev.json.JSONObject;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.TrustChainTestUtil;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityConfiguration;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.trustmark.DefaultTrustMarkFetchingStrategy;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustmark.DefaultTrustMarkFetchingStrategy;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.impl.EntityConfigurationImpl;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.payload.EntityConfigurationPayload;
 import net.shibboleth.shared.collection.CollectionSupport;
diff --git a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/EntityConfigurationMetadataCacheTest.java b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/EntityConfigurationMetadataCacheTest.java
index ecb9009..f1e1cce 100644
--- a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/EntityConfigurationMetadataCacheTest.java
+++ b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/EntityConfigurationMetadataCacheTest.java
@@ -39,7 +39,7 @@ import net.shibboleth.idp.plugin.oidc.op.oidfed.TrustChainTestUtil;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityConfiguration;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.ResponseContainerExpirationCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.EntityConfigurationContainer;
 import net.shibboleth.idp.plugin.oidc.op.profile.flow.oidfed.AbstractFederationFlowTest;
 import net.shibboleth.idp.plugin.oidc.op.profile.flow.oidfed.EntityConfigurationFlowTest;
 import net.shibboleth.idp.plugin.oidc.op.profile.flow.oidfed.support.CustomEntityConfigurationFilterStrategy;
@@ -59,7 +59,7 @@ public class EntityConfigurationMetadataCacheTest extends AbstractFederationFlow
 
     @Autowired
     @Qualifier("shibboleth.oidfed.EntityConfigurationMetadataCache")
-    MetadataCache<RemoteEntityConfigurationContainer> entityConfigurationCache;
+    MetadataCache<EntityConfigurationContainer> entityConfigurationCache;
 
     @Test
     public void testValidEntityConfiguration()
@@ -75,7 +75,7 @@ public class EntityConfigurationMetadataCacheTest extends AbstractFederationFlow
 
         mapResponse(entityConfigurationUrl(entityId), mockResponse(entityConfiguration));
         try {
-            final List<RemoteEntityConfigurationContainer> result =
+            final List<EntityConfigurationContainer> result =
                     entityConfigurationCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId),
                             new ResponseContainerExpirationCriterion(Instant.now().plusSeconds(300))));
             Assert.assertNotNull(result);
@@ -105,7 +105,7 @@ public class EntityConfigurationMetadataCacheTest extends AbstractFederationFlow
 
         mapResponse(entityConfigurationUrl(entityId), mockResponse(entityConfiguration));
         try {
-            final List<RemoteEntityConfigurationContainer> result =
+            final List<EntityConfigurationContainer> result =
                     entityConfigurationCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId),
                             new ResponseContainerExpirationCriterion(Instant.now().plusSeconds(300))));
             Assert.assertNotNull(result);
@@ -318,7 +318,7 @@ public class EntityConfigurationMetadataCacheTest extends AbstractFederationFlow
 
     protected void assertNoEntityConfiguration(final String entityId) {
         try {
-            final List<RemoteEntityConfigurationContainer> result =
+            final List<EntityConfigurationContainer> result =
                     entityConfigurationCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId),
                             new ResponseContainerExpirationCriterion(Instant.now().plusSeconds(300))));
             Assert.assertNotNull(result);
diff --git a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/SubordinateStatementMetadataCacheTest.java b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/SubordinateStatementMetadataCacheTest.java
index 7a746c6..cb71ce2 100644
--- a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/SubordinateStatementMetadataCacheTest.java
+++ b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/SubordinateStatementMetadataCacheTest.java
@@ -40,7 +40,7 @@ import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.SubordinateStatement;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.IssuerEntityIDCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.ResponseContainerExpirationCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteSubordinateStatementContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.subordinate.SubordinateStatementContainer;
 import net.shibboleth.idp.plugin.oidc.op.profile.flow.oidfed.AbstractFederationFlowTest;
 import net.shibboleth.idp.plugin.oidc.op.profile.flow.oidfed.EntityConfigurationFlowTest;
 import net.shibboleth.idp.plugin.oidc.op.profile.flow.oidfed.support.CustomSubordinateStatementFilterStrategy;
@@ -60,7 +60,7 @@ public class SubordinateStatementMetadataCacheTest extends AbstractFederationFlo
 
     @Autowired
     @Qualifier("shibboleth.oidfed.SubordinateEntityStatementMetadataCache")
-    MetadataCache<RemoteSubordinateStatementContainer> subordinateStatementCache;
+    MetadataCache<SubordinateStatementContainer> subordinateStatementCache;
 
     @Test
     public void testValidSubordinateStatement()
@@ -78,7 +78,7 @@ public class SubordinateStatementMetadataCacheTest extends AbstractFederationFlo
         mapResponse(subordinateStatementUrl(anchorFetchEndpoint, entityId),
                 mockResponse(subordinateStatement));
         try {
-            final List<RemoteSubordinateStatementContainer> result =
+            final List<SubordinateStatementContainer> result =
                     subordinateStatementCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId),
                             new ResponseContainerExpirationCriterion(Instant.now().plusSeconds(300)), 
                             new IssuerEntityIDCriterion(anchorId)));
@@ -111,7 +111,7 @@ public class SubordinateStatementMetadataCacheTest extends AbstractFederationFlo
         mapResponse(subordinateStatementUrl(anchorFetchEndpoint, entityId),
                 mockResponse(subordinateStatement));
         try {
-            final List<RemoteSubordinateStatementContainer> result =
+            final List<SubordinateStatementContainer> result =
                     subordinateStatementCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId),
                             new ResponseContainerExpirationCriterion(Instant.now().plusSeconds(300)), 
                             new IssuerEntityIDCriterion(anchorId)));
@@ -336,7 +336,7 @@ public class SubordinateStatementMetadataCacheTest extends AbstractFederationFlo
 
     protected void assertNoSubordinateStatement(final String entityId, final boolean containerExists) {
         try {
-            final List<RemoteSubordinateStatementContainer> result =
+            final List<SubordinateStatementContainer> result =
                     subordinateStatementCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId),
                             new ResponseContainerExpirationCriterion(Instant.now().plusSeconds(300)), 
                             new IssuerEntityIDCriterion(anchorId)));
diff --git a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/TrustChainMetadataCacheTest.java b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/TrustChainMetadataCacheTest.java
index f435d66..6d040ca 100644
--- a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/TrustChainMetadataCacheTest.java
+++ b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/cache/TrustChainMetadataCacheTest.java
@@ -35,7 +35,7 @@ import net.shibboleth.idp.plugin.oidc.op.oidfed.TrustChainTestUtil;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.IssuerEntityIDCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.ResponseContainerExpirationCriterion;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.SubjectEntityIDCriterion;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteTrustChainsContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.TrustChainsContainer;
 import net.shibboleth.idp.plugin.oidc.op.profile.flow.oidfed.AbstractFederationFlowTest;
 import net.shibboleth.idp.plugin.oidc.op.profile.flow.oidfed.EntityConfigurationFlowTest;
 import net.shibboleth.oidc.metadata.cache.MetadataCache;
@@ -54,7 +54,7 @@ public class TrustChainMetadataCacheTest extends AbstractFederationFlowTest {
 
     @Autowired
     @Qualifier("shibboleth.oidfed.TrustChainMetadataCache")
-    MetadataCache<RemoteTrustChainsContainer> trustChainCache;
+    MetadataCache<TrustChainsContainer> trustChainCache;
 
     @Test
     public void testValidTrustChainResolved()
@@ -84,7 +84,7 @@ public class TrustChainMetadataCacheTest extends AbstractFederationFlowTest {
         mapResponse(subordinateStatementUrl(anchorFetchEndpoint, entityId),
                 mockResponse(subordinateStatement));
         try {
-            final List<RemoteTrustChainsContainer> result =
+            final List<TrustChainsContainer> result =
                     trustChainCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId),
                             new ResponseContainerExpirationCriterion(Instant.now().plusSeconds(300)), 
                             new IssuerEntityIDCriterion(anchorId)));
@@ -128,7 +128,7 @@ public class TrustChainMetadataCacheTest extends AbstractFederationFlowTest {
         mapResponse(subordinateStatementUrl(anchorFetchEndpoint, entityId),
                 mockResponse(subordinateStatement));
         try {
-            final List<RemoteTrustChainsContainer> result =
+            final List<TrustChainsContainer> result =
                     trustChainCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId),
                             new ResponseContainerExpirationCriterion(Instant.now().plusSeconds(300)), 
                             new IssuerEntityIDCriterion(anchorId)));
@@ -173,7 +173,7 @@ public class TrustChainMetadataCacheTest extends AbstractFederationFlowTest {
         mapResponse(subordinateStatementUrl(anchorFetchEndpoint, entityId),
                 mockResponse(subordinateStatement));
         try {
-            final List<RemoteTrustChainsContainer> result =
+            final List<TrustChainsContainer> result =
                     trustChainCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId),
                             new ResponseContainerExpirationCriterion(Instant.now().plusSeconds(300)), 
                             new IssuerEntityIDCriterion(anchorId)));
@@ -220,7 +220,7 @@ public class TrustChainMetadataCacheTest extends AbstractFederationFlowTest {
         mapResponse(entityConfigurationUrl(anchorId), mockResponse(trustedAnchorConfiguration()));
 
         try {
-            final List<RemoteTrustChainsContainer> result =
+            final List<TrustChainsContainer> result =
                     trustChainCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId)));
             Assert.assertNotNull(result);
             Assert.assertEquals(result.size(), 1);
@@ -260,7 +260,7 @@ public class TrustChainMetadataCacheTest extends AbstractFederationFlowTest {
         mapResponse(subordinateStatementUrl(anchorFetchEndpoint, entityId),
                 mockResponse(subordinateStatement));
         try {
-            final List<RemoteTrustChainsContainer> result =
+            final List<TrustChainsContainer> result =
                     trustChainCache.get(new CriteriaSet(new SubjectEntityIDCriterion(entityId),
                             new ResponseContainerExpirationCriterion(Instant.now().plusSeconds(300)), 
                             new IssuerEntityIDCriterion(anchorId)));
diff --git a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomEntityConfigurationFilterStrategy.java b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomEntityConfigurationFilterStrategy.java
index 15c1768..5d7d64f 100644
--- a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomEntityConfigurationFilterStrategy.java
+++ b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomEntityConfigurationFilterStrategy.java
@@ -19,7 +19,7 @@ import java.util.Optional;
 import java.util.function.BiFunction;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityConfiguration;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteEntityConfigurationContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.configuration.EntityConfigurationContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.impl.EntityConfigurationImpl;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.payload.impl.EntityConfigurationPayloadImpl;
 import net.shibboleth.oidc.metadata.filter.MetadataFilterContext;
@@ -28,14 +28,14 @@ import net.shibboleth.oidc.metadata.filter.MetadataFilterContext;
  * Custom filter strategy for entity configuration container.
  */
 public class CustomEntityConfigurationFilterStrategy implements 
-    BiFunction<RemoteEntityConfigurationContainer, MetadataFilterContext, RemoteEntityConfigurationContainer>{
+    BiFunction<EntityConfigurationContainer, MetadataFilterContext, EntityConfigurationContainer>{
 
     public static final String CUSTOM_CLAIM_NAME = "custom_claim";
     public static final String CUSTOM_CLAIM_VALUE = "custom_value";
 
     /** {@inheritDoc} */
     @Override
-    public RemoteEntityConfigurationContainer apply(final RemoteEntityConfigurationContainer container,
+    public EntityConfigurationContainer apply(final EntityConfigurationContainer container,
             final MetadataFilterContext context) {
         final EntityConfiguration statement = container.getStatement();
         if (statement == null) {
@@ -49,7 +49,7 @@ public class CustomEntityConfigurationFilterStrategy implements
             payload.setCustomClaims(CUSTOM_CLAIM_NAME, CUSTOM_CLAIM_VALUE);
             final Instant expiration = Instant.now().plusSeconds(300);
             assert expiration != null;
-            return new RemoteEntityConfigurationContainer(statement.getSubject(),
+            return new EntityConfigurationContainer(statement.getSubject(),
                     new EntityConfigurationImpl(statement.getJwt(), payload), expiration, expiration);
         }
         return container;
diff --git a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomSubordinateStatementFilterStrategy.java b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomSubordinateStatementFilterStrategy.java
index 1f17f57..696a9b0 100644
--- a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomSubordinateStatementFilterStrategy.java
+++ b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomSubordinateStatementFilterStrategy.java
@@ -19,7 +19,7 @@ import java.util.Optional;
 import java.util.function.BiFunction;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.SubordinateStatement;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteSubordinateStatementContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.subordinate.SubordinateStatementContainer;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.impl.SubordinateStatementImpl;
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.payload.impl.SubordinateStatementPayloadImpl;
 import net.shibboleth.oidc.metadata.filter.MetadataFilterContext;
@@ -28,14 +28,14 @@ import net.shibboleth.oidc.metadata.filter.MetadataFilterContext;
  * Custom filter strategy for subordinate statement container.
  */
 public class CustomSubordinateStatementFilterStrategy implements 
-    BiFunction<RemoteSubordinateStatementContainer, MetadataFilterContext, RemoteSubordinateStatementContainer>{
+    BiFunction<SubordinateStatementContainer, MetadataFilterContext, SubordinateStatementContainer>{
 
     public static final String CUSTOM_CLAIM_NAME = "custom_so_claim";
     public static final String CUSTOM_CLAIM_VALUE = "custom_so_value";
 
     /** {@inheritDoc} */
     @Override
-    public RemoteSubordinateStatementContainer apply(final RemoteSubordinateStatementContainer container,
+    public SubordinateStatementContainer apply(final SubordinateStatementContainer container,
             final MetadataFilterContext context) {
         final SubordinateStatement statement = container.getStatement();
         if (statement == null) {
@@ -49,7 +49,7 @@ public class CustomSubordinateStatementFilterStrategy implements
             payload.setCustomClaims(CUSTOM_CLAIM_NAME, CUSTOM_CLAIM_VALUE);
             final Instant expiration = Instant.now().plusSeconds(300);
             assert expiration != null;
-            return new RemoteSubordinateStatementContainer(container.getIdentifier(),
+            return new SubordinateStatementContainer(container.getIdentifier(),
                     new SubordinateStatementImpl(statement.getJwt(), payload), expiration, expiration);
         }
         return container;
diff --git a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomTrustChainFilterStrategy.java b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomTrustChainFilterStrategy.java
index 0c8245d..a37064f 100644
--- a/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomTrustChainFilterStrategy.java
+++ b/idp-oidfed-op-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/oidfed/support/CustomTrustChainFilterStrategy.java
@@ -19,7 +19,7 @@ import java.util.Optional;
 import java.util.function.BiFunction;
 
 import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.EntityStatement;
-import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.remote.RemoteTrustChainsContainer;
+import net.shibboleth.idp.plugin.oidc.op.oidfed.metadata.cache.trustchain.TrustChainsContainer;
 import net.shibboleth.oidc.metadata.filter.MetadataFilterContext;
 import net.shibboleth.shared.collection.CollectionSupport;
 
@@ -27,11 +27,11 @@ import net.shibboleth.shared.collection.CollectionSupport;
  * Custom filter strategy for trust chains container.
  */
 public class CustomTrustChainFilterStrategy implements 
-    BiFunction<RemoteTrustChainsContainer, MetadataFilterContext, RemoteTrustChainsContainer>{
+    BiFunction<TrustChainsContainer, MetadataFilterContext, TrustChainsContainer>{
 
     /** {@inheritDoc} */
     @Override
-    public RemoteTrustChainsContainer apply(final RemoteTrustChainsContainer container,
+    public TrustChainsContainer apply(final TrustChainsContainer container,
             final MetadataFilterContext context) {
         final List<List<EntityStatement<?>>> trustChains =
                 Optional.ofNullable(container.getTrustChains()).orElse(CollectionSupport.emptyList());

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list