[java-idp-oidc] branch main updated: JOIDC-163 - Update into the IdP V5 codebase

Henri Mikkonen henri.mikkonen at iki.fi
Mon Jun 26 11:05:25 UTC 2023


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

hjmikkon pushed a commit to branch main
in repository java-idp-oidc.

View the commit online:
http://git.shibboleth.net/view/?p=java-idp-oidc.git;a=commit;h=ce5fb0f57be46740c99d7ffed5334556bf9eca6a

The following commit(s) were added to refs/heads/main by this push:
     new ce5fb0f5 JOIDC-163 - Update into the IdP V5 codebase
ce5fb0f5 is described below

commit ce5fb0f57be46740c99d7ffed5334556bf9eca6a
Author: Henri Mikkonen <henri.mikkonen at iki.fi>
AuthorDate: Mon Jun 26 13:58:41 2023 +0300

    JOIDC-163 - Update into the IdP V5 codebase
    
    https://shibboleth.atlassian.net/browse/JOIDC-163
    
    Bump version to 4.0.0-SNAPSHOT and port to V5 codebase
    - depend on idp.oidc.config.2
    - plugin.version to 4.0.0 and module to idp.oidc.OP.3
    - net.shibboleth.utilities.java-support -> net.shibboleth.shared
    - net.shibboleth.idp.profile.config -> net.shibboleth.profile.config
    - Deleted deprecated RevocationCache
    - Removed old temporary beans
      - shibboleth.oidc.internal.HttpServletRequest
      - shibboleth.oidc.internal.HttpServletResponse
    - Removed wiring of shibboleth.RelyingPartyConfigurationResolver to the following functions (OAuth2Client, authorize, token, userinfo)
      - JWTSignatureValidationConfigurationLookupFunction
      - JWTDecryptionConfigurationLookupFunction
      - JWTSignatureSigningConfigurationLookupFunction
      - JWTEncryptionConfigurationLookupFunction
      - (Revisit this once the functions are reviewed)
    - relying-party/postconfig
      - net.shibboleth.idp.relyingparty.RelyingPartyResolverCredentialHolder -> net.shibboleth.spring.security.CredentialHolder
    - HttpClient now uses V5
      - Existing unit tests pass now, real functionality to be verified
    - Stopped using ComponentSupport and use corresponding methods from parent class
---
 idp-oidc-extension-api/pom.xml                     |  44 ++---
 .../IssueRegistrationTokenFlowDescriptor.java      |   8 +-
 .../idp/plugin/oidc/op/audit/AuditFields.java      |   3 +-
 .../oidc/op/messaging/JSONErrorResponse.java       |   2 +-
 .../oidc/op/messaging/JSONSuccessResponse.java     |   2 +-
 .../op/messaging/context/AccessTokenContext.java   |   4 +-
 .../context/OIDCAuthenticationResponseContext.java |   4 +-
 ...IDCClientRegistrationMetadataPolicyContext.java |   2 +-
 ...TClaimsSetFromJWTAccessTokenLookupFunction.java |   2 +-
 .../PayloadFromJWTAccessTokenLookupFunction.java   |   2 +-
 .../logic/RequestedGrantTypesCondition.java        |   2 +-
 .../context/logic/ValidatedScopePredicate.java     |   9 +-
 ...RegistrationResponseMetadataLookupFunction.java |   2 +-
 ...tRegistrationRequestMetadataLookupFunction.java |   2 +-
 .../metadata/resolver/MetadataValueResolver.java   |   4 +-
 .../resolver/ProviderMetadataResolver.java         |   4 +-
 .../resolver/RefreshableMetadataValueResolver.java |   2 +-
 .../RefreshableProviderMetadataResolver.java       |   2 +-
 .../ServiceableProviderMetadataProvider.java       |  19 +-
 .../idp/plugin/oidc/op/profile/OidcEventIds.java   |   2 +-
 ...AbstractAuthorizationRequestLookupFunction.java |   4 +-
 .../navigate/ClientInfoAudienceLookupFunction.java |   4 +-
 .../navigate/ClientInfoScopeLookupFunction.java    |   2 +-
 .../navigate/DefaultAuthTimeLookupFunction.java    |   2 +-
 ...efaultComputeAuthorizationCodeHashFunction.java |  15 +-
 .../navigate/MetadataStatementsLookupFunction.java |   4 +-
 ...CRegistrationResponseContextLookupFunction.java |   2 +-
 .../navigate/ProfileResponderIdLookupFunction.java |   8 +-
 .../navigate/SectorIdentifierLookupFunction.java   |   4 +-
 .../TokenRequestAudienceLookupFunction.java        |   2 +-
 .../plugin/oidc/op/storage/RevocationCache.java    | 213 ---------------------
 .../oidc/op/storage/RevocationCacheContexts.java   |   2 +-
 .../op/token/support/AccessTokenClaimsSet.java     |   8 +-
 .../op/token/support/AuthorizeCodeClaimsSet.java   |   9 +-
 .../op/token/support/RefreshTokenClaimsSet.java    |   9 +-
 .../op/token/support/RegistrationClaimsSet.java    |  12 +-
 .../oidc/op/token/support/TokenClaimsSet.java      |  16 +-
 .../oidc/op/messaging/JSONErrorResponseTest.java   |   2 +-
 .../oidc/op/messaging/JSONSuccessResponseTest.java |   2 +-
 .../context/logic/ValidatedScopePredicateTest.java |   2 +-
 .../ServiceableProviderMetadataProviderTest.java   |   6 +-
 .../AbstractTokenClaimsLookupFunctionTest.java     |   2 +-
 .../BaseTokenRequestLookupFunctionTest.java        |   2 +-
 .../DefaultAuthTimeLookupFunctionTest.java         |   2 +-
 ...efaultUserInfoSigningAlgLookupFunctionTest.java |   2 +-
 ...DefaultValidRedirectUrisLookupFunctionTest.java |   2 +-
 .../ProfileResponderIdLookupFunctionTest.java      |   4 +-
 .../oidc/op/storage/RevocationCacheTest.java       | 164 ----------------
 .../op/token/support/AccessTokenClaimsSetTest.java |   5 +-
 .../token/support/AuthorizeCodeClaimsSetTest.java  |   4 +-
 .../token/support/RefreshTokenClaimsSetTest.java   |   4 +-
 .../support/testing/BaseTokenClaimsSetTest.java    |   8 +-
 idp-oidc-extension-distribution/pom.xml            |   2 +-
 idp-oidc-extension-impl/pom.xml                    | 213 +++++++++++----------
 .../idp/plugin/oidc/op/OIDCOPModule.java           |   2 +-
 .../idp/plugin/oidc/op/OIDCOPPlugin.java           |   4 +-
 .../admin/impl/AbstractAdminApiProfileAction.java  |  13 +-
 .../op/admin/impl/DoClientManagementOperation.java |  22 +--
 .../admin/impl/IssueRegistrationAccessToken.java   |  59 +++---
 .../AttributeInOIDCRequestedClaimsMatcher.java     |   5 +-
 .../impl/AttributeOIDCScopePolicyRule.java         |   5 +-
 .../impl/AttributeFilterNamespaceHandler.java      |   2 +-
 .../AttributeInOIDCRequestedClaimsRuleParser.java  |   2 +-
 ...thenticationContextReferenceAuditExtractor.java |   2 +-
 .../AuthenticationRequestClaimsAuditExtractor.java |   2 +-
 .../oidc/op/audit/impl/ClaimsAuditExtractor.java   |   4 +-
 .../impl/ClientIdRegistrationAuditExtractor.java   |   2 +-
 .../op/audit/impl/IdTokenClaimsAuditExtractor.java |   4 +-
 .../op/audit/impl/IsPassiveAuditExtractor.java     |   2 +-
 .../op/audit/impl/RevokedTokenAuditExtractor.java  |   2 +-
 .../op/audit/impl/SubjectTypeAuditExtractor.java   |   2 +-
 .../op/audit/impl/SubjectValueAuditExtractor.java  |   2 +-
 .../ExtractClientAuthenticationFromRequest.java    |  10 +-
 .../oidc/op/authn/impl/JWTCredentialValidator.java |  15 +-
 .../impl/OIDCClientInfoCredentialValidator.java    |  16 +-
 .../impl/ValidateClientAuthenticationType.java     |   7 +-
 .../oidc/op/cli/ClientManagementArguments.java     |  15 ++
 .../cli/IssueRegistrationAccessTokenArguments.java |  17 +-
 .../plugin/oidc/op/criterion/IssuerCriterion.java  |   4 +-
 .../impl/OIDCAuthenticationRequestDecoder.java     |   4 +-
 .../impl/OIDCClientRegistrationRequestDecoder.java |   4 +-
 .../op/decoding/impl/OIDCTokenRequestDecoder.java  |   4 +-
 .../decoding/impl/OIDCUserInfoRequestDecoder.java  |   4 +-
 .../op/encoding/impl/NimbusResponseEncoder.java    |  23 ++-
 .../encoding/impl/OIDCResponseEncoderFactory.java  |   8 +-
 .../plugin/oidc/op/encoding/impl/ResponseUtil.java |   2 +-
 .../impl/AlgorithmInfoMetadataValueResolver.java   |  13 +-
 .../metadata/impl/ArrayMetadataValueResolver.java  |  10 +-
 .../impl/CredentialMetadataValueResolver.java      |  33 +++-
 .../DynamicFilesystemProviderMetadataResolver.java |   9 +-
 .../impl/FilesystemMetadataValueResolver.java      |   7 +-
 .../impl/FilesystemProviderMetadataResolver.java   |  17 +-
 .../impl/FunctionMetadataValueResolver.java        |  13 +-
 .../decoding/impl/BaseOAuth2RequestDecoder.java    |   6 +-
 .../impl/OAuth2AuthorizationRequestDecoder.java    |   4 +-
 .../impl/OAuth2IntrospectionRequestDecoder.java    |   4 +-
 .../impl/OAuth2RevocationRequestDecoder.java       |   4 +-
 .../impl/OAuth2RevocationErrorResponse.java        |   2 +-
 .../impl/PopulateOIDCMetadataContext.java          |   5 +-
 .../impl/SetEntityIdToSAMLPeerEntityContext.java   |   7 +-
 .../profile/impl/AbstractProcessTokenAction.java   |  24 +--
 .../op/oauth2/profile/impl/BuildAccessToken.java   |  46 +++--
 .../oidc/op/oauth2/profile/impl/RevokeToken.java   |  11 +-
 .../impl/SetAccessTokenToResponseContext.java      |   6 +-
 .../SetAuthorizationCodeToResponseContext.java     |  43 ++---
 .../impl/SetRequestObjectToResponseContext.java    |  34 ++--
 .../op/oauth2/profile/impl/ValidateAudience.java   |  17 +-
 .../impl/ValidateAuthorizationRequestType.java     |   5 +-
 .../oauth2/profile/impl/ValidateCodeChallenge.java |  11 +-
 .../oauth2/profile/impl/ValidateRedirectURI.java   |  13 +-
 .../oauth2/profile/impl/ValidateRequestObject.java |  13 +-
 .../oauth2/profile/impl/ValidateResponseType.java  |   9 +-
 .../oidc/op/oauth2/profile/impl/ValidateScope.java |  15 +-
 .../impl/AbstractBuildErrorResponseFromEvent.java  |   7 +-
 ...ctInitializeOutboundResponseMessageContext.java |   7 +-
 ...AbstractOIDCClientMetadataPopulationAction.java |   2 +-
 .../op/profile/impl/AbstractOIDCRequestAction.java |   1 +
 .../impl/AbstractOIDCSigningResponseAction.java    |   5 +-
 .../op/profile/impl/AddAttributesToClaimsSet.java  |  46 ++---
 .../impl/AddAuthorizationCodeHashToIDToken.java    |  11 +-
 .../impl/AddClientNameToClientMetadata.java        |   2 +-
 .../profile/impl/AddGrantTypeToClientMetadata.java |   4 +-
 .../oidc/op/profile/impl/AddIDTokenShell.java      |  17 +-
 .../op/profile/impl/AddJwksToClientMetadata.java   |  21 +-
 .../impl/AddMetadataStatementToClientMetadata.java |   2 +-
 .../oidc/op/profile/impl/AddNonceToIDToken.java    |   5 +-
 .../impl/AddRemainingClaimsToClientMetadata.java   |   5 +-
 ...bjectSecurityConfigurationToClientMetadata.java |  11 +-
 .../impl/AddResponseTypesToClientMetadata.java     |   6 +-
 .../op/profile/impl/AddScopeToClientMetadata.java  |   2 +-
 .../AddSecurityConfigurationToClientMetadata.java  |   9 +-
 .../impl/AddSubjectTypeToClientMetadata.java       |   2 +-
 .../AddTokenDeliveryAttributesToClaimsSet.java     |   9 +-
 ...ddTokenEndpointAuthMethodsToClientMetadata.java |   2 +-
 .../BuildAuthenticationErrorResponseFromEvent.java |  13 +-
 .../op/profile/impl/BuildClientInformation.java    |   7 +-
 .../oidc/op/profile/impl/CheckRedirectURIs.java    |  39 ++--
 .../FormOutboundAuthenticationResponseMessage.java |  13 +-
 .../impl/FormOutboundDiscoveryResponse.java        |   8 +-
 .../oidc/op/profile/impl/GenerateClientID.java     |  15 +-
 .../oidc/op/profile/impl/GenerateClientSecret.java |  15 +-
 .../impl/InitializeAuthenticationContext.java      |  11 +-
 ...tboundAuthenticationResponseMessageContext.java |  19 +-
 ...OutboundRegistrationResponseMessageContext.java |   5 +-
 ...nitializeRegistrationMetadataPolicyContext.java |  17 +-
 .../impl/InitializeRelyingPartyContext.java        |  13 +-
 .../InitializeUnverifiedRelyingPartyContext.java   |   7 +-
 .../profile/impl/ManipulateClaimsForIDToken.java   |   5 +-
 .../op/profile/impl/OIDCMetadataLookupHandler.java |  18 +-
 .../profile/impl/ProcessRequestedAuthnContext.java |   7 +-
 .../plugin/oidc/op/profile/impl/RevokeConsent.java |   9 +-
 ...tionContextClassReferenceToResponseContext.java |  13 +-
 .../SetAuthenticationTimeToResponseContext.java    |   5 +-
 .../impl/SetConsentFromTokenToResponseContext.java |   7 +-
 .../profile/impl/SetConsentToResponseContext.java  |  13 +-
 .../impl/SetRefreshTokenToResponseContext.java     |  33 ++--
 .../impl/SetRequestedClaimsToResponseContext.java  |  39 ++--
 .../impl/SetResponseStatusCodeFromEvent.java       |  10 +-
 .../SetSectorIdentifierForAttributeResolution.java |  11 +-
 .../impl/SetSessionIdToResponseContext.java        |   7 +-
 .../profile/impl/SetSubjectToResponseContext.java  |   7 +-
 ...liveryAttributesFromTokenToResponseContext.java |  15 +-
 ...etTokenDeliveryAttributesToResponseContext.java |  42 ++--
 .../op/profile/impl/StoreClientInformation.java    |  15 +-
 .../plugin/oidc/op/profile/impl/ValidateGrant.java |  28 +--
 .../oidc/op/profile/impl/ValidateGrantType.java    |   2 +-
 .../plugin/oidc/op/profile/impl/ValidatePKCE.java  |  10 +-
 .../impl/ValidateRegistrationAccessToken.java      |  25 ++-
 .../impl/ValidateRegistrationRequestMetadata.java  |   9 +-
 ...uteConsentEnabledInTokenClaimsSetPredicate.java |   2 +-
 .../AttributeResolutionSubjectLookupFunction.java  |  37 ++--
 ...entIDFromOIDCMetadataContextLookupFunction.java |   3 +-
 ...AuthorizationRequestTypeValidationStrategy.java |   2 +-
 ...faultChainRevocationLifetimeLookupStrategy.java |   2 +-
 ...efaultMetadataPolicyCriteriaLookupFunction.java |   6 +-
 .../DefaultMetadataPolicyMergingStrategy.java      |   4 +-
 .../DefaultRootTokenIdentifierLookupStrategy.java  |   2 +-
 .../profile/logic/DefaultSubjectTypeStrategy.java  |   4 +-
 ...faultTokenRevocationLifetimeLookupStrategy.java |   2 +-
 .../op/profile/logic/IssueIDTokenCondition.java    |   2 +-
 .../profile/logic/OfflineAccessScopeCondition.java |   2 +-
 .../logic/PublicSubjectActivationCondition.java    |   2 +-
 .../profile/logic/SubjectActivationCondition.java  |   2 +-
 .../ProviderMetadataResolverServiceStrategy.java   |  15 +-
 .../claims/impl/ChainExpiryClaimsValidator.java    |   7 +-
 .../impl/RootTokenIdRevocationValidator.java       |  15 +-
 .../RegisterFilterServletContextInitializer.java   |  10 +-
 .../op/userinfo/profile/impl/AddUserInfoShell.java |  15 +-
 .../op/userinfo/profile/impl/ParseAccessToken.java |  21 +-
 .../userinfo/profile/impl/ValidateAccessToken.java |   5 +-
 .../META-INF/net.shibboleth.idp/postconfig.xml     |  19 +-
 .../issue-registration-access-token-beans.xml      |   2 +-
 .../authn/OAuth2Client/OAuth2Client-beans.xml      |  15 +-
 .../oauth2/introspection/introspection-beans.xml   |   6 +-
 .../flows/oauth2/revocation/revocation-beans.xml   |   4 +-
 .../flows/oidc/abstract/oidc-abstract-beans.xml    |   5 +-
 .../idp/flows/oidc/authorize/authorize-beans.xml   |  42 ++--
 .../oidc/metadata-lookup/metadata-lookup-flow.xml  |   2 +-
 .../idp/flows/oidc/token/token-beans.xml           |  24 +--
 .../idp/flows/oidc/userinfo/userinfo-beans.xml     |  13 +-
 .../idp/service/relying-party/postconfig.xml       |  58 +++---
 .../idp/plugin/oidc/op/module.properties           |  90 ++++-----
 .../idp/plugin/oidc/op/plugin.properties           |   4 +-
 .../impl/IssueRegistrationAccessTokenTest.java     |  21 +-
 .../AttributeInOIDCRequestedClaimsMatcherTest.java |   5 +-
 .../impl/AttributeOIDCScopePolicyRuleTest.java     |   2 +-
 ...tributeInOIDCRequestedClaimsRuleParserTest.java |   4 +-
 ...ExtractClientAuthenticationFromRequestTest.java |   9 +-
 .../op/authn/impl/JWTCredentialValidatorTest.java  |  20 +-
 .../OIDCClientInfoCredentialValidatorTest.java     |  14 +-
 .../impl/ValidateClientAuthenticationTypeTest.java |   2 +-
 .../impl/OIDCAuthenticationRequestDecoderTest.java |   5 +-
 .../OIDCClientRegistrationRequestDecoderTest.java  |   5 +-
 .../decoding/impl/OIDCTokenRequestDecoderTest.java |   5 +-
 .../impl/OIDCUserInfoRequestDecoderTest.java       |   5 +-
 .../impl/CredentialMetadataValueResolverTest.java  |  15 +-
 .../FilesystemProviderMetdataResolverTest.java     |   8 +-
 .../impl/OAuth2RevocationRequestDecoderTest.java   |   5 +-
 .../impl/OAuth2RevocationErrorResponseTest.java    |   2 +-
 .../SetEntityIdToSAMLPeerEntityContextTest.java    |   7 +-
 .../oauth2/profile/impl/BuildAccessTokenTest.java  |  12 +-
 .../op/oauth2/profile/impl/RevokeTokenTest.java    |  10 +-
 .../SetAuthorizationCodeToResponseContextTest.java |  11 +-
 .../SetRequestObjectToResponseContextTest.java     |   7 +-
 .../oauth2/profile/impl/ValidateAudienceTest.java  |   4 +-
 .../impl/ValidateAuthorizationRequestTypeTest.java |   4 +-
 .../profile/impl/ValidateCodeChallengeTest.java    |   2 +-
 .../profile/impl/ValidateRedirectURITest.java      |   6 +-
 .../profile/impl/ValidateRequestObjectTest.java    |   5 +-
 .../profile/impl/ValidateResponseTypeTest.java     |   4 +-
 .../op/oauth2/profile/impl/ValidateScopeTest.java  |   6 +-
 .../flow/AbstractIssuedJWTSecurityTest.java        |   6 +-
 .../op/profile/flow/AbstractOidcApiFlowTest.java   |   4 +-
 .../AbstractOidcClientAuthenticationFlowTest.java  |   2 +-
 .../oidc/op/profile/flow/AbstractOidcFlowTest.java |  11 +-
 .../oidc/op/profile/flow/AuthorizeFlowTest.java    |   4 +-
 .../flow/ClientCredentialsTokenFlowTest.java       |   6 +-
 .../op/profile/flow/ConfigurationFlowTest.java     |   3 +-
 .../op/profile/flow/IntrospectionFlowTest.java     |   6 +-
 .../flow/IssueRegistrationAccessTokenFlowTest.java |   6 +-
 .../oidc/op/profile/flow/IssuedSignedJWTTest.java  |   2 +-
 .../oidc/op/profile/flow/RegistrationFlowTest.java |   3 +-
 .../flow/RegistrationManagementFlowTest.java       |   2 +-
 .../oidc/op/profile/flow/RequestObjectJWETest.java |   6 +-
 .../oidc/op/profile/flow/RequestObjectJWSTest.java |   6 +-
 .../oidc/op/profile/flow/RevocationFlowTest.java   |   6 +-
 .../plugin/oidc/op/profile/flow/TokenFlowTest.java |   6 +-
 .../plugin/oidc/op/profile/flow/UserInfoTest.java  |  59 +++++-
 .../impl/AddAccessTokenHashToIDTokenTest.java      |   2 +-
 .../oidc/op/profile/impl/AddAcrToIDTokenTest.java  |   2 +-
 .../AddApplicationTypeToClientMetadataTest.java    |   2 +-
 .../profile/impl/AddAttributesToClaimsSetTest.java |   8 +-
 .../op/profile/impl/AddAuthTimeToIDTokenTest.java  |   2 +-
 .../AddAuthorizationCodeHashToIDTokenTest.java     |   2 +-
 .../impl/AddClientNameToClientMetadataTest.java    |   2 +-
 .../impl/AddContactsToClientMetadataTest.java      |   2 +-
 .../impl/AddGrantTypeToClientMetadataTest.java     |   2 +-
 .../oidc/op/profile/impl/AddIDTokenShellTest.java  |   2 +-
 .../profile/impl/AddJwksToClientMetadataTest.java  |  16 +-
 .../op/profile/impl/AddNonceToIDTokenTest.java     |   2 +-
 .../impl/AddRedirectUrisToClientMetadataTest.java  |   2 +-
 .../AddRemainingClaimsToClientMetadataTest.java    |   2 +-
 ...tSecurityConfigurationToClientMetadataTest.java |   2 +-
 .../impl/AddRequestUrisToClientMetadataTest.java   |   2 +-
 .../impl/AddResponseTypesToClientMetadataTest.java |   2 +-
 .../profile/impl/AddScopeToClientMetadataTest.java |   4 +-
 ...dSecurityConfigurationToClientMetadataTest.java |   6 +-
 .../AddTokenDeliveryAttributesToClaimsSetTest.java |   2 +-
 .../impl/BaseOIDCClientMetadataPopulationTest.java |   9 +-
 .../impl/BaseOIDCRegistrationRequestTest.java      |   2 +-
 .../profile/impl/BaseOIDCResponseActionTest.java   |  22 +--
 .../profile/impl/BuildClientInformationTest.java   |   4 +-
 .../impl/BuildJSONErrorResponseFromEventTest.java  |   3 +-
 .../op/profile/impl/CheckRedirectUrisTest.java     |  20 +-
 ...mOutboundAuthenticationResponseMessageTest.java |   2 +-
 .../impl/FormOutboundDiscoveryResponseTest.java    |   9 +-
 .../impl/FormOutboundTokenResponseMessageTest.java |   3 +-
 .../impl/InitializeAuthenticationContextTest.java  |  10 +-
 ...ndAuthenticationResponseMessageContextTest.java |   8 +-
 ...itializeOutboundResponseMessageContextTest.java |   2 +-
 .../impl/InitializeRelyingPartyContextTest.java    |   6 +-
 .../profile/impl/InitializeSubjectContextTest.java |   2 +-
 ...nitializeUnverifiedRelyingPartyContextTest.java |   6 +-
 .../impl/ManipulateClaimsForIDTokenTest.java       |   2 +-
 .../impl/ProcessRequestedAuthnContextTest.java     |  10 +-
 .../oidc/op/profile/impl/RevokeConsentTest.java    |   4 +-
 ...eferenceFromAuthzCodeToResponseContextTest.java |   5 +-
 ...ContextClassReferenceToResponseContextTest.java |  10 +-
 ...SetAuthenticationTimeToResponseContextTest.java |   4 +-
 .../SetConsentFromTokenToResponseContextTest.java  |   6 +-
 .../impl/SetConsentToResponseContextTest.java      |  12 +-
 .../impl/SetRefreshTokenToResponseContextTest.java |  16 +-
 .../SetRequestedClaimsToResponseContextTest.java   |  12 +-
 .../SetRequestedSubjectToResponseContextTest.java  |   2 +-
 ...SectorIdentifierForAttributeResolutionTest.java |   8 +-
 .../impl/SetSessionIdToResponseContextTest.java    |   7 +-
 .../impl/SetSubjectToResponseContextTest.java      |   7 +-
 ...ryAttributesFromTokenToResponseContextTest.java |   4 +-
 ...kenDeliveryAttributesToResponseContextTest.java |   8 +-
 .../oidc/op/profile/impl/ValidateGrantTest.java    |  15 +-
 .../op/profile/impl/ValidateGrantTypeTest.java     |   4 +-
 .../oidc/op/profile/impl/ValidatePKCETest.java     |   2 +-
 .../impl/VerifyRequestedSubjectIdentifierTest.java |   2 +-
 ...tributeResolutionSubjectLookupFunctionTest.java |  14 +-
 .../logic/SubjectActivationConditionTest.java      |   2 +-
 ...adProviderResolverServiceConfigurationTest.java |  43 ++---
 .../profile/impl/AddUserInfoShellTest.java         |  10 +-
 .../FormOutboundUserInfoResponseMessageTest.java   |   3 +-
 .../profile/impl/ParseAccessTokenTest.java         |   9 +-
 .../profile/impl/ValidateAccessTokenTest.java      |   7 +-
 .../src/test/resources/credentials/sealer.jks      | Bin 500 -> 984 bytes
 .../src/test/resources/credentials/sealer.kver     |   2 +-
 .../idp/module}/conf/attribute-filter.xml          |   0
 .../idp/module}/conf/attribute-registry.xml        |   0
 .../idp/module}/conf/attribute-resolver.xml        |   0
 .../conf/authn/oauth2client-authn-config.xml       |   6 +-
 .../shibboleth/idp/module}/conf/credentials.xml    |   0
 .../shibboleth/idp/module}/conf/global.xml         |   0
 .../shibboleth/idp/module}/conf/idp.properties     |   0
 .../shibboleth/idp/module}/conf/logback.xml        |   2 +-
 .../idp/module}/conf/metadata-policy1.json         |   0
 .../idp/module}/conf/metadata-policy2.json         |   0
 .../idp/module}/conf/metadata-providers.xml        |   0
 .../idp/module}/conf/oidc-clientinfo-resolvers.xml |   0
 .../idp/module}/conf/oidc-credentials.xml          |   0
 .../shibboleth/idp/module}/conf/oidc.properties    |   6 +-
 .../idp/module}/conf/openid-configuration.json     |   0
 .../shibboleth/idp/module}/conf/relying-party.xml  |   2 +-
 .../shibboleth/idp/module}/conf/services.xml       |   0
 pom.xml                                            |  52 +++--
 330 files changed, 1543 insertions(+), 1917 deletions(-)

diff --git a/idp-oidc-extension-api/pom.xml b/idp-oidc-extension-api/pom.xml
index 5e9c794d..e9d3ee38 100644
--- a/idp-oidc-extension-api/pom.xml
+++ b/idp-oidc-extension-api/pom.xml
@@ -7,7 +7,7 @@
     <parent>
         <artifactId>idp-plugin-oidc-op-parent</artifactId>
         <groupId>net.shibboleth.idp.plugin.oidc</groupId>
-        <version>3.4.1-SNAPSHOT</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
     
     <artifactId>idp-plugin-oidc-op-api</artifactId>
@@ -24,57 +24,57 @@
     
         <!-- Provided dependencies. -->
         <dependency>
-            <groupId>net.shibboleth.ext</groupId>
-            <artifactId>spring-extensions</artifactId>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-spring</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-saml-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-profile-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-admin-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-authn-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-saml-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-attribute-resolver-api</artifactId>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-attribute-resolver-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-security-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-xmlsec-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-metadata-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-crypto-api</artifactId>
             <scope>provided</scope>
         </dependency>
@@ -106,19 +106,17 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.ext</groupId>
-            <artifactId>spring-extensions</artifactId>
-            <type>test-jar</type>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-testing</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-profile-api</artifactId>
-            <type>test-jar</type>
+            <groupId>${idp.groupId}</groupId>
+            <artifactId>idp-testing</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-storage-impl</artifactId>
             <scope>test</scope>
         </dependency>
@@ -128,8 +126,8 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/IssueRegistrationTokenFlowDescriptor.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/IssueRegistrationTokenFlowDescriptor.java
index 0bd0fe77..43b43970 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/IssueRegistrationTokenFlowDescriptor.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/IssueRegistrationTokenFlowDescriptor.java
@@ -25,10 +25,10 @@ import javax.annotation.Nullable;
 import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.idp.admin.BasicAdministrativeFlowDescriptor;
-import net.shibboleth.idp.profile.config.OverriddenIssuerProfileConfiguration;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.logic.FunctionSupport;
+import net.shibboleth.profile.config.OverriddenIssuerProfileConfiguration;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.FunctionSupport;
 
 /**
  * Descriptor for flow that issues access tokens for client registration.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/AuditFields.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/AuditFields.java
index 474c837e..3e91987c 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/AuditFields.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/AuditFields.java
@@ -19,9 +19,8 @@ package net.shibboleth.idp.plugin.oidc.op.audit;
 
 import javax.annotation.Nonnull;
 
-import net.shibboleth.idp.profile.context.AuditContext;
 import net.shibboleth.idp.saml.profile.SAMLAuditFields;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 
 /** Constants to use for audit logging fields stored in an {@link AuditContext}. */
 public final class AuditFields {
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONErrorResponse.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONErrorResponse.java
index 8ebee79d..99b3f728 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONErrorResponse.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONErrorResponse.java
@@ -26,7 +26,7 @@ import com.nimbusds.oauth2.sdk.ErrorResponse;
 import com.nimbusds.oauth2.sdk.http.HTTPResponse;
 
 import net.minidev.json.JSONObject;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /** Class for creating JSON Error response for requests expecting JSON response. */
 public class JSONErrorResponse implements ErrorResponse {
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONSuccessResponse.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONSuccessResponse.java
index ce316ab2..af2f97ff 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONSuccessResponse.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONSuccessResponse.java
@@ -26,7 +26,7 @@ import com.nimbusds.oauth2.sdk.SuccessResponse;
 import com.nimbusds.oauth2.sdk.http.HTTPResponse;
 
 import net.minidev.json.JSONObject;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /** Class for creating JSON Success response. */
 public class JSONSuccessResponse implements SuccessResponse {
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/AccessTokenContext.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/AccessTokenContext.java
index 46121510..132c6cba 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/AccessTokenContext.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/AccessTokenContext.java
@@ -26,8 +26,8 @@ import org.opensaml.messaging.context.BaseContext;
 
 import com.nimbusds.jwt.JWT;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * Subcontext carrying information used to produce access tokens.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/OIDCAuthenticationResponseContext.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/OIDCAuthenticationResponseContext.java
index 83744498..af7c260b 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/OIDCAuthenticationResponseContext.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/OIDCAuthenticationResponseContext.java
@@ -41,8 +41,8 @@ import com.nimbusds.openid.connect.sdk.claims.UserInfo;
 
 import net.shibboleth.idp.attribute.AttributesMapContainer;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
-import net.shibboleth.utilities.java.support.annotation.constraint.Live;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.Live;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
 
 /**
  * Subcontext carrying information to form authentication, token and userinfo responses for relying party. This context
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/OIDCClientRegistrationMetadataPolicyContext.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/OIDCClientRegistrationMetadataPolicyContext.java
index 87e7b1be..6a4a5229 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/OIDCClientRegistrationMetadataPolicyContext.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/OIDCClientRegistrationMetadataPolicyContext.java
@@ -27,7 +27,7 @@ import org.opensaml.messaging.context.BaseContext;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.oidc.metadata.policy.MetadataPolicy;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Subcontext carrying information on the metadata policy related to the dynamic client registration.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/JWTClaimsSetFromJWTAccessTokenLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/JWTClaimsSetFromJWTAccessTokenLookupFunction.java
index 9e32c664..5458a1d8 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/JWTClaimsSetFromJWTAccessTokenLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/JWTClaimsSetFromJWTAccessTokenLookupFunction.java
@@ -32,7 +32,7 @@ import com.nimbusds.jwt.JWTClaimsSet;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.AccessTokenContext;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /** 
  * Extract the {@link JWTClaimsSet} from the JWT in {@link AccessTokenContext}.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/PayloadFromJWTAccessTokenLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/PayloadFromJWTAccessTokenLookupFunction.java
index e6c7f784..00c7e813 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/PayloadFromJWTAccessTokenLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/PayloadFromJWTAccessTokenLookupFunction.java
@@ -34,7 +34,7 @@ import com.nimbusds.jwt.SignedJWT;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.AccessTokenContext;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /** 
  * Extract the {@link Payload} from the JWT in {@link AccessTokenContext}.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/RequestedGrantTypesCondition.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/RequestedGrantTypesCondition.java
index c2c7686c..1143f144 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/RequestedGrantTypesCondition.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/RequestedGrantTypesCondition.java
@@ -29,7 +29,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import com.nimbusds.oauth2.sdk.GrantType;
 import com.nimbusds.oauth2.sdk.TokenRequest;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
 
 /**
  * Checks whether a {@link TokenRequest} was for one of a set of candidate grant_type values.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/ValidatedScopePredicate.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/ValidatedScopePredicate.java
index 0446bfa0..05dd56a7 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/ValidatedScopePredicate.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/ValidatedScopePredicate.java
@@ -27,12 +27,11 @@ import org.opensaml.profile.context.ProfileRequestContext;
 
 import com.nimbusds.oauth2.sdk.Scope;
 
-import net.shibboleth.utilities.java.support.annotation.ParameterName;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.logic.StrategyIndirectedPredicate;
-
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.ValidatedScopeLookupFunction;
+import net.shibboleth.shared.annotation.ParameterName;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.logic.StrategyIndirectedPredicate;
 
 /**
  * Predicate that evaluates a {@link ProfileRequestContext} by looking for the validated {@link Scope} that matches
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/navigate/OIDCClientRegistrationResponseMetadataLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/navigate/OIDCClientRegistrationResponseMetadataLookupFunction.java
index 3e1324ff..838f4b3e 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/navigate/OIDCClientRegistrationResponseMetadataLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/navigate/OIDCClientRegistrationResponseMetadataLookupFunction.java
@@ -32,7 +32,7 @@ import org.slf4j.LoggerFactory;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistrationResponseContext;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A function that returns {@link OIDCClientMetadata} if such is available in the message from a 
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/navigate/OIDCPolicyEnforcedClientRegistrationRequestMetadataLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/navigate/OIDCPolicyEnforcedClientRegistrationRequestMetadataLookupFunction.java
index faf8791b..acfbb407 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/navigate/OIDCPolicyEnforcedClientRegistrationRequestMetadataLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/navigate/OIDCPolicyEnforcedClientRegistrationRequestMetadataLookupFunction.java
@@ -30,7 +30,7 @@ import org.opensaml.profile.context.navigate.InboundMessageContextLookup;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistrationMetadataPolicyContext;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A lookup function for fetching policy-enforced client metadata related to the dynamic client registration request.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/MetadataValueResolver.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/MetadataValueResolver.java
index b9526a06..c5e8d699 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/MetadataValueResolver.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/MetadataValueResolver.java
@@ -19,8 +19,8 @@ package net.shibboleth.idp.plugin.oidc.op.metadata.resolver;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 
-import net.shibboleth.utilities.java.support.component.IdentifiedComponent;
-import net.shibboleth.utilities.java.support.resolver.Resolver;
+import net.shibboleth.shared.component.IdentifiedComponent;
+import net.shibboleth.shared.resolver.Resolver;
 
 /**
  * A resolver that is capable of resolving dynamic metadata values (as {@link Object}s) which meet certain supplied
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ProviderMetadataResolver.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ProviderMetadataResolver.java
index afd4d7d1..d9b43615 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ProviderMetadataResolver.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ProviderMetadataResolver.java
@@ -21,8 +21,8 @@ import org.opensaml.profile.context.ProfileRequestContext;
 
 import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 
-import net.shibboleth.utilities.java.support.component.IdentifiedComponent;
-import net.shibboleth.utilities.java.support.resolver.Resolver;
+import net.shibboleth.shared.component.IdentifiedComponent;
+import net.shibboleth.shared.resolver.Resolver;
 
 /**
  * A resolver that is capable of resolving {@link OIDCProviderMetadata} instances which meet certain supplied criteria.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/RefreshableMetadataValueResolver.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/RefreshableMetadataValueResolver.java
index b78693a3..8211fc51 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/RefreshableMetadataValueResolver.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/RefreshableMetadataValueResolver.java
@@ -21,7 +21,7 @@ import java.time.Instant;
 
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.shared.resolver.ResolverException;
 
 /**
  * A resolver that is capable of resolving dynamic metadata values (as {@link Object}s) which meet certain supplied 
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/RefreshableProviderMetadataResolver.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/RefreshableProviderMetadataResolver.java
index 502f3ef3..99121a28 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/RefreshableProviderMetadataResolver.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/RefreshableProviderMetadataResolver.java
@@ -21,7 +21,7 @@ import java.time.Instant;
 
 import javax.annotation.Nullable;
 
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.shared.resolver.ResolverException;
 
 /**
  * Specialization of {@link ProviderMetadataResolver} that supports on-demand refresh.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ServiceableProviderMetadataProvider.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ServiceableProviderMetadataProvider.java
index 3fff0c06..ff45c58b 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ServiceableProviderMetadataProvider.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ServiceableProviderMetadataProvider.java
@@ -29,13 +29,12 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.Objects;
 import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 
-import net.shibboleth.ext.spring.service.AbstractServiceableComponent;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.resolver.ResolverException;
+import net.shibboleth.shared.spring.service.AbstractServiceableComponent;
 
 /**
  * A serviceable implementation of {@link ProviderMetadataResolver}.
@@ -69,7 +68,7 @@ public class ServiceableProviderMetadataProvider extends AbstractServiceableComp
      * @param key what to set
      */
     public void setSortKey(final int key) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         sortKey = Integer.valueOf(key);
     }
 
@@ -80,7 +79,7 @@ public class ServiceableProviderMetadataProvider extends AbstractServiceableComp
      */
     @Nonnull
     public void setEmbeddedResolver(@Nonnull final ProviderMetadataResolver theResolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         resolver = Constraint.isNotNull(theResolver, "ProviderMetadataResolver cannot be null");
     }
 
@@ -178,7 +177,7 @@ public class ServiceableProviderMetadataProvider extends AbstractServiceableComp
     /** {@inheritDoc} */
     @Override
     public int compareTo(final ServiceableProviderMetadataProvider other) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        ifNotInitializedThrowUninitializedComponentException();
         final int result = sortKey.compareTo(other.sortKey);
         if (result != 0) {
             return result;
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/OidcEventIds.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/OidcEventIds.java
index c04b14c2..164db26f 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/OidcEventIds.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/OidcEventIds.java
@@ -19,7 +19,7 @@ package net.shibboleth.idp.plugin.oidc.op.profile;
 
 import javax.annotation.Nonnull;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 
 /**
  * OpenID Connect -specific constants to use for {@link org.opensaml.profile.action.ProfileAction}
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/AbstractAuthorizationRequestLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/AbstractAuthorizationRequestLookupFunction.java
index f6c5aae5..16e91bd8 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/AbstractAuthorizationRequestLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/AbstractAuthorizationRequestLookupFunction.java
@@ -27,7 +27,7 @@ import com.nimbusds.jwt.JWT;
 import com.nimbusds.oauth2.sdk.AuthorizationRequest;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A Abstract function extended by lookups searching fields from authorization request.
@@ -81,7 +81,7 @@ public abstract class AbstractAuthorizationRequestLookupFunction<T>
         }
         if (input.getOutboundMessageContext() != null) {
             final OIDCAuthenticationResponseContext ctx =
-                    input.getOutboundMessageContext().getSubcontext(OIDCAuthenticationResponseContext.class, false);
+                    input.getOutboundMessageContext().getSubcontext(OIDCAuthenticationResponseContext.class);
             if (ctx != null) {
                 requestObject = ctx.getRequestObject();
             }
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ClientInfoAudienceLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ClientInfoAudienceLookupFunction.java
index e4170897..7556a4d7 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ClientInfoAudienceLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ClientInfoAudienceLookupFunction.java
@@ -31,8 +31,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /** A function that returns {@link OIDCMetadataContext}. */
 public class ClientInfoAudienceLookupFunction implements ContextDataLookupFunction<OIDCMetadataContext,List<String>> {
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ClientInfoScopeLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ClientInfoScopeLookupFunction.java
index f4433dfa..a273d42a 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ClientInfoScopeLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ClientInfoScopeLookupFunction.java
@@ -24,7 +24,7 @@ import org.opensaml.messaging.context.navigate.ContextDataLookupFunction;
 import com.nimbusds.oauth2.sdk.Scope;
 
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
 
 /** A function that returns {@link OIDCMetadataContext}. */
 public class ClientInfoScopeLookupFunction implements ContextDataLookupFunction<OIDCMetadataContext,Scope> {
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultAuthTimeLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultAuthTimeLookupFunction.java
index d65819d1..626f4e68 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultAuthTimeLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultAuthTimeLookupFunction.java
@@ -38,7 +38,7 @@ public class DefaultAuthTimeLookupFunction implements ContextDataLookupFunction<
         if (input == null) {
             return null;
         }
-        final AuthenticationContext authCtx = input.getSubcontext(AuthenticationContext.class, false);
+        final AuthenticationContext authCtx = input.getSubcontext(AuthenticationContext.class);
         if (authCtx == null) {
             return null;
         }
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultComputeAuthorizationCodeHashFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultComputeAuthorizationCodeHashFunction.java
index 613084d1..603dd17d 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultComputeAuthorizationCodeHashFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultComputeAuthorizationCodeHashFunction.java
@@ -33,12 +33,11 @@ import com.nimbusds.openid.connect.sdk.claims.CodeHash;
 
 import net.shibboleth.oidc.security.jose.SignatureSigningParameters;
 import net.shibboleth.oidc.security.jose.context.SecurityParametersContext;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+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.StringSupport;
 
 /**
  * A function that computes a hash value for the authorization code via required configurable lookup function.
@@ -69,7 +68,7 @@ public class DefaultComputeAuthorizationCodeHashFunction extends AbstractIdentif
      */
     public void setSecurityParametersLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, SecurityParametersContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         securityParametersLookupStrategy =
                 Constraint.isNotNull(strategy, "SecurityParameterContext lookup strategy cannot be null");
@@ -81,7 +80,7 @@ public class DefaultComputeAuthorizationCodeHashFunction extends AbstractIdentif
      * @param strategy lookup strategy
      */
     public void setAuthorizationCodeLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         authorizationCodeLookupStrategy =
                 Constraint.isNotNull(strategy, "AuthorizationCode lookup strategy cannot be null");
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/MetadataStatementsLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/MetadataStatementsLookupFunction.java
index 8a9046cf..1b88962a 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/MetadataStatementsLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/MetadataStatementsLookupFunction.java
@@ -34,8 +34,8 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.minidev.json.JSONObject;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.navigate.OIDCClientRegistrationRequestMetadataLookupFunction;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A function that returns metadata_statements (oidcfed) obtained via a lookup function.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/OIDCRegistrationResponseContextLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/OIDCRegistrationResponseContextLookupFunction.java
index d8f4d7d9..83b98127 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/OIDCRegistrationResponseContextLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/OIDCRegistrationResponseContextLookupFunction.java
@@ -37,7 +37,7 @@ public class OIDCRegistrationResponseContextLookupFunction
         if (input == null || input.getOutboundMessageContext() == null) {
             return null;
         }
-        return input.getOutboundMessageContext().getSubcontext(OIDCClientRegistrationResponseContext.class, false);
+        return input.getOutboundMessageContext().getSubcontext(OIDCClientRegistrationResponseContext.class);
     }
 
 }
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ProfileResponderIdLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ProfileResponderIdLookupFunction.java
index fb57dfe8..7155a2b0 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ProfileResponderIdLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ProfileResponderIdLookupFunction.java
@@ -23,10 +23,10 @@ import java.util.Map;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import net.shibboleth.idp.profile.config.ProfileConfiguration;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.profile.config.ProfileConfiguration;
+import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.messaging.context.navigate.ContextDataLookupFunction;
 import org.opensaml.profile.context.ProfileRequestContext;
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/SectorIdentifierLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/SectorIdentifierLookupFunction.java
index 36bfe5cb..ff83ebab 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/SectorIdentifierLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/SectorIdentifierLookupFunction.java
@@ -26,8 +26,8 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.messaging.context.navigate.ContextDataLookupFunction;
 import org.opensaml.profile.context.ProfileRequestContext;
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/TokenRequestAudienceLookupFunction.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/TokenRequestAudienceLookupFunction.java
index fb4add50..ed95c930 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/TokenRequestAudienceLookupFunction.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/TokenRequestAudienceLookupFunction.java
@@ -26,7 +26,7 @@ import javax.annotation.Nullable;
 
 import com.nimbusds.oauth2.sdk.TokenRequest;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
 
 /**
  * A function that returns a copy of requested resource list from a {@link TokenRequest}.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/storage/RevocationCache.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/storage/RevocationCache.java
deleted file mode 100644
index 8f356414..00000000
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/storage/RevocationCache.java
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.plugin.oidc.op.storage;
-
-import java.io.IOException;
-import java.time.Duration;
-import java.time.Instant;
-
-import javax.annotation.Nonnull;
-
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.annotation.constraint.Positive;
-import net.shibboleth.utilities.java.support.annotation.constraint.ThreadSafeAfterInit;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
-import org.apache.commons.codec.digest.DigestUtils;
-import org.opensaml.storage.StorageCapabilities;
-import org.opensaml.storage.StorageCapabilitiesEx;
-import org.opensaml.storage.StorageRecord;
-import org.opensaml.storage.StorageService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Stores and checks for revocation entries.
- * 
- * <p>
- * This class is thread-safe and uses a synchronized method to prevent race conditions within the underlying store
- * (lacking an atomic "check and insert" operation).
- * </p>
- * 
- * @deprecated
- */
- at Deprecated(since="3.1.0", forRemoval=true)
- at ThreadSafeAfterInit
-public class RevocationCache extends AbstractIdentifiableInitializableComponent {
-
-    /** Logger. */
-    private final Logger log = LoggerFactory.getLogger(RevocationCache.class);
-
-    /** Backing storage for the replay cache. */
-    private StorageService storage;
-
-    /** Flag controlling behavior on storage failure. */
-    private boolean strict;
-
-    /** Lifetime of revocation entry. Default value: 6 hours */
-    @Nonnull @Positive private Duration expires;
-
-    /**
-     * Constructor.
-     */
-    public RevocationCache() {
-        expires = Duration.ofHours(6);
-    }
-
-    /**
-     * Set the revocation entry expiration.
-     * 
-     * @param entryExpiration lifetime of an revocation entry in milliseconds
-     */
-    public void setEntryExpiration(@Positive final Duration entryExpiration) {
-        Constraint.isTrue(entryExpiration != null && !entryExpiration.isNegative() && !entryExpiration.isZero(),
-                "Revocation cache entry expiration must be greater than 0");
-        expires = entryExpiration;
-    }
-
-    /**
-     * Get the backing store for the cache.
-     * 
-     * @return the backing store.
-     */
-    @NonnullAfterInit
-    public StorageService getStorage() {
-        return storage;
-    }
-
-    /**
-     * Set the backing store for the cache.
-     * 
-     * @param storageService backing store to use
-     */
-    public void setStorage(@Nonnull final StorageService storageService) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
-        storage = Constraint.isNotNull(storageService, "StorageService cannot be null");
-        final StorageCapabilities caps = storage.getCapabilities();
-        if (caps instanceof StorageCapabilitiesEx) {
-            Constraint.isTrue(((StorageCapabilitiesEx) caps).isServerSide(), "StorageService cannot be client-side");
-        }
-    }
-
-    /**
-     * Get the strictness flag.
-     * 
-     * @return true iff we should treat storage failures as a replay
-     */
-    public boolean isStrict() {
-        return strict;
-    }
-
-    /**
-     * Set the strictness flag.
-     * 
-     * @param flag true iff we should treat storage failures as a replay
-     */
-    public void setStrict(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-
-        strict = flag;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void doInitialize() throws ComponentInitializationException {
-        if (storage == null) {
-            throw new ComponentInitializationException("StorageService cannot be null");
-        }
-    }
-
-    /**
-     * Returns true if the value is successfully revoked. If value has already been revoked, expiration is updated.
-     * 
-     * @param context a context label to subdivide the cache
-     * @param s value to revoke
-     * 
-     * @return true if value has successfully been listed as revoked in the cache.
-     */
-    public synchronized boolean revoke(@Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String s) {
-        final String key;
-
-        final StorageCapabilities caps = storage.getCapabilities();
-        if (context.length() > caps.getContextSize()) {
-            log.error("context {} too long for StorageService (limit {})", context, caps.getContextSize());
-            return false;
-        } else if (s.length() > caps.getKeySize()) {
-            key = DigestUtils.sha1Hex(s);
-        } else {
-            key = s;
-        }
-        try {
-            final StorageRecord<?> entry = storage.read(context, key);
-            if (entry == null) {
-                log.debug("Entry '{}' of context '{}' is not yet on list of revoked entries,"
-                        + " adding to cache with expiration time {}", key, context, expires);
-                storage.create(context, key, "y", Instant.now().plus(expires).toEpochMilli());
-                return true;
-            } else {
-                storage.update(context, key, "y", Instant.now().plus(expires).toEpochMilli());
-                log.debug("Entry '{}' of context '{}' was already revoked, updating expiration", key, context);
-                return true;
-            }
-        } catch (final IOException e) {
-            log.error("Exception reading/writing to storage service, returning {}", strict ? "failure" : "success", e);
-            return !strict;
-        }
-    }
-
-    /**
-     * Returns false if the value has successfully been confirmed as not revoked.
-     * 
-     * @param context a context label to subdivide the cache
-     * @param s value to revoke
-     * 
-     * @return false if the check value is not found in the cache
-     */
-    public synchronized boolean isRevoked(@Nonnull @NotEmpty final String context, @Nonnull @NotEmpty final String s) {
-        final String key;
-        final StorageCapabilities caps = storage.getCapabilities();
-        if (context.length() > caps.getContextSize()) {
-            log.error("context {} too long for StorageService (limit {})", context, caps.getContextSize());
-            return true;
-        } else if (s.length() > caps.getKeySize()) {
-            key = DigestUtils.sha1Hex(s);
-        } else {
-            key = s;
-        }
-
-        try {
-            final StorageRecord<?> entry = storage.read(context, key);
-            if (entry == null) {
-                log.debug("Entry '{}' is not revoked", key);
-                return false;
-            } else {
-                log.debug("Entry '{}' is revoked", s);
-                return true;
-            }
-        } catch (final IOException e) {
-            log.error("Exception reading/writing to storage service, returning {}", strict ? "failure" : "success", e);
-            return !strict;
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/storage/RevocationCacheContexts.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/storage/RevocationCacheContexts.java
index 49be4745..61d2e285 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/storage/RevocationCacheContexts.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/storage/RevocationCacheContexts.java
@@ -19,7 +19,7 @@ package net.shibboleth.idp.plugin.oidc.op.storage;
 
 import javax.annotation.Nonnull;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 
 /**
  * Revocation cache contexts shared across actions.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/AccessTokenClaimsSet.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/AccessTokenClaimsSet.java
index 9aefa336..cb00c5b5 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/AccessTokenClaimsSet.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/AccessTokenClaimsSet.java
@@ -27,10 +27,10 @@ import com.nimbusds.oauth2.sdk.id.ClientID;
 import com.nimbusds.openid.connect.sdk.claims.ACR;
 import com.nimbusds.openid.connect.sdk.claims.ClaimsSet;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.IdentifierGenerationStrategy;
 
 import java.net.URI;
 import java.text.ParseException;
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/AuthorizeCodeClaimsSet.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/AuthorizeCodeClaimsSet.java
index daca3855..f2076e20 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/AuthorizeCodeClaimsSet.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/AuthorizeCodeClaimsSet.java
@@ -23,10 +23,11 @@ import com.nimbusds.jwt.JWTClaimsSet;
 import com.nimbusds.oauth2.sdk.Scope;
 import com.nimbusds.oauth2.sdk.id.ClientID;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.IdentifierGenerationStrategy;
+
 import java.net.URI;
 import java.text.ParseException;
 import java.time.Instant;
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/RefreshTokenClaimsSet.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/RefreshTokenClaimsSet.java
index 6445701f..7ab7fe86 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/RefreshTokenClaimsSet.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/RefreshTokenClaimsSet.java
@@ -18,15 +18,14 @@
 package net.shibboleth.idp.plugin.oidc.op.token.support;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 
 import com.nimbusds.jwt.JWTClaimsSet;
 import com.nimbusds.openid.connect.sdk.claims.ACR;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
 
 import java.text.ParseException;
 import java.time.Instant;
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/RegistrationClaimsSet.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/RegistrationClaimsSet.java
index b197ca33..8cc13ee1 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/RegistrationClaimsSet.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/RegistrationClaimsSet.java
@@ -31,12 +31,12 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonSetter;
 
 import net.shibboleth.oidc.metadata.policy.MetadataPolicy;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonNegative;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
-import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.shared.annotation.constraint.NonNegative;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.annotation.constraint.NotLive;
+import net.shibboleth.shared.annotation.constraint.Unmodifiable;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * Class wrapping claims for the initial registration access token.
diff --git a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/TokenClaimsSet.java b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/TokenClaimsSet.java
index f1cd8073..d983fd88 100644
--- a/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/TokenClaimsSet.java
+++ b/idp-oidc-extension-api/src/main/java/net/shibboleth/idp/plugin/oidc/op/token/support/TokenClaimsSet.java
@@ -41,14 +41,14 @@ import com.nimbusds.openid.connect.sdk.claims.ACR;
 import com.nimbusds.openid.connect.sdk.claims.ClaimsSet;
 
 import net.minidev.json.JSONObject;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
-import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.annotation.constraint.NotLive;
+import net.shibboleth.shared.annotation.constraint.Unmodifiable;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.IdentifierGenerationStrategy;
 
 import java.net.URI;
 import java.text.ParseException;
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONErrorResponseTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONErrorResponseTest.java
index 02d40e88..b32cdd14 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONErrorResponseTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONErrorResponseTest.java
@@ -26,7 +26,7 @@ import com.nimbusds.oauth2.sdk.http.HTTPResponse;
 import net.minidev.json.JSONObject;
 import net.minidev.json.parser.JSONParser;
 import net.minidev.json.parser.ParseException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 /** Tests for {@link JSONErrorResponse}. */
 public class JSONErrorResponseTest {
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONSuccessResponseTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONSuccessResponseTest.java
index 469b69e0..1d95f82e 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONSuccessResponseTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/JSONSuccessResponseTest.java
@@ -24,7 +24,7 @@ import com.nimbusds.oauth2.sdk.http.HTTPResponse;
 import net.minidev.json.JSONObject;
 import net.minidev.json.parser.JSONParser;
 import net.minidev.json.parser.ParseException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 /** Tests for JSONSuccessResponse. */
 public class JSONSuccessResponseTest {
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/ValidatedScopePredicateTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/ValidatedScopePredicateTest.java
index 698b7172..dd32eebf 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/ValidatedScopePredicateTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/messaging/context/logic/ValidatedScopePredicateTest.java
@@ -39,7 +39,7 @@ public class ValidatedScopePredicateTest {
         final ProfileRequestContext prc = new ProfileRequestContext();
         final MessageContext msgCtx = new MessageContext();
         final OIDCAuthenticationResponseContext oidcResponseCtx = 
-                msgCtx.getSubcontext(OIDCAuthenticationResponseContext.class, true);
+                msgCtx.ensureSubcontext(OIDCAuthenticationResponseContext.class);
         oidcResponseCtx.setScope(scope);
         prc.setOutboundMessageContext(msgCtx);
         return prc;
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ServiceableProviderMetadataProviderTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ServiceableProviderMetadataProviderTest.java
index 66c309bd..3e69fc76 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ServiceableProviderMetadataProviderTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/resolver/ServiceableProviderMetadataProviderTest.java
@@ -36,9 +36,9 @@ import com.nimbusds.oauth2.sdk.id.Issuer;
 import com.nimbusds.openid.connect.sdk.SubjectType;
 import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 
-import net.shibboleth.ext.spring.testing.MockApplicationContext;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.resolver.ResolverException;
+import net.shibboleth.shared.testing.MockApplicationContext;
 
 /**
  * Unit tests for {@link ServiceableProviderMetadataProvider}.
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/AbstractTokenClaimsLookupFunctionTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/AbstractTokenClaimsLookupFunctionTest.java
index ca488275..fb56d97c 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/AbstractTokenClaimsLookupFunctionTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/AbstractTokenClaimsLookupFunctionTest.java
@@ -22,7 +22,7 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.AccessTokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 import java.net.URI;
 import java.time.Instant;
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/BaseTokenRequestLookupFunctionTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/BaseTokenRequestLookupFunctionTest.java
index 2fee6065..89ea9da5 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/BaseTokenRequestLookupFunctionTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/BaseTokenRequestLookupFunctionTest.java
@@ -22,7 +22,7 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationRes
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 import java.net.URI;
 import java.net.URISyntaxException;
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultAuthTimeLookupFunctionTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultAuthTimeLookupFunctionTest.java
index b56649ca..403e3e13 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultAuthTimeLookupFunctionTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultAuthTimeLookupFunctionTest.java
@@ -50,7 +50,7 @@ public class DefaultAuthTimeLookupFunctionTest {
         lookup = new DefaultAuthTimeLookupFunction();
         final RequestContext requestCtx = new RequestContextBuilder().buildRequestContext();
         prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
-        authCtx = prc.getSubcontext(AuthenticationContext.class, true);
+        authCtx = prc.ensureSubcontext(AuthenticationContext.class);
         result = new AuthenticationResult("id", new Subject());
         result.setAuthenticationInstant(instant);
         authCtx.setAuthenticationResult(result);
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultUserInfoSigningAlgLookupFunctionTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultUserInfoSigningAlgLookupFunctionTest.java
index 7e889709..ce1a8f66 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultUserInfoSigningAlgLookupFunctionTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultUserInfoSigningAlgLookupFunctionTest.java
@@ -51,7 +51,7 @@ public class DefaultUserInfoSigningAlgLookupFunctionTest {
         final RequestContext requestCtx = new RequestContextBuilder().buildRequestContext();
         prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
         prc.setInboundMessageContext(new MessageContext());
-        ctx = prc.getInboundMessageContext().getSubcontext(OIDCMetadataContext.class, true);
+        ctx = prc.getInboundMessageContext().ensureSubcontext(OIDCMetadataContext.class);
         ctx.setClientInformation(
                 new OIDCClientInformation(new ClientID("id"), new Date(), new OIDCClientMetadata(), new Secret()));
         ctx.getClientInformation().getOIDCMetadata().setUserInfoJWSAlg(JWSAlgorithm.ES256);
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultValidRedirectUrisLookupFunctionTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultValidRedirectUrisLookupFunctionTest.java
index a5628147..c3e3dce1 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultValidRedirectUrisLookupFunctionTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/DefaultValidRedirectUrisLookupFunctionTest.java
@@ -53,7 +53,7 @@ public class DefaultValidRedirectUrisLookupFunctionTest {
         final RequestContext requestCtx = new RequestContextBuilder().buildRequestContext();
         prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
         prc.setInboundMessageContext(new MessageContext());
-        ctx = prc.getInboundMessageContext().getSubcontext(OIDCMetadataContext.class, true);
+        ctx = prc.getInboundMessageContext().ensureSubcontext(OIDCMetadataContext.class);
         ctx.setClientInformation(
                 new OIDCClientInformation(new ClientID("id"), new Date(), new OIDCClientMetadata(), new Secret()));
         Set<URI> redirectURIs = new HashSet<URI>();
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ProfileResponderIdLookupFunctionTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ProfileResponderIdLookupFunctionTest.java
index ab5ae861..a0d0dd32 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ProfileResponderIdLookupFunctionTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/context/navigate/ProfileResponderIdLookupFunctionTest.java
@@ -27,10 +27,10 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.profile.config.ProfileConfiguration;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.profile.config.ProfileConfiguration;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** Tests for {@link ProfileResponderIdLookupFunction}. */
 public class ProfileResponderIdLookupFunctionTest {
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/storage/RevocationCacheTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/storage/RevocationCacheTest.java
deleted file mode 100644
index d48cdfc5..00000000
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/storage/RevocationCacheTest.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Licensed to the University Corporation for Advanced Internet Development,
- * Inc. (UCAID) under one or more contributor license agreements.  See the
- * NOTICE file distributed with this work for additional information regarding
- * copyright ownership. The UCAID licenses this file to You under the Apache
- * License, Version 2.0 (the "License"); you may not use this file except in
- * compliance with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package net.shibboleth.idp.plugin.oidc.op.storage;
-
-import java.nio.charset.Charset;
-import java.time.Duration;
-import java.util.Random;
-
-import org.opensaml.storage.impl.client.ClientStorageService;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.Test;
-
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
-
-import org.testng.annotations.BeforeMethod;
-import org.testng.Assert;
-import org.opensaml.storage.impl.MemoryStorageService;;
-
-/**
- * Tests for {@link RevocationCache}
- */
-public class RevocationCacheTest {
-
-    
-    private MemoryStorageService storageService;
-    
-    private RevocationCache revocationCache;
-
-    @BeforeMethod
-    protected void setUp() throws Exception {
-    
-        storageService = new MemoryStorageService();
-        storageService.setId("test");
-        storageService.initialize();
-        
-        revocationCache = new RevocationCache();
-        revocationCache.setEntryExpiration(Duration.ofMillis(500));
-        revocationCache.setStorage(storageService);
-        revocationCache.initialize();
-    }
-    
-    @AfterMethod
-    protected void tearDown() {
-        revocationCache.destroy();
-        revocationCache = null;
-        
-        storageService.destroy();
-        storageService = null;
-    }
-    
-    @Test
-    public void testInit() {
-        revocationCache = new RevocationCache();
-        try {
-            revocationCache.setStorage(null);
-            Assert.fail("Null StorageService should have caused constraint violation");
-        } catch (final Exception e) {
-        }
-
-        try {
-            revocationCache.setStorage(new ClientStorageService());
-            
-            Assert.fail("ClientStorageService should have caused constraint violation");
-        } catch (final Exception e) {
-        }
-    }
-    
-    
-    @Test
-    public void testStrictSetter() throws ComponentInitializationException {
-        Assert.assertFalse(revocationCache.isStrict());
-        revocationCache = new RevocationCache();
-        revocationCache.setStorage(storageService);
-        revocationCache.setStrict(true);
-        revocationCache.initialize();
-        Assert.assertTrue(revocationCache.isStrict());
-    }
-    
-    @Test (expectedExceptions = ConstraintViolationException.class)
-    public void testExpirationSetter() throws ComponentInitializationException {
-        //Must be positive
-        revocationCache.setEntryExpiration(Duration.ZERO);
-    }
-    
-    @Test 
-    public void testStorageGetter() throws ComponentInitializationException {
-        Assert.assertEquals(storageService, revocationCache.getStorage());
-    }
-    
-    @Test 
-    public void testRevocationSuccess() throws ComponentInitializationException {
-        Assert.assertFalse(revocationCache.isRevoked("context", "item"));
-        Assert.assertTrue(revocationCache.revoke("context", "item"));
-        Assert.assertTrue(revocationCache.isRevoked("context", "item"));
-    }
-    
-    @Test 
-    public void testRevocationSuccessLongContext() throws ComponentInitializationException {
-        storageService = new MemoryStorageService();
-        storageService.setId("test");
-        storageService.setContextSize(50);
-        storageService.initialize();
-        
-        revocationCache = new RevocationCache();
-        revocationCache.setStorage(storageService);
-        revocationCache.initialize();
-        
-        final byte[] array = new byte[storageService.getCapabilities().getContextSize()*2];
-        new Random().nextBytes(array);
-        final String context = new String(array, Charset.forName("UTF-8"));
-        Assert.assertTrue(context.length()>storageService.getCapabilities().getContextSize());
-        Assert.assertTrue(revocationCache.isRevoked(context, "item"));
-        Assert.assertFalse(revocationCache.revoke(context, "item"));
-    }
-    
-    @Test 
-    public void testRevocationSuccessLongLongItem() throws ComponentInitializationException {
-        storageService = new MemoryStorageService();
-        storageService.setId("test");
-        storageService.setKeySize(50);
-        storageService.initialize();
-        revocationCache = new RevocationCache();
-        revocationCache.setStorage(storageService);
-        revocationCache.initialize();
-        final byte[] array = new byte[storageService.getCapabilities().getKeySize()*2];
-        new Random().nextBytes(array);
-        final String item = new String(array, Charset.forName("UTF-8"));
-        Assert.assertTrue(item.length()>storageService.getCapabilities().getKeySize());
-        Assert.assertFalse(revocationCache.isRevoked("context", item));
-        Assert.assertTrue(revocationCache.revoke("context", item));
-        Assert.assertTrue(revocationCache.isRevoked("context", item));
-    }
-    
-    @Test 
-    public void testRevocationExpirationSuccess() throws ComponentInitializationException, InterruptedException {
-        //Test expiration of entry (500ms)
-        Assert.assertFalse(revocationCache.isRevoked("context", "item"));
-        Assert.assertTrue(revocationCache.revoke("context", "item"));
-        Thread.sleep(600L);
-        Assert.assertFalse(revocationCache.isRevoked("context", "item"));
-        //Test rolling window, second revoke updates expiration past original 500ms
-        Assert.assertTrue(revocationCache.revoke("context", "item"));
-        Thread.sleep(300L);
-        Assert.assertTrue(revocationCache.revoke("context", "item"));
-        Thread.sleep(300L);
-        Assert.assertTrue(revocationCache.isRevoked("context", "item"));
-    }
-}
\ No newline at end of file
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/AccessTokenClaimsSetTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/AccessTokenClaimsSetTest.java
index 4dd5c019..73235be5 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/AccessTokenClaimsSetTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/AccessTokenClaimsSetTest.java
@@ -20,8 +20,9 @@ package net.shibboleth.idp.plugin.oidc.op.token.support;
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.plugin.oidc.op.token.support.testing.BaseTokenClaimsSetTest;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
+
 import java.text.ParseException;
 
 import org.testng.Assert;
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/AuthorizeCodeClaimsSetTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/AuthorizeCodeClaimsSetTest.java
index 477caf0a..6e951d15 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/AuthorizeCodeClaimsSetTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/AuthorizeCodeClaimsSetTest.java
@@ -20,8 +20,8 @@ package net.shibboleth.idp.plugin.oidc.op.token.support;
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.plugin.oidc.op.token.support.testing.BaseTokenClaimsSetTest;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 import java.text.ParseException;
 
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/RefreshTokenClaimsSetTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/RefreshTokenClaimsSetTest.java
index 586d6a84..f61b7a4e 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/RefreshTokenClaimsSetTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/RefreshTokenClaimsSetTest.java
@@ -20,8 +20,8 @@ package net.shibboleth.idp.plugin.oidc.op.token.support;
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.plugin.oidc.op.token.support.testing.BaseTokenClaimsSetTest;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 import java.text.ParseException;
 
diff --git a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/testing/BaseTokenClaimsSetTest.java b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/testing/BaseTokenClaimsSetTest.java
index e6cfd502..edb57a31 100644
--- a/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/testing/BaseTokenClaimsSetTest.java
+++ b/idp-oidc-extension-api/src/test/java/net/shibboleth/idp/plugin/oidc/op/token/support/testing/BaseTokenClaimsSetTest.java
@@ -26,11 +26,11 @@ import com.nimbusds.openid.connect.sdk.claims.ClaimsSet;
 import com.nimbusds.openid.connect.sdk.claims.ClaimsSetRequest;
 
 import net.minidev.json.JSONArray;
-import net.shibboleth.ext.spring.resource.ResourceHelper;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.impl.BasicKeystoreKeyStrategy;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.impl.BasicKeystoreKeyStrategy;
+import net.shibboleth.shared.spring.resource.ResourceHelper;
 
 import org.testng.annotations.BeforeMethod;
 import java.net.URI;
diff --git a/idp-oidc-extension-distribution/pom.xml b/idp-oidc-extension-distribution/pom.xml
index 013d7423..8649b250 100644
--- a/idp-oidc-extension-distribution/pom.xml
+++ b/idp-oidc-extension-distribution/pom.xml
@@ -8,7 +8,7 @@
     <parent>
         <artifactId>idp-plugin-oidc-op-parent</artifactId>
         <groupId>net.shibboleth.idp.plugin.oidc</groupId>
-        <version>3.4.1-SNAPSHOT</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>idp-plugin-oidc-op-distribution</artifactId>
diff --git a/idp-oidc-extension-impl/pom.xml b/idp-oidc-extension-impl/pom.xml
index 682ec57f..a1d1c69c 100644
--- a/idp-oidc-extension-impl/pom.xml
+++ b/idp-oidc-extension-impl/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <artifactId>idp-plugin-oidc-op-parent</artifactId>
         <groupId>net.shibboleth.idp.plugin.oidc</groupId>
-        <version>3.4.1-SNAPSHOT</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
     
     <artifactId>idp-plugin-oidc-op-impl</artifactId>
@@ -43,87 +43,149 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-authn-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-attribute-resolver-spring</artifactId>
+            <groupId>${idp.groupId}</groupId>
+            <artifactId>idp-authn-impl</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${idp.groupId}</groupId>
+            <artifactId>idp-profile-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${idp.groupId}</groupId>
+            <artifactId>idp-spring</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${idp.groupId}</groupId>
+            <artifactId>idp-cli</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-support</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-spring</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-security-spring</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-networking-spring</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-cli</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-attribute-resolver-spring</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-saml-profile-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-profile-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-profile-impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-storage-api</artifactId>
             <scope>provided</scope>
         </dependency>      
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-attribute-filter-spring</artifactId>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-attribute-filter-spring</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-attribute-filter-impl</artifactId>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-attribute-filter-impl</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-consent-impl</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-ui</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-installer</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-attribute-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-attribute-impl</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-crypto-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-crypto-impl</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-metadata-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-metadata-impl</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-profile-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-profile-impl</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-saml-api</artifactId>
             <scope>provided</scope>
         </dependency>
@@ -133,22 +195,22 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-profile-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-attribute-filter-api</artifactId>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-attribute-filter-api</artifactId>
             <scope>provided</scope>
         </dependency> 
         <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
+            <groupId>jakarta.servlet</groupId>
+            <artifactId>jakarta.servlet-api</artifactId>
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-admin-api</artifactId>
             <scope>provided</scope>
         </dependency>
@@ -159,7 +221,7 @@
         </dependency>
         <!-- Needed to allow module/plugin derivation. -->
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-admin-impl</artifactId>
             <scope>provided</scope>
         </dependency>
@@ -191,98 +253,69 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-profile-api</artifactId>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-attribute-filter-spring</artifactId>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.opensaml</groupId>
-            <artifactId>opensaml-core</artifactId>
-            <type>test-jar</type>
+            <groupId>${opensaml.groupId}</groupId>
+            <artifactId>opensaml-testing</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-attribute-resolver-spring</artifactId>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-authn-impl</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-authn-impl</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-authn-api</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-core</artifactId>
-            <type>test-jar</type>
+            <groupId>${idp.groupId}</groupId>
+            <artifactId>idp-testing</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-saml-impl</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-conf</artifactId>
+            <groupId>${idp.groupId}</groupId>
+            <artifactId>idp-conf-impl</artifactId>
+            <version>${idp.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-conf</artifactId>
+            <groupId>${idp.groupId}</groupId>
+            <artifactId>idp-conf-impl</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
-            <artifactId>idp-conf-impl</artifactId>
-            <scope>test</scope>
-        </dependency>    
-        <dependency>
-            <groupId>org.opensaml</groupId>
-            <artifactId>opensaml-profile-impl</artifactId>
-            <type>test-jar</type>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-testing</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
-            <artifactId>opensaml-profile-api</artifactId>
+            <groupId>${shib-shared.groupId}</groupId>
+            <artifactId>shib-attribute-filter-spring</artifactId>
+            <version>${idp.version}</version>
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-profile-impl</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-storage-impl</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.opensaml</groupId>
+            <groupId>${opensaml.groupId}</groupId>
             <artifactId>opensaml-messaging-impl</artifactId>
             <optional>true</optional>
             <scope>test</scope>
@@ -294,7 +327,7 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-crypto-impl</artifactId>
             <version>${oidc.common.version}</version>
             <type>test-jar</type>
@@ -311,39 +344,27 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.oidc</groupId>
+            <groupId>${oidc-common.groupId}</groupId>
             <artifactId>oidc-common-saml-impl</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-session-impl</artifactId>
             <scope>test</scope>
             <optional>true</optional>
         </dependency>
         <dependency>
-            <groupId>net.shibboleth.idp</groupId>
+            <groupId>${idp.groupId}</groupId>
             <artifactId>idp-cas-impl</artifactId>
             <scope>test</scope>
             <optional>true</optional>
         </dependency>
-        <dependency>
-            <groupId>net.shibboleth.ext</groupId>
-            <artifactId>spring-extensions</artifactId>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>org.hsqldb</groupId>
             <artifactId>hsqldb</artifactId>
             <scope>test</scope>
         </dependency>
-        <dependency>
-	       <groupId>net.shibboleth.utilities</groupId>
-	       <artifactId>java-support</artifactId>
-	       <type>test-jar</type>
-	       <scope>test</scope>
-        </dependency>
     </dependencies>
     <profiles>
         <!--
@@ -378,10 +399,10 @@
                             <goal>unpack-dependencies</goal>
                         </goals>
                         <configuration>
-                            <includeGroupIds>net.shibboleth.idp</includeGroupIds>
-                            <includeArtifactIds>idp-conf</includeArtifactIds>
+                            <includeGroupIds>${idp.groupId}</includeGroupIds>
+                            <includeArtifactIds>idp-conf-impl</includeArtifactIds>
                             <outputDirectory>${project.build.directory}/classes</outputDirectory>
-                            <includes>conf/**,credentials/ldap-server.crt</includes>
+                            <includes>conf/**,credentials/ldap-server.crt,net/shibboleth/idp/module/conf/**,net/shibboleth/idp/module/credentials/**,test/**</includes>
                         </configuration>
                     </execution>
                     <execution>
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/OIDCOPModule.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/OIDCOPModule.java
index 9e10a69b..cadecb52 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/OIDCOPModule.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/OIDCOPModule.java
@@ -20,8 +20,8 @@ package net.shibboleth.idp.plugin.oidc.op;
 import java.io.IOException;
 
 import net.shibboleth.idp.module.IdPModule;
-import net.shibboleth.idp.module.ModuleException;
 import net.shibboleth.idp.module.impl.PluginIdPModule;
+import net.shibboleth.profile.module.ModuleException;
 
 /**
  * {@link IdPModule} implementation.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/OIDCOPPlugin.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/OIDCOPPlugin.java
index 5d8c1254..5252abb1 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/OIDCOPPlugin.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/OIDCOPPlugin.java
@@ -21,9 +21,9 @@ import java.io.IOException;
 import java.util.Collections;
 
 import net.shibboleth.idp.module.IdPModule;
-import net.shibboleth.idp.module.ModuleException;
-import net.shibboleth.idp.plugin.PluginException;
 import net.shibboleth.idp.plugin.impl.FirstPartyIdPPlugin;
+import net.shibboleth.profile.module.ModuleException;
+import net.shibboleth.profile.plugin.PluginException;
 
 /**
  * Details about the OIDC OP plugin.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/AbstractAdminApiProfileAction.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/AbstractAdminApiProfileAction.java
index 7d9a3eda..e981b1e6 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/AbstractAdminApiProfileAction.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/AbstractAdminApiProfileAction.java
@@ -21,7 +21,6 @@ import java.io.IOException;
 import java.util.Collections;
 
 import javax.annotation.Nonnull;
-import javax.servlet.http.HttpServletResponse;
 
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
@@ -33,12 +32,12 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.jasminb.jsonapi.models.errors.Error;
 import com.github.jasminb.jsonapi.models.errors.Errors;
 
+import jakarta.servlet.http.HttpServletResponse;
 import net.shibboleth.idp.profile.AbstractProfileAction;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Base class for admin flow actions producing JSON responses.
@@ -59,7 +58,7 @@ public class AbstractAdminApiProfileAction extends AbstractProfileAction {
      * @param mapper object mapper
      */
     public void setObjectMapper(@Nonnull final ObjectMapper mapper) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         objectMapper = Constraint.isNotNull(mapper, "ObjectMapper cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/DoClientManagementOperation.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/DoClientManagementOperation.java
index 4a9cd082..ea6b95bb 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/DoClientManagementOperation.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/DoClientManagementOperation.java
@@ -21,21 +21,18 @@ import java.io.IOException;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 
 import net.shibboleth.idp.profile.context.SpringRequestContext;
 import net.shibboleth.oidc.metadata.ClientInformationManager;
 import net.shibboleth.oidc.metadata.ClientInformationManagerException;
 import net.shibboleth.oidc.metadata.ClientInformationResolver;
 import net.shibboleth.oidc.metadata.criterion.ClientIDCriterion;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.resolver.CriteriaSet;
+import net.shibboleth.shared.resolver.ResolverException;
 
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
@@ -48,6 +45,9 @@ import com.google.common.base.Strings;
 import com.nimbusds.oauth2.sdk.id.ClientID;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
 /**
  * Action that implements a JSON REST API for querying and deleting OIDC client information.
  * 
@@ -82,7 +82,7 @@ public class DoClientManagementOperation extends AbstractAdminApiProfileAction {
     * @param theResolver client info resolver
     */
    public void setClientInformationResolver(@Nonnull final ClientInformationResolver theResolver) {
-       ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+       ifInitializedThrowUnmodifiabledComponentException();
        
        resolver = Constraint.isNotNull(theResolver, "ClientInformationResolver cannot be null");
    }
@@ -93,7 +93,7 @@ public class DoClientManagementOperation extends AbstractAdminApiProfileAction {
     * @param theManager client info manager
     */
    public void setClientInformationManager(@Nonnull final ClientInformationManager theManager) {
-       ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+       ifInitializedThrowUnmodifiabledComponentException();
        
        manager = Constraint.isNotNull(theManager, "ClientInformationManager cannot be null");
    }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/IssueRegistrationAccessToken.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/IssueRegistrationAccessToken.java
index 56935cab..60a6d9b6 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/IssueRegistrationAccessToken.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/IssueRegistrationAccessToken.java
@@ -26,7 +26,6 @@ import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletResponse;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.ActionSupport;
@@ -42,25 +41,25 @@ import com.nimbusds.oauth2.sdk.token.AccessToken;
 import com.nimbusds.oauth2.sdk.token.BearerAccessToken;
 import com.nimbusds.oauth2.sdk.token.Tokens;
 
+import jakarta.servlet.http.HttpServletResponse;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.context.SubjectContext;
 import net.shibboleth.idp.plugin.oidc.op.cli.IssueRegistrationAccessTokenArguments;
 import net.shibboleth.idp.plugin.oidc.op.token.support.RegistrationClaimsSet;
-import net.shibboleth.idp.profile.context.navigate.ResponderIdLookupFunction;
-import net.shibboleth.idp.profile.function.SpringFlowScopeLookupFunction;
+import net.shibboleth.idp.profile.context.navigate.SpringFlowScopeLookupFunction;
 import net.shibboleth.oidc.metadata.policy.MetadataPolicy;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.logic.FunctionSupport;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-import net.shibboleth.utilities.java.support.security.AccessControlService;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.profile.context.navigate.IssuerLookupFunction;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.security.AccessControlService;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.IdentifierGenerationStrategy;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 /**
  * Action that issues access token to be used for the OIDC dynamic registration endpoint.
@@ -149,7 +148,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      */
     public IssueRegistrationAccessToken() {
         idGeneratorLookupStrategy = FunctionSupport.constant(new SecureRandomIdentifierGenerationStrategy());
-        issuerLookupStrategy = new ResponderIdLookupFunction();
+        issuerLookupStrategy = new IssuerLookupFunction();
         tokenLifetimeLookupStrategy =
                 new SpringFlowScopeLookupFunction(IssueRegistrationAccessTokenArguments.URL_PARAM_LIFETIME);
         policyLocationLookupStrategy =
@@ -170,7 +169,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param sealer data sealer.
      */
     public void setSealer(@Nonnull final DataSealer sealer) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         dataSealer = Constraint.isNotNull(sealer, "Data sealer cannot be null");
     }
@@ -181,7 +180,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param acs service to use
      */
     public void setAccessControlService(@Nonnull final AccessControlService acs) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         accessControlService = Constraint.isNotNull(acs, "AccessControlService cannot be null");
     }
@@ -193,7 +192,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      */
     public void setIdentifierGeneratorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,IdentifierGenerationStrategy> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         idGeneratorLookupStrategy =
                 Constraint.isNotNull(strategy, "IdentifierGenerationStrategy lookup strategy cannot be null");
@@ -205,7 +204,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param strategy lookup strategy
      */
     public void setIssuerLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         issuerLookupStrategy = Constraint.isNotNull(strategy, "Issuer lookup strategy cannot be null");
     }
@@ -217,7 +216,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      */
     public void setMetadataPolicyLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Map<String,MetadataPolicy>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         metadataPolicyLookupStrategy =
                 Constraint.isNotNull(strategy, "Metadata policy lookup strategy cannot be null");
@@ -229,7 +228,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param strategy lookup strategy
      */
     public void setTokenLifetimeLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         tokenLifetimeLookupStrategy = Constraint.isNotNull(strategy, "Token lifetime lookup strategy cannot be null");
     }
@@ -240,7 +239,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param strategy lookup strategy
      */
     public void setPolicyLocationLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         policyLocationLookupStrategy = Constraint.isNotNull(strategy, "Policy location lookup strategy cannot be null");
     }
@@ -251,7 +250,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param strategy lookup strategy
      */
     public void setPolicyIdLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         policyIdLookupStrategy = Constraint.isNotNull(strategy, "Policy ID lookup strategy cannot be null");
     }
@@ -262,7 +261,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param strategy lookup strategy
      */
     public void setClientIdLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         clientIdLookupStrategy = Constraint.isNotNull(strategy, "Client ID lookup strategy cannot be null");
     }
@@ -273,7 +272,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param strategy lookup strategy
      */
     public void setReplacementLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         replacementLookupStrategy = Constraint.isNotNull(strategy, "Replacement lookup strategy cannot be null");
     }
@@ -284,7 +283,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param name  policy name
      */
     public void setPolicyLocationPolicyName(@Nullable @NotEmpty final String name) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         policyLocationPolicyName = StringSupport.trimOrNull(name);
     }
@@ -295,7 +294,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param name  policy name
      */
     public void setPolicyIdPolicyName(@Nullable @NotEmpty final String name) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         policyIdPolicyName = StringSupport.trimOrNull(name);
     }
@@ -306,7 +305,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param name  policy name
      */
     public void setClientIdPolicyName(@Nullable @NotEmpty final String name) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         clientIdPolicyName = StringSupport.trimOrNull(name);
     }
@@ -317,7 +316,7 @@ public class IssueRegistrationAccessToken extends AbstractAdminApiProfileAction
      * @param lifetime  token lifetime
      */
     public void setDefaultTokenLifetime(@Nonnull final Duration lifetime) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         defaultTokenLifetime = Constraint.isNotNull(lifetime, "Default token lifetime cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/matcher/impl/AttributeInOIDCRequestedClaimsMatcher.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/matcher/impl/AttributeInOIDCRequestedClaimsMatcher.java
index 015c7d98..aeb67f81 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/matcher/impl/AttributeInOIDCRequestedClaimsMatcher.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/matcher/impl/AttributeInOIDCRequestedClaimsMatcher.java
@@ -34,8 +34,7 @@ import net.shibboleth.idp.attribute.IdPRequestedAttribute;
 import net.shibboleth.idp.attribute.filter.Matcher;
 import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
 
 /** Class for matching attribute to requested claims. */
 public class AttributeInOIDCRequestedClaimsMatcher extends AbstractIdentifiableInitializableComponent
@@ -137,7 +136,7 @@ public class AttributeInOIDCRequestedClaimsMatcher extends AbstractIdentifiableI
     @Override
     public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
             @Nonnull final AttributeFilterContext filtercontext) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        ifNotInitializedThrowUninitializedComponentException();
 
         final ProfileRequestContext profileRequestContext = new RecursiveTypedParentContextLookup<>(
                 ProfileRequestContext.class).apply(filtercontext);
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/policyrule/impl/AttributeOIDCScopePolicyRule.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/policyrule/impl/AttributeOIDCScopePolicyRule.java
index a09fbc29..867fd137 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/policyrule/impl/AttributeOIDCScopePolicyRule.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/policyrule/impl/AttributeOIDCScopePolicyRule.java
@@ -23,7 +23,6 @@ import javax.annotation.Nonnull;
 import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
 import net.shibboleth.idp.attribute.filter.policyrule.impl.AbstractStringPolicyRule;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
 
 import org.opensaml.messaging.context.navigate.RecursiveTypedParentContextLookup;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -47,7 +46,7 @@ public class AttributeOIDCScopePolicyRule extends AbstractStringPolicyRule {
      */
     @Override
     public Tristate matches(@Nonnull final AttributeFilterContext filterContext) {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        ifNotInitializedThrowUninitializedComponentException();
         final ProfileRequestContext profileRequestContext =
                 new RecursiveTypedParentContextLookup<>(ProfileRequestContext.class).apply(filterContext);
         if (profileRequestContext == null || profileRequestContext.getOutboundMessageContext() == null) {
@@ -55,7 +54,7 @@ public class AttributeOIDCScopePolicyRule extends AbstractStringPolicyRule {
             return Tristate.FALSE;
         }
         final OIDCAuthenticationResponseContext ctx = profileRequestContext.getOutboundMessageContext()
-                .getSubcontext(OIDCAuthenticationResponseContext.class, false);
+                .getSubcontext(OIDCAuthenticationResponseContext.class);
         if (ctx == null || ctx.getScope() == null) {
             log.trace("{} No verified requested scopes for oidc found", getLogPrefix());
             return Tristate.FALSE;
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/impl/AttributeFilterNamespaceHandler.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/impl/AttributeFilterNamespaceHandler.java
index 5a04a4ec..e5a90529 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/impl/AttributeFilterNamespaceHandler.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/impl/AttributeFilterNamespaceHandler.java
@@ -17,9 +17,9 @@
 
 package net.shibboleth.idp.plugin.oidc.op.attribute.filter.spring.impl;
 
-import net.shibboleth.ext.spring.util.BaseSpringNamespaceHandler;
 import net.shibboleth.idp.plugin.oidc.op.attribute.filter.spring.matcher.impl.AttributeInOIDCRequestedClaimsRuleParser;
 import net.shibboleth.idp.plugin.oidc.op.attribute.filter.spring.policyrule.impl.AttributeOIDCScopeRuleParser;
+import net.shibboleth.shared.spring.custom.BaseSpringNamespaceHandler;
 
 /** Namespace handler for the oidc specific attribute filter engine functions. */
 public class AttributeFilterNamespaceHandler extends BaseSpringNamespaceHandler {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/matcher/impl/AttributeInOIDCRequestedClaimsRuleParser.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/matcher/impl/AttributeInOIDCRequestedClaimsRuleParser.java
index e8ca778e..4081c1c2 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/matcher/impl/AttributeInOIDCRequestedClaimsRuleParser.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/matcher/impl/AttributeInOIDCRequestedClaimsRuleParser.java
@@ -22,7 +22,7 @@ import javax.xml.namespace.QName;
 import net.shibboleth.idp.attribute.filter.spring.matcher.BaseAttributeValueMatcherParser;
 import net.shibboleth.idp.plugin.oidc.op.attribute.filter.matcher.impl.AttributeInOIDCRequestedClaimsMatcher;
 import net.shibboleth.idp.plugin.oidc.op.attribute.filter.spring.impl.AttributeFilterNamespaceHandler;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.shared.primitive.StringSupport;
 
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.ParserContext;
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/AuthenticationContextReferenceAuditExtractor.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/AuthenticationContextReferenceAuditExtractor.java
index 6f79378e..545ab6d2 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/AuthenticationContextReferenceAuditExtractor.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/AuthenticationContextReferenceAuditExtractor.java
@@ -26,7 +26,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.OIDCAuthenticationResponseContextLookupFunction;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Looks up the 'acr' value from the OIDC authentication response context.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/AuthenticationRequestClaimsAuditExtractor.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/AuthenticationRequestClaimsAuditExtractor.java
index ba6663e9..94234121 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/AuthenticationRequestClaimsAuditExtractor.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/AuthenticationRequestClaimsAuditExtractor.java
@@ -30,7 +30,7 @@ import org.slf4j.LoggerFactory;
 import com.nimbusds.openid.connect.sdk.AuthenticationRequest;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.AbstractAuthenticationRequestLookupFunction;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
 
 /**
  * A function that resolves a claim value from the authentication request. If request object was involved and contains
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/ClaimsAuditExtractor.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/ClaimsAuditExtractor.java
index efee6e39..6e1b555c 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/ClaimsAuditExtractor.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/ClaimsAuditExtractor.java
@@ -30,7 +30,7 @@ import com.nimbusds.openid.connect.sdk.claims.ClaimsSet;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultResponseClaimsSetLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.UserInfoResponseClaimsSetLookupFunction;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /** {@link Function} that returns the released claims for the endpoint. */
 public class ClaimsAuditExtractor implements Function<ProfileRequestContext, Collection<String>> {
@@ -42,7 +42,6 @@ public class ClaimsAuditExtractor implements Function<ProfileRequestContext, Col
     @Nonnull private final Function<ProfileRequestContext, ClaimsSet> userInfoClaimsLookupStrategy;
 
     /** Constructor. */
-
     public ClaimsAuditExtractor() {
         idTokenClaimsLookupStrategy = new DefaultResponseClaimsSetLookupFunction();
         userInfoClaimsLookupStrategy = new UserInfoResponseClaimsSetLookupFunction();
@@ -54,7 +53,6 @@ public class ClaimsAuditExtractor implements Function<ProfileRequestContext, Col
      * @param idTokenClaimsStrategy Strategy to look for id token claims.
      * @param userInfoClaimsStrategy Strategy to look for user info claims.
      */
-
     public ClaimsAuditExtractor(@Nonnull final Function<ProfileRequestContext, ClaimsSet> idTokenClaimsStrategy,
             @Nonnull final Function<ProfileRequestContext, ClaimsSet> userInfoClaimsStrategy) {
         idTokenClaimsLookupStrategy =
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/ClientIdRegistrationAuditExtractor.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/ClientIdRegistrationAuditExtractor.java
index 787f925c..ce4801a4 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/ClientIdRegistrationAuditExtractor.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/ClientIdRegistrationAuditExtractor.java
@@ -26,7 +26,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistrationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.OIDCRegistrationResponseContextLookupFunction;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Looks up the client ID value from the OIDC client registration response context.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/IdTokenClaimsAuditExtractor.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/IdTokenClaimsAuditExtractor.java
index 58045871..93e2634e 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/IdTokenClaimsAuditExtractor.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/IdTokenClaimsAuditExtractor.java
@@ -26,8 +26,8 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import com.nimbusds.openid.connect.sdk.claims.ClaimsSet;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultResponseClaimsSetLookupFunction;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A function that resolves a claim value from the id_token claims set.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/IsPassiveAuditExtractor.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/IsPassiveAuditExtractor.java
index e16e4bf7..fd96fea1 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/IsPassiveAuditExtractor.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/IsPassiveAuditExtractor.java
@@ -27,7 +27,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 import com.nimbusds.openid.connect.sdk.AuthenticationRequest;
 import com.nimbusds.openid.connect.sdk.Prompt;
 
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /** {@link Function} that returns true is prompt contains 'none' in {@link AuthenticationRequest}. */
 public class IsPassiveAuditExtractor implements Function<ProfileRequestContext, Boolean> {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/RevokedTokenAuditExtractor.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/RevokedTokenAuditExtractor.java
index 34fdac18..2c6c9056 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/RevokedTokenAuditExtractor.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/RevokedTokenAuditExtractor.java
@@ -26,7 +26,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 
 import com.nimbusds.oauth2.sdk.TokenRevocationRequest;
 
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /** {@link Function} that returns token to be revoked by {@link TokenRevocationRequest}. */
 public class RevokedTokenAuditExtractor implements Function<ProfileRequestContext, String> {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/SubjectTypeAuditExtractor.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/SubjectTypeAuditExtractor.java
index 5de81d3d..fe81c7ba 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/SubjectTypeAuditExtractor.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/SubjectTypeAuditExtractor.java
@@ -26,7 +26,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.OIDCAuthenticationResponseContextLookupFunction;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /** {@link Function} that returns the type of the subject from {@link OIDCAuthenticationResponseContext}. */
 public class SubjectTypeAuditExtractor implements Function<ProfileRequestContext, String> {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/SubjectValueAuditExtractor.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/SubjectValueAuditExtractor.java
index f126fc58..98d16e34 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/SubjectValueAuditExtractor.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/audit/impl/SubjectValueAuditExtractor.java
@@ -26,7 +26,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.OIDCAuthenticationResponseContextLookupFunction;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /** {@link Function} that returns the value of the subject from {@link OIDCAuthenticationResponseContext}. */
 public class SubjectValueAuditExtractor implements Function<ProfileRequestContext, String> {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ExtractClientAuthenticationFromRequest.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ExtractClientAuthenticationFromRequest.java
index 953ffecd..ca17bfab 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ExtractClientAuthenticationFromRequest.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ExtractClientAuthenticationFromRequest.java
@@ -43,10 +43,8 @@ import net.shibboleth.idp.authn.context.CertificateContext;
 import net.shibboleth.idp.authn.context.UsernamePasswordContext;
 import net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext;
 import net.shibboleth.oidc.profile.config.navigate.TokenEndpointAuthMethodLookupFunction;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Extracts OAuth 2 client authentication details from a request and stores them in an
@@ -91,7 +89,7 @@ public class ExtractClientAuthenticationFromRequest extends AbstractExtractionAc
      */
     public void setClientAuthMethodsLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, Set<ClientAuthenticationMethod>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         clientAuthMethodsLookupStrategy = Constraint.isNotNull(strategy,
                 "Client authentication methods lookup strategy cannot be null");
@@ -127,7 +125,7 @@ public class ExtractClientAuthenticationFromRequest extends AbstractExtractionAc
         final ClientAuthentication clientAuthentication = request.getClientAuthentication();
         
         final OAuth2ClientAuthenticationContext ctx =
-                authenticationContext.getSubcontext(OAuth2ClientAuthenticationContext.class, true);
+                authenticationContext.ensureSubcontext(OAuth2ClientAuthenticationContext.class);
         ctx.setClientAuthentication(clientAuthentication);
 
         if (clientAuthentication == null) {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/JWTCredentialValidator.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/JWTCredentialValidator.java
index 67aadd40..1908f6b9 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/JWTCredentialValidator.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/JWTCredentialValidator.java
@@ -34,10 +34,9 @@ import net.shibboleth.oidc.jwt.claims.ClaimsValidator;
 import net.shibboleth.oidc.jwt.claims.JWTValidationException;
 import net.shibboleth.oidc.profile.config.navigate.ClaimsValidatorLookupFunction;
 import net.shibboleth.oidc.security.jose.context.SecurityParametersContext;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.annotation.constraint.ThreadSafeAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -96,7 +95,7 @@ public class JWTCredentialValidator extends AbstractCredentialValidator {
      */
     public void setOAuth2ClientAuthenticationLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,OAuth2ClientAuthenticationContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
     
         clientAuthContextLookupStrategy =
                 Constraint.isNotNull(strategy, "OAuth2ClientAuthenticationContext lookup strategy cannot be null");
@@ -109,7 +108,7 @@ public class JWTCredentialValidator extends AbstractCredentialValidator {
      */
     public void setSecurityParametersLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,SecurityParametersContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         securityParametersLookupStrategy =
                 Constraint.isNotNull(strategy, "SecurityParameterContext lookup strategy cannot be null");
@@ -122,7 +121,7 @@ public class JWTCredentialValidator extends AbstractCredentialValidator {
      */
     public void setClaimsValidatorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,ClaimsValidator> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         claimsValidatorLookupStrategy =
                 Constraint.isNotNull(strategy, "ClaimsValidator lookup strategy cannot be null");
@@ -136,7 +135,7 @@ public class JWTCredentialValidator extends AbstractCredentialValidator {
      * @param flag flag to set
      */
     public void setSaveTokenToCredentialSet(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         saveTokenToCredentialSet = flag;
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/OIDCClientInfoCredentialValidator.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/OIDCClientInfoCredentialValidator.java
index e91e8a03..f7e95e40 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/OIDCClientInfoCredentialValidator.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/OIDCClientInfoCredentialValidator.java
@@ -31,13 +31,12 @@ import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.context.UsernamePasswordContext;
 import net.shibboleth.idp.authn.principal.UsernamePrincipal;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.ThreadSafeAfterInit;
-import net.shibboleth.utilities.java.support.codec.StringDigester;
-import net.shibboleth.utilities.java.support.codec.StringDigester.OutputFormat;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
+import net.shibboleth.shared.codec.StringDigester;
+import net.shibboleth.shared.codec.StringDigester.OutputFormat;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -46,7 +45,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.nimbusds.oauth2.sdk.auth.ClientAuthenticationMethod;
-import com.nimbusds.oauth2.sdk.auth.Secret;
 import com.nimbusds.oauth2.sdk.client.ClientMetadata;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 
@@ -79,7 +77,7 @@ public class OIDCClientInfoCredentialValidator extends AbstractUsernamePasswordC
      */
     public void setOidcMetadataContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,OIDCMetadataContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
     
         oidcMetadataContextLookupStrategy =
                 Constraint.isNotNull(strategy, "OIDCMetadataContext lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ValidateClientAuthenticationType.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ValidateClientAuthenticationType.java
index b5ac7bd2..533d415d 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ValidateClientAuthenticationType.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ValidateClientAuthenticationType.java
@@ -41,9 +41,8 @@ import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
 import net.shibboleth.oidc.profile.config.navigate.TokenEndpointAuthMethodLookupFunction;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Validates the client authentication type with the token_endpoint_auth_method stored in the client's metadata
@@ -93,7 +92,7 @@ public class ValidateClientAuthenticationType extends AbstractAuthenticationActi
      */
     public void setOIDCMetadataContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, OIDCMetadataContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         oidcMetadataContextLookupStrategy =
                 Constraint.isNotNull(strategy, "OIDCMetadataContext lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/cli/ClientManagementArguments.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/cli/ClientManagementArguments.java
index 61c5ba8c..e4049dde 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/cli/ClientManagementArguments.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/cli/ClientManagementArguments.java
@@ -23,13 +23,19 @@ import java.net.URLEncoder;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.slf4j.Logger;
+
 import com.beust.jcommander.Parameter;
 
 import net.shibboleth.idp.cli.AbstractCommandLineArguments;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /** Command line processing for OIDC client mgmt flow. */
 public class ClientManagementArguments extends AbstractCommandLineArguments {
 
+    /** Logger. */
+    @Nullable private Logger log;
+
     /** EntityID. */
     @Parameter(names = {"-c", "--clientId"}, required = true, description = "Client ID to query or destroy")
     @Nullable private String clientId;
@@ -56,5 +62,14 @@ public class ClientManagementArguments extends AbstractCommandLineArguments {
         
         return builder;
     }
+
+    /** {@inheritDoc} */
+    public @Nonnull Logger getLog() {
+        if (log == null) {
+            log = LoggerFactory.getLogger(ClientManagementArguments.class);
+        }
+        assert log != null;
+        return log;
+    }
         
 }
\ No newline at end of file
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/cli/IssueRegistrationAccessTokenArguments.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/cli/IssueRegistrationAccessTokenArguments.java
index 94a6ade9..a72f0cf6 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/cli/IssueRegistrationAccessTokenArguments.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/cli/IssueRegistrationAccessTokenArguments.java
@@ -23,13 +23,19 @@ import java.net.URLEncoder;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.slf4j.Logger;
+
 import com.beust.jcommander.Parameter;
 
 import net.shibboleth.idp.cli.AbstractCommandLineArguments;
+import net.shibboleth.shared.primitive.LoggerFactory;
 
 /** Command line processing for issue-registration-access-token flow. */
 public class IssueRegistrationAccessTokenArguments extends AbstractCommandLineArguments {
-    
+
+    /** Logger. */
+    @Nullable private Logger log;
+
     /** The URL parameter name for the metadata policy location. */
     public static final String URL_PARAM_POLICY_LOCATION = "policyLocation";
     
@@ -138,4 +144,13 @@ public class IssueRegistrationAccessTokenArguments extends AbstractCommandLineAr
         return builder;
     }
 
+    /** {@inheritDoc} */
+    public @Nonnull Logger getLog() {
+        if (log == null) {
+            log = LoggerFactory.getLogger(IssueRegistrationAccessTokenArguments.class);
+        }
+        assert log != null;
+        return log;
+    }
+
 }
\ No newline at end of file
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/criterion/IssuerCriterion.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/criterion/IssuerCriterion.java
index d4f78e97..a25e9bdf 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/criterion/IssuerCriterion.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/criterion/IssuerCriterion.java
@@ -21,8 +21,8 @@ import javax.annotation.Nonnull;
 
 import com.nimbusds.oauth2.sdk.id.Issuer;
 
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.Criterion;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.resolver.Criterion;
 
 /**
  * A {@link Criterion} representing an OIDC (provider) issuer.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCAuthenticationRequestDecoder.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCAuthenticationRequestDecoder.java
index 79600d59..393624b7 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCAuthenticationRequestDecoder.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCAuthenticationRequestDecoder.java
@@ -28,7 +28,7 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.base.MoreObjects;
 import com.nimbusds.oauth2.sdk.http.HTTPRequest;
-import com.nimbusds.oauth2.sdk.http.ServletUtils;
+import com.nimbusds.oauth2.sdk.http.JakartaServletUtils;
 import com.nimbusds.openid.connect.sdk.AuthenticationRequest;
 
 import net.shibboleth.idp.plugin.oidc.op.oauth2.decoding.impl.BaseOAuth2RequestDecoder;
@@ -46,7 +46,7 @@ public class OIDCAuthenticationRequestDecoder extends BaseOAuth2RequestDecoder<A
     @Override
     protected AuthenticationRequest parseMessage() throws MessageDecodingException {
         try {
-            final HTTPRequest httpReq = ServletUtils.createHTTPRequest(getHttpServletRequest());
+            final HTTPRequest httpReq = JakartaServletUtils.createHTTPRequest(getHttpServletRequest());
             getProtocolMessageLog().trace("Inbound request {}", RequestUtil.toString(httpReq));
             return AuthenticationRequest.parse(httpReq);
         } catch (final com.nimbusds.oauth2.sdk.ParseException | IOException e) {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCClientRegistrationRequestDecoder.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCClientRegistrationRequestDecoder.java
index 5589d15e..f667d709 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCClientRegistrationRequestDecoder.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCClientRegistrationRequestDecoder.java
@@ -30,7 +30,7 @@ import com.google.common.base.MoreObjects;
 import com.nimbusds.oauth2.sdk.ParseException;
 import com.nimbusds.oauth2.sdk.client.ClientRegistrationRequest;
 import com.nimbusds.oauth2.sdk.http.HTTPRequest;
-import com.nimbusds.oauth2.sdk.http.ServletUtils;
+import com.nimbusds.oauth2.sdk.http.JakartaServletUtils;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientRegistrationRequest;
 
 import net.minidev.json.JSONObject;
@@ -49,7 +49,7 @@ public class OIDCClientRegistrationRequestDecoder extends BaseOAuth2RequestDecod
     @Override
     protected OIDCClientRegistrationRequest parseMessage() throws MessageDecodingException {
         try {
-            final HTTPRequest httpRequest = ServletUtils.createHTTPRequest(getHttpServletRequest());
+            final HTTPRequest httpRequest = JakartaServletUtils.createHTTPRequest(getHttpServletRequest());
             getProtocolMessageLog().trace("Inbound request {}", RequestUtil.toString(httpRequest));
             final JSONObject requestJson = httpRequest.getQueryAsJSONObject();
             //TODO: Nimbus seems to be interpreting scope in different way as many RPs, currently the scope
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCTokenRequestDecoder.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCTokenRequestDecoder.java
index 88c597eb..e0fb1175 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCTokenRequestDecoder.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCTokenRequestDecoder.java
@@ -29,7 +29,7 @@ import com.google.common.base.MoreObjects;
 import com.nimbusds.oauth2.sdk.ParseException;
 import com.nimbusds.oauth2.sdk.TokenRequest;
 import com.nimbusds.oauth2.sdk.http.HTTPRequest;
-import com.nimbusds.oauth2.sdk.http.ServletUtils;
+import com.nimbusds.oauth2.sdk.http.JakartaServletUtils;
 
 import net.shibboleth.idp.plugin.oidc.op.oauth2.decoding.impl.BaseOAuth2RequestDecoder;
 
@@ -46,7 +46,7 @@ public class OIDCTokenRequestDecoder extends BaseOAuth2RequestDecoder<TokenReque
     @Override
     protected TokenRequest parseMessage() throws MessageDecodingException {
         try {
-            final HTTPRequest httpReq = ServletUtils.createHTTPRequest(getHttpServletRequest());
+            final HTTPRequest httpReq = JakartaServletUtils.createHTTPRequest(getHttpServletRequest());
             getProtocolMessageLog().trace("Inbound request {}", RequestUtil.toString(httpReq));
             return TokenRequest.parse(httpReq);
         } catch (final ParseException | IOException e) {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCUserInfoRequestDecoder.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCUserInfoRequestDecoder.java
index 21380187..0a8eb39a 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCUserInfoRequestDecoder.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCUserInfoRequestDecoder.java
@@ -28,7 +28,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.MoreObjects;
 import com.nimbusds.oauth2.sdk.ParseException;
 import com.nimbusds.oauth2.sdk.http.HTTPRequest;
-import com.nimbusds.oauth2.sdk.http.ServletUtils;
+import com.nimbusds.oauth2.sdk.http.JakartaServletUtils;
 import com.nimbusds.openid.connect.sdk.UserInfoRequest;
 
 import net.shibboleth.idp.plugin.oidc.op.oauth2.decoding.impl.BaseOAuth2RequestDecoder;
@@ -45,7 +45,7 @@ public class OIDCUserInfoRequestDecoder extends BaseOAuth2RequestDecoder<UserInf
     @Override
     protected UserInfoRequest parseMessage() throws MessageDecodingException {
         try {
-            final HTTPRequest httpReq = ServletUtils.createHTTPRequest(getHttpServletRequest());
+            final HTTPRequest httpReq = JakartaServletUtils.createHTTPRequest(getHttpServletRequest());
             getProtocolMessageLog().trace("Inbound request {}", RequestUtil.toString(httpReq));
             return UserInfoRequest.parse(httpReq);
         } catch (final ParseException | IOException e) {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/NimbusResponseEncoder.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/NimbusResponseEncoder.java
index 19bf4ddc..122dd498 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/NimbusResponseEncoder.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/NimbusResponseEncoder.java
@@ -26,7 +26,6 @@ import java.util.Map.Entry;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletResponse;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.app.VelocityEngine;
 import org.opensaml.messaging.encoder.MessageEncodingException;
@@ -37,13 +36,13 @@ import com.nimbusds.oauth2.sdk.AuthorizationResponse;
 import com.nimbusds.oauth2.sdk.Response;
 import com.nimbusds.oauth2.sdk.ResponseMode;
 import com.nimbusds.oauth2.sdk.http.HTTPResponse;
-import com.nimbusds.oauth2.sdk.http.ServletUtils;
+import com.nimbusds.oauth2.sdk.http.JakartaServletUtils;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.codec.HTMLEncoder;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.net.HttpServletSupport;
+import jakarta.servlet.http.HttpServletResponse;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.codec.HTMLEncoder;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.servlet.HttpServletSupport;
 
 /**
  * A message encodes that encodes the Nimbus {@link Response} in the message context inside the attached
@@ -76,8 +75,8 @@ public class NimbusResponseEncoder extends AbstractHttpServletResponseMessageEnc
      * @param newVelocityTemplateId the new Velocity template id
      */
     public void setVelocityTemplateId(final String newVelocityTemplateId) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
+        ifDestroyedThrowDestroyedComponentException();
         Constraint.isNotEmpty(newVelocityTemplateId, "Velocity template id must not not be null or empty");
         velocityTemplateId = newVelocityTemplateId;
     }
@@ -88,8 +87,8 @@ public class NimbusResponseEncoder extends AbstractHttpServletResponseMessageEnc
      * @param newVelocityEngine the new VelocityEngine instane
      */
     public void setVelocityEngine(final VelocityEngine newVelocityEngine) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
+        ifDestroyedThrowDestroyedComponentException();
         velocityEngine = newVelocityEngine;
     }
 
@@ -157,7 +156,7 @@ public class NimbusResponseEncoder extends AbstractHttpServletResponseMessageEnc
             }
             final HTTPResponse resp = ((Response) getMessageContext().getMessage()).toHTTPResponse();
             protocolMessageLog.trace("Outbound response {}", ResponseUtil.toString(resp));
-            ServletUtils.applyHTTPResponse(resp, response);
+            JakartaServletUtils.applyHTTPResponse(resp, response);
         } catch (final IOException e) {
             throw new MessageEncodingException("Problem encoding response", e);
         }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/OIDCResponseEncoderFactory.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/OIDCResponseEncoderFactory.java
index 5fc05a72..24c88814 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/OIDCResponseEncoderFactory.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/OIDCResponseEncoderFactory.java
@@ -30,10 +30,10 @@ import org.slf4j.LoggerFactory;
 
 import com.nimbusds.oauth2.sdk.Response;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.AbstractInitializableComponent;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A source of encoders that first verifies a message being an instance of Nimbus
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/ResponseUtil.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/ResponseUtil.java
index bf8813de..c8ba1a01 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/ResponseUtil.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/encoding/impl/ResponseUtil.java
@@ -24,7 +24,6 @@ import java.util.Map.Entry;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletResponse;
 
 import com.google.common.base.MoreObjects;
 import com.nimbusds.oauth2.sdk.AccessTokenResponse;
@@ -53,6 +52,7 @@ import com.nimbusds.openid.connect.sdk.UserInfoSuccessResponse;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformationResponse;
 import com.nimbusds.openid.connect.sdk.token.OIDCTokens;
 
+import jakarta.servlet.http.HttpServletResponse;
 import net.shibboleth.idp.plugin.oidc.op.decoding.impl.RequestUtil;
 import net.shibboleth.idp.plugin.oidc.op.messaging.JSONSuccessResponse;
 import net.shibboleth.idp.plugin.oidc.op.oauth2.messaging.impl.OAuth2RevocationErrorResponse;
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/AlgorithmInfoMetadataValueResolver.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/AlgorithmInfoMetadataValueResolver.java
index f888a02c..5c57e336 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/AlgorithmInfoMetadataValueResolver.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/AlgorithmInfoMetadataValueResolver.java
@@ -27,21 +27,20 @@ import javax.annotation.Nullable;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.context.ProfileRequestContext;
+import org.opensaml.security.config.SecurityConfiguration;
 import org.opensaml.xmlsec.AlgorithmPolicyConfiguration;
 import org.opensaml.xmlsec.algorithm.AlgorithmSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.MetadataValueResolver;
-import net.shibboleth.idp.profile.config.SecurityConfiguration;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.oidc.profile.config.JSONSecurityConfiguration;
 import net.shibboleth.oidc.security.jose.EncryptionConfiguration;
 import net.shibboleth.oidc.security.jose.SignatureSigningConfiguration;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.resolver.ResolverException;
 
 /**
  * A {@link MetadataValueResolver} for resolving signing/encryption algorithm information from the current
@@ -85,7 +84,7 @@ public class AlgorithmInfoMetadataValueResolver extends AbstractIdentifiableInit
      */
     public void setRelyingPartyContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, RelyingPartyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         relyingPartyContextLookupStrategy =
                 Constraint.isNotNull(strategy, "RelyingPartyContext lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/ArrayMetadataValueResolver.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/ArrayMetadataValueResolver.java
index b1391eea..ed0060b1 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/ArrayMetadataValueResolver.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/ArrayMetadataValueResolver.java
@@ -31,11 +31,11 @@ import org.slf4j.LoggerFactory;
 import net.minidev.json.JSONArray;
 import net.minidev.json.JSONObject;
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.MetadataValueResolver;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.resolver.ResolverException;
 
 /**
  * An implementation to {@link MetadataValueResolver} that contains an array of other {@link MetadataValueResolver}s.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/CredentialMetadataValueResolver.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/CredentialMetadataValueResolver.java
index a28b4654..9a145901 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/CredentialMetadataValueResolver.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/CredentialMetadataValueResolver.java
@@ -29,6 +29,7 @@ import javax.annotation.Nonnull;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.context.ProfileRequestContext;
+import org.opensaml.security.config.SecurityConfiguration;
 import org.opensaml.security.credential.Credential;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -41,14 +42,13 @@ import com.nimbusds.jose.jwk.RSAKey;
 
 import net.minidev.json.JSONArray;
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.MetadataValueResolver;
-import net.shibboleth.idp.profile.config.SecurityConfiguration;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
+import net.shibboleth.oidc.profile.config.JSONSecurityConfiguration;
 import net.shibboleth.oidc.security.credential.JWKCredential;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.ConstraintViolationException;
+import net.shibboleth.shared.resolver.ResolverException;
 
 /**
  * An implementation of {@link MetadataValueResolver} that converts public parts of the attached
@@ -80,7 +80,7 @@ public class CredentialMetadataValueResolver extends AbstractIdentifiableInitial
      */
     public void setRelyingPartyContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, RelyingPartyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         relyingPartyContextLookupStrategy =
                 Constraint.isNotNull(strategy, "RelyingPartyContext lookup strategy cannot be null");
@@ -144,13 +144,26 @@ public class CredentialMetadataValueResolver extends AbstractIdentifiableInitial
         
         final SecurityConfiguration securityConfig =
                 rpCtx.getProfileConfig().getSecurityConfiguration(profileRequestContext);
-        if (securityConfig == null || securityConfig.getSignatureSigningConfiguration() == null) {
+
+        if (securityConfig == null) {
+            log.warn("Could not find security configuration, nothing to do");
+            return result;
+        }
+
+        if (!(securityConfig instanceof JSONSecurityConfiguration)) {
+            log.warn("Security configuration class was not expected: {}", securityConfig);
+            return result;
+        }
+        final JSONSecurityConfiguration jsonSecurityConfig = (JSONSecurityConfiguration) securityConfig;
+
+        if (jsonSecurityConfig.getJwtSignatureSigningConfiguration() == null) {
             log.warn("Could not find signing configuration, nothing to do");
             return result;
         }
 
         // currently only signing keys are included
-        final List<Credential> credentials = securityConfig.getSignatureSigningConfiguration().getSigningCredentials();
+        final List<Credential> credentials =
+                jsonSecurityConfig.getJwtSignatureSigningConfiguration().getSigningCredentials();
         final JSONArray jwkCredentials = new JSONArray();
         for (final Credential credential : credentials) {
             try {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/DynamicFilesystemProviderMetadataResolver.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/DynamicFilesystemProviderMetadataResolver.java
index 5511e806..2f36b3eb 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/DynamicFilesystemProviderMetadataResolver.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/DynamicFilesystemProviderMetadataResolver.java
@@ -40,9 +40,8 @@ import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 import net.minidev.json.JSONObject;
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.MetadataValueResolver;
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.RefreshableMetadataValueResolver;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.resolver.ResolverException;
 
 /**
  * An extension to {@link FilesystemProviderMetadataResolver} that enables some of the claims to be dynamically updated
@@ -93,8 +92,8 @@ public class DynamicFilesystemProviderMetadataResolver extends FilesystemProvide
     @Override
     public Iterable<OIDCProviderMetadata> resolve(@Nullable final ProfileRequestContext profileRequestContext)
             throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ifNotInitializedThrowUninitializedComponentException();
+        ifDestroyedThrowDestroyedComponentException();
 
         final List<OIDCProviderMetadata> result = new ArrayList<>();
         final Iterator<OIDCProviderMetadata> entities = super.resolve(profileRequestContext).iterator();
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemMetadataValueResolver.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemMetadataValueResolver.java
index fbe2825b..dbbc2209 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemMetadataValueResolver.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemMetadataValueResolver.java
@@ -33,8 +33,7 @@ import com.nimbusds.oauth2.sdk.id.Identifier;
 import net.minidev.json.JSONValue;
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.RefreshableMetadataValueResolver;
 import net.shibboleth.oidc.metadata.impl.AbstractFileOIDCEntityResolver;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.shared.resolver.ResolverException;
 
 /**
  * An implementation to {@link RefreshableMetadataValueResolver} that fetches the information from a file.
@@ -78,8 +77,8 @@ public class FilesystemMetadataValueResolver extends AbstractFileOIDCEntityResol
     @Override
     @Nullable public Iterable<Object> resolve(@Nullable final ProfileRequestContext profileRequestContext)
             throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ifNotInitializedThrowUninitializedComponentException();
+        ifDestroyedThrowDestroyedComponentException();
 
         return getBackingStore().getOrderedInformation();
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemProviderMetadataResolver.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemProviderMetadataResolver.java
index 06386e77..d35a4a94 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemProviderMetadataResolver.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemProviderMetadataResolver.java
@@ -39,12 +39,11 @@ import com.nimbusds.oauth2.sdk.util.JSONObjectUtils;
 import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.RefreshableProviderMetadataResolver;
-import net.shibboleth.idp.profile.config.OverriddenIssuerProfileConfiguration;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.oidc.metadata.impl.AbstractFileOIDCEntityResolver;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.profile.config.OverriddenIssuerProfileConfiguration;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.resolver.ResolverException;
 
 /**
  * Based on {@link org.opensaml.saml.metadata.resolver.impl.FilesystemMetadataResolver}.
@@ -95,7 +94,7 @@ public class FilesystemProviderMetadataResolver extends AbstractFileOIDCEntityRe
      */
     public void setRelyingPartyContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, RelyingPartyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         relyingPartyContextLookupStrategy =
                 Constraint.isNotNull(strategy, "RelyingPartyContext lookup strategy cannot be null");
@@ -105,8 +104,8 @@ public class FilesystemProviderMetadataResolver extends AbstractFileOIDCEntityRe
     @Override
     @Nullable public Iterable<OIDCProviderMetadata> resolve(@Nullable final ProfileRequestContext profileRequestContext)
             throws ResolverException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ifNotInitializedThrowUninitializedComponentException();
+        ifDestroyedThrowDestroyedComponentException();
 
         final RelyingPartyContext rpCtx = relyingPartyContextLookupStrategy.apply(profileRequestContext);
         final List<OIDCProviderMetadata> entities = getBackingStore().getOrderedInformation();
@@ -122,7 +121,7 @@ public class FilesystemProviderMetadataResolver extends AbstractFileOIDCEntityRe
         }
         
         if (responderId == null) {
-            responderId = rpCtx.getConfiguration().getResponderId(profileRequestContext);
+            responderId = rpCtx.getConfiguration().getIssuer(profileRequestContext);
         }
         
         final String issuer = responderId;
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FunctionMetadataValueResolver.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FunctionMetadataValueResolver.java
index 608cd357..44785864 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FunctionMetadataValueResolver.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FunctionMetadataValueResolver.java
@@ -25,12 +25,11 @@ import javax.annotation.Nonnull;
 import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.MetadataValueResolver;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+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.resolver.ResolverException;
 
 /**
  * An implementation of {@link MetadataValueResolver} that resolves the value via attached {@link Function}.
@@ -54,7 +53,7 @@ public class FunctionMetadataValueResolver extends AbstractIdentifiableInitializ
      * @param function What to set.
      */
     public void setResolverFunction(@Nonnull final Function<ProfileRequestContext, Object> function) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         resolverFunction = Constraint.isNotNull(function, "Resolver function cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/BaseOAuth2RequestDecoder.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/BaseOAuth2RequestDecoder.java
index 3662eff3..454ef0a3 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/BaseOAuth2RequestDecoder.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/BaseOAuth2RequestDecoder.java
@@ -30,8 +30,6 @@ import org.slf4j.LoggerFactory;
 
 import com.nimbusds.oauth2.sdk.Request;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-
 /**
  * Base decoder for Nimbus OAuth2 request messages. 
  *
@@ -55,8 +53,8 @@ public abstract class BaseOAuth2RequestDecoder<T extends Request> extends Abstra
      * @param flag What to set.
      */
     public synchronized void setRemoveIpAddressFromEndpointUri(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
+        ifDestroyedThrowDestroyedComponentException();
 
         removeIpAddressFromEndpointUri = flag;
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2AuthorizationRequestDecoder.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2AuthorizationRequestDecoder.java
index 7b6e12aa..0af1068f 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2AuthorizationRequestDecoder.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2AuthorizationRequestDecoder.java
@@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.MoreObjects;
 import com.nimbusds.oauth2.sdk.AuthorizationRequest;
 import com.nimbusds.oauth2.sdk.http.HTTPRequest;
-import com.nimbusds.oauth2.sdk.http.ServletUtils;
+import com.nimbusds.oauth2.sdk.http.JakartaServletUtils;
 
 import net.shibboleth.idp.plugin.oidc.op.decoding.impl.RequestUtil;
 
@@ -46,7 +46,7 @@ public class OAuth2AuthorizationRequestDecoder extends BaseOAuth2RequestDecoder<
     @Override
     protected AuthorizationRequest parseMessage() throws MessageDecodingException {
         try {
-            final HTTPRequest httpReq = ServletUtils.createHTTPRequest(getHttpServletRequest());
+            final HTTPRequest httpReq = JakartaServletUtils.createHTTPRequest(getHttpServletRequest());
             getProtocolMessageLog().trace("Inbound request {}", RequestUtil.toString(httpReq));
             return AuthorizationRequest.parse(httpReq);
         } catch (final com.nimbusds.oauth2.sdk.ParseException | IOException e) {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2IntrospectionRequestDecoder.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2IntrospectionRequestDecoder.java
index 26b1b7b9..dba648c3 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2IntrospectionRequestDecoder.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2IntrospectionRequestDecoder.java
@@ -28,7 +28,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.MoreObjects;
 import com.nimbusds.oauth2.sdk.TokenIntrospectionRequest;
 import com.nimbusds.oauth2.sdk.http.HTTPRequest;
-import com.nimbusds.oauth2.sdk.http.ServletUtils;
+import com.nimbusds.oauth2.sdk.http.JakartaServletUtils;
 
 import net.shibboleth.idp.plugin.oidc.op.decoding.impl.RequestUtil;
 
@@ -45,7 +45,7 @@ public class OAuth2IntrospectionRequestDecoder extends BaseOAuth2RequestDecoder<
     @Override
     protected TokenIntrospectionRequest parseMessage() throws MessageDecodingException {
         try {
-            final HTTPRequest httpReq = ServletUtils.createHTTPRequest(getHttpServletRequest());
+            final HTTPRequest httpReq = JakartaServletUtils.createHTTPRequest(getHttpServletRequest());
             getProtocolMessageLog().trace("Inbound request {}", RequestUtil.toString(httpReq));
             return TokenIntrospectionRequest.parse(httpReq);
         } catch (final com.nimbusds.oauth2.sdk.ParseException | IOException e) {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2RevocationRequestDecoder.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2RevocationRequestDecoder.java
index 125fbc35..55552801 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2RevocationRequestDecoder.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2RevocationRequestDecoder.java
@@ -28,7 +28,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.base.MoreObjects;
 import com.nimbusds.oauth2.sdk.TokenRevocationRequest;
 import com.nimbusds.oauth2.sdk.http.HTTPRequest;
-import com.nimbusds.oauth2.sdk.http.ServletUtils;
+import com.nimbusds.oauth2.sdk.http.JakartaServletUtils;
 
 import net.shibboleth.idp.plugin.oidc.op.decoding.impl.RequestUtil;
 
@@ -45,7 +45,7 @@ public class OAuth2RevocationRequestDecoder extends BaseOAuth2RequestDecoder<Tok
     @Override
     protected TokenRevocationRequest parseMessage() throws MessageDecodingException {
         try {
-            final HTTPRequest httpReq = ServletUtils.createHTTPRequest(getHttpServletRequest());
+            final HTTPRequest httpReq = JakartaServletUtils.createHTTPRequest(getHttpServletRequest());
             getProtocolMessageLog().trace("Inbound request {}", RequestUtil.toString(httpReq));
             return TokenRevocationRequest.parse(httpReq);
         } catch (final com.nimbusds.oauth2.sdk.ParseException | IOException e) {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/OAuth2RevocationErrorResponse.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/OAuth2RevocationErrorResponse.java
index 52118083..8668d069 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/OAuth2RevocationErrorResponse.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/OAuth2RevocationErrorResponse.java
@@ -23,7 +23,7 @@ import com.nimbusds.oauth2.sdk.ErrorObject;
 import com.nimbusds.oauth2.sdk.ErrorResponse;
 import com.nimbusds.oauth2.sdk.http.HTTPResponse;
 
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /** OAuth2 Token Revocation Error message class. */
 public class OAuth2RevocationErrorResponse implements ErrorResponse {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/PopulateOIDCMetadataContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/PopulateOIDCMetadataContext.java
index 6f39d573..cf621571 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/PopulateOIDCMetadataContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/PopulateOIDCMetadataContext.java
@@ -35,8 +35,7 @@ import org.slf4j.LoggerFactory;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A message handler that attempts to locate OIDC client information from the SAML entity descriptor containing role
@@ -67,7 +66,7 @@ public class PopulateOIDCMetadataContext extends AbstractMessageHandler {
      */
     public void setSAMLMetadataContextLookupStrategy(
             @Nonnull final Function<MessageContext,SAMLMetadataContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         samlMetadataContextLookupStrategy =
                 Constraint.isNotNull(strategy, "SAMLMetadataContext lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/SetEntityIdToSAMLPeerEntityContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/SetEntityIdToSAMLPeerEntityContext.java
index 055be821..b9adf832 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/SetEntityIdToSAMLPeerEntityContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/SetEntityIdToSAMLPeerEntityContext.java
@@ -33,8 +33,7 @@ import org.slf4j.LoggerFactory;
 import com.nimbusds.oauth2.sdk.id.ClientID;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultClientIDLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * {@link MessageHandler} that sets the entityID to the given {@link SAMLPeerEntityContext} class.
@@ -66,7 +65,7 @@ public class SetEntityIdToSAMLPeerEntityContext extends AbstractMessageHandler {
      * @param strategy lookup strategy
      */
     public void setClientIDLookupStrategy(@Nonnull final Function<MessageContext, ClientID> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         clientIDLookupStrategy =
                 Constraint.isNotNull(strategy, "ClientIDLookupStrategy lookup strategy cannot be null");
     }
@@ -79,7 +78,7 @@ public class SetEntityIdToSAMLPeerEntityContext extends AbstractMessageHandler {
      * @param clazz the entity context class type
      */
     public void setEntityContextClass(@Nonnull final Class<? extends AbstractSAMLEntityContext> clazz) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         entityContextClass = Constraint.isNotNull(clazz, "SAML entity context class may not be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/AbstractProcessTokenAction.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/AbstractProcessTokenAction.java
index 3d6b8715..738c46e8 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/AbstractProcessTokenAction.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/AbstractProcessTokenAction.java
@@ -53,13 +53,12 @@ import net.shibboleth.oidc.jwt.claims.JWTValidationException;
 import net.shibboleth.oidc.profile.config.navigate.IssuedClaimsValidatorLookupFunction;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
 import net.shibboleth.oidc.security.impl.JWTSignatureValidationUtil;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.resolver.CriteriaSet;
+import net.shibboleth.shared.resolver.ResolverException;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
 
 /**
  * Action that processes a token by validating it and populating the resulting {@link JWTClaimsSet}
@@ -92,7 +91,7 @@ public abstract class AbstractProcessTokenAction<T> extends AbstractOIDCRequestA
     
     /** Source of signing keys. */
     @Nullable private CredentialResolver credentialResolver;
-    
+
     /** Copy of signed JWT for non-opaque access tokens. */
     @Nullable private SignedJWT signedJWT;
 
@@ -107,7 +106,7 @@ public abstract class AbstractProcessTokenAction<T> extends AbstractOIDCRequestA
      * @param sealer data sealer to use
      */
     public void setDataSealer(@Nullable final DataSealer sealer) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         dataSealer = sealer;
     }
     
@@ -118,7 +117,7 @@ public abstract class AbstractProcessTokenAction<T> extends AbstractOIDCRequestA
      */
     public void setClaimsValidatorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,ClaimsValidator> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         claimsValidatorLookupStrategy = Constraint.isNotNull(strategy, "Lookup strategy cannot be null");
     }
     
@@ -128,10 +127,10 @@ public abstract class AbstractProcessTokenAction<T> extends AbstractOIDCRequestA
      * @param resolver signing key resolver
      */
     public void setCredentialResolver(@Nullable final CredentialResolver resolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         credentialResolver = resolver;
     }
-        
+
     /** {@inheritDoc} */
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
@@ -205,6 +204,7 @@ public abstract class AbstractProcessTokenAction<T> extends AbstractOIDCRequestA
                 log.error("{} Failure resolving signing credentials, can't verify JWT signature", getLogPrefix(), e);
                 return;
             }
+
             final String errorEventId = JWTSignatureValidationUtil.validateSignatureEx(credList, signedJWT,
                     OidcEventIds.INVALID_GRANT);
             if (errorEventId != null) {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessToken.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessToken.java
index ad82eb9e..22f56a40 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessToken.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessToken.java
@@ -58,26 +58,24 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.RefreshTokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.AccessTokenClaimsSet.Builder;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.navigate.ResponderIdLookupFunction;
 import net.shibboleth.oidc.profile.config.logic.AttributeConsentFlowEnabledPredicate;
 import net.shibboleth.oidc.profile.config.navigate.AccessTokenClaimsSetManipulationStrategyLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.AccessTokenLifetimeLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.AccessTokenTypeLookupFunction;
+import net.shibboleth.profile.context.navigate.IssuerLookupFunction;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.IdentifierGenerationStrategy;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.action.ActionSupport;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.logic.FunctionSupport;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
-
 /**
  * Action that creates an Access Token, and stores it to an {@link AccessTokenContext}.
  *
@@ -166,7 +164,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
     public BuildAccessToken() {
         accessTokenTypeLookupStrategy = new AccessTokenTypeLookupFunction();
         accessTokenLifetimeLookupStrategy = new AccessTokenLifetimeLookupFunction();
-        issuerLookupStrategy = new ResponderIdLookupFunction();
+        issuerLookupStrategy = new IssuerLookupFunction();
         
         clientIDLookupStrategy = FunctionSupport.compose(new TokenRequestClientIDLookupFunction(),
                 new InboundMessageContextLookup());
@@ -196,7 +194,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
      * @param sealer sealer to use for opaque tokens
      */
     public void setDataSealer(@Nullable final DataSealer sealer) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         dataSealer = sealer;
     }
@@ -207,7 +205,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
     * @param strategy lookup strategy
     */
     public void setAccessTokenTypeLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
        
         accessTokenTypeLookupStrategy =
                 Constraint.isNotNull(strategy, "Access token type lookup strategy cannot be null");
@@ -219,7 +217,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
      * @param strategy lookup strategy
      */
     public void setAccessTokenLifetimeLookupStrategy(@Nonnull final Function<ProfileRequestContext,Duration> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         accessTokenLifetimeLookupStrategy =
                 Constraint.isNotNull(strategy, "Access token lifetime lookup strategy cannot be null");
@@ -232,7 +230,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
      */
     public void setIdentifierGeneratorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,IdentifierGenerationStrategy> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         idGeneratorLookupStrategy =
                 Constraint.isNotNull(strategy, "Identifier generation strategy cannot be null");
@@ -244,7 +242,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
      * @param strategy lookup strategy
      */
     public void setIssuerLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         issuerLookupStrategy = Constraint.isNotNull(strategy, "Issuer lookup strategy cannot be null");
     }
@@ -255,7 +253,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
      * @param strategy lookup strategy
      */
     public void setClientIDLookupStrategy(@Nonnull final Function<ProfileRequestContext,ClientID> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         clientIDLookupStrategy = Constraint.isNotNull(strategy, "ClientID lookup strategy cannot be null");
     }
@@ -268,7 +266,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
      */
     public void setOIDCAuthenticationResponseTokenClaimsContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,OIDCAuthenticationResponseTokenClaimsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         tokenClaimsContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCAuthenticationResponseTokenClaimsContextt lookup strategy cannot be null");
     }
@@ -281,7 +279,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
      */
     public void setOIDCAuthenticationResponseConsentContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,OIDCAuthenticationResponseConsentContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         consentContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCAuthenticationResponseConsentContext lookup strategy cannot be null");
     }
@@ -292,7 +290,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
      * @param predicate predicate used to check if consent is enabled with a given {@link ProfileRequestContext}.
      */
     public void setConsentEnabledPredicate(@Nonnull final Predicate<ProfileRequestContext> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         consentEnabledPredicate =
                 Constraint.isNotNull(predicate, "predicate used to check if consent is enabled cannot be null");
@@ -305,7 +303,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
      */
     public void setAccessTokenContextCreationStrategy(
             @Nonnull final Function<ProfileRequestContext,AccessTokenContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         accessTokenContextCreationStrategy =
                 Constraint.isNotNull(strategy, "AccessTokenContext creation strategy cannot be null");
@@ -319,7 +317,7 @@ public class BuildAccessToken extends AbstractOIDCResponseAction {
     public void setTokenClaimsSetManipulationStrategyLookupStrategy(@Nonnull final
             Function<ProfileRequestContext,BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>>>
             strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         tokenClaimsSetManipulationStrategyLookupStrategy =
                 Constraint.isNotNull(strategy, "Manipulation strategy lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/RevokeToken.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/RevokeToken.java
index d7d884f4..30690f55 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/RevokeToken.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/RevokeToken.java
@@ -42,11 +42,10 @@ import net.shibboleth.idp.profile.IdPEventIds;
 import net.shibboleth.oidc.profile.config.navigate.RevocationMethodLookupFunction;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
 import net.shibboleth.oidc.profile.oauth2.config.OAuth2TokenRevocationConfiguration.OAuth2TokenRevocationMethod;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * Action that revokes a single token or the full chain of tokens, depending on the result of the configured lookup
@@ -106,7 +105,7 @@ public class RevokeToken extends AbstractProfileAction {
      * @param cache The revocationCache to set.
      */
     public void setRevocationCache(@Nonnull final RevocationCache cache) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         revocationCache = Constraint.isNotNull(cache, "RevocationCache cannot be null");
     }
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAccessTokenToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAccessTokenToResponseContext.java
index 16c590cf..46a18f54 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAccessTokenToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAccessTokenToResponseContext.java
@@ -31,13 +31,11 @@ import org.slf4j.LoggerFactory;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.AccessTokenContext;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.impl.AbstractOIDCResponseAction;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.action.ActionSupport;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
 /**
  * Action that creates a Access Token, and sets it to work context
  * {@link OIDCAuthenticationResponseContext#getAccessToken()} located under
@@ -69,7 +67,7 @@ public class SetAccessTokenToResponseContext extends AbstractOIDCResponseAction
      */
     public void setAccessTokenContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,AccessTokenContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         accessTokenContextLookupStrategy =
                 Constraint.isNotNull(strategy, "AccessTokenContext lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAuthorizationCodeToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAuthorizationCodeToResponseContext.java
index 26a630f2..b4c02419 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAuthorizationCodeToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAuthorizationCodeToResponseContext.java
@@ -46,22 +46,21 @@ import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequest
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.OIDCAuthenticationResponseContextLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.navigate.ResponderIdLookupFunction;
 import net.shibboleth.oidc.profile.config.logic.AttributeConsentFlowEnabledPredicate;
 import net.shibboleth.oidc.profile.config.navigate.AuthorizationCodeClaimsSetManipulationStrategyLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.AuthzCodeLifetimeLookupFunction;
+import net.shibboleth.profile.context.navigate.IssuerLookupFunction;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.IdentifierGenerationStrategy;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.action.ActionSupport;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.logic.FunctionSupport;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 /**
  * Action that creates a Authorization Code, and sets it to work context
@@ -137,7 +136,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
                 new ChildContextLookup<>(OIDCAuthenticationResponseConsentContext.class).compose(
                         new OIDCAuthenticationResponseContextLookupFunction());
         authzCodeLifetimeLookupStrategy = new AuthzCodeLifetimeLookupFunction();
-        issuerLookupStrategy = new ResponderIdLookupFunction();
+        issuerLookupStrategy = new IssuerLookupFunction();
         consentEnabledPredicate = new AttributeConsentFlowEnabledPredicate();
         idGeneratorLookupStrategy = FunctionSupport.constant(new SecureRandomIdentifierGenerationStrategy());
         tokenClaimsSetManipulationStrategyLookupStrategy =
@@ -150,7 +149,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
      * @param sealer data sealer to use
      */
     public void setDataSealer(@Nonnull final DataSealer sealer) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         dataSealer = Constraint.isNotNull(sealer, "DataSealer cannot be null");
     }
 
@@ -160,7 +159,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
      * @param strategy lookup strategy
      */
     public void setCodeChallengeLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         codeChallengeLookupStrategy =
                 Constraint.isNotNull(strategy, "Code challenge lookup strategy cannot be null");
     }
@@ -171,7 +170,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
      * @param strategy lookup strategy
      */
     public void setCodeChallengeMethodLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         codeChallengeMethodLookupStrategy =
                 Constraint.isNotNull(strategy, "Code challenge method lookup strategy cannot be null");
     }
@@ -184,7 +183,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
      */
     public void setOIDCAuthenticationResponseTokenClaimsContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, OIDCAuthenticationResponseTokenClaimsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         tokenClaimsContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCAuthenticationResponseTokenClaimsContext lookup strategy cannot be null");
     }
@@ -197,7 +196,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
      */
     public void setOIDCAuthenticationResponseConsentContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, OIDCAuthenticationResponseConsentContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         consentContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCAuthenticationResponseConsentContext lookup strategy cannot be null");
     }
@@ -208,7 +207,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
      * @param strategy lookup strategy
      */
     public void setAuthzCodeLifetimeLookupStrategy(@Nonnull final Function<ProfileRequestContext,Duration> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         authzCodeLifetimeLookupStrategy =
                 Constraint.isNotNull(strategy, "Authz code lifetime lookup strategy cannot be null");
@@ -221,7 +220,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
      */
     public void setIdentifierGeneratorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, IdentifierGenerationStrategy> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         idGeneratorLookupStrategy =
                 Constraint.isNotNull(strategy, "IdentifierGenerationStrategy lookup strategy cannot be null");
@@ -233,7 +232,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
      * @param strategy lookup strategy
      */
     public void setIssuerLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         issuerLookupStrategy = Constraint.isNotNull(strategy, "IssuerLookupStrategy lookup strategy cannot be null");
     }
 
@@ -243,7 +242,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
      * @param predicate predicate used to check if consent is enabled with a given {@link ProfileRequestContext}.
      */
     public void setConsentEnabledPredicate(@Nonnull final Predicate<ProfileRequestContext> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         consentEnabledPredicate =
                 Constraint.isNotNull(predicate, "predicate used to check if consent is enabled cannot be null");
@@ -257,7 +256,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
     public void setTokenClaimsSetManipulationStrategyLookupStrategy(@Nonnull final
             Function<ProfileRequestContext,BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>>>
             strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         tokenClaimsSetManipulationStrategyLookupStrategy =
                 Constraint.isNotNull(strategy, "Manipulation strategy lookup strategy cannot be null");
@@ -281,7 +280,7 @@ public class SetAuthorizationCodeToResponseContext extends AbstractOAuthAuthoriz
             return false;
         }
         
-        subjectCtx = profileRequestContext.getSubcontext(SubjectContext.class, false);
+        subjectCtx = profileRequestContext.getSubcontext(SubjectContext.class);
         if (subjectCtx == null) {
             log.warn("{} No subject context", getLogPrefix());
             ActionSupport.buildEvent(profileRequestContext, EventIds.INVALID_PROFILE_CTX);
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContext.java
index eec618c6..e63c85ee 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContext.java
@@ -19,19 +19,21 @@ package net.shibboleth.idp.plugin.oidc.op.oauth2.profile.impl;
 
 import java.io.IOException;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.text.ParseException;
 import java.util.Set;
 import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.util.EntityUtils;
+
+import org.apache.hc.client5.http.classic.HttpClient;
+import org.apache.hc.client5.http.classic.methods.HttpGet;
+import org.apache.hc.client5.http.protocol.HttpClientContext;
+import org.apache.hc.core5.http.ClassicHttpRequest;
+import org.apache.hc.core5.http.ClassicHttpResponse;
+import org.apache.hc.core5.http.HttpStatus;
+import org.apache.hc.core5.http.io.entity.EntityUtils;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.security.httpclient.HttpClientSecurityParameters;
@@ -43,9 +45,9 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Action that stored request object to {@link OIDCAuthenticationResponseContext}. The request
@@ -102,7 +104,7 @@ public class SetRequestObjectToResponseContext extends AbstractOAuthAuthorizatio
      * @return the client context instance
      */
     @Nonnull
-    private HttpClientContext buildHttpContext(@Nonnull final HttpUriRequest request) {
+    private HttpClientContext buildHttpContext(@Nonnull final ClassicHttpRequest request) {
         final HttpClientContext clientContext = HttpClientContext.create();
         HttpClientSecuritySupport.marshalSecurityParameters(clientContext, httpClientSecurityParameters, false);
         HttpClientSecuritySupport.addDefaultTLSTrustEngineCriteria(clientContext, request);
@@ -177,9 +179,9 @@ public class SetRequestObjectToResponseContext extends AbstractOAuthAuthorizatio
         final HttpGet httpRequest = new HttpGet(getAuthorizationRequest().getRequestURI());
         final HttpClientContext httpContext = buildHttpContext(httpRequest);
         try {
-            final HttpResponse response = httpClient.execute(httpRequest, httpContext);
-            HttpClientSecuritySupport.checkTLSCredentialEvaluated(httpContext, httpRequest.getURI().getScheme());
-            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+            final ClassicHttpResponse response = httpClient.executeOpen(null, httpRequest, httpContext);
+            HttpClientSecuritySupport.checkTLSCredentialEvaluated(httpContext, httpRequest.getUri().getScheme());
+            if (response.getCode() == HttpStatus.SC_OK) {
                 final String requestObject = EntityUtils.toString(response.getEntity());
                 try {
                     getOidcResponseContext().setRequestObject(JWTParser.parse(requestObject));
@@ -193,11 +195,11 @@ public class SetRequestObjectToResponseContext extends AbstractOAuthAuthorizatio
                 }
             } else {
                 log.error("{} Unable to get request object from request_uri, HTTP status {}", getLogPrefix(),
-                        response.getStatusLine().getStatusCode());
+                        response.getCode());
                 ActionSupport.buildEvent(profileRequestContext, OidcEventIds.INVALID_REQUEST_URI);
                 return;
             }
-        } catch (final IOException e) {
+        } catch (final IOException | org.apache.hc.core5.http.ParseException | URISyntaxException e) {
             log.error("{} Unable to get request object from request_uri, {}", getLogPrefix(), e.getMessage());
             ActionSupport.buildEvent(profileRequestContext, OidcEventIds.INVALID_REQUEST_URI);
             return;
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAudience.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAudience.java
index 193f02fc..2ab5ea27 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAudience.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAudience.java
@@ -42,10 +42,9 @@ import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultOIDCMet
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.TokenRequestAudienceLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.impl.AbstractOIDCAuthenticationResponseAction;
 import net.shibboleth.idp.plugin.oidc.op.profile.logic.IssueIDTokenCondition;
-import net.shibboleth.idp.profile.context.navigate.RelyingPartyIdLookupFunction;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.profile.context.navigate.IssuerLookupFunction;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Action that validates requested resource/audience values against a computed set of "allowed"
@@ -91,7 +90,7 @@ public class ValidateAudience extends AbstractOIDCAuthenticationResponseAction {
     /** Constructor. */
     public ValidateAudience() {
         requestedAudienceLookupStrategy = new TokenRequestAudienceLookupFunction();
-        relyingPartyIdLookupStrategy = new RelyingPartyIdLookupFunction();
+        relyingPartyIdLookupStrategy = new IssuerLookupFunction();
         allowedAudienceLookupStrategy = new ClientInfoAudienceLookupFunction().compose(
                 new DefaultOIDCMetadataContextLookupFunction());
         proxiedRequesterContextCreationStrategy = new ChildContextLookup<>(ProxiedRequesterContext.class, true).compose(
@@ -106,7 +105,7 @@ public class ValidateAudience extends AbstractOIDCAuthenticationResponseAction {
      * @param strategy lookup strategy
      */
     public void setRelyingPartyIdLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         relyingPartyIdLookupStrategy = Constraint.isNotNull(strategy,
                 "Relying party ID lookup strategy cannot be null");
@@ -119,7 +118,7 @@ public class ValidateAudience extends AbstractOIDCAuthenticationResponseAction {
      */
     public void setRequestedAudienceLookupStrategy(
             @Nullable final Function<ProfileRequestContext,List<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         requestedAudienceLookupStrategy = strategy;
     }
@@ -131,7 +130,7 @@ public class ValidateAudience extends AbstractOIDCAuthenticationResponseAction {
      * @param strategy lookup strategy
      */
     public void setAllowedAudienceLookupStrategy(@Nonnull final Function<ProfileRequestContext,List<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         allowedAudienceLookupStrategy = Constraint.isNotNull(strategy,
                 "Allowed scope lookup strategy cannot be null");
@@ -144,7 +143,7 @@ public class ValidateAudience extends AbstractOIDCAuthenticationResponseAction {
      */
     public void setProxiedRequesterContextCreationStrategy(
             @Nonnull final Function<ProfileRequestContext,ProxiedRequesterContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         proxiedRequesterContextCreationStrategy = Constraint.isNotNull(strategy,
                 "ProxiedRequesterContext lookup strategy cannot be null");
@@ -158,7 +157,7 @@ public class ValidateAudience extends AbstractOIDCAuthenticationResponseAction {
      * @since 3.2.0
      */
     public void setSelfAudienceCondition(@Nonnull final Predicate<ProfileRequestContext> condition) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         selfAudienceCondition = Constraint.isNotNull(condition, "Self audience condition cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAuthorizationRequestType.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAuthorizationRequestType.java
index 49df4d63..fdca513b 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAuthorizationRequestType.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAuthorizationRequestType.java
@@ -30,8 +30,7 @@ import org.slf4j.LoggerFactory;
 import com.nimbusds.oauth2.sdk.AuthorizationRequest;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.logic.DefaultAuthorizationRequestTypeValidationStrategy;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * An action that validates the incoming OAuth2 authorization request via configurable strategy.
@@ -60,7 +59,7 @@ public class ValidateAuthorizationRequestType extends AbstractOAuthAuthorization
      */
     public void setAuthorizationRequestTypeValidationStrategy(
             @Nonnull final Predicate<ProfileRequestContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         authorizationRequestTypeValidationStrategy = Constraint.isNotNull(strategy,
                 "Authorization request type validation strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateCodeChallenge.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateCodeChallenge.java
index 47539722..498e87c5 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateCodeChallenge.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateCodeChallenge.java
@@ -33,8 +33,7 @@ import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequest
 import net.shibboleth.oidc.profile.config.logic.AllowPKCEPlainPredicate;
 import net.shibboleth.oidc.profile.config.logic.ForcePKCEPredicate;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Validates the presence of PKCE code challenge parameter from the incoming authentication request.
@@ -84,7 +83,7 @@ public class ValidateCodeChallenge  extends AbstractOAuthAuthorizationResponseAc
      * @param condition condition to apply
      */
     public void setForcePKCECondition(@Nonnull final Predicate<ProfileRequestContext> condition) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         forcePKCECondition = Constraint.isNotNull(condition, "Condition cannot be null");
     }
@@ -95,7 +94,7 @@ public class ValidateCodeChallenge  extends AbstractOAuthAuthorizationResponseAc
      * @param condition condition to apply
      */
     public void setAllowPKCEPlainCondition(@Nonnull final Predicate<ProfileRequestContext> condition) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         allowPKCEPlainCondition = Constraint.isNotNull(condition, "Condition cannot be null");
     }
@@ -106,7 +105,7 @@ public class ValidateCodeChallenge  extends AbstractOAuthAuthorizationResponseAc
      * @param strategy lookup strategy
      */
     public void setCodeChallengeLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         codeChallengeLookupStrategy =
                 Constraint.isNotNull(strategy, "Code challenge lookup strategy cannot be null");
     }
@@ -117,7 +116,7 @@ public class ValidateCodeChallenge  extends AbstractOAuthAuthorizationResponseAc
      * @param strategy lookup strategy
      */
     public void setCodeChallengeMethodLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         codeChallengeMethodLookupStrategy =
                 Constraint.isNotNull(strategy, "Code challenge method lookup strategy cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRedirectURI.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRedirectURI.java
index 21c3e17a..0628fc94 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRedirectURI.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRedirectURI.java
@@ -31,9 +31,8 @@ import org.slf4j.LoggerFactory;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestRedirectURILookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultValidRedirectUrisLookupFunction;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Action that validates redirect uri is expected. Validated redirect uri is stored to response context.
@@ -70,7 +69,7 @@ public class ValidateRedirectURI extends AbstractOAuthAuthorizationResponseActio
      * @param strategy lookup strategy
      */
     public void setRedirectURILookupStrategy(@Nonnull final Function<ProfileRequestContext, URI> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         redirectURILookupStrategy =
                 Constraint.isNotNull(strategy, "RedirectURILookupStrategy lookup strategy cannot be null");
     }
@@ -81,7 +80,7 @@ public class ValidateRedirectURI extends AbstractOAuthAuthorizationResponseActio
      * @param strategy lookup strategy
      */
     public void setValidRedirectURIsLookupStrategy(@Nonnull final Function<ProfileRequestContext, Set<URI>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         validRedirectURIsLookupStrategy =
                 Constraint.isNotNull(strategy, "ValidRedirectURIsLookupStrategy lookup strategy cannot be null");
     }
@@ -93,7 +92,7 @@ public class ValidateRedirectURI extends AbstractOAuthAuthorizationResponseActio
      */
     public void setRegisteredRedirectURIsLookupStrategy(@Nonnull final Function<ProfileRequestContext,
             Set<URI>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         registeredRedirectURIsLookupStrategy =
                 Constraint.isNotNull(strategy, "RegisteredRedirectURIsLookupStrategy lookup strategy cannot be null");
     }
@@ -104,7 +103,7 @@ public class ValidateRedirectURI extends AbstractOAuthAuthorizationResponseActio
      * @param flag flag to set
      */
     public void setRequireRequestedValue(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         requireRequestedValue = flag;
     }
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRequestObject.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRequestObject.java
index 298b4b94..4d57e32f 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRequestObject.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRequestObject.java
@@ -42,10 +42,9 @@ import net.shibboleth.oidc.jwt.claims.ClaimsValidator;
 import net.shibboleth.oidc.jwt.claims.JWTValidationException;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
 import net.shibboleth.oidc.security.jose.context.SecurityParametersContext;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Action validates request object in response context.
@@ -82,7 +81,7 @@ public class ValidateRequestObject extends AbstractOAuthAuthorizationResponseAct
      */
     public void setSecurityParametersLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, SecurityParametersContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         securityParametersLookupStrategy =
                 Constraint.isNotNull(strategy, "SecurityParameterContext lookup strategy cannot be null");
@@ -94,7 +93,7 @@ public class ValidateRequestObject extends AbstractOAuthAuthorizationResponseAct
      * @param validator What to set
      */
     public void setSignedClaimsValidator(@Nonnull final ClaimsValidator validator) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         signedClaimsValidator = Constraint.isNotNull(validator, "Signed claims validator cannot be null");
     }
 
@@ -104,7 +103,7 @@ public class ValidateRequestObject extends AbstractOAuthAuthorizationResponseAct
      * @param validator What to set
      */
     public void setPlainClaimsValidator(@Nonnull final ClaimsValidator validator) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         plainClaimsValidator = Constraint.isNotNull(validator, "Plain claims validator cannot be null");
     }
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateResponseType.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateResponseType.java
index 28398938..7dc280d3 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateResponseType.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateResponseType.java
@@ -31,9 +31,8 @@ import com.nimbusds.oauth2.sdk.ResponseType;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestResponseTypeLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultValidResponseTypesLookupFunction;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * An action that validates the requested response_type is (1) registered to the requesting RP and (2) valid for the
@@ -65,7 +64,7 @@ public class ValidateResponseType extends AbstractOAuthAuthorizationResponseActi
      */
     public void setRequestedResponseTypeLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, ResponseType> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         requestedResponseTypeLookupStrategy = Constraint.isNotNull(strategy, "Lookup strategy cannot be null");
     }
 
@@ -76,7 +75,7 @@ public class ValidateResponseType extends AbstractOAuthAuthorizationResponseActi
      */
     public void setValidResponseTypesLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, Set<ResponseType>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         validResponseTypesLookupStrategy = Constraint.isNotNull(strategy, "Lookup strategy cannot be null");
     }
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateScope.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateScope.java
index 108f581c..74cddea4 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateScope.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateScope.java
@@ -39,10 +39,9 @@ import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultOIDCMet
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestResponseTypeLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestedScopeLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.OIDCAuthenticationResponseContextLookupFunction;
-import net.shibboleth.idp.profile.context.navigate.RelyingPartyIdLookupFunction;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.profile.context.navigate.RelyingPartyIdLookupFunction;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Action that validates requested and previously granted scopes are also registered in client metadata
@@ -103,7 +102,7 @@ public class ValidateScope extends AbstractOAuthAuthorizationResponseAction {
      * @param strategy lookup strategy
      */
     public void setRelyingPartyIdLookupStrategy(@Nonnull final Function<ProfileRequestContext,String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         relyingPartyIdLookupStrategy = Constraint.isNotNull(strategy,
                 "Relying party ID lookup strategy cannot be null");
@@ -115,7 +114,7 @@ public class ValidateScope extends AbstractOAuthAuthorizationResponseAction {
      * @param strategy lookup strategy
      */
     public void setRequestedScopeLookupStrategy(@Nullable final Function<ProfileRequestContext,Scope> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         requestedScopeLookupStrategy = strategy;
     }
@@ -127,7 +126,7 @@ public class ValidateScope extends AbstractOAuthAuthorizationResponseAction {
      * @param strategy lookup strategy
      */
     public void setAllowedScopeLookupStrategy(@Nonnull final Function<ProfileRequestContext,Scope> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         allowedScopeLookupStrategy = Constraint.isNotNull(strategy,
                 "Allowed scope lookup strategy cannot be null");
@@ -139,7 +138,7 @@ public class ValidateScope extends AbstractOAuthAuthorizationResponseAction {
      * @param strategy lookup strategy
      */
     public void setMandatoryScopeLookupStrategy(@Nonnull final Function<ProfileRequestContext,Scope> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         mandatoryScopeLookupStrategy = Constraint.isNotNull(strategy,
                 "Mandatory scope lookup strategy cannot be null");
@@ -153,7 +152,7 @@ public class ValidateScope extends AbstractOAuthAuthorizationResponseAction {
      */
     public void setOIDCAuthenticationResponseTokenClaimsContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,OIDCAuthenticationResponseTokenClaimsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         tokenClaimsContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCAuthenticationResponseTokenClaimsContextt lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractBuildErrorResponseFromEvent.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractBuildErrorResponseFromEvent.java
index 48d6d30a..39b17397 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractBuildErrorResponseFromEvent.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractBuildErrorResponseFromEvent.java
@@ -34,8 +34,7 @@ import com.nimbusds.oauth2.sdk.ErrorResponse;
 import com.nimbusds.oauth2.sdk.http.HTTPResponse;
 
 import net.shibboleth.idp.profile.AbstractProfileAction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * This action is extended by error response actions. Action reads an event from the configured {@link EventContext}
@@ -101,7 +100,7 @@ public abstract class AbstractBuildErrorResponseFromEvent<T extends ErrorRespons
      * @param strategy lookup strategy
      */
     public void setEventContextLookupStrategy(@Nonnull final Function<ProfileRequestContext, EventContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         eventContextLookupStrategy = Constraint.isNotNull(strategy, "EventContext lookup strategy cannot be null");
     }
@@ -112,7 +111,7 @@ public abstract class AbstractBuildErrorResponseFromEvent<T extends ErrorRespons
      * @param errors map of eventIds to pre-configured error objects.
      */
     public void setMappedErrors(@Nonnull final Map<String, ErrorObject> errors) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         mappedErrors = Constraint.isNotNull(errors, "Mapped errors cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractInitializeOutboundResponseMessageContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractInitializeOutboundResponseMessageContext.java
index 0e082b36..6a2f4ca8 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractInitializeOutboundResponseMessageContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractInitializeOutboundResponseMessageContext.java
@@ -21,8 +21,7 @@ import javax.annotation.Nonnull;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.profile.AbstractProfileAction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.messaging.context.BaseContext;
 import org.opensaml.messaging.context.MessageContext;
@@ -54,7 +53,7 @@ public abstract class AbstractInitializeOutboundResponseMessageContext extends A
      * @param claz context type
      */
     public void setContextType(@Nonnull final Class<? extends BaseContext> claz) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         contextType = Constraint.isNotNull(claz, "Context type cannot be null");
     }
@@ -65,7 +64,7 @@ public abstract class AbstractInitializeOutboundResponseMessageContext extends A
 
         final MessageContext msgCtx = new MessageContext();
         profileRequestContext.setOutboundMessageContext(msgCtx);
-        msgCtx.getSubcontext(contextType, true);
+        msgCtx.ensureSubcontext(contextType);
         log.debug("{} Initialized outbound message context", getLogPrefix());
     }
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCClientMetadataPopulationAction.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCClientMetadataPopulationAction.java
index d4c5d903..2f548c83 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCClientMetadataPopulationAction.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCClientMetadataPopulationAction.java
@@ -34,7 +34,7 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.navigate.OIDCClientRegistrationResponseMetadataLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.navigate.OIDCPolicyEnforcedClientRegistrationRequestMetadataLookupFunction;
 import net.shibboleth.idp.profile.AbstractProfileAction;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Abstract action for populating metadata from the {@link ClientRegistrationRequest} message to the response
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCRequestAction.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCRequestAction.java
index 8889ed45..6d8a2280 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCRequestAction.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCRequestAction.java
@@ -56,6 +56,7 @@ public abstract class AbstractOIDCRequestAction<T> extends AbstractProfileAction
     }
 
     /** {@inheritDoc} */
+    @SuppressWarnings("unchecked")
     @Override
     protected boolean doPreExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCSigningResponseAction.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCSigningResponseAction.java
index 569ce563..550c6685 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCSigningResponseAction.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AbstractOIDCSigningResponseAction.java
@@ -30,8 +30,7 @@ import org.slf4j.LoggerFactory;
 
 import net.shibboleth.oidc.security.jose.SignatureSigningParameters;
 import net.shibboleth.oidc.security.jose.context.SecurityParametersContext;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Abstract action to be extended by oidc response actions requiring signing parameters. Not having signing credentials
@@ -63,7 +62,7 @@ public abstract class AbstractOIDCSigningResponseAction extends AbstractOIDCResp
      */
     public void setSecurityParametersLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, SecurityParametersContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         securityParametersLookupStrategy =
                 Constraint.isNotNull(strategy, "SecurityParameterContext lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAttributesToClaimsSet.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAttributesToClaimsSet.java
index 189eaf4a..caf4df81 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAttributesToClaimsSet.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAttributesToClaimsSet.java
@@ -41,17 +41,16 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationRes
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultResponseClaimsSetLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.OIDCAuthenticationResponseContextLookupFunction;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.oidc.profile.config.navigate.AlwaysIncludedAttributesLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.DeniedUserInfoAttributesLookupFunction;
-import net.shibboleth.utilities.java.support.annotation.constraint.Live;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.service.ReloadableService;
-import net.shibboleth.utilities.java.support.service.ServiceableComponent;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.Live;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.service.ReloadableService;
+import net.shibboleth.shared.service.ServiceableComponent;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.action.ActionSupport;
@@ -146,7 +145,7 @@ public class AddAttributesToClaimsSet extends AbstractOIDCResponseAction {
      * @param registry registry service interface
      */
     public void setTranscoderRegistry(@Nonnull final ReloadableService<AttributeTranscoderRegistry> registry) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         transcoderRegistry = Constraint.isNotNull(registry, "AttributeTranscoderRegistry cannot be null");
     }
@@ -158,7 +157,7 @@ public class AddAttributesToClaimsSet extends AbstractOIDCResponseAction {
      * @param flag flag to set
      */
     public void setIgnoringUnencodableAttributes(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         ignoringUnencodableAttributes = flag;
     }
@@ -169,7 +168,7 @@ public class AddAttributesToClaimsSet extends AbstractOIDCResponseAction {
      * @param claimNames list of claim names that will not be added.
      */
     public void setReservedClaimNames(final List<String> claimNames) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         reservedClaimNames = claimNames;
     }
 
@@ -181,7 +180,7 @@ public class AddAttributesToClaimsSet extends AbstractOIDCResponseAction {
      *            {@link ProfileRequestContext}
      */
     public void setResponseClaimsSetLookupStrategy(@Nonnull final Function<ProfileRequestContext, ClaimsSet> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         responseClaimsSetLookupStrategy =
                 Constraint.isNotNull(strategy, "Response Claims Set lookup strategy cannot be null");
@@ -196,7 +195,7 @@ public class AddAttributesToClaimsSet extends AbstractOIDCResponseAction {
      */
     public void setAttributeContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, AttributeContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         attributeContextLookupStrategy =
                 Constraint.isNotNull(strategy, "AttributeContext lookup strategy cannot be null");
@@ -210,7 +209,7 @@ public class AddAttributesToClaimsSet extends AbstractOIDCResponseAction {
      */
     public void setOIDCAuthenticationResponseConsentContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, OIDCAuthenticationResponseConsentContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         consentContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCAuthenticationResponseConsentContext lookup strategy cannot be null");
     }
@@ -222,7 +221,7 @@ public class AddAttributesToClaimsSet extends AbstractOIDCResponseAction {
      */
     public void setAlwaysIncludedAttributesLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Set<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         alwaysIncludedAttributesLookupStrategy = Constraint.isNotNull(strategy,
                 "Always included attributes lookup strategy cannot be null");
@@ -235,7 +234,7 @@ public class AddAttributesToClaimsSet extends AbstractOIDCResponseAction {
      */
     public void setDeniedUserInfoAttributesLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Set<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         deniedUserInfoAttributesLookupStrategy = Constraint.isNotNull(strategy,
                 "Denied UserInfo attributes lookup strategy cannot be null");
@@ -304,13 +303,8 @@ public class AddAttributesToClaimsSet extends AbstractOIDCResponseAction {
         final OIDCAuthenticationResponseConsentContext consentCtx =
                 consentContextLookupStrategy.apply(profileRequestContext);
         
-        ServiceableComponent<AttributeTranscoderRegistry> component = null;
-        try {
-            component = transcoderRegistry.getServiceableComponent();
-            if (component == null) {
-                log.error("Attribute transoding service unavailable");
-                throw new AttributeEncodingException("Attribute transoding service unavailable");
-            }
+        try (final ServiceableComponent<AttributeTranscoderRegistry> component = 
+                transcoderRegistry.getServiceableComponent()) {
             
             for (final IdPAttribute attribute : attributeCtx.getIdPAttributes().values()) {
                 if (attribute != null && !attribute.getValues().isEmpty()) {
@@ -325,10 +319,6 @@ public class AddAttributesToClaimsSet extends AbstractOIDCResponseAction {
         } catch (final AttributeEncodingException e) {
             ActionSupport.buildEvent(profileRequestContext, IdPEventIds.UNABLE_ENCODE_ATTRIBUTE);
             return;
-        } finally {
-            if (null != component) {
-                component.unpinComponent();
-            }
         }
         
         for (final JSONObject claim : claims) {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthorizationCodeHashToIDToken.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthorizationCodeHashToIDToken.java
index 7c81b325..c072a724 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthorizationCodeHashToIDToken.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthorizationCodeHashToIDToken.java
@@ -27,11 +27,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.nimbusds.openid.connect.sdk.claims.IDTokenClaimsSet;
 
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * Action that adds authorization code hash claim to a {@link IDTokenClaimsSet}. Configurable calculation strategy
@@ -52,7 +51,7 @@ public class AddAuthorizationCodeHashToIDToken extends AbstractOIDCSigningRespon
      * @param strategy calculation strategy
      */
     public void setCodeHashCalculationStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         codeHashCalculationStrategy =
                 Constraint.isNotNull(strategy, "Authorization code hash calculation strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddClientNameToClientMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddClientNameToClientMetadata.java
index 2a49050d..c1e7e4f6 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddClientNameToClientMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddClientNameToClientMetadata.java
@@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory;
 import com.nimbusds.langtag.LangTag;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * Adds client name from the input metadata to the output {@link OIDCClientMetadata}. The name with and without
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddGrantTypeToClientMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddGrantTypeToClientMetadata.java
index b95e3ac0..be2a6f3e 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddGrantTypeToClientMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddGrantTypeToClientMetadata.java
@@ -36,8 +36,8 @@ import com.nimbusds.oauth2.sdk.GrantType;
 import net.shibboleth.oidc.profile.config.logic.AuthorizationCodeFlowEnabledPredicate;
 import net.shibboleth.oidc.profile.config.logic.ImplicitFlowEnabledPredicate;
 import net.shibboleth.oidc.profile.config.logic.RefreshTokensEnabledPredicate;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * An action that adds the grant_type to the client metadata.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddIDTokenShell.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddIDTokenShell.java
index 8e7672c2..435727cc 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddIDTokenShell.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddIDTokenShell.java
@@ -30,13 +30,12 @@ import javax.annotation.Nullable;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.context.navigate.ResponderIdLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.AudienceRestrictionsLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.IDTokenLifetimeLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.context.navigate.IssuerLookupFunction;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.StringSupport;
 
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -81,7 +80,7 @@ public class AddIDTokenShell extends AbstractOIDCResponseAction {
 
     /** Constructor. */
     public AddIDTokenShell() {
-        issuerLookupStrategy = new ResponderIdLookupFunction();
+        issuerLookupStrategy = new IssuerLookupFunction();
         audienceRestrictionsLookupStrategy = new AudienceRestrictionsLookupFunction();
         idTokenLifetimeLookupStrategy = new IDTokenLifetimeLookupFunction();
     }
@@ -92,7 +91,7 @@ public class AddIDTokenShell extends AbstractOIDCResponseAction {
      * @param strategy lookup strategy
      */
     public void setIssuerLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         issuerLookupStrategy = Constraint.isNotNull(strategy, "IssuerLookupStrategy lookup strategy cannot be null");
     }
@@ -104,7 +103,7 @@ public class AddIDTokenShell extends AbstractOIDCResponseAction {
      */
     public void setAudienceRestrictionsLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Collection<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         audienceRestrictionsLookupStrategy =
                 Constraint.isNotNull(strategy, "Audience restriction lookup strategy cannot be null");
@@ -116,7 +115,7 @@ public class AddIDTokenShell extends AbstractOIDCResponseAction {
      * @param strategy lookup strategy
      */
     public void setIDTokenLifetimeLookupStrategy(@Nonnull final Function<ProfileRequestContext,Duration> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         idTokenLifetimeLookupStrategy =
                 Constraint.isNotNull(strategy, "ID token lifetime lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddJwksToClientMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddJwksToClientMetadata.java
index 6f808b0b..3abf6399 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddJwksToClientMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddJwksToClientMetadata.java
@@ -24,7 +24,7 @@ import java.util.function.Predicate;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import org.apache.http.client.HttpClient;
+import org.apache.hc.client5.http.classic.HttpClient;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -37,10 +37,9 @@ import com.nimbusds.jose.jwk.JWK;
 import com.nimbusds.jose.jwk.JWKSet;
 
 import net.shibboleth.oidc.jwk.support.RemoteJwkUtils;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * An action that adds the jwks or jwks_uri to the client metadata, if one of those were defined in the request.
@@ -74,8 +73,8 @@ public class AddJwksToClientMetadata extends AbstractOIDCClientMetadataPopulatio
      * @param client client to use
      */
     public void setHttpClient(@Nonnull final HttpClient client) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
+        ifDestroyedThrowDestroyedComponentException();
 
         httpClient = Constraint.isNotNull(client, "HttpClient cannot be null");
         validateRemoteJwkSetPredicate = Predicates.alwaysTrue();
@@ -87,8 +86,8 @@ public class AddJwksToClientMetadata extends AbstractOIDCClientMetadataPopulatio
      * @param params the new client security parameters
      */
     public void setHttpClientSecurityParameters(@Nullable final HttpClientSecurityParameters params) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
+        ifDestroyedThrowDestroyedComponentException();
 
         httpClientSecurityParameters = params;
     }
@@ -99,8 +98,8 @@ public class AddJwksToClientMetadata extends AbstractOIDCClientMetadataPopulatio
      * @param predicate the predicate used to indicate whether contents of remote JWK set should be validated.
      */
     public void setValidateRemoteJwkSetPredicate(@Nonnull final Predicate<ProfileRequestContext> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
+        ifDestroyedThrowDestroyedComponentException();
 
         validateRemoteJwkSetPredicate = Constraint.isNotNull(predicate, "Predicate cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddMetadataStatementToClientMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddMetadataStatementToClientMetadata.java
index a46cc876..12f02280 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddMetadataStatementToClientMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddMetadataStatementToClientMetadata.java
@@ -30,7 +30,7 @@ import org.slf4j.LoggerFactory;
 import net.minidev.json.JSONObject;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.MetadataStatementsLookupFunction;
 import net.shibboleth.idp.profile.ActionSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * An action that adds the trusted metadata_statement chain (containing OP's signed key) to the metadata_statement
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddNonceToIDToken.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddNonceToIDToken.java
index ab5c1930..7634500a 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddNonceToIDToken.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddNonceToIDToken.java
@@ -31,8 +31,7 @@ import com.nimbusds.openid.connect.sdk.Nonce;
 import com.nimbusds.openid.connect.sdk.claims.IDTokenClaimsSet;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestNonceLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Action that adds nonce claim to a {@link IDTokenClaimsSet}.
@@ -60,7 +59,7 @@ public class AddNonceToIDToken extends AbstractOIDCResponseAction {
      * @param strategy lookup strategy
      */
     public void setRequestNonceLookupStrategy(@Nonnull final Function<ProfileRequestContext, Nonce> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         requestNonceLookupStrategy =
                 Constraint.isNotNull(strategy, "RequestNonceLookupStrategy lookup strategy cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRemainingClaimsToClientMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRemainingClaimsToClientMetadata.java
index 5b8ed021..0762d01b 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRemainingClaimsToClientMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRemainingClaimsToClientMetadata.java
@@ -34,8 +34,7 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 import net.minidev.json.JSONObject;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistrationMetadataPolicyContext;
 import net.shibboleth.oidc.metadata.policy.MetadataPolicy;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Adds the remaining claims from the input metadata to the output {@link OIDCClientMetadata}, which haven't been
@@ -70,7 +69,7 @@ public class AddRemainingClaimsToClientMetadata extends AbstractOIDCClientMetada
      */
     public void setRegistrationMetadataPolicyContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, OIDCClientRegistrationMetadataPolicyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         registrationMetadataPolicyContextLookupStrategy = Constraint.isNotNull(strategy,
                 "Registration metadata policy context lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestObjectSecurityConfigurationToClientMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestObjectSecurityConfigurationToClientMetadata.java
index e6fa4df7..ff0fa620 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestObjectSecurityConfigurationToClientMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestObjectSecurityConfigurationToClientMetadata.java
@@ -37,8 +37,7 @@ import net.shibboleth.oidc.jwa.support.SignatureConstants;
 import net.shibboleth.oidc.profile.config.navigate.JWEDataEncryptionAlgorithmsLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.JWEKeyTransportEncryptionAlgorithmsLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.JWSSignatureAlgorithmsLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Verifies and adds the request object configuration details (request_object_signing_alg,
@@ -91,7 +90,7 @@ public class AddRequestObjectSecurityConfigurationToClientMetadata extends Abstr
      *            Validation Algs has
      */
     public void setAllowSignatureNone(final boolean allow) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         allowSignatureNone = allow;
     }
@@ -103,7 +102,7 @@ public class AddRequestObjectSecurityConfigurationToClientMetadata extends Abstr
      */
     public void setSignatureAlgorithmsLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,List<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         signatureAlgorithmsLookupStrategy =
                 Constraint.isNotNull(strategy, "Signature algorithms lookup strategy cannot be null");
@@ -116,7 +115,7 @@ public class AddRequestObjectSecurityConfigurationToClientMetadata extends Abstr
      */
     public void setDataEncryptionAlgorithmsLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,List<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         dataEncryptionAlgorithmsLookupStrategy =
                 Constraint.isNotNull(strategy, "Data encryption algorithms lookup strategy cannot be null");
@@ -129,7 +128,7 @@ public class AddRequestObjectSecurityConfigurationToClientMetadata extends Abstr
      */
     public void setKeyTransportAlgorithmsLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,List<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         keyTransportEncryptionAlgorithmsLookupStrategy =
                 Constraint.isNotNull(strategy, "Key transport encryption algorithms lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddResponseTypesToClientMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddResponseTypesToClientMetadata.java
index f92f31e8..7c5e7df3 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddResponseTypesToClientMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddResponseTypesToClientMetadata.java
@@ -36,9 +36,9 @@ import com.nimbusds.openid.connect.sdk.OIDCResponseTypeValue;
 
 import net.shibboleth.oidc.profile.config.logic.AuthorizationCodeFlowEnabledPredicate;
 import net.shibboleth.oidc.profile.config.logic.ImplicitFlowEnabledPredicate;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.logic.PredicateSupport;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.PredicateSupport;
 
 /**
  * An action that adds response_types to the OIDC client metadata.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddScopeToClientMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddScopeToClientMetadata.java
index b99fa39a..a5a2bb72 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddScopeToClientMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddScopeToClientMetadata.java
@@ -27,7 +27,7 @@ import com.nimbusds.oauth2.sdk.Scope;
 import com.nimbusds.openid.connect.sdk.OIDCScopeValue;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Adds the {@link Scope} from the input metadata to the output {@link OIDCClientMetadata}. If the scope is null
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSecurityConfigurationToClientMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSecurityConfigurationToClientMetadata.java
index 332cde1a..a71f4066 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSecurityConfigurationToClientMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSecurityConfigurationToClientMetadata.java
@@ -39,8 +39,7 @@ import net.shibboleth.oidc.jwa.support.SignatureConstants;
 import net.shibboleth.oidc.profile.config.navigate.JWEDataEncryptionAlgorithmsLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.JWEKeyTransportEncryptionAlgorithmsLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.JWSSignatureAlgorithmsLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Verifies and adds the security configuration details (*_response_alg and *_response_enc) to the client metadata.
@@ -89,7 +88,7 @@ public class AddSecurityConfigurationToClientMetadata extends AbstractOIDCClient
      */
     public void setSignatureAlgorithmsLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,List<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         signatureAlgorithmsLookupStrategy =
                 Constraint.isNotNull(strategy, "Signature algorithms lookup strategy cannot be null");
@@ -102,7 +101,7 @@ public class AddSecurityConfigurationToClientMetadata extends AbstractOIDCClient
      */
     public void setDataEncryptionAlgorithmsLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,List<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         dataEncryptionAlgorithmsLookupStrategy =
                 Constraint.isNotNull(strategy, "Data encryption algorithms lookup strategy cannot be null");
@@ -115,7 +114,7 @@ public class AddSecurityConfigurationToClientMetadata extends AbstractOIDCClient
      */
     public void setKeyTransportAlgorithmsLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,List<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         keyTransportEncryptionAlgorithmsLookupStrategy =
                 Constraint.isNotNull(strategy, "Key transport encryption algorithms lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSubjectTypeToClientMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSubjectTypeToClientMetadata.java
index c88b293e..815022eb 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSubjectTypeToClientMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSubjectTypeToClientMetadata.java
@@ -25,7 +25,7 @@ import org.slf4j.LoggerFactory;
 
 import com.nimbusds.openid.connect.sdk.SubjectType;
 
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
 * An action that adds the subject_type to the client metadata.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenDeliveryAttributesToClaimsSet.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenDeliveryAttributesToClaimsSet.java
index 33bbfcf1..9e8ae3b5 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenDeliveryAttributesToClaimsSet.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenDeliveryAttributesToClaimsSet.java
@@ -25,8 +25,7 @@ import javax.annotation.Nullable;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseTokenClaimsContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultResponseClaimsSetLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.OIDCAuthenticationResponseContextLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.action.ActionSupport;
@@ -85,7 +84,7 @@ public class AddTokenDeliveryAttributesToClaimsSet extends AbstractOIDCResponseA
      * @param flag whether target is id token claims set
      */
     public void setTargetIDToken(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         targetIDToken = flag;
     }
@@ -99,7 +98,7 @@ public class AddTokenDeliveryAttributesToClaimsSet extends AbstractOIDCResponseA
      *            {@link ProfileRequestContext}
      */
     public void setResponseClaimsSetLookupStrategy(@Nonnull final Function<ProfileRequestContext, ClaimsSet> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         responseClaimsSetLookupStrategy =
                 Constraint.isNotNull(strategy, "Response Claims Set lookup strategy cannot be null");
@@ -113,7 +112,7 @@ public class AddTokenDeliveryAttributesToClaimsSet extends AbstractOIDCResponseA
      */
     public void setOIDCAuthenticationResponseTokenClaimsContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, OIDCAuthenticationResponseTokenClaimsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         tokenClaimsContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCAuthenticationResponseTokenClaimsContextt lookup strategy cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenEndpointAuthMethodsToClientMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenEndpointAuthMethodsToClientMetadata.java
index e4840de2..8fafec28 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenEndpointAuthMethodsToClientMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenEndpointAuthMethodsToClientMetadata.java
@@ -32,7 +32,7 @@ import org.slf4j.LoggerFactory;
 import com.nimbusds.oauth2.sdk.auth.ClientAuthenticationMethod;
 
 import net.shibboleth.oidc.profile.config.navigate.TokenEndpointAuthMethodLookupFunction;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
 * An action that adds the token_endpoint_auth_method to the client metadata. If no method is requested, then
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildAuthenticationErrorResponseFromEvent.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildAuthenticationErrorResponseFromEvent.java
index 240956d6..4db649de 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildAuthenticationErrorResponseFromEvent.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildAuthenticationErrorResponseFromEvent.java
@@ -40,11 +40,10 @@ import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequest
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestStateLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.ValidatedRedirectURILookupFunction;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.navigate.ResponderIdLookupFunction;
 import net.shibboleth.oidc.profile.config.logic.IncludeIssuerInAuthenticationResponsePredicate;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.profile.context.navigate.IssuerLookupFunction;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * This action reads an event from the configured {@link EventContext} lookup strategy, constructs an OIDC
@@ -69,7 +68,7 @@ public class BuildAuthenticationErrorResponseFromEvent
      * Constructor.
      */
     public BuildAuthenticationErrorResponseFromEvent() {
-        issuerLookupStrategy = new ResponderIdLookupFunction();
+        issuerLookupStrategy = new IssuerLookupFunction();
         includeIssuerInResponsePredicate = new IncludeIssuerInAuthenticationResponsePredicate();
     }
 
@@ -79,7 +78,7 @@ public class BuildAuthenticationErrorResponseFromEvent
      * @param strategy what to set
      */
     public void setIssuerLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         issuerLookupStrategy = Constraint.isNotNull(strategy, "IssuerLookupStrategy lookup strategy cannot be null");
     }
@@ -90,7 +89,7 @@ public class BuildAuthenticationErrorResponseFromEvent
      * @param predicate what to set
      */
     public void setIncludeIssuerInResponsePredicate(@Nonnull final Predicate<ProfileRequestContext> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         includeIssuerInResponsePredicate = Constraint.isNotNull(predicate,
                 "Include issuer in response predicate cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildClientInformation.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildClientInformation.java
index e49e9e1a..1cb84b6e 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildClientInformation.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildClientInformation.java
@@ -41,9 +41,8 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistrationResponseContext;
 import net.shibboleth.idp.profile.AbstractProfileAction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * An action that uses the information from {@link OIDCClientRegistrationResponseContext} attached to the message
@@ -80,7 +79,7 @@ public class BuildClientInformation extends AbstractProfileAction {
      */
     public void setOidcResponseContextLookupStrategy(
             @Nonnull final Function<MessageContext,OIDCClientRegistrationResponseContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         oidcResponseContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCClientRegistrationResponseContext lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/CheckRedirectURIs.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/CheckRedirectURIs.java
index 139bb6e7..b53ddc5c 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/CheckRedirectURIs.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/CheckRedirectURIs.java
@@ -26,13 +26,13 @@ import java.util.Set;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
-import org.apache.http.HttpResponse;
-import org.apache.http.ParseException;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.methods.RequestBuilder;
-import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.util.EntityUtils;
+import org.apache.hc.client5.http.classic.HttpClient;
+import org.apache.hc.client5.http.protocol.HttpClientContext;
+import org.apache.hc.core5.http.ClassicHttpRequest;
+import org.apache.hc.core5.http.ClassicHttpResponse;
+import org.apache.hc.core5.http.ParseException;
+import org.apache.hc.core5.http.io.entity.EntityUtils;
+import org.apache.hc.core5.http.io.support.ClassicRequestBuilder;
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -50,10 +50,9 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientRegistrationRequest;
 
 import net.shibboleth.idp.profile.AbstractProfileAction;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * <p>The action that verifies the redirect_uris from the request. At least one must exist. Also, if 
@@ -98,8 +97,8 @@ public class CheckRedirectURIs extends AbstractProfileAction {
      * @param client client to use
      */
     public void setHttpClient(@Nonnull final HttpClient client) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
+        ifDestroyedThrowDestroyedComponentException();
 
         httpClient = Constraint.isNotNull(client, "HttpClient cannot be null");
     }
@@ -110,8 +109,8 @@ public class CheckRedirectURIs extends AbstractProfileAction {
      * @param params the new client security parameters
      */
     public void setHttpClientSecurityParameters(@Nullable final HttpClientSecurityParameters params) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
-        ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
+        ifDestroyedThrowDestroyedComponentException();
 
         httpClientSecurityParameters = params;
     }
@@ -122,7 +121,7 @@ public class CheckRedirectURIs extends AbstractProfileAction {
      * @param mapper object mapper
      */
     public void setObjectMapper(@Nonnull final ObjectMapper mapper) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         objectMapper = Constraint.isNotNull(mapper, "Object mapper cannot be null");
     }
@@ -241,14 +240,14 @@ public class CheckRedirectURIs extends AbstractProfileAction {
      * fetched.
      */
     protected boolean verifySectorIdUri(final URI sectorIdUri, final Set<URI> redirectURIs) {
-        final HttpResponse response;
+        final ClassicHttpResponse response;
         try {
-            final HttpUriRequest get = RequestBuilder.get().setUri(sectorIdUri).build();
+            final ClassicHttpRequest get = ClassicRequestBuilder.get().setUri(sectorIdUri).build();
             final HttpClientContext clientContext = HttpClientContext.create();
             HttpClientSecuritySupport.marshalSecurityParameters(clientContext, httpClientSecurityParameters, true);
             HttpClientSecuritySupport.addDefaultTLSTrustEngineCriteria(clientContext, get);
-            response = httpClient.execute(get, clientContext);
-            HttpClientSecuritySupport.checkTLSCredentialEvaluated(clientContext, get.getURI().getScheme());
+            response = httpClient.executeOpen(null, get, clientContext);
+            HttpClientSecuritySupport.checkTLSCredentialEvaluated(clientContext, get.getUri().getScheme());
         } catch (final Exception e) {
             log.error("{} Could not get the sector_identifier_uri contents from {}", getLogPrefix(), sectorIdUri, e);
             return false;
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundAuthenticationResponseMessage.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundAuthenticationResponseMessage.java
index 254e13ae..d32a3be7 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundAuthenticationResponseMessage.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundAuthenticationResponseMessage.java
@@ -39,11 +39,10 @@ import net.shibboleth.idp.plugin.oidc.op.oauth2.profile.impl.AbstractOAuthAuthor
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestResponseModeLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestStateLookupFunction;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.navigate.ResponderIdLookupFunction;
 import net.shibboleth.oidc.profile.config.logic.IncludeIssuerInAuthenticationResponsePredicate;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.profile.context.navigate.IssuerLookupFunction;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * Action that forms outbound message based on request and response context. Formed message is set to
@@ -67,7 +66,7 @@ public class FormOutboundAuthenticationResponseMessage extends AbstractOAuthAuth
      * Constructor.
      */
     public FormOutboundAuthenticationResponseMessage() {
-        issuerLookupStrategy = new ResponderIdLookupFunction();
+        issuerLookupStrategy = new IssuerLookupFunction();
         includeIssuerInResponsePredicate = new IncludeIssuerInAuthenticationResponsePredicate();
     }
 
@@ -77,7 +76,7 @@ public class FormOutboundAuthenticationResponseMessage extends AbstractOAuthAuth
      * @param strategy what to set
      */
     public void setIssuerLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         issuerLookupStrategy = Constraint.isNotNull(strategy, "IssuerLookupStrategy lookup strategy cannot be null");
     }
@@ -88,7 +87,7 @@ public class FormOutboundAuthenticationResponseMessage extends AbstractOAuthAuth
      * @param predicate what to set
      */
     public void setIncludeIssuerInResponsePredicate(@Nonnull final Predicate<ProfileRequestContext> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         includeIssuerInResponsePredicate = Constraint.isNotNull(predicate,
                 "Include issuer in response predicate cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundDiscoveryResponse.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundDiscoveryResponse.java
index 4bd42e41..0bfea291 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundDiscoveryResponse.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundDiscoveryResponse.java
@@ -31,10 +31,10 @@ import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 import net.shibboleth.idp.plugin.oidc.op.messaging.impl.OpenIDConfigurationSuccessResponse;
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.ProviderMetadataResolver;
 import net.shibboleth.idp.profile.AbstractProfileAction;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.resolver.ResolverException;
 
 /**
  * This action builds a response for the OP configuration discovery request. The response contains the contents of the
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/GenerateClientID.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/GenerateClientID.java
index 5fc84d61..0ae13163 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/GenerateClientID.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/GenerateClientID.java
@@ -36,11 +36,10 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistratio
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultOIDCClientRegistrationTokenClaimsContextLookupFunction;
 import net.shibboleth.idp.profile.AbstractProfileAction;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.config.ProfileConfiguration;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
+import net.shibboleth.profile.config.ProfileConfiguration;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.security.IdentifierGenerationStrategy;
 
 /**
  * Creates the client ID for the registration.
@@ -94,7 +93,7 @@ public class GenerateClientID extends AbstractProfileAction {
      */
     public void setRelyingPartyContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,RelyingPartyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         relyingPartyContextLookupStrategy = Constraint.isNotNull(strategy,
                 "RelyingPartyContext lookup strategy cannot be null");
@@ -109,7 +108,7 @@ public class GenerateClientID extends AbstractProfileAction {
      */
     public void setOidcResponseContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,OIDCClientRegistrationResponseContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         oidcResponseContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCClientRegistrationResponseContext lookup strategy cannot be null");
@@ -123,7 +122,7 @@ public class GenerateClientID extends AbstractProfileAction {
      */
     public void setRegistrationTokenContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,OIDCClientRegistrationTokenClaimsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         registrationTokenContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCClientRegistrationTokenClaimsContext lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/GenerateClientSecret.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/GenerateClientSecret.java
index 988de688..eb96fad9 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/GenerateClientSecret.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/GenerateClientSecret.java
@@ -34,11 +34,10 @@ import org.slf4j.LoggerFactory;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistrationResponseContext;
 import net.shibboleth.idp.profile.AbstractProfileAction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.logic.FunctionSupport;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.security.IdentifierGenerationStrategy;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 /**
  * Creates a new client secret with the {@link IdentifierGenerationStrategy} attached to this action. The
@@ -80,7 +79,7 @@ public class GenerateClientSecret extends AbstractProfileAction {
      * @param strategy What to set.
      */
     public void setSecretExpirationPeriodStrategy(@Nullable final Function<ProfileRequestContext,Duration> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         secretExpirationPeriodStrategy = strategy;
     }
@@ -93,7 +92,7 @@ public class GenerateClientSecret extends AbstractProfileAction {
      */
     public void setOidcResponseContextLookupStrategy(
             @Nonnull final Function<MessageContext, OIDCClientRegistrationResponseContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         oidcResponseContextLookupStrategy =
                 Constraint.isNotNull(strategy, "OIDCClientRegistrationResponseContext lookup strategy cannot be null");
@@ -106,7 +105,7 @@ public class GenerateClientSecret extends AbstractProfileAction {
      */
     public void setIdentifierGeneratorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, IdentifierGenerationStrategy> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         idGeneratorLookupStrategy =
                 Constraint.isNotNull(strategy, "IdentifierGenerationStrategy lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeAuthenticationContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeAuthenticationContext.java
index 39fb9cb1..e7d6099c 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeAuthenticationContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeAuthenticationContext.java
@@ -28,8 +28,7 @@ import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestLoginHintLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestMaxAgeLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestedPromptLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
@@ -80,7 +79,7 @@ public class InitializeAuthenticationContext extends AbstractOIDCAuthenticationR
      * @param strategy lookup strategy
      */
     public void setPromptLookupStrategy(@Nonnull final Function<ProfileRequestContext, Prompt> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         promptLookupStrategy = Constraint.isNotNull(strategy, "PromptLookupStrategy lookup strategy cannot be null");
     }
 
@@ -90,7 +89,7 @@ public class InitializeAuthenticationContext extends AbstractOIDCAuthenticationR
      * @param strategy lookup strategy
      */
     public void setLoginHintLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         loginHintLookupStrategy =
                 Constraint.isNotNull(strategy, "LoginHintLookupStrategy lookup strategy cannot be null");
     }
@@ -101,7 +100,7 @@ public class InitializeAuthenticationContext extends AbstractOIDCAuthenticationR
      * @param strategy lookup strategy
      */
     public void setMaxAgeLookupStrategy(@Nonnull final Function<ProfileRequestContext, Duration> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         maxAgeLookupStrategy = Constraint.isNotNull(strategy, "MaxAgeLookupStrategy lookup strategy cannot be null");
     }
 
@@ -113,7 +112,7 @@ public class InitializeAuthenticationContext extends AbstractOIDCAuthenticationR
      * @since 3.1.0
      */
     public void setForceAuthnPredicate(@Nonnull final Predicate<ProfileRequestContext> condition) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         forceAuthnPredicate = Constraint.isNotNull(condition, "Forced authentication predicate cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundAuthenticationResponseMessageContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundAuthenticationResponseMessageContext.java
index f72a9e82..f412fead 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundAuthenticationResponseMessageContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundAuthenticationResponseMessageContext.java
@@ -18,11 +18,11 @@
 package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.saml.profile.context.navigate.SAMLMetadataContextLookupFunction;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.saml.profile.context.navigate.messaging.SAMLMetadataContextLookupFunction;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.FunctionSupport;
 
 import java.net.URI;
 import java.util.List;
@@ -112,7 +112,8 @@ public class InitializeOutboundAuthenticationResponseMessageContext
         oidcMetadataCtxLookupStrategy = new ChildContextLookup<>(OIDCMetadataContext.class).compose(
                 new InboundMessageContextLookup());
         relyingPartyCtxLookupStrategy = new ChildContextLookup<>(RelyingPartyContext.class);
-        samlMetadataCtxLookupStrategy = new SAMLMetadataContextLookupFunction();
+        samlMetadataCtxLookupStrategy = FunctionSupport.compose(new SAMLMetadataContextLookupFunction(),
+                new InboundMessageContextLookup());
         defaultLanguage = "en";
     }
 
@@ -133,7 +134,7 @@ public class InitializeOutboundAuthenticationResponseMessageContext
      */
     public void setOIDCMetadataContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, OIDCMetadataContext> strgy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         oidcMetadataCtxLookupStrategy = Constraint.isNotNull(strgy, "Injected Metadata Strategy cannot be null");
     }
@@ -157,7 +158,7 @@ public class InitializeOutboundAuthenticationResponseMessageContext
      */
     public void setRelyingPartyContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, RelyingPartyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         relyingPartyCtxLookupStrategy =
                 Constraint.isNotNull(strategy, "RelyingPartyContext lookup strategy cannot be null");
@@ -182,7 +183,7 @@ public class InitializeOutboundAuthenticationResponseMessageContext
      */
     public void setSAMLMetadataContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, SAMLMetadataContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         samlMetadataCtxLookupStrategy =
                 Constraint.isNotNull(strategy, "SAMLMetadataContext lookup strategy cannot be null");
@@ -194,7 +195,7 @@ public class InitializeOutboundAuthenticationResponseMessageContext
      * @param language What to set.
      */
     public void setDefaultLanguage(@Nonnull final String language) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         defaultLanguage = Constraint.isNotEmpty(language, "The default language cannot be empty");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundRegistrationResponseMessageContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundRegistrationResponseMessageContext.java
index 308aef14..b034e14b 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundRegistrationResponseMessageContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundRegistrationResponseMessageContext.java
@@ -31,8 +31,7 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistrationResponseContext;
 import net.shibboleth.idp.profile.AbstractProfileAction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Action that adds an outbound {@link MessageContext} and related OIDC context
@@ -65,7 +64,7 @@ public class InitializeOutboundRegistrationResponseMessageContext extends Abstra
      */
     public void setOIDCClientRegistrationResponseContextCreationStrategy(
             @Nonnull final Function<MessageContext, OIDCClientRegistrationResponseContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         oidcResponseContextCreationStrategy = Constraint.isNotNull(strategy,
                 "OIDCClientRegistrationResponseContext creation strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRegistrationMetadataPolicyContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRegistrationMetadataPolicyContext.java
index 29c97a6e..a8aa17eb 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRegistrationMetadataPolicyContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRegistrationMetadataPolicyContext.java
@@ -40,10 +40,9 @@ import net.shibboleth.idp.profile.AbstractProfileAction;
 import net.shibboleth.oidc.metadata.policy.MetadataPolicy;
 import net.shibboleth.oidc.metadata.policy.impl.DefaultMetadataPolicyValidator;
 import net.shibboleth.oidc.profile.config.navigate.RegistrationMetadataPolicyLookupFunction;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Initializes the {@link OIDCClientRegistrationMetadataPolicyContext} and attaches it as a subcontext for the incoming
@@ -97,7 +96,7 @@ public class InitializeRegistrationMetadataPolicyContext extends AbstractProfile
      */
     public void setProfileMetadataPolicyLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, Map<String, MetadataPolicy>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         profileMetadataPolicyLookupStrategy = Constraint.isNotNull(strategy,
                 "Profile metadata policy lookup strategy cannot be null");
@@ -110,7 +109,7 @@ public class InitializeRegistrationMetadataPolicyContext extends AbstractProfile
      */
     public void setTokenMetadataPolicyLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, Map<String, MetadataPolicy>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         tokenMetadataPolicyLookupStrategy = Constraint.isNotNull(strategy,
                 "Token metadata policy lookup strategy cannot be null");
@@ -123,7 +122,7 @@ public class InitializeRegistrationMetadataPolicyContext extends AbstractProfile
      */
     public void setRegistrationPolicyContextCreationStrategy(
             @Nonnull final Function<ProfileRequestContext,OIDCClientRegistrationMetadataPolicyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         registrationPolicyContextCreationStrategy = Constraint.isNotNull(strategy,
                 "OIDCClientRegistrationMetadataPolicyContext creation strategy cannot be null");
@@ -136,7 +135,7 @@ public class InitializeRegistrationMetadataPolicyContext extends AbstractProfile
      */
     public void setMetadataPolicyMergingStrategy(@Nonnull final BiFunction<Map<String,MetadataPolicy>,
             Map<String,MetadataPolicy>, Pair<Map<String, MetadataPolicy>, Boolean>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         metadataPolicyMergingStrategy = Constraint.isNotNull(strategy,
                 "Metadata policy merging strategy cannot be null");
@@ -148,7 +147,7 @@ public class InitializeRegistrationMetadataPolicyContext extends AbstractProfile
      * @param strategy What to set.
      */
     public void setMetadataPolicyValidationStrategy(@Nonnull final Predicate<Map<String, MetadataPolicy>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         metadataPolicyValidationStrategy = Constraint.isNotNull(strategy,
                 "Metadata policy validation strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRelyingPartyContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRelyingPartyContext.java
index 234611f4..63135e78 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRelyingPartyContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRelyingPartyContext.java
@@ -30,10 +30,9 @@ import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultClientI
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultOIDCMetadataContextLookupFunction;
 import net.shibboleth.idp.profile.AbstractProfileAction;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
@@ -85,7 +84,7 @@ public class InitializeRelyingPartyContext extends AbstractProfileAction {
      * @param strategy lookup strategy
      */
     public void setClientIDLookupStrategy(@Nonnull final Function<MessageContext, ClientID> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         clientIDLookupStrategy =
                 Constraint.isNotNull(strategy, "ClientIDLookupStrategy lookup strategy cannot be null");
     }
@@ -97,7 +96,7 @@ public class InitializeRelyingPartyContext extends AbstractProfileAction {
      */
     public void setRelyingPartyContextCreationStrategy(
             @Nonnull final Function<ProfileRequestContext, RelyingPartyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         relyingPartyContextCreationStrategy =
                 Constraint.isNotNull(strategy, "RelyingPartyContext creation strategy cannot be null");
@@ -110,7 +109,7 @@ public class InitializeRelyingPartyContext extends AbstractProfileAction {
      */
     public void setOidcMetadataContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, OIDCMetadataContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         oidcMetadataContextLookupStrategy =
                 Constraint.isNotNull(strategy, "OIDCMetadataContext lookup strategy cannot be null");
@@ -126,7 +125,7 @@ public class InitializeRelyingPartyContext extends AbstractProfileAction {
      * @since 3.1.0
      */
     public void setInbound(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         inbound = flag;
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeUnverifiedRelyingPartyContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeUnverifiedRelyingPartyContext.java
index bf921a37..e7ad8872 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeUnverifiedRelyingPartyContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeUnverifiedRelyingPartyContext.java
@@ -29,9 +29,8 @@ import org.slf4j.LoggerFactory;
 
 import net.shibboleth.idp.profile.AbstractProfileAction;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Action that adds a {@link RelyingPartyContext} to the current {@link ProfileRequestContext} tree via a creation
@@ -62,7 +61,7 @@ public class InitializeUnverifiedRelyingPartyContext extends AbstractProfileActi
      */
     public void setRelyingPartyContextCreationStrategy(
             @Nonnull final Function<ProfileRequestContext, RelyingPartyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         relyingPartyContextCreationStrategy = Constraint.isNotNull(strategy,
                 "RelyingPartyContext creation strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDToken.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDToken.java
index 7557ec21..a0aff20f 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDToken.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDToken.java
@@ -35,8 +35,7 @@ import com.nimbusds.openid.connect.sdk.claims.IDTokenClaimsSet;
 
 import net.shibboleth.idp.profile.IdPEventIds;
 import net.shibboleth.oidc.profile.config.navigate.IDTokenManipulationStrategyLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * An action that can be used for manipulating id_token claims via configurable strategy (bi-function). If the
@@ -79,7 +78,7 @@ public class ManipulateClaimsForIDToken extends AbstractOIDCAuthenticationRespon
     public void setIDTokenManipulationStrategyLookupStrategy(@Nonnull final
             Function<ProfileRequestContext,BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>>>
             strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         idTokenManipulationStrategyLookupStrategy =
                 Constraint.isNotNull(strategy, "IDToken manipulation strategy lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/OIDCMetadataLookupHandler.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/OIDCMetadataLookupHandler.java
index 34aed520..b7b1a956 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/OIDCMetadataLookupHandler.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/OIDCMetadataLookupHandler.java
@@ -25,12 +25,12 @@ import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultClientI
 import net.shibboleth.oidc.metadata.ClientInformationResolver;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
 import net.shibboleth.oidc.metadata.criterion.ClientIDCriterion;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.resolver.CriteriaSet;
+import net.shibboleth.shared.resolver.ResolverException;
+
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.handler.AbstractMessageHandler;
 import org.opensaml.messaging.handler.MessageHandlerException;
@@ -69,7 +69,7 @@ public class OIDCMetadataLookupHandler extends AbstractMessageHandler {
      * @param strategy lookup strategy
      */
     public void setClientIDLookupStrategy(@Nonnull final Function<MessageContext, ClientID> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         clientIDLookupStrategy =
                 Constraint.isNotNull(strategy, "ClientIDLookupStrategy lookup strategy cannot be null");
     }
@@ -80,7 +80,7 @@ public class OIDCMetadataLookupHandler extends AbstractMessageHandler {
      * @param resolver The resolver to use.
      */
     public void setClientInformationResolver(@Nonnull final ClientInformationResolver resolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         clientResolver = Constraint.isNotNull(resolver, "ClientInformationResolver cannot be null");
     }
@@ -98,7 +98,7 @@ public class OIDCMetadataLookupHandler extends AbstractMessageHandler {
     /** {@inheritDoc} */
     @Override
     protected void doInvoke(@Nonnull final MessageContext messageContext) throws MessageHandlerException {
-        ComponentSupport.ifNotInitializedThrowUninitializedComponentException(this);
+        ifNotInitializedThrowUninitializedComponentException();
         
         final ClientID clientId = clientIDLookupStrategy.apply(messageContext);
         if (clientId == null) {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ProcessRequestedAuthnContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ProcessRequestedAuthnContext.java
index 2e746d67..1e0ef372 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ProcessRequestedAuthnContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ProcessRequestedAuthnContext.java
@@ -27,8 +27,7 @@ import net.shibboleth.idp.authn.context.RequestedPrincipalContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestedAcrLookupFunction;
 import net.shibboleth.oidc.authn.principal.AuthenticationContextClassReferencePrincipal;
 import net.shibboleth.oidc.profile.config.navigate.AcrClaimAlwaysEssentialLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -96,7 +95,7 @@ public class ProcessRequestedAuthnContext extends AbstractOIDCAuthenticationResp
      * @param strategy lookup strategy
      */
     public void setAcrLookupStrategy(@Nonnull final Function<ProfileRequestContext,List<ACR>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         acrLookupStrategy = Constraint.isNotNull(strategy, "Acr lookup strategy cannot be null");
     }
     
@@ -106,7 +105,7 @@ public class ProcessRequestedAuthnContext extends AbstractOIDCAuthenticationResp
      * @param strategy lookup strategy
      */
     public void setAcrAlwaysEssentialLookupStrategy(@Nonnull final Predicate<ProfileRequestContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         acrAlwaysEssentialLookupStrategy = Constraint.isNotNull(strategy,
                 "AcrAlwaysEssentialLookupStrategy lookup strategy cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/RevokeConsent.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/RevokeConsent.java
index 6c1087f3..07b48119 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/RevokeConsent.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/RevokeConsent.java
@@ -31,8 +31,7 @@ import com.nimbusds.openid.connect.sdk.Prompt;
 
 import net.shibboleth.idp.consent.context.ConsentManagementContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestedPromptLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Action that revokes consent if offline_access scope or prompt with consent is requested.
@@ -59,7 +58,7 @@ public class RevokeConsent extends AbstractOIDCResponseAction {
      * @param strategy lookup strategy
      */
     public void setPromptLookupStrategy(@Nonnull final Function<ProfileRequestContext, Prompt> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         promptLookupStrategy = Constraint.isNotNull(strategy, "PromptLookupStrategy lookup strategy cannot be null");
     }
 
@@ -70,12 +69,12 @@ public class RevokeConsent extends AbstractOIDCResponseAction {
         final Scope scope = getOidcResponseContext().getScope();
         if (scope != null && getOidcResponseContext().getScope().contains(OIDCScopeValue.OFFLINE_ACCESS)) {
             log.debug("{} Pre-existing consent revoked as offline_access scope is requested", getLogPrefix());
-            profileRequestContext.getSubcontext(ConsentManagementContext.class, true).setRevokeConsent(true);
+            profileRequestContext.ensureSubcontext(ConsentManagementContext.class).setRevokeConsent(true);
         } else {
             final Prompt prompt = promptLookupStrategy.apply(profileRequestContext);
             if (prompt != null && prompt.contains(Prompt.Type.CONSENT)) {
                 log.debug("{} Pre-existing consent revoked as user consent is requested", getLogPrefix());
-                profileRequestContext.getSubcontext(ConsentManagementContext.class, true).setRevokeConsent(true);
+                profileRequestContext.ensureSubcontext(ConsentManagementContext.class).setRevokeConsent(true);
             }
         }
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceToResponseContext.java
index 62554e70..035159a0 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceToResponseContext.java
@@ -24,16 +24,15 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import net.shibboleth.idp.authn.AuthnEventIds;
+import net.shibboleth.idp.authn.impl.DefaultPrincipalDeterminationStrategy;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.context.PreferredPrincipalContext;
 import net.shibboleth.idp.authn.context.RequestedPrincipalContext;
-import net.shibboleth.idp.authn.principal.DefaultPrincipalDeterminationStrategy;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.oidc.authn.principal.AuthenticationContextClassReferencePrincipal;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -70,7 +69,7 @@ public class SetAuthenticationContextClassReferenceToResponseContext extends Abs
      */
     public void setClassRefLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, AuthenticationContextClassReferencePrincipal> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         classRefLookupStrategy =
                 Constraint.isNotNull(strategy, "Authentication context class reference strategy cannot be null");
@@ -97,7 +96,7 @@ public class SetAuthenticationContextClassReferenceToResponseContext extends Abs
             return false;
         }
         
-        authCtx = profileRequestContext.getSubcontext(AuthenticationContext.class, false);
+        authCtx = profileRequestContext.getSubcontext(AuthenticationContext.class);
         if (authCtx == null) {
             log.error("{} No authentication context", getLogPrefix());
             ActionSupport.buildEvent(profileRequestContext, AuthnEventIds.INVALID_AUTHN_CTX);
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationTimeToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationTimeToResponseContext.java
index 5b242dea..bbe6e93e 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationTimeToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationTimeToResponseContext.java
@@ -24,8 +24,7 @@ import javax.annotation.Nonnull;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultAuthTimeLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
@@ -58,7 +57,7 @@ public class SetAuthenticationTimeToResponseContext extends AbstractOIDCResponse
      * @param strategy lookup strategy
      */
     public void setAuthTimeLookupStrategy(@Nonnull final Function<ProfileRequestContext,Instant> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         authTimeLookupStrategy =
                 Constraint.isNotNull(strategy, "AuthTimeLookupStrategy lookup strategy cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentFromTokenToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentFromTokenToResponseContext.java
index 46e4d48f..aa7dca91 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentFromTokenToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentFromTokenToResponseContext.java
@@ -24,8 +24,7 @@ import javax.annotation.Nonnull;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseConsentContext;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.TokenRequestConsentedAttributesLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
@@ -58,7 +57,7 @@ public class SetConsentFromTokenToResponseContext extends AbstractOIDCResponseAc
      */
     public void setConsentedAttributesLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,List<Object>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         consentedAttributesLookupStrategy = Constraint.isNotNull(strategy, "Lookup strategy cannot be null");
     }
@@ -69,7 +68,7 @@ public class SetConsentFromTokenToResponseContext extends AbstractOIDCResponseAc
         final List<Object> consentedAttributes = consentedAttributesLookupStrategy.apply(profileRequestContext);
         if (consentedAttributes != null) {
             final OIDCAuthenticationResponseConsentContext consentClaimsCtx =
-                    getOidcResponseContext().getSubcontext(OIDCAuthenticationResponseConsentContext.class, true);
+                    getOidcResponseContext().ensureSubcontext(OIDCAuthenticationResponseConsentContext.class);
             consentClaimsCtx.getConsentedAttributes().addAll(consentedAttributes);
         }
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentToResponseContext.java
index f26b61dc..8c16cf8f 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentToResponseContext.java
@@ -32,13 +32,12 @@ import org.slf4j.LoggerFactory;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseConsentContext;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseTokenClaimsContext;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.oidc.profile.config.logic.AttributeConsentFlowEnabledPredicate;
 import net.shibboleth.oidc.profile.config.logic.EncodeConsentPredicate;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.context.AttributeContext;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
 
 /**
  * Action that checks for adds the currently existing attributes from {@link AttributeContext} for token delivery. They
@@ -85,7 +84,7 @@ public class SetConsentToResponseContext extends AbstractOIDCResponseAction {
      */
     public void setAttributeContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, AttributeContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         attributeContextLookupStrategy =
                 Constraint.isNotNull(strategy, "AttributeContext lookup strategy cannot be null");
@@ -97,7 +96,7 @@ public class SetConsentToResponseContext extends AbstractOIDCResponseAction {
      * @param predicate predicate used to check if consent is enabled
      */
     public void setConsentEnabledPredicate(@Nonnull final Predicate<ProfileRequestContext> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         consentEnabledPredicate = Constraint.isNotNull(predicate, "Predicate cannot be null");
     }
@@ -108,7 +107,7 @@ public class SetConsentToResponseContext extends AbstractOIDCResponseAction {
      * @param predicate predicate used to check if consent should be encoded
      */
     public void setEncodeConsentPredicate(@Nonnull final Predicate<ProfileRequestContext> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         encodeConsentPredicate = Constraint.isNotNull(predicate, "Predicate cannot be null");
     }
@@ -144,7 +143,7 @@ public class SetConsentToResponseContext extends AbstractOIDCResponseAction {
     protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
 
         final OIDCAuthenticationResponseConsentContext oidcConsentCtx =
-                getOidcResponseContext().getSubcontext(OIDCAuthenticationResponseConsentContext.class, true);
+                getOidcResponseContext().ensureSubcontext(OIDCAuthenticationResponseConsentContext.class);
 
         final Map<String, IdPAttribute> consented = attributeCtx.getIdPAttributes();
         oidcConsentCtx.getConsentedAttributes().addAll(consented.keySet());
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRefreshTokenToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRefreshTokenToResponseContext.java
index d66cee20..26b2fb65 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRefreshTokenToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRefreshTokenToResponseContext.java
@@ -47,19 +47,18 @@ import net.shibboleth.oidc.profile.config.logic.EnforceRefreshTokenRotationPredi
 import net.shibboleth.oidc.profile.config.navigate.RefreshTokenChainLifetimeLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.RefreshTokenClaimsSetManipulationStrategyLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.RefreshTokenTimeoutLookupFunction;
+import net.shibboleth.shared.annotation.ParameterName;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.IdentifierGenerationStrategy;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 import org.opensaml.profile.action.ActionSupport;
-import net.shibboleth.utilities.java.support.annotation.ParameterName;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.logic.FunctionSupport;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 /**
  * Action that creates a Refresh Token, and sets it to work context
@@ -135,7 +134,7 @@ public class SetRefreshTokenToResponseContext extends AbstractOIDCResponseAction
      * @param cache The revocationCache to set.
      */
     public void setRevocationCache(@Nonnull final RevocationCache cache) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         revocationCache = Constraint.isNotNull(cache, "RevocationCache cannot be null");
     }
 
@@ -146,7 +145,7 @@ public class SetRefreshTokenToResponseContext extends AbstractOIDCResponseAction
      */
     public void setRefreshTokenChainLifetimeLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Duration> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         refreshTokenChainLifetimeLookupStrategy =
                 Constraint.isNotNull(strategy, "Refresh token chain lifetime lookup strategy cannot be null");
@@ -159,7 +158,7 @@ public class SetRefreshTokenToResponseContext extends AbstractOIDCResponseAction
      */
     public void setRefreshTokenTimeoutLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Duration> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         refreshTokenTimeoutLookupStrategy =
                 Constraint.isNotNull(strategy, "Refresh token timeout lookup strategy cannot be null");
@@ -173,7 +172,7 @@ public class SetRefreshTokenToResponseContext extends AbstractOIDCResponseAction
     public void setTokenClaimsSetManipulationStrategyLookupStrategy(@Nonnull final
             Function<ProfileRequestContext,BiFunction<ProfileRequestContext,Map<String,Object>,Map<String,Object>>>
             strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         tokenClaimsSetManipulationStrategyLookupStrategy =
                 Constraint.isNotNull(strategy, "Manipulation strategy lookup strategy cannot be null");
@@ -186,7 +185,7 @@ public class SetRefreshTokenToResponseContext extends AbstractOIDCResponseAction
      */
     public void setIdentifierGeneratorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,IdentifierGenerationStrategy> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         idGeneratorLookupStrategy =
                 Constraint.isNotNull(strategy, "Identifier generation strategy cannot be null");
@@ -198,7 +197,7 @@ public class SetRefreshTokenToResponseContext extends AbstractOIDCResponseAction
      * @param condition condition to apply
      */
     public void setEnforceRefreshTokenRotationCondition(@Nonnull final Predicate<ProfileRequestContext> condition) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         enforceRefreshTokenRotationCondition = Constraint.isNotNull(condition, "Condition cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedClaimsToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedClaimsToResponseContext.java
index b08218dd..6a9af677 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedClaimsToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedClaimsToResponseContext.java
@@ -22,6 +22,7 @@ import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 
+import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
@@ -41,15 +42,14 @@ import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.attribute.transcoding.TranscoderSupport;
 import net.shibboleth.idp.attribute.transcoding.TranscodingRule;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequestedClaimsLookupFunction;
-import net.shibboleth.idp.profile.ActionSupport;
-import net.shibboleth.utilities.java.support.annotation.constraint.Live;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.service.ReloadableService;
-import net.shibboleth.utilities.java.support.service.ServiceableComponent;
+import net.shibboleth.shared.annotation.constraint.Live;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.service.ReloadableService;
+import net.shibboleth.shared.service.ServiceException;
+import net.shibboleth.shared.service.ServiceableComponent;
 
 /**
  * Action that sets requested claims to response context. For instance attribute filtering may use this information.
@@ -81,7 +81,7 @@ public class SetRequestedClaimsToResponseContext extends AbstractOIDCResponseAct
      * @param registry registry service interface
      */
     public void setTranscoderRegistry(@Nonnull final ReloadableService<AttributeTranscoderRegistry> registry) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         transcoderRegistry = Constraint.isNotNull(registry, "AttributeTranscoderRegistry cannot be null");
     }
@@ -93,7 +93,7 @@ public class SetRequestedClaimsToResponseContext extends AbstractOIDCResponseAct
      */
     public void setRequestedClaimsLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, OIDCClaimsRequest> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         requestedClaimsLookupStrategy =
                 Constraint.isNotNull(strategy, "RequestedClaimsLookupStrategy lookup strategy cannot be null");
     }
@@ -120,14 +120,8 @@ public class SetRequestedClaimsToResponseContext extends AbstractOIDCResponseAct
             return;
         }
         
-        ServiceableComponent<AttributeTranscoderRegistry> component = null;
-        try {
-            component = transcoderRegistry.getServiceableComponent();
-            if (component == null) {
-                log.error("Attribute transoding service unavailable");
-                ActionSupport.buildEvent(profileRequestContext, EventIds.MESSAGE_PROC_ERROR);
-                return;
-            }
+        try (final ServiceableComponent<AttributeTranscoderRegistry> component
+                = transcoderRegistry.getServiceableComponent()) {
             
             // This is awful but it's a stopgap. Wrap the ClaimsRequest entry in a JSONObject
             // wrapper to maintain compatibility with the transcoders. The TODO is to build
@@ -164,10 +158,9 @@ public class SetRequestedClaimsToResponseContext extends AbstractOIDCResponseAct
             getOidcResponseContext().setMappedUserinfoRequestedClaims(results.isEmpty() ? null :
                 new AttributesMapContainer(results));
             
-        } finally {
-            if (component != null) {
-                component.unpinComponent();
-            }
+        } catch (final ServiceException e) {
+            log.error("Attribute transoding service unavailable");
+            ActionSupport.buildEvent(profileRequestContext, EventIds.MESSAGE_PROC_ERROR);
         }
     }
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetResponseStatusCodeFromEvent.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetResponseStatusCodeFromEvent.java
index 580724f7..cded24a1 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetResponseStatusCodeFromEvent.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetResponseStatusCodeFromEvent.java
@@ -23,9 +23,8 @@ import java.util.function.Function;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
-import javax.servlet.http.HttpServletResponse;
 
-import org.apache.http.HttpStatus;
+import org.apache.hc.core5.http.HttpStatus;
 import org.opensaml.profile.context.EventContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.profile.context.navigate.CurrentOrPreviousEventLookup;
@@ -33,8 +32,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import net.shibboleth.idp.profile.AbstractProfileAction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * This action reads an event from the configured {@link EventContext} lookup strategy and sets the status code for
@@ -67,7 +65,7 @@ public class SetResponseStatusCodeFromEvent extends AbstractProfileAction {
      * @param strategy  lookup strategy
      */
     public void setEventContextLookupStrategy(@Nonnull final Function<ProfileRequestContext,EventContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         eventContextLookupStrategy = Constraint.isNotNull(strategy, "EventContext lookup strategy cannot be null");
     }
@@ -87,7 +85,7 @@ public class SetResponseStatusCodeFromEvent extends AbstractProfileAction {
      * @param errors map of eventIds to status codes.
      */
     public void setMappedErrors(@Nonnull final Map<String, Integer> errors) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         mappedErrors = Constraint.isNotNull(errors, "Mapped errors cannot be null");
     }
     
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSectorIdentifierForAttributeResolution.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSectorIdentifierForAttributeResolution.java
index ecf0d193..e002db82 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSectorIdentifierForAttributeResolution.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSectorIdentifierForAttributeResolution.java
@@ -24,8 +24,7 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.SectorIdentifierLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.logic.DefaultSubjectTypeStrategy;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -64,7 +63,7 @@ public class SetSectorIdentifierForAttributeResolution extends AbstractOIDCAuthe
      * @param strategy lookup strategy
      */
     public void setSectorIdentifierLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         sectorIdentifierLookupStrategy =
                 Constraint.isNotNull(strategy, "SectorIdentifierLookupStrategy lookup strategy cannot be null");
     }
@@ -75,7 +74,7 @@ public class SetSectorIdentifierForAttributeResolution extends AbstractOIDCAuthe
      * @param strategy lookup strategy
      */
     public void setSubjectTypeLookupStrategy(@Nonnull final Function<ProfileRequestContext, SubjectType> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         subjectTypeLookupStrategy =
                 Constraint.isNotNull(strategy, "SubjectTypeLookupStrategy lookup strategy cannot be null");
     }
@@ -84,7 +83,7 @@ public class SetSectorIdentifierForAttributeResolution extends AbstractOIDCAuthe
     @Override
     protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         if (SubjectType.PUBLIC.equals(subjectTypeLookupStrategy.apply(profileRequestContext))) {
-            ((AttributeResolutionContext) profileRequestContext.getSubcontext(AttributeResolutionContext.class, true))
+            ((AttributeResolutionContext) profileRequestContext.ensureSubcontext(AttributeResolutionContext.class))
                     .setAttributeRecipientGroupID("public");
             log.debug("{} Attribute recipient group id set to value public for generating subject of type public",
                     getLogPrefix());
@@ -96,7 +95,7 @@ public class SetSectorIdentifierForAttributeResolution extends AbstractOIDCAuthe
             ActionSupport.buildEvent(profileRequestContext, OidcEventIds.MISSING_REDIRECT_URIS);
             return;
         }
-        ((AttributeResolutionContext) profileRequestContext.getSubcontext(AttributeResolutionContext.class, true))
+        ((AttributeResolutionContext) profileRequestContext.ensureSubcontext(AttributeResolutionContext.class))
                 .setAttributeRecipientGroupID(sectorIdentifier);
         log.debug(
                 "{} Attribute recipient group id set to sector identifier value {} for subject of type pairwise",
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSessionIdToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSessionIdToResponseContext.java
index 913c4e40..3730fc7c 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSessionIdToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSessionIdToResponseContext.java
@@ -23,9 +23,8 @@ import javax.annotation.Nonnull;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.TokenRequestSessionIdLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.StringSupport;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
@@ -56,7 +55,7 @@ public class SetSessionIdToResponseContext extends AbstractOIDCResponseAction {
      * @param strategy lookup strategy
      */
     public void setSessionIdLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         sessionIdLookupStrategy = Constraint.isNotNull(strategy, "Session ID lookup strategy cannot be null");
     }
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSubjectToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSubjectToResponseContext.java
index 4eb072f2..38a38d50 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSubjectToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSubjectToResponseContext.java
@@ -24,8 +24,7 @@ import javax.annotation.Nonnull;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.TokenRequestSubjectLookupFunction;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -64,7 +63,7 @@ public class SetSubjectToResponseContext extends AbstractOIDCResponseAction {
      * @param strategy subject type lookup strategy
      */
     public void setSubjectTypeLookupStrategy(@Nonnull final Function<ProfileRequestContext, SubjectType> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         subjectTypeStrategy = Constraint.isNotNull(strategy, "Subject type lookup strategy cannot be null");
     }
 
@@ -74,7 +73,7 @@ public class SetSubjectToResponseContext extends AbstractOIDCResponseAction {
      * @param strategy lookup strategy
      */
     public void setSubjectLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         subjectLookupStrategy = Constraint.isNotNull(strategy, "Subject lookup strategy cannot be null");
     }
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesFromTokenToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesFromTokenToResponseContext.java
index 7ff1d0c4..63a9d26d 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesFromTokenToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesFromTokenToResponseContext.java
@@ -27,8 +27,7 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationRes
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.TokenRequestDeliveryClaimsLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.TokenRequestIDTokenDeliveryClaimsLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.TokenRequestUserInfoDeliveryClaimsLookupFunction;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
@@ -70,7 +69,7 @@ public class SetTokenDeliveryAttributesFromTokenToResponseContext extends Abstra
      * @param strategy lookup strategy
      */
     public void setDeliveryClaimsLookupStrategy(@Nonnull final Function<ProfileRequestContext, ClaimsSet> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         deliveryClaimsLookupStrategy =
                 Constraint.isNotNull(strategy, "DeliveryClaimsLookupStrategy lookup strategy cannot be null");
     }
@@ -82,7 +81,7 @@ public class SetTokenDeliveryAttributesFromTokenToResponseContext extends Abstra
      */
     public void setIDTokenDeliveryClaimsLookupStrategy(
             @Nullable final Function<ProfileRequestContext, ClaimsSet> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         idTokenDeliveryClaimsLookupStrategy = strategy;
     }
 
@@ -93,7 +92,7 @@ public class SetTokenDeliveryAttributesFromTokenToResponseContext extends Abstra
      */
     public void setUserinfoDeliveryClaimsLookupStrategy(
             @Nullable final Function<ProfileRequestContext, ClaimsSet> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         userinfoDeliveryClaimsLookupStrategy = strategy;
     }
 
@@ -103,14 +102,14 @@ public class SetTokenDeliveryAttributesFromTokenToResponseContext extends Abstra
         ClaimsSet claims = deliveryClaimsLookupStrategy.apply(profileRequestContext);
         if (claims != null) {
             final OIDCAuthenticationResponseTokenClaimsContext tokenClaimsCtx =
-                    getOidcResponseContext().getSubcontext(OIDCAuthenticationResponseTokenClaimsContext.class, true);
+                    getOidcResponseContext().ensureSubcontext(OIDCAuthenticationResponseTokenClaimsContext.class);
             tokenClaimsCtx.getClaims().putAll(claims);
         }
         if (idTokenDeliveryClaimsLookupStrategy != null) {
             claims = idTokenDeliveryClaimsLookupStrategy.apply(profileRequestContext);
             if (claims != null) {
                 final OIDCAuthenticationResponseTokenClaimsContext tokenClaimsCtx = getOidcResponseContext()
-                        .getSubcontext(OIDCAuthenticationResponseTokenClaimsContext.class, true);
+                        .ensureSubcontext(OIDCAuthenticationResponseTokenClaimsContext.class);
                 tokenClaimsCtx.getIdtokenClaims().putAll(claims);
             }
         }
@@ -119,7 +118,7 @@ public class SetTokenDeliveryAttributesFromTokenToResponseContext extends Abstra
             claims = userinfoDeliveryClaimsLookupStrategy.apply(profileRequestContext);
             if (claims != null) {
                 final OIDCAuthenticationResponseTokenClaimsContext tokenClaimsCtx = getOidcResponseContext()
-                        .getSubcontext(OIDCAuthenticationResponseTokenClaimsContext.class, true);
+                        .ensureSubcontext(OIDCAuthenticationResponseTokenClaimsContext.class);
                 tokenClaimsCtx.getUserinfoClaims().putAll(claims);
             }
         }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesToResponseContext.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesToResponseContext.java
index 410720c8..0d2b65b7 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesToResponseContext.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesToResponseContext.java
@@ -37,17 +37,16 @@ import net.shibboleth.idp.attribute.transcoding.TranscodingRule;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseTokenClaimsContext;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.oidc.profile.config.navigate.AlwaysIncludedAttributesLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.DeniedUserInfoAttributesLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.EncodedAttributesLookupFunction;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.service.ReloadableService;
-import net.shibboleth.utilities.java.support.service.ServiceableComponent;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.service.ReloadableService;
+import net.shibboleth.shared.service.ServiceableComponent;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.action.ActionSupport;
@@ -118,7 +117,7 @@ public class SetTokenDeliveryAttributesToResponseContext extends AbstractOIDCRes
      * @param registry registry service interface
      */
     public void setTranscoderRegistry(@Nonnull final ReloadableService<AttributeTranscoderRegistry> registry) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         transcoderRegistry = Constraint.isNotNull(registry, "AttributeTranscoderRegistry cannot be null");
     }
@@ -130,7 +129,7 @@ public class SetTokenDeliveryAttributesToResponseContext extends AbstractOIDCRes
      * @param flag flag to set
      */
     public void setIgnoringUnencodableAttributes(final boolean flag) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         ignoringUnencodableAttributes = flag;
     }
@@ -144,7 +143,7 @@ public class SetTokenDeliveryAttributesToResponseContext extends AbstractOIDCRes
      */
     public void setAttributeContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, AttributeContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         attributeContextLookupStrategy =
                 Constraint.isNotNull(strategy, "AttributeContext lookup strategy cannot be null");
@@ -157,7 +156,7 @@ public class SetTokenDeliveryAttributesToResponseContext extends AbstractOIDCRes
      */
     public void setEncodedAttributesLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Set<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         encodedAttributesLookupStrategy = Constraint.isNotNull(strategy,
                 "Encoded attributes lookup strategy cannot be null");
@@ -170,7 +169,7 @@ public class SetTokenDeliveryAttributesToResponseContext extends AbstractOIDCRes
      */
     public void setAlwaysIncludedAttributesLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Set<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         alwaysIncludedAttributesLookupStrategy = Constraint.isNotNull(strategy,
                 "Always included ID token attributes lookup strategy cannot be null");
@@ -183,7 +182,7 @@ public class SetTokenDeliveryAttributesToResponseContext extends AbstractOIDCRes
      */
     public void setDeniedUserInfoAttributesLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Set<String>> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         deniedUserInfoAttributesLookupStrategy = Constraint.isNotNull(strategy,
                 "Denied UserInfo attributes lookup strategy cannot be null");
@@ -235,13 +234,8 @@ public class SetTokenDeliveryAttributesToResponseContext extends AbstractOIDCRes
     @Override
     protected void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
         
-        ServiceableComponent<AttributeTranscoderRegistry> component = null;
-        try {
-            component = transcoderRegistry.getServiceableComponent();
-            if (component == null) {
-                log.error("Attribute transoding service unavailable");
-                throw new AttributeEncodingException("Attribute transoding service unavailable");
-            }
+        try (final ServiceableComponent<AttributeTranscoderRegistry> component =
+                transcoderRegistry.getServiceableComponent()) {
             
             for (final IdPAttribute attribute : attributeCtx.getIdPAttributes().values()) {
                 if (attribute != null && !attribute.getValues().isEmpty() &&
@@ -253,10 +247,6 @@ public class SetTokenDeliveryAttributesToResponseContext extends AbstractOIDCRes
         } catch (final AttributeEncodingException e) {
             ActionSupport.buildEvent(profileRequestContext, IdPEventIds.UNABLE_ENCODE_ATTRIBUTE);
             return;
-        } finally {
-            if (null != component) {
-                component.unpinComponent();
-            }
         }
     }
 
@@ -283,7 +273,7 @@ public class SetTokenDeliveryAttributesToResponseContext extends AbstractOIDCRes
         }
         
         final OIDCAuthenticationResponseTokenClaimsContext tokenClaimsCtx =
-                getOidcResponseContext().getSubcontext(OIDCAuthenticationResponseTokenClaimsContext.class, true);
+                getOidcResponseContext().ensureSubcontext(OIDCAuthenticationResponseTokenClaimsContext.class);
         final AttributesMapContainer requestedToIdTokenContainer =
                 getOidcResponseContext().getMappedIdTokenRequestedClaims();
         
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/StoreClientInformation.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/StoreClientInformation.java
index a60d2949..8475aa54 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/StoreClientInformation.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/StoreClientInformation.java
@@ -42,10 +42,9 @@ import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultOIDCCli
 import net.shibboleth.idp.profile.AbstractProfileAction;
 import net.shibboleth.oidc.metadata.ClientInformationManager;
 import net.shibboleth.oidc.metadata.ClientInformationManagerException;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * An action that stores the {@link ClientInformation} from the {@link OIDCClientRegistrationResponseContext} to the
@@ -91,7 +90,7 @@ public class StoreClientInformation extends AbstractProfileAction {
      */
     public void setRegistrationValidityPeriodStrategy(
             @Nullable final Function<ProfileRequestContext,Duration> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         registrationValidityPeriodStrategy = strategy;
     }
@@ -110,7 +109,7 @@ public class StoreClientInformation extends AbstractProfileAction {
      * @param manager The client information manager used for storing the information.
      */
     public void setClientInformationManager(@Nonnull final ClientInformationManager manager) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         clientInformationManager = Constraint.isNotNull(manager, "The client information manager cannot be null!");
     }
     
@@ -123,7 +122,7 @@ public class StoreClientInformation extends AbstractProfileAction {
      */
     public void setOidcResponseContextLookupStrategy(
             @Nonnull final Function<MessageContext,OIDCClientRegistrationResponseContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         oidcResponseContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCClientRegistrationResponseContext lookup strategy cannot be null");
@@ -137,7 +136,7 @@ public class StoreClientInformation extends AbstractProfileAction {
      */
     public void setRegistrationTokenContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,OIDCClientRegistrationTokenClaimsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         registrationTokenContextLookupStrategy = Constraint.isNotNull(strategy,
                 "OIDCClientRegistrationTokenClaimsContext lookup strategy cannot be null");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrant.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrant.java
index dcf01fc3..5da9036a 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrant.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrant.java
@@ -46,19 +46,18 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.RefreshTokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.oidc.profile.config.logic.RefreshTokensEnabledPredicate;
 import net.shibboleth.oidc.profile.config.navigate.RefreshTokenChainLifetimeLookupFunction;
 import net.shibboleth.oidc.profile.config.navigate.RevocationLifetimeLookupFunction;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.annotation.ParameterName;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.ParameterName;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
 
 /**
  * Action that validates an authorization grant.
@@ -130,7 +129,7 @@ public class ValidateGrant extends AbstractOIDCTokenResponseAction {
      */
     public void setRelyingPartyContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, RelyingPartyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         relyingPartyContextLookupStrategy =
                 Constraint.isNotNull(strategy, "RelyingPartyContext lookup strategy cannot be null");
@@ -142,7 +141,7 @@ public class ValidateGrant extends AbstractOIDCTokenResponseAction {
      * @param predicate predicate used to indicate whether refresh tokens are enabled.
      */
     public void setRefreshTokensEnabledPredicate(@Nonnull final Predicate<ProfileRequestContext> predicate) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         refreshTokensEnabledPredicate =
                 Constraint.isNotNull(predicate, "Refresh tokens enabled predicate cannot be null");
@@ -153,7 +152,7 @@ public class ValidateGrant extends AbstractOIDCTokenResponseAction {
      * @param cache The replayCache to set.
      */
     public void setReplayCache(@Nonnull final ReplayCache cache) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         replayCache = Constraint.isNotNull(cache, "ReplayCache cannot be null");
     }
 
@@ -163,7 +162,7 @@ public class ValidateGrant extends AbstractOIDCTokenResponseAction {
      * @param cache The revocationCache to set.
      */
     public void setRevocationCache(@Nonnull final RevocationCache cache) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         revocationCache = Constraint.isNotNull(cache, "RevocationCache cannot be null");
     }
 
@@ -174,6 +173,7 @@ public class ValidateGrant extends AbstractOIDCTokenResponseAction {
      */
     public void setChainRevocationLifetimeLookupStrategy(
             @Nullable final Function<ProfileRequestContext,Duration> strategy) {
+        ifInitializedThrowUnmodifiabledComponentException();
         chainRevocationLifetimeLookupStrategy = Constraint.isNotNull(strategy, "Lookup strategy cannot be null");
     }
 
@@ -184,7 +184,7 @@ public class ValidateGrant extends AbstractOIDCTokenResponseAction {
      */
     public void setRefreshTokenChainLifetimeLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,Duration> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         refreshTokenChainLifetimeLookupStrategy =
                 Constraint.isNotNull(strategy, "Refresh token chain lifetime lookup strategy cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantType.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantType.java
index 75e50877..2e61a5e3 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantType.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantType.java
@@ -34,7 +34,7 @@ import com.nimbusds.oauth2.sdk.GrantType;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
 import net.shibboleth.oidc.profile.config.navigate.GrantTypesLookupFunction;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
 
 /**
  * An action that validates the grant type is registered to the requesting RP. This action is used in Token end point to
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidatePKCE.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidatePKCE.java
index 3d367654..ffde9bb1 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidatePKCE.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidatePKCE.java
@@ -35,13 +35,11 @@ import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultRequest
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.oidc.profile.config.logic.AllowPKCEPlainPredicate;
 import net.shibboleth.oidc.profile.config.logic.ForcePKCEPredicate;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.profile.action.ActionSupport;
 import org.opensaml.profile.action.EventIds;
 
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
 /**
  * Action performs PKCE (https://oauth.net/2/pkce/) validation. If authentication request contains code_challenge
  * parameter, token request when passing authorization code as grant must include code_verifier parameter. Profile
@@ -91,7 +89,7 @@ public class ValidatePKCE extends AbstractOIDCResponseAction {
      * @param condition condition to apply
      */
     public void setForcePKCECondition(@Nonnull final Predicate<ProfileRequestContext> condition) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         forcePKCECondition = Constraint.isNotNull(condition, "Condition cannot be null");
     }
@@ -102,7 +100,7 @@ public class ValidatePKCE extends AbstractOIDCResponseAction {
      * @param condition condition to apply
      */
     public void setAllowPKCEPlainCondition(@Nonnull final Predicate<ProfileRequestContext> condition) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         allowPKCEPlainCondition = Constraint.isNotNull(condition, "Condition cannot be null");
     }
@@ -113,7 +111,7 @@ public class ValidatePKCE extends AbstractOIDCResponseAction {
      * @param strategy strategy used to locate the Code Verifier value
      */
     public void setCodeVerifierLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         codeVerifierLookupStrategy = Constraint.isNotNull(strategy, "CodeVerifier lookup strategy cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateRegistrationAccessToken.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateRegistrationAccessToken.java
index df89ceae..737adf56 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateRegistrationAccessToken.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateRegistrationAccessToken.java
@@ -39,15 +39,14 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientRegistrationRequest;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistrationTokenClaimsContext;
 import net.shibboleth.idp.plugin.oidc.op.storage.RevocationCacheContexts;
 import net.shibboleth.idp.plugin.oidc.op.token.support.RegistrationClaimsSet;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
 
 /**
  * Action that validates registration access token is a valid one. Token is valid if it is successfully unwrapped,
@@ -98,7 +97,7 @@ public class ValidateRegistrationAccessToken extends AbstractOIDCRequestAction<O
      */
     public void setRelyingPartyContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, RelyingPartyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         relyingPartyContextLookupStrategy =
                 Constraint.isNotNull(strategy, "RelyingPartyContext lookup strategy cannot be null");
@@ -111,7 +110,7 @@ public class ValidateRegistrationAccessToken extends AbstractOIDCRequestAction<O
      */
     public void setRegistrationClaimsContextCreationStrategy(
             @Nonnull final Function<ProfileRequestContext,OIDCClientRegistrationTokenClaimsContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         registrationClaimsContextCreationStrategy = Constraint.isNotNull(strategy,
                 "OIDCClientRegistrationTokenClaimsContext creation strategy cannot be null");
@@ -123,7 +122,7 @@ public class ValidateRegistrationAccessToken extends AbstractOIDCRequestAction<O
      * @param sealer data sealer.
      */
     public void setSealer(@Nonnull final DataSealer sealer) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         dataSealer = Constraint.isNotNull(sealer, "Data sealer cannot be null");
     }
@@ -134,7 +133,7 @@ public class ValidateRegistrationAccessToken extends AbstractOIDCRequestAction<O
      * @param mapper object mapper
      */
     public void setObjectMapper(@Nonnull final ObjectMapper mapper) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         objectMapper = Constraint.isNotNull(mapper, "Object mapper cannot be null");
     }
@@ -145,7 +144,7 @@ public class ValidateRegistrationAccessToken extends AbstractOIDCRequestAction<O
      * @param cache The revocationCache to set.
      */
     public void setRevocationCache(@Nonnull final RevocationCache cache) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         revocationCache = Constraint.isNotNull(cache, "RevocationCache cannot be null");
     }
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateRegistrationRequestMetadata.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateRegistrationRequestMetadata.java
index 50169532..b84307d4 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateRegistrationRequestMetadata.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateRegistrationRequestMetadata.java
@@ -41,9 +41,8 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistratio
 import net.shibboleth.idp.profile.AbstractProfileAction;
 import net.shibboleth.oidc.metadata.policy.MetadataPolicy;
 import net.shibboleth.oidc.metadata.policy.impl.DefaultMetadataPolicyEnforcer;
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Validates the incoming dynamic client registration request against the metadata policy stored in the
@@ -88,7 +87,7 @@ public class ValidateRegistrationRequestMetadata extends AbstractProfileAction {
      */
     public void setRegistrationMetadataPolicyContextLookupStrategy(
             @Nonnull final Function<MessageContext, OIDCClientRegistrationMetadataPolicyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         registrationMetadataPolicyContextLookupStrategy = Constraint.isNotNull(strategy,
                 "Registration metadata policy context lookup strategy cannot be null");
@@ -101,7 +100,7 @@ public class ValidateRegistrationRequestMetadata extends AbstractProfileAction {
      */
     public void setMetadataPolicyEnforcer(
             @Nonnull final BiFunction<Object,MetadataPolicy,Pair<Object,Boolean>> function) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         metadataPolicyEnforcer = Constraint.isNotNull(function, "The metadata policy enforcer cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeConsentEnabledInTokenClaimsSetPredicate.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeConsentEnabledInTokenClaimsSetPredicate.java
index a58cc9cf..fda5e988 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeConsentEnabledInTokenClaimsSetPredicate.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeConsentEnabledInTokenClaimsSetPredicate.java
@@ -24,7 +24,7 @@ import org.opensaml.profile.context.ProfileRequestContext;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
-import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.profile.context.logic.AbstractRelyingPartyPredicate;
 
 /**
  * A predicate implementation that checks if attribute consent flag is enabled. The value is fetched from
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeResolutionSubjectLookupFunction.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeResolutionSubjectLookupFunction.java
index 0dc85d46..a4fe85ba 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeResolutionSubjectLookupFunction.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeResolutionSubjectLookupFunction.java
@@ -31,16 +31,16 @@ import net.shibboleth.idp.attribute.transcoding.AttributeTranscoder;
 import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.attribute.transcoding.TranscoderSupport;
 import net.shibboleth.idp.attribute.transcoding.TranscodingRule;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.oidc.attribute.transcoding.OIDCAttributeTranscoder;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.service.ReloadableService;
-import net.shibboleth.utilities.java.support.service.ServiceableComponent;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.service.ReloadableService;
+import net.shibboleth.shared.service.ServiceException;
+import net.shibboleth.shared.service.ServiceableComponent;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.messaging.context.navigate.ContextDataLookupFunction;
@@ -89,7 +89,7 @@ public class AttributeResolutionSubjectLookupFunction extends AbstractIdentifiab
      * @param registry registry service interface
      */
     public void setTranscoderRegistry(@Nonnull final ReloadableService<AttributeTranscoderRegistry> registry) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         transcoderRegistry = Constraint.isNotNull(registry, "AttributeTranscoderRegistry cannot be null");
     }
@@ -103,7 +103,7 @@ public class AttributeResolutionSubjectLookupFunction extends AbstractIdentifiab
      */
     public void setAttributeContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, AttributeContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         attributeContextLookupStrategy =
                 Constraint.isNotNull(strategy, "AttributeContext lookup strategy cannot be null");
@@ -129,13 +129,8 @@ public class AttributeResolutionSubjectLookupFunction extends AbstractIdentifiab
             return null;
         }
         
-        ServiceableComponent<AttributeTranscoderRegistry> component = null;
-        try {
-            component = transcoderRegistry.getServiceableComponent();
-            if (component == null) {
-                log.error("Attribute transoding service unavailable");
-                return null;
-            }
+        try (final ServiceableComponent<AttributeTranscoderRegistry> component = 
+                transcoderRegistry.getServiceableComponent()) {
             
             log.debug("Searching for 'sub' claim among encodeable attributes");
             
@@ -173,10 +168,8 @@ public class AttributeResolutionSubjectLookupFunction extends AbstractIdentifiab
                     }
                 }
             }
-        } finally {
-            if (null != component) {
-                component.unpinComponent();
-            }
+        } catch (final ServiceException e) {
+            log.error("Attribute transoding service unavailable");
         }
 
         log.warn("Unable to produce a viable 'sub' claim");
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/ClientIDFromOIDCMetadataContextLookupFunction.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/ClientIDFromOIDCMetadataContextLookupFunction.java
index ccf1beda..2cec4008 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/ClientIDFromOIDCMetadataContextLookupFunction.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/ClientIDFromOIDCMetadataContextLookupFunction.java
@@ -31,8 +31,7 @@ import com.nimbusds.jwt.JWTClaimsSet;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-
+import net.shibboleth.shared.logic.Constraint;
 /**
  * A function that returns client_id via client information stored in {@link OIDCMetadataContext}.
  * 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultAuthorizationRequestTypeValidationStrategy.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultAuthorizationRequestTypeValidationStrategy.java
index 20773bec..56fb5cbc 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultAuthorizationRequestTypeValidationStrategy.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultAuthorizationRequestTypeValidationStrategy.java
@@ -28,7 +28,7 @@ import com.google.common.base.Predicates;
 import com.nimbusds.oauth2.sdk.AuthorizationRequest;
 import com.nimbusds.openid.connect.sdk.AuthenticationRequest;
 
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Validation strategy for the inbound message. This predicate returns true if the message is an instance of
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultChainRevocationLifetimeLookupStrategy.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultChainRevocationLifetimeLookupStrategy.java
index 621babc3..cd0969df 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultChainRevocationLifetimeLookupStrategy.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultChainRevocationLifetimeLookupStrategy.java
@@ -27,7 +27,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import net.shibboleth.oidc.profile.config.navigate.RevocationLifetimeLookupFunction;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Default lookup function for fetching the chain revocation lifetime. This inherits the functionality of
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultMetadataPolicyCriteriaLookupFunction.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultMetadataPolicyCriteriaLookupFunction.java
index 49d1a8a3..4684f232 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultMetadataPolicyCriteriaLookupFunction.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultMetadataPolicyCriteriaLookupFunction.java
@@ -27,10 +27,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import net.shibboleth.idp.plugin.oidc.op.cli.IssueRegistrationAccessTokenArguments;
-import net.shibboleth.idp.profile.function.SpringFlowScopeLookupFunction;
+import net.shibboleth.idp.profile.context.navigate.SpringFlowScopeLookupFunction;
 import net.shibboleth.oidc.metadata.criterion.ResourceLocationCriterion;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
+import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.resolver.CriteriaSet;
 
 /**
  * A function returning a {@link CriteriaSet} which contains the metadata policy document location as {@link
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultMetadataPolicyMergingStrategy.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultMetadataPolicyMergingStrategy.java
index ca5faa4c..c104386f 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultMetadataPolicyMergingStrategy.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultMetadataPolicyMergingStrategy.java
@@ -32,8 +32,8 @@ import org.slf4j.LoggerFactory;
 
 import net.shibboleth.oidc.metadata.policy.MetadataPolicy;
 import net.shibboleth.oidc.metadata.policy.impl.MetadataPolicyHelper;
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 /**
  * <p>A function that merges two maps of metadata policies according to the rules specified in the OIDC federation spec
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultRootTokenIdentifierLookupStrategy.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultRootTokenIdentifierLookupStrategy.java
index 8416fd01..a7b7b814 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultRootTokenIdentifierLookupStrategy.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultRootTokenIdentifierLookupStrategy.java
@@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory;
 import com.nimbusds.jwt.JWTClaimsSet;
 
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * Default lookup function for fetching the root token identifier from the given claims set.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultSubjectTypeStrategy.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultSubjectTypeStrategy.java
index f53ac581..443a38f1 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultSubjectTypeStrategy.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultSubjectTypeStrategy.java
@@ -23,9 +23,9 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultOIDCMetadataContextLookupFunction;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultTokenRevocationLifetimeLookupStrategy.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultTokenRevocationLifetimeLookupStrategy.java
index 0d3b6ec0..3f452faa 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultTokenRevocationLifetimeLookupStrategy.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/DefaultTokenRevocationLifetimeLookupStrategy.java
@@ -30,7 +30,7 @@ import org.slf4j.LoggerFactory;
 
 import com.nimbusds.jwt.JWTClaimsSet;
 
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Default lookup function for fetching the token revocation lifetime from the given claims set. If an expiration
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/IssueIDTokenCondition.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/IssueIDTokenCondition.java
index 3a42f922..886769af 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/IssueIDTokenCondition.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/IssueIDTokenCondition.java
@@ -29,7 +29,7 @@ import com.nimbusds.oauth2.sdk.Scope;
 import com.nimbusds.openid.connect.sdk.OIDCScopeValue;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.ValidatedScopeLookupFunction;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Activation condition returning true if validated scope contains 'openid' scope.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/OfflineAccessScopeCondition.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/OfflineAccessScopeCondition.java
index 7377a3f6..331b5078 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/OfflineAccessScopeCondition.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/OfflineAccessScopeCondition.java
@@ -29,7 +29,7 @@ import com.nimbusds.oauth2.sdk.Scope;
 import com.nimbusds.openid.connect.sdk.OIDCScopeValue;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.ValidatedScopeLookupFunction;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * A predicate returning true if validated scope contains 'offline_access' value.
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/PublicSubjectActivationCondition.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/PublicSubjectActivationCondition.java
index 7f5c6902..791dd2c6 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/PublicSubjectActivationCondition.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/PublicSubjectActivationCondition.java
@@ -26,7 +26,7 @@ import javax.annotation.Nullable;
 import org.opensaml.profile.context.ProfileRequestContext;
 import com.nimbusds.openid.connect.sdk.SubjectType;
 
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /** Activation condition returning true if public subject is requested. */
 public class PublicSubjectActivationCondition implements Predicate<ProfileRequestContext> {
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/SubjectActivationCondition.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/SubjectActivationCondition.java
index 2b44a838..ab0df13e 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/SubjectActivationCondition.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/SubjectActivationCondition.java
@@ -41,7 +41,7 @@ public class SubjectActivationCondition implements Predicate<ProfileRequestConte
             return true;
         }
         final OIDCAuthenticationResponseContext oidcResponseContext =
-                outboundMessageCtx.getSubcontext(OIDCAuthenticationResponseContext.class, false);
+                outboundMessageCtx.getSubcontext(OIDCAuthenticationResponseContext.class);
         if (oidcResponseContext == null) {
             return true;
         }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/spring/relyingparty/metadata/impl/ProviderMetadataResolverServiceStrategy.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/spring/relyingparty/metadata/impl/ProviderMetadataResolverServiceStrategy.java
index 0ab97627..ec49e427 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/spring/relyingparty/metadata/impl/ProviderMetadataResolverServiceStrategy.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/profile/spring/relyingparty/metadata/impl/ProviderMetadataResolverServiceStrategy.java
@@ -18,17 +18,18 @@
 package net.shibboleth.idp.plugin.oidc.op.profile.spring.relyingparty.metadata.impl;
 
 import java.util.Collection;
-import java.util.function.Function;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.springframework.context.ApplicationContext;
 
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.ProviderMetadataResolver;
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.ServiceableProviderMetadataProvider;
-import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
-import net.shibboleth.utilities.java.support.service.ServiceException;
-import net.shibboleth.utilities.java.support.service.ServiceableComponent;
+import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
+import net.shibboleth.shared.logic.NonnullFunction;
+import net.shibboleth.shared.service.ServiceException;
+import net.shibboleth.shared.spring.service.AbstractServiceableComponent;
 
 /**
  * Strategy for summoning up a {@link ProviderMetadataResolver} from a populated {@link ApplicationContext}.
@@ -39,11 +40,11 @@ import net.shibboleth.utilities.java.support.service.ServiceableComponent;
  * </p>
  */
 public class ProviderMetadataResolverServiceStrategy extends AbstractIdentifiableInitializableComponent
-        implements Function<ApplicationContext, ServiceableComponent<ProviderMetadataResolver>> {
+        implements NonnullFunction<ApplicationContext, AbstractServiceableComponent<ProviderMetadataResolver>> {
 
     /** {@inheritDoc} */
-    @Nullable
-    public ServiceableComponent<ProviderMetadataResolver> apply(@Nullable final ApplicationContext appContext) {
+    @Nonnull
+    public AbstractServiceableComponent<ProviderMetadataResolver> apply(@Nullable final ApplicationContext appContext) {
         final Collection<ServiceableProviderMetadataProvider> resolvers =
                 appContext.getBeansOfType(ServiceableProviderMetadataProvider.class).values();
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/security/jwt/claims/impl/ChainExpiryClaimsValidator.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/security/jwt/claims/impl/ChainExpiryClaimsValidator.java
index e9a06dae..ad9087c0 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/security/jwt/claims/impl/ChainExpiryClaimsValidator.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/security/jwt/claims/impl/ChainExpiryClaimsValidator.java
@@ -34,9 +34,8 @@ import com.nimbusds.jwt.JWTClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.RefreshTokenClaimsSet;
 import net.shibboleth.oidc.jwt.claims.AbstractClaimsValidator;
 import net.shibboleth.oidc.jwt.claims.JWTValidationException;
-import net.shibboleth.utilities.java.support.annotation.constraint.ThreadSafeAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.annotation.constraint.ThreadSafeAfterInit;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Iff a chain expiration time (c_exp) claim is present, verifies that it is ahead of the current time, else the JWT
@@ -65,7 +64,7 @@ public class ChainExpiryClaimsValidator extends AbstractClaimsValidator {
      * @param skew clock skew to set
      */
     public void setClockSkew(@Nonnull final Duration skew) {  
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         
         clockSkew = Constraint.isNotNull(skew, "Clock skew cannot be null");
     }
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/security/jwt/claims/impl/RootTokenIdRevocationValidator.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/security/jwt/claims/impl/RootTokenIdRevocationValidator.java
index 7d53e3b4..66a6ad8c 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/security/jwt/claims/impl/RootTokenIdRevocationValidator.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/security/jwt/claims/impl/RootTokenIdRevocationValidator.java
@@ -28,12 +28,11 @@ import com.nimbusds.jwt.JWTClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.oidc.jwt.claims.AbstractClaimsValidator;
 import net.shibboleth.oidc.jwt.claims.JWTValidationException;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * Verifies the root identifier ({@link TokenClaimsSet#KEY_ROOT_JTI} from the JWT against revocation via configurable
@@ -53,7 +52,7 @@ public class RootTokenIdRevocationValidator extends AbstractClaimsValidator {
      * @param cache revocation cache to set
      */
     public void setRevocationCache(@Nonnull final RevocationCache cache) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         revocationCache = Constraint.isNotNull(cache, "RevocationCache cannot be null");
     }
     
@@ -63,7 +62,7 @@ public class RootTokenIdRevocationValidator extends AbstractClaimsValidator {
      * @param ctx context value
      */
     public void setContext(@Nonnull @NotEmpty final String ctx) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         context = Constraint.isNotNull(StringSupport.trimOrNull(ctx), "Context cannot be null or empty");
     }
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/servlet/RegisterFilterServletContextInitializer.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/servlet/RegisterFilterServletContextInitializer.java
index 8368d5cd..e70d8d7e 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/servlet/RegisterFilterServletContextInitializer.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/servlet/RegisterFilterServletContextInitializer.java
@@ -20,16 +20,16 @@ package net.shibboleth.idp.plugin.oidc.op.servlet;
 import java.util.Set;
 
 import javax.annotation.Nonnull;
-import javax.servlet.FilterRegistration;
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.filter.DelegatingFilterProxy;
 
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import jakarta.servlet.FilterRegistration;
+import jakarta.servlet.ServletContainerInitializer;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import net.shibboleth.shared.primitive.StringSupport;
 
 /**
  * A {@link ServletContainerInitializer} implementation that registers dynamic response header filter for enabling
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/AddUserInfoShell.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/AddUserInfoShell.java
index 5a0fede3..3c94c0b4 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/AddUserInfoShell.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/AddUserInfoShell.java
@@ -26,11 +26,10 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationRes
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.DefaultUserInfoSigningAlgLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.profile.impl.AbstractOIDCResponseAction;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
 
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.profile.action.ActionSupport;
@@ -89,7 +88,7 @@ public class AddUserInfoShell extends AbstractOIDCResponseAction {
      */
     public void
             setUserInfoSigningAlgLookupStrategy(@Nonnull final Function<ProfileRequestContext, JWSAlgorithm> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         userInfoSigAlgStrategy =
                 Constraint.isNotNull(strategy, "User Info Signing Algorithm lookup strategy cannot be null");
@@ -104,7 +103,7 @@ public class AddUserInfoShell extends AbstractOIDCResponseAction {
      */
     public void setRelyingPartyContextLookupStrategy(
             @Nonnull final Function<ProfileRequestContext, RelyingPartyContext> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
 
         relyingPartyContextLookupStrategy =
                 Constraint.isNotNull(strategy, "RelyingPartyContext lookup strategy cannot be null");
@@ -116,7 +115,7 @@ public class AddUserInfoShell extends AbstractOIDCResponseAction {
      * @param strategy lookup strategy
      */
     public void setIssuerLookupStrategy(@Nonnull final Function<ProfileRequestContext, String> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         issuerLookupStrategy = Constraint.isNotNull(strategy, "IssuerLookupStrategy lookup strategy cannot be null");
     }
 
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ParseAccessToken.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ParseAccessToken.java
index b39f85d6..57b9788b 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ParseAccessToken.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ParseAccessToken.java
@@ -42,15 +42,14 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationRes
 import net.shibboleth.idp.plugin.oidc.op.token.support.AccessTokenClaimsSet;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
 import net.shibboleth.oidc.security.impl.JWTSignatureValidationUtil;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.resolver.CriteriaSet;
+import net.shibboleth.shared.resolver.ResolverException;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
 
 /**
  * Action that parses an access token and initially populates the claims for later
@@ -88,7 +87,7 @@ public class ParseAccessToken extends AbstractOIDCUserInfoValidationResponseActi
      * @param sealer sealer to use
      */
     public void setDataSealer(@Nonnull final DataSealer sealer) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         dataSealer = Constraint.isNotNull(sealer, "DataSealer cannot be null");
     }
     
@@ -98,7 +97,7 @@ public class ParseAccessToken extends AbstractOIDCUserInfoValidationResponseActi
      * @param resolver signing key resolver
      */
     public void setCredentialResolver(@Nullable final CredentialResolver resolver) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         credentialResolver = resolver;
     }
     
diff --git a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ValidateAccessToken.java b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ValidateAccessToken.java
index b7a6d6fa..42c5583d 100644
--- a/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ValidateAccessToken.java
+++ b/idp-oidc-extension-impl/src/main/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ValidateAccessToken.java
@@ -36,8 +36,7 @@ import net.shibboleth.oidc.jwt.claims.ClaimsValidator;
 import net.shibboleth.oidc.jwt.claims.JWTValidationException;
 import net.shibboleth.oidc.profile.config.navigate.IssuedClaimsValidatorLookupFunction;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.logic.Constraint;
+import net.shibboleth.shared.logic.Constraint;
 
 /**
  * Action that validates the claims pulled from an access token as usable for access
@@ -73,7 +72,7 @@ public class ValidateAccessToken extends AbstractOIDCUserInfoValidationResponseA
      */
     public void setClaimsValidatorLookupStrategy(
             @Nonnull final Function<ProfileRequestContext,ClaimsValidator> strategy) {
-        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+        ifInitializedThrowUnmodifiabledComponentException();
         claimsValidatorLookupStrategy = Constraint.isNotNull(strategy, "Lookup strategy cannot be null");
     }
         
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
index 3f2f0135..9f1b7760 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net.shibboleth.idp/postconfig.xml
@@ -55,7 +55,7 @@
     
     <!-- Sealer used to protect confidentiality and integrity of authorize code, access token and refresh token. -->
     <bean id="shibboleth.oidc.TokenSealer" lazy-init="true"
-        class="net.shibboleth.utilities.java.support.security.DataSealer"
+        class="net.shibboleth.shared.security.DataSealer"
         p:encoder-ref="base64Codec"
         p:decoder-ref="base64Codec"
         p:nodePrefix="%{idp.oidc.nodePrefix:}"
@@ -67,7 +67,7 @@
 
     <!-- Revocation cache. -->
     
-    <bean id="shibboleth.oidc.RevocationCache" class="org.opensaml.storage.RevocationCache"
+    <bean id="shibboleth.oidc.RevocationCache" class="org.opensaml.storage.impl.StorageServiceRevocationCache"
         p:entryExpiration="#{'%{idp.oidc.revocationCache.authorizeCode.lifetime:PT6H}'}"
         p:storage-ref="#{'%{idp.oidc.revocationCache.StorageService:shibboleth.StorageService}'.trim()}"
         p:strict="true" />
@@ -75,7 +75,7 @@
     <!-- OIDC client information resolver service beans. -->
 
     <bean id="shibboleth.ClientInformationResolverService"
-        class="net.shibboleth.ext.spring.service.ReloadableSpringService"
+        class="net.shibboleth.shared.spring.service.ReloadableSpringService"
         depends-on="shibboleth.AttributeResolverService"
         p:serviceConfigurations-ref="ExtendedClientInformationResolverResources"
         p:failFast="%{idp.service.clientinfo.failFast:%{idp.service.failFast:false}}"
@@ -92,7 +92,7 @@
         <value>conditional:%{idp.home}/conf/oidc-clientinfo-resolvers.xml</value>
     </util:list>
     <!-- Auto-append system config file to resource set. -->
-    <bean id ="ExtendedClientInformationResolverResources" class="net.shibboleth.ext.spring.factory.CombiningListFactoryBean"
+    <bean id ="ExtendedClientInformationResolverResources" class="net.shibboleth.shared.spring.factory.CombiningListFactoryBean"
             p:firstList="#{getObject('%{idp.service.clientinfo.resources:shibboleth.ClientInformationResolverResources}'.trim()) ?:
                 getObject('shibboleth.DefaultClientInformationResolverResources')}">
         <property name="secondList">
@@ -313,7 +313,7 @@
         alias="shibboleth.oidc.ResponseHeaderFilter" />
 
     <bean id="shibboleth.oidc.EmptyResponseHeaderFilter"
-        class="net.shibboleth.utilities.java.support.net.DynamicResponseHeaderFilter" />
+        class="net.shibboleth.shared.spring.servlet.impl.DynamicResponseHeaderFilter" />
 
     <bean id="cacheFactory" class="net.shibboleth.oidc.metadata.cache.impl.MetadataCacheBuilder$Builder"/>
 
@@ -677,13 +677,4 @@
         </property>
     </bean>
 
-    <!-- 
-        Internal versions of the Http Request/Reponse proxies to easy the transition to IdP 5.0.
-        Will be removed in IdP 5.0. 
-    -->
-    <bean id="shibboleth.oidc.internal.HttpServletRequest"
-        class="net.shibboleth.utilities.java.support.net.ThreadLocalHttpServletRequestProxy" lazy-init="true" />
-    <bean id="shibboleth.oidc.internal.HttpServletResponse"
-        class="net.shibboleth.utilities.java.support.net.ThreadLocalHttpServletResponseProxy" lazy-init="true" />
-
 </beans>
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/issue-registration-access-token/issue-registration-access-token-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/issue-registration-access-token/issue-registration-access-token-beans.xml
index bf2ecae0..80c18710 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/issue-registration-access-token/issue-registration-access-token-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/admin/oidc/issue-registration-access-token/issue-registration-access-token-beans.xml
@@ -72,7 +72,7 @@
 
     <bean id="shibboleth.oidc.admin.MetadataPolicyIdentifierStrategy" parent="shibboleth.Functions.Compose">
         <constructor-arg name="g">
-            <bean class="net.shibboleth.idp.profile.function.SpringFlowScopeLookupFunction"
+            <bean class="net.shibboleth.idp.profile.context.navigate.SpringFlowScopeLookupFunction"
                 c:_0="#{T(net.shibboleth.idp.plugin.oidc.op.cli.IssueRegistrationAccessTokenArguments).URL_PARAM_POLICY_LOCATION}" />
         </constructor-arg>
         <constructor-arg name="f">
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/OAuth2Client/OAuth2Client-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/OAuth2Client/OAuth2Client-beans.xml
index 6c4853e6..19330f2f 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/OAuth2Client/OAuth2Client-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/authn/OAuth2Client/OAuth2Client-beans.xml
@@ -15,7 +15,7 @@
     <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
         p:placeholderPrefix="%{" p:placeholderSuffix="}" />
 
-    <bean class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />
+    <bean class="net.shibboleth.shared.spring.config.IdentifiableBeanPostProcessor" />
     <bean class="net.shibboleth.idp.profile.impl.ProfileActionBeanPostProcessor" />
 
     <!-- Default message map. -->
@@ -38,9 +38,8 @@
             scope="prototype"
             c:strategy-ref="shibboleth.MessageContextLookup.Inbound">
         <property name="configurationLookupStrategy">
-            <bean class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureValidationConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
-        </property>
+            <bean class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureValidationConfigurationLookupFunction" />
+       </property>
         <property name="signatureValidationParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.BasicSignatureValidationParametersResolver" />
         </property>
@@ -70,14 +69,14 @@
                             scope="prototype" p:defaultAlgorithmValue="">
                             <property name="jwtTokenLookupStrategy">
                                 <bean
-                                    class="net.shibboleth.idp.profile.context.navigate.SpringExpressionContextLookupFunction"
+                                    class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:outputType="#{T(com.nimbusds.jwt.SignedJWT)}"
                                     c:expression="#input.getParent().getSubcontext(T(net.shibboleth.idp.authn.context.AuthenticationContext)).getSubcontext(T(net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext)).getClientAuthentication().getClientAssertion()" />
                             </property>
                             <property name="clientInformationLookupStrategy">
                                 <bean
-                                    class="net.shibboleth.idp.profile.context.navigate.SpringExpressionContextLookupFunction"
+                                    class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:expression="#input.getSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
                             </property>
@@ -91,14 +90,14 @@
                             scope="prototype">
                             <property name="jwtTokenLookupStrategy">
                                 <bean
-                                    class="net.shibboleth.idp.profile.context.navigate.SpringExpressionContextLookupFunction"
+                                    class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:outputType="#{T(com.nimbusds.jwt.SignedJWT)}"
                                     c:expression="#input.getParent().getSubcontext(T(net.shibboleth.idp.authn.context.AuthenticationContext)).getSubcontext(T(net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext)).getClientAuthentication().getClientAssertion()" />
                             </property>
                             <property name="clientInformationLookupStrategy">
                                 <bean
-                                    class="net.shibboleth.idp.profile.context.navigate.SpringExpressionContextLookupFunction"
+                                    class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:expression="#input.getSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
                             </property>
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oauth2/introspection/introspection-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oauth2/introspection/introspection-beans.xml
index dac894d0..05a118a0 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oauth2/introspection/introspection-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oauth2/introspection/introspection-beans.xml
@@ -31,9 +31,9 @@
     <bean id="ProcessTokenForIntrospection"
         class="net.shibboleth.idp.plugin.oidc.op.oauth2.profile.impl.ProcessTokenForIntrospection" scope="prototype"
         p:dataSealer-ref="#{'%{idp.oidc.tokenSealer:shibboleth.oidc.TokenSealer}'.trim()}"
-        p:credentialResolver-ref="SigningCredentialsResolver" />
-        
-    <bean id="SigningCredentialsResolver" class="net.shibboleth.idp.relyingparty.impl.SigningCredentialsResolver" 
+        p:credentialResolver-ref="RelyingPartyCredentialResolver"/>
+
+    <bean id="RelyingPartyCredentialResolver" class="net.shibboleth.profile.relyingparty.RelyingPartyCredentialResolver" 
         c:_0-ref="shibboleth.RelyingPartyResolverService" />
 
     <bean id="FormOutboundMessage"
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oauth2/revocation/revocation-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oauth2/revocation/revocation-beans.xml
index 86257819..f61bc55f 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oauth2/revocation/revocation-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oauth2/revocation/revocation-beans.xml
@@ -31,9 +31,9 @@
     <bean id="ProcessTokenForRevocation"
         class="net.shibboleth.idp.plugin.oidc.op.oauth2.profile.impl.ProcessTokenForRevocation" scope="prototype"
         p:dataSealer-ref="#{'%{idp.oidc.tokenSealer:shibboleth.oidc.TokenSealer}'.trim()}"
-        p:credentialResolver-ref="SigningCredentialsResolver" />
+        p:credentialResolver-ref="RelyingPartyCredentialResolver"/>
 
-    <bean id="SigningCredentialsResolver" class="net.shibboleth.idp.relyingparty.impl.SigningCredentialsResolver" 
+    <bean id="RelyingPartyCredentialResolver" class="net.shibboleth.profile.relyingparty.RelyingPartyCredentialResolver" 
         c:_0-ref="shibboleth.RelyingPartyResolverService" />
 
     <bean id="RevokeToken" class="net.shibboleth.idp.plugin.oidc.op.oauth2.profile.impl.RevokeToken" scope="prototype"
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract/oidc-abstract-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract/oidc-abstract-beans.xml
index 3827b946..993936ca 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract/oidc-abstract-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/abstract/oidc-abstract-beans.xml
@@ -10,7 +10,7 @@
     <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer" p:placeholderPrefix="%{"
         p:placeholderSuffix="}" />
 
-    <bean class="net.shibboleth.ext.spring.config.IdentifiableBeanPostProcessor" />
+    <bean class="net.shibboleth.shared.spring.config.IdentifiableBeanPostProcessor" />
     <bean class="net.shibboleth.idp.profile.impl.ProfileActionBeanPostProcessor" />
 
     <bean id="InitializeProfileRequestContext"
@@ -22,7 +22,7 @@
     
     <bean id="SelectRelyingPartyConfiguration"
         class="net.shibboleth.idp.profile.impl.SelectRelyingPartyConfiguration" scope="prototype"
-        p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+        p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyResolverService" />
 
     <bean id="SelectProfileConfiguration" class="net.shibboleth.idp.profile.impl.SelectProfileConfiguration"
         scope="prototype" />
@@ -38,7 +38,6 @@
 
     <bean id="ResolveAttributes" class="net.shibboleth.idp.profile.impl.ResolveAttributes" scope="prototype"
         c:resolverService-ref="shibboleth.AttributeResolverService"
-        p:transcoderRegistry-ref="shibboleth.AttributeRegistryService"
         p:maskFailures="%{idp.service.attribute.resolver.maskFailures:true}" />
 
     <bean id="FilterAttributes" class="net.shibboleth.idp.profile.impl.FilterAttributes" scope="prototype"
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml
index b3096cf6..2393baaf 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/authorize/authorize-beans.xml
@@ -88,8 +88,7 @@
         p:decryptionParametersResolver-ref="JWTDecryptionParametersResolver" />
 
     <bean id="DecryptionConfigurationLookup" lazy-init="true"
-        class="net.shibboleth.oidc.profile.config.navigate.JWTDecryptionConfigurationLookupFunction"
-        p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+        class="net.shibboleth.oidc.profile.config.navigate.JWTDecryptionConfigurationLookupFunction" />
 
     <bean id="JWTDecryptionParametersResolver"
         class="net.shibboleth.oidc.security.jose.impl.DefaultDecryptionParametersResolver" />
@@ -99,8 +98,7 @@
             scope="prototype"
             c:strategy-ref="shibboleth.MessageContextLookup.Inbound">
         <property name="configurationLookupStrategy">
-            <bean class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureValidationConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+            <bean class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureValidationConfigurationLookupFunction" />
         </property>
         <property name="signatureValidationParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.BasicSignatureValidationParametersResolver" />
@@ -120,14 +118,14 @@
         class="net.shibboleth.oidc.security.impl.CheckClientJWTDecryptionConfiguration" scope="prototype">
         <property name="jwtTokenLookupStrategy">
             <bean
-                class="net.shibboleth.idp.profile.context.navigate.SpringExpressionContextLookupFunction"
+                class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                 c:_0="#{ T(org.opensaml.profile.context.ProfileRequestContext) }"
                 c:outputType="#{T(com.nimbusds.jwt.JWT)}"
                 c:expression="#input.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
         </property>
         <property name="clientInformationLookupStrategy">
             <bean
-                class="net.shibboleth.idp.profile.context.navigate.SpringExpressionContextLookupFunction"
+                class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                 c:_0="#{ T(org.opensaml.profile.context.ProfileRequestContext) }"
                 c:expression="#input.getInboundMessageContext().getSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
         </property>
@@ -162,7 +160,7 @@
 
     <bean id="DecryptRequestObject" class="net.shibboleth.oidc.security.impl.DecryptJWE" scope="prototype">
         <property name="jwtTokenLookupStrategy">
-            <bean class="net.shibboleth.idp.profile.context.navigate.SpringExpressionContextLookupFunction"
+            <bean class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                 c:_0="#{ T(org.opensaml.profile.context.ProfileRequestContext) }"
                 c:outputType="#{T(com.nimbusds.jwt.EncryptedJWT)}"
                 c:expression="#input.getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
@@ -194,14 +192,14 @@
                             scope="prototype" p:defaultAlgorithmValue="">
                             <property name="jwtTokenLookupStrategy">
                                 <bean
-                                    class="net.shibboleth.idp.profile.context.navigate.SpringExpressionContextLookupFunction"
+                                    class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:outputType="#{T(com.nimbusds.jwt.SignedJWT)}"
                                     c:expression="#input.getParent().getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
                             </property>
                             <property name="clientInformationLookupStrategy">
                                 <bean
-                                    class="net.shibboleth.idp.profile.context.navigate.SpringExpressionContextLookupFunction"
+                                    class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:expression="#input.getSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
                             </property>
@@ -215,14 +213,14 @@
                             scope="prototype">
                             <property name="jwtTokenLookupStrategy">
                                 <bean
-                                    class="net.shibboleth.idp.profile.context.navigate.SpringExpressionContextLookupFunction"
+                                    class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:outputType="#{T(com.nimbusds.jwt.SignedJWT)}"
                                     c:expression="#input.getParent().getOutboundMessageContext().getSubcontext(T(net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext)).getRequestObject()" />
                             </property>
                             <property name="clientInformationLookupStrategy">
                                 <bean
-                                    class="net.shibboleth.idp.profile.context.navigate.SpringExpressionContextLookupFunction"
+                                    class="net.shibboleth.profile.context.navigate.SpringExpressionContextLookupFunction"
                                     c:_0="#{ T(org.opensaml.messaging.context.MessageContext) }"
                                     c:expression="#input.getSubcontext(T(net.shibboleth.oidc.metadata.context.OIDCMetadataContext)).getClientInformation()" />
                             </property>
@@ -438,7 +436,7 @@
     <bean id="SelectAudienceRelyingPartyConfiguration"
         class="net.shibboleth.idp.profile.impl.SelectRelyingPartyConfiguration" scope="prototype"
         p:relyingPartyContextLookupStrategy-ref="AudienceRelyingPartyCreationStrategy"
-        p:relyingPartyConfigurationResolver-ref="shibboleth.CriteriaRelyingPartyConfigurationResolver" />
+        p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyResolverService" />
 
     <bean id="SelectAudienceProfileConfiguration"
         class="net.shibboleth.idp.profile.impl.SelectProfileConfiguration" scope="prototype"
@@ -447,7 +445,6 @@
 
     <bean id="ResolveAttributesForAudience" class="net.shibboleth.idp.profile.impl.ResolveAttributes" scope="prototype"
         c:resolverService-ref="shibboleth.AttributeResolverService"
-        p:transcoderRegistry-ref="shibboleth.AttributeRegistryService"
         p:maskFailures="%{idp.service.attribute.resolver.maskFailures:true}"
         p:issuerLookupStrategy-ref="AudienceIssuerLookupFunction" />
 
@@ -459,7 +456,7 @@
         p:proxiedRequesterMetadataContextLookupStrategy-ref="LookupOutboundSAMLEntityContext" />
 
     <bean id="AudienceIssuerLookupFunction"
-        class="net.shibboleth.idp.profile.context.navigate.ResponderIdLookupFunction"
+        class="net.shibboleth.profile.context.navigate.IssuerLookupFunction"
         p:relyingPartyContextLookupStrategy-ref="AudienceRelyingPartyCreationStrategy" />
 
     <bean id="AudienceProxiedRequesterLookupFunction" parent="shibboleth.Functions.Compose">
@@ -515,7 +512,7 @@
         class="net.shibboleth.idp.plugin.oidc.op.oauth2.profile.impl.SetAuthorizationCodeToResponseContext" scope="prototype"
         p:dataSealer-ref="#{'%{idp.oidc.tokenSealer:shibboleth.oidc.TokenSealer}'.trim()}">
         <property name="identifierGeneratorLookupStrategy">
-            <bean class="net.shibboleth.idp.profile.config.navigate.IdentifierGenerationStrategyLookupFunction"
+            <bean class="net.shibboleth.profile.config.navigate.IdentifierGenerationStrategyLookupFunction"
                 p:defaultIdentifierGenerationStrategy-ref="shibboleth.DefaultIdentifierGenerationStrategy" />
         </property>
         <property name="activationCondition">
@@ -530,8 +527,7 @@
         c:strategy-ref="shibboleth.MessageContextLookup.Outbound">
         <property name="configurationLookupStrategy">
             <bean lazy-init="true"
-                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction" />
         </property>
         <property name="signatureSigningParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.BasicSignatureSigningParametersResolver" />
@@ -583,8 +579,7 @@
         c:strategy-ref="shibboleth.MessageContextLookup.Outbound">
         <property name="configurationLookupStrategy">
             <bean lazy-init="true"
-                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction" />
         </property>
         <property name="signatureSigningParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.ClientInformationSignatureSigningParametersResolver">
@@ -609,8 +604,7 @@
         </property>
         <property name="configurationLookupStrategy">
             <bean lazy-init="true"
-                class="net.shibboleth.oidc.profile.config.navigate.JWTEncryptionConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+                class="net.shibboleth.oidc.profile.config.navigate.JWTEncryptionConfigurationLookupFunction" />
         </property>
         <property name="encryptionParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.DefaultEncryptionParametersResolver">
@@ -729,8 +723,7 @@
         c:strategy-ref="shibboleth.MessageContextLookup.Inbound" p:noResultIsError="true">
         <property name="configurationLookupStrategy">
             <bean lazy-init="true"
-                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction" />
         </property>
         <property name="signatureSigningParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.ClientInformationSignatureSigningParametersResolver">
@@ -753,8 +746,7 @@
         </property>
         <property name="configurationLookupStrategy">
             <bean lazy-init="true"
-                class="net.shibboleth.oidc.profile.config.navigate.JWTEncryptionConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+                class="net.shibboleth.oidc.profile.config.navigate.JWTEncryptionConfigurationLookupFunction" />
         </property>
         <property name="encryptionParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.DefaultEncryptionParametersResolver">
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/metadata-lookup/metadata-lookup-flow.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/metadata-lookup/metadata-lookup-flow.xml
index 8bc93f80..eccbb86d 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/metadata-lookup/metadata-lookup-flow.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/metadata-lookup/metadata-lookup-flow.xml
@@ -16,7 +16,7 @@
     </action-state>
 
     <decision-state id="CheckIfFoundFromClientInformationService">
-        <if test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.idp.profile.context.RelyingPartyContext)).isVerified()"
+        <if test="opensamlProfileRequestContext.getSubcontext(T(net.shibboleth.profile.context.RelyingPartyContext)).isVerified()"
             then="SelectConfiguration" else="LookupFromSAMLMetadataService" />
     </decision-state>
 
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/token/token-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/token/token-beans.xml
index f92af65d..9787483f 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/token/token-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/token/token-beans.xml
@@ -27,10 +27,10 @@
         class="net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.TokenRequestClientIDLookupFunction" />
 
     <bean id="ResolveAttributesForClientPredicate"
-        class="net.shibboleth.idp.profile.config.logic.ResolveAttributesPredicate" />
+        class="net.shibboleth.profile.config.logic.ResolveAttributesPredicate" />
 
     <bean id="ResolveAttributesForAudiencePredicate"
-        class="net.shibboleth.idp.profile.config.logic.ResolveAttributesPredicate"
+        class="net.shibboleth.profile.config.logic.ResolveAttributesPredicate"
         p:relyingPartyContextLookupStrategy-ref="AudienceRelyingPartyCreationStrategy" />
 
     <bean id="InitializeOutboundMessageContext"
@@ -288,7 +288,7 @@
     <bean id="SelectAudienceRelyingPartyConfiguration"
         class="net.shibboleth.idp.profile.impl.SelectRelyingPartyConfiguration" scope="prototype"
         p:relyingPartyContextLookupStrategy-ref="AudienceRelyingPartyCreationStrategy"
-        p:relyingPartyConfigurationResolver-ref="shibboleth.CriteriaRelyingPartyConfigurationResolver" />
+        p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyResolverService" />
 
     <bean id="SelectAudienceProfileConfiguration"
         class="net.shibboleth.idp.profile.impl.SelectProfileConfiguration" scope="prototype"
@@ -297,7 +297,6 @@
 
     <bean id="ResolveAttributesForAudience" class="net.shibboleth.idp.profile.impl.ResolveAttributes" scope="prototype"
         c:resolverService-ref="shibboleth.AttributeResolverService"
-        p:transcoderRegistry-ref="shibboleth.AttributeRegistryService"
         p:maskFailures="%{idp.service.attribute.resolver.maskFailures:true}"
         p:issuerLookupStrategy-ref="AudienceIssuerLookupFunction" />
 
@@ -309,7 +308,7 @@
         p:proxiedRequesterMetadataContextLookupStrategy-ref="LookupOutboundSAMLEntityContext" />
 
     <bean id="AudienceIssuerLookupFunction"
-        class="net.shibboleth.idp.profile.context.navigate.ResponderIdLookupFunction"
+        class="net.shibboleth.profile.context.navigate.IssuerLookupFunction"
         p:relyingPartyContextLookupStrategy-ref="AudienceRelyingPartyCreationStrategy" />
 
     <bean id="AudienceProxiedRequesterLookupFunction" parent="shibboleth.Functions.Compose">
@@ -336,8 +335,7 @@
             c:strategy-ref="shibboleth.MessageContextLookup.Inbound">
         <property name="configurationLookupStrategy">
             <bean lazy-init="true"
-                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction" />
         </property>
         <property name="signatureSigningParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.ClientInformationSignatureSigningParametersResolver">
@@ -442,8 +440,7 @@
             c:strategy-ref="shibboleth.MessageContextLookup.Inbound">
         <property name="configurationLookupStrategy">
             <bean lazy-init="true"
-                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction" />
         </property>
         <property name="signatureSigningParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.ClientInformationSignatureSigningParametersResolver">
@@ -471,8 +468,7 @@
         </property>
         <property name="configurationLookupStrategy">
             <bean lazy-init="true"
-                class="net.shibboleth.oidc.profile.config.navigate.JWTEncryptionConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+                class="net.shibboleth.oidc.profile.config.navigate.JWTEncryptionConfigurationLookupFunction" />
         </property>
         <property name="encryptionParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.DefaultEncryptionParametersResolver">
@@ -592,8 +588,7 @@
         c:strategy-ref="shibboleth.MessageContextLookup.Outbound">
         <property name="configurationLookupStrategy">
             <bean lazy-init="true"
-                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver"/>
+                class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction" />
         </property>
         <property name="signatureSigningParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.ClientInformationSignatureSigningParametersResolver">
@@ -629,8 +624,7 @@
         </property>
         <property name="configurationLookupStrategy">
             <bean lazy-init="true"
-                class="net.shibboleth.oidc.profile.config.navigate.JWTEncryptionConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+                class="net.shibboleth.oidc.profile.config.navigate.JWTEncryptionConfigurationLookupFunction" />
         </property>
         <property name="encryptionParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.DefaultEncryptionParametersResolver">
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/userinfo/userinfo-beans.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/userinfo/userinfo-beans.xml
index bf5c1774..2e9e1890 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/userinfo/userinfo-beans.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/flows/oidc/userinfo/userinfo-beans.xml
@@ -13,7 +13,7 @@
     <bean id="shibboleth.oidc.loggingId" class="java.lang.String" c:_0="%{idp.service.logging.oidcui:OIDC.UserInfo}" />
 
     <bean id="ResolveAttributesPredicate"
-        class="net.shibboleth.idp.profile.config.logic.ResolveAttributesPredicate" />
+        class="net.shibboleth.profile.config.logic.ResolveAttributesPredicate" />
 
     <bean id="DecodeMessage" class="org.opensaml.profile.action.impl.DecodeMessage" scope="prototype">
         <constructor-arg>
@@ -34,9 +34,9 @@
     <bean id="ParseAccessToken"
         class="net.shibboleth.idp.plugin.oidc.op.userinfo.profile.impl.ParseAccessToken" scope="prototype"
         p:dataSealer-ref="#{'%{idp.oidc.tokenSealer:shibboleth.oidc.TokenSealer}'.trim()}"
-        p:credentialResolver-ref="SigningCredentialsResolver" />
+        p:credentialResolver-ref="RelyingPartyCredentialResolver"/>
 
-    <bean id="SigningCredentialsResolver" class="net.shibboleth.idp.relyingparty.impl.SigningCredentialsResolver" 
+    <bean id="RelyingPartyCredentialResolver" class="net.shibboleth.profile.relyingparty.RelyingPartyCredentialResolver" 
         c:_0-ref="shibboleth.RelyingPartyResolverService" />
 
     <bean id="ValidateAccessToken"
@@ -89,9 +89,7 @@
     </bean>
 
     <bean id="JWTSignatureSigningConfigurationLookupFunction" lazy-init="true"
-        class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction"
-        p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
-        
+        class="net.shibboleth.oidc.profile.config.navigate.JWTSignatureSigningConfigurationLookupFunction" />
 
     <bean id="shibboleth.oidc.UserInfoSignatureSigningParametersResolver"
         class="net.shibboleth.oidc.security.jose.impl.ClientInformationSignatureSigningParametersResolver">
@@ -112,8 +110,7 @@
         </property>
         <property name="configurationLookupStrategy">
             <bean lazy-init="true"
-                class="net.shibboleth.oidc.profile.config.navigate.JWTEncryptionConfigurationLookupFunction"
-                p:relyingPartyConfigurationResolver-ref="shibboleth.RelyingPartyConfigurationResolver" />
+                class="net.shibboleth.oidc.profile.config.navigate.JWTEncryptionConfigurationLookupFunction" />
         </property>
         <property name="encryptionParametersResolver">
             <bean class="net.shibboleth.oidc.security.jose.impl.DefaultEncryptionParametersResolver">
diff --git a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/service/relying-party/postconfig.xml b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/service/relying-party/postconfig.xml
index 6d54ed1c..60eb1ac2 100644
--- a/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/service/relying-party/postconfig.xml
+++ b/idp-oidc-extension-impl/src/main/resources/META-INF/net/shibboleth/idp/service/relying-party/postconfig.xml
@@ -74,7 +74,7 @@
     <bean id="AbstractMDDrivenOIDCProfile" parent="AbstractMDDrivenProfile" abstract="true">
         <property name="securityConfigurationLookupStrategy">
             <bean parent="shibboleth.MDDrivenBeanProperty" p:propertyName="securityConfiguration"
-                p:propertyType="#{T(net.shibboleth.idp.profile.config.SecurityConfiguration)}"
+                p:propertyType="#{T(org.opensaml.security.config.SecurityConfiguration)}"
                 p:defaultValue-ref="%{idp.security.oidc.config:shibboleth.oidc.DefaultSecurityConfiguration}" />
         </property>
     </bean>
@@ -86,7 +86,7 @@
                 p:defaultValue-ref="DefaultJWTClaimsValidator" />
         </property>
         <property name="forceAuthnPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="forceAuthn" />
                 </constructor-arg>
@@ -116,7 +116,7 @@
         
     <bean id="AbstractMDDrivenOIDCFlowAwareProfile" parent="AbstractMDDrivenOAuthClientAuthenticatableProfile" abstract="true">
         <property name="authorizationCodeFlowEnabledPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="authorizationCodeFlowEnabled" />
                 </constructor-arg>
@@ -124,7 +124,7 @@
             </bean>
         </property>
         <property name="implicitFlowEnabledPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="implicitFlowEnabled" />
                 </constructor-arg>
@@ -132,7 +132,7 @@
             </bean>
         </property>
         <property name="hybridFlowEnabledPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="hybridFlowEnabled" />
                 </constructor-arg>
@@ -140,7 +140,7 @@
             </bean>
         </property>
         <property name="refreshTokensEnabledPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="refreshTokensEnabled" />
                 </constructor-arg>
@@ -164,7 +164,7 @@
             </bean>
         </property>
         <property name="resolveAttributesPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="resolveAttributes" />
                 </constructor-arg>
@@ -172,7 +172,7 @@
             </bean>
         </property>
         <property name="encryptionOptionalPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="encryptionOptional" />
                 </constructor-arg>
@@ -180,7 +180,7 @@
             </bean>
         </property>
         <property name="forcePKCEPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="forcePKCE" />
                 </constructor-arg>
@@ -188,7 +188,7 @@
             </bean>
         </property>
         <property name="allowPKCEPlainPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="allowPKCEPlain" />
                 </constructor-arg>
@@ -232,7 +232,7 @@
     <bean id="OIDC.SSO.MDDriven" parent="AbstractMDDrivenOIDCSSOProfile" lazy-init="true"
             class="net.shibboleth.oidc.profile.config.impl.DefaultOIDCAuthorizationConfiguration">
         <property name="acrRequestAlwaysEssentialPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="acrRequestAlwaysEssential" />
                 </constructor-arg>
@@ -240,7 +240,7 @@
             </bean>
         </property>
         <property name="encodeConsentInTokensPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="encodeConsentInTokens" />
                 </constructor-arg>
@@ -283,7 +283,7 @@
                 p:defaultValue="%{idp.oidc.refreshToken.defaultChainLifetime:PT2H}" />
         </property>
         <property name="includeIssuerInResponsePredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="includeIssuerInResponse" />
                 </constructor-arg>
@@ -296,11 +296,11 @@
         </property>
         <property name="securityConfigurationLookupStrategy">
             <bean parent="shibboleth.MDDrivenBeanProperty" p:propertyName="securityConfiguration"
-                p:propertyType="#{T(net.shibboleth.idp.profile.config.SecurityConfiguration)}"
+                p:propertyType="#{T(org.opensaml.security.config.SecurityConfiguration)}"
                 p:defaultValue-ref="%{idp.security.oidc.authorize.config:shibboleth.oidc.DefaultSecurityConfiguration}" />
         </property>
         <property name="encryptRequestObjectPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="encryptRequestObject" />
                 </constructor-arg>
@@ -308,7 +308,7 @@
             </bean>
         </property>
         <property name="signRequestObjectPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="signRequestObject" />
                 </constructor-arg>
@@ -316,7 +316,7 @@
             </bean>
         </property>
         <property name="useRequestObjectPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="useRequestObject" />
                 </constructor-arg>
@@ -331,7 +331,7 @@
             <bean parent="shibboleth.MDDrivenStringProperty" p:propertyName="issuer" p:defaultValue-ref="shibboleth.oidc.issuer" />
         </property>
         <property name="resolveAttributesPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="resolveAttributes" />
                 </constructor-arg>
@@ -339,7 +339,7 @@
             </bean>
         </property>
         <property name="encryptionOptionalPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="encryptionOptional" />
                 </constructor-arg>
@@ -403,7 +403,7 @@
             class="net.shibboleth.oidc.profile.config.impl.DefaultOIDCPublishKeySetConfiguration">
         <property name="securityConfigurationLookupStrategy">
             <bean parent="shibboleth.MDDrivenBeanProperty" p:propertyName="securityConfiguration"
-                p:propertyType="#{T(net.shibboleth.idp.profile.config.SecurityConfiguration)}"
+                p:propertyType="#{T(org.opensaml.security.config.SecurityConfiguration)}"
                 p:defaultValue-ref="shibboleth.oidc.PublishKeySetSecurityConfiguration" />
         </property>
     </bean>
@@ -437,7 +437,7 @@
                 p:propertyType="#{T(java.util.function.BiFunction)}" />
         </property>
         <property name="enforceRefreshTokenRotationPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="enforceRefreshTokenRotation" />
                 </constructor-arg>
@@ -445,7 +445,7 @@
             </bean>
         </property>
         <property name="IssueIdTokenViaRefreshTokenPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="issueIdTokenViaRefreshToken" />
                 </constructor-arg>
@@ -460,7 +460,7 @@
             <bean parent="shibboleth.MDDrivenStringProperty" p:propertyName="issuer" p:defaultValue-ref="shibboleth.oidc.issuer" />
         </property>
         <property name="resolveAttributesPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="resolveAttributes" />
                 </constructor-arg>
@@ -468,7 +468,7 @@
             </bean>
         </property>
         <property name="encryptionOptionalPredicate">
-            <bean class="net.shibboleth.utilities.java.support.logic.PredicateSupport" factory-method="fromFunction">
+            <bean class="net.shibboleth.shared.logic.PredicateSupport" factory-method="fromFunction">
                 <constructor-arg>
                     <bean parent="shibboleth.MDDrivenBoolProperty" p:propertyName="encryptionOptional" />
                 </constructor-arg>
@@ -533,7 +533,7 @@
 
     <!-- Default client-auth JWT validation wiring. -->
 
-    <bean id="AdaptedRelyingPartyIdLookup" class="net.shibboleth.utilities.java.support.logic.BiFunctionSupport"
+    <bean id="AdaptedRelyingPartyIdLookup" class="net.shibboleth.shared.logic.BiFunctionSupport"
         factory-method="forFunctionOfFirstArg"
             c:_0-ref="shibboleth.RelyingPartyIdLookup.Simple" />
 
@@ -611,7 +611,7 @@
             class="net.shibboleth.oidc.security.jwt.claims.impl.ExactMatchClaimsValidator"
             p:claimName="iss">
         <property name="valueToMatchLookupStrategy">
-            <bean class="net.shibboleth.utilities.java.support.logic.BiFunctionSupport"
+            <bean class="net.shibboleth.shared.logic.BiFunctionSupport"
                 factory-method="forFunctionOfFirstArg"
                     c:_0-ref="shibboleth.ResponderIdLookup.Simple" />
         </property>
@@ -684,7 +684,7 @@
             class="net.shibboleth.oidc.security.jwt.claims.impl.AudienceClaimsValidator"
             p:allowMissing="true">
         <property name="audienceLookupStrategy">
-            <bean class="net.shibboleth.utilities.java.support.logic.BiFunctionSupport"
+            <bean class="net.shibboleth.shared.logic.BiFunctionSupport"
                 factory-method="forFunctionOfFirstArg"
                     c:_0-ref="shibboleth.ResponderIdLookup.Simple" />
         </property>
@@ -712,11 +712,11 @@
     Auto-wiring exposers for credentials to get them loaded into the IdP's relying party config resolver.
     The qualifiers control which auto-wiring point is used.
     -->
-    <bean class="net.shibboleth.idp.relyingparty.RelyingPartyResolverCredentialHolder"
+    <bean class="net.shibboleth.spring.security.CredentialHolder"
             c:_0="#{getObject('shibboleth.oidc.SigningCredentials')}">
         <qualifier value="signing"/>
     </bean>
-    <bean class="net.shibboleth.idp.relyingparty.RelyingPartyResolverCredentialHolder"
+    <bean class="net.shibboleth.spring.security.CredentialHolder"
             c:_0="#{getObject('shibboleth.oidc.EncryptionCredentials')}">
         <qualifier value="encryption"/>
     </bean>
diff --git a/idp-oidc-extension-impl/src/main/resources/net/shibboleth/idp/plugin/oidc/op/module.properties b/idp-oidc-extension-impl/src/main/resources/net/shibboleth/idp/plugin/oidc/op/module.properties
index 3d021164..d1df16e3 100644
--- a/idp-oidc-extension-impl/src/main/resources/net/shibboleth/idp/plugin/oidc/op/module.properties
+++ b/idp-oidc-extension-impl/src/main/resources/net/shibboleth/idp/plugin/oidc/op/module.properties
@@ -1,67 +1,67 @@
 # Properties defining this module.
 
 # Class to Module ID mappings
-net.shibboleth.idp.plugin.oidc.op.OIDCOPModule = idp.oidc.OP.2
+net.shibboleth.idp.plugin.oidc.op.OIDCOPModule = idp.oidc.OP.3
 
 # Module Owner
-idp.oidc.OP.2.plugin = net.shibboleth.idp.plugin.oidc.op
+idp.oidc.OP.3.plugin = net.shibboleth.idp.plugin.oidc.op
 
-idp.oidc.OP.2.name = OIDC OP
-idp.oidc.OP.2.desc = OpenID Connect OP functionality
-idp.oidc.OP.2.url = /OIDC+OP
+idp.oidc.OP.3.name = OIDC OP
+idp.oidc.OP.3.desc = OpenID Connect OP functionality
+idp.oidc.OP.3.url = /OIDC+OP
 
-idp.oidc.OP.2.1.src = /net/shibboleth/idp/plugin/oidc/op/conf/oidc.properties
-idp.oidc.OP.2.1.dest = conf/oidc.properties
+idp.oidc.OP.3.1.src = /net/shibboleth/idp/plugin/oidc/op/conf/oidc.properties
+idp.oidc.OP.3.1.dest = conf/oidc.properties
 
-idp.oidc.OP.2.2.src = /net/shibboleth/idp/plugin/oidc/op/conf/oidc-clientinfo-resolvers.xml
-idp.oidc.OP.2.2.dest = conf/oidc-clientinfo-resolvers.xml
+idp.oidc.OP.3.2.src = /net/shibboleth/idp/plugin/oidc/op/conf/oidc-clientinfo-resolvers.xml
+idp.oidc.OP.3.2.dest = conf/oidc-clientinfo-resolvers.xml
 
-idp.oidc.OP.2.3.src = /net/shibboleth/idp/plugin/oidc/op/conf/oidc-credentials.xml
-idp.oidc.OP.2.3.dest = conf/oidc-credentials.xml
+idp.oidc.OP.3.3.src = /net/shibboleth/idp/plugin/oidc/op/conf/oidc-credentials.xml
+idp.oidc.OP.3.3.dest = conf/oidc-credentials.xml
 
-idp.oidc.OP.2.4.src = /net/shibboleth/idp/plugin/oidc/op/conf/attributes/oidc-claim-rules.xml
-idp.oidc.OP.2.4.dest = conf/attributes/oidc-claim-rules.xml
-idp.oidc.OP.2.4.optional = true
+idp.oidc.OP.3.4.src = /net/shibboleth/idp/plugin/oidc/op/conf/attributes/oidc-claim-rules.xml
+idp.oidc.OP.3.4.dest = conf/attributes/oidc-claim-rules.xml
+idp.oidc.OP.3.4.optional = true
 
-idp.oidc.OP.2.5.src = /net/shibboleth/idp/plugin/oidc/op/conf/authn/oauth2client-authn-config.xml
-idp.oidc.OP.2.5.dest = conf/authn/oauth2client-authn-config.xml
-idp.oidc.OP.2.5.optional = true
+idp.oidc.OP.3.5.src = /net/shibboleth/idp/plugin/oidc/op/conf/authn/oauth2client-authn-config.xml
+idp.oidc.OP.3.5.dest = conf/authn/oauth2client-authn-config.xml
+idp.oidc.OP.3.5.optional = true
 
-idp.oidc.OP.2.6.src = /net/shibboleth/idp/plugin/oidc/op/conf/examples/oidc-attribute-filter.xml
-idp.oidc.OP.2.6.dest = conf/examples/oidc-attribute-filter.xml
-idp.oidc.OP.2.6.replace = true
-idp.oidc.OP.2.6.optional = true
+idp.oidc.OP.3.6.src = /net/shibboleth/idp/plugin/oidc/op/conf/examples/oidc-attribute-filter.xml
+idp.oidc.OP.3.6.dest = conf/examples/oidc-attribute-filter.xml
+idp.oidc.OP.3.6.replace = true
+idp.oidc.OP.3.6.optional = true
 
-idp.oidc.OP.2.7.src = /net/shibboleth/idp/plugin/oidc/op/conf/examples/oidc-attribute-resolver.xml
-idp.oidc.OP.2.7.dest = conf/examples/oidc-attribute-resolver.xml
-idp.oidc.OP.2.7.replace = true
-idp.oidc.OP.2.7.optional = true
+idp.oidc.OP.3.7.src = /net/shibboleth/idp/plugin/oidc/op/conf/examples/oidc-attribute-resolver.xml
+idp.oidc.OP.3.7.dest = conf/examples/oidc-attribute-resolver.xml
+idp.oidc.OP.3.7.replace = true
+idp.oidc.OP.3.7.optional = true
 
-idp.oidc.OP.2.8.src = /net/shibboleth/idp/plugin/oidc/op/static/openid-configuration.json
-idp.oidc.OP.2.8.dest = static/openid-configuration.json
+idp.oidc.OP.3.8.src = /net/shibboleth/idp/plugin/oidc/op/static/openid-configuration.json
+idp.oidc.OP.3.8.dest = static/openid-configuration.json
 
-idp.oidc.OP.2.9.src = /net/shibboleth/idp/plugin/oidc/op/bin/jwtgen.sh
-idp.oidc.OP.2.9.dest = bin/jwtgen.sh
-idp.oidc.OP.2.9.exec = true
+idp.oidc.OP.3.9.src = /net/shibboleth/idp/plugin/oidc/op/bin/jwtgen.sh
+idp.oidc.OP.3.9.dest = bin/jwtgen.sh
+idp.oidc.OP.3.9.exec = true
 
-idp.oidc.OP.2.10.src = /net/shibboleth/idp/plugin/oidc/op/bin/jwtgen.bat
-idp.oidc.OP.2.10.dest = bin/jwtgen.bat
+idp.oidc.OP.3.10.src = /net/shibboleth/idp/plugin/oidc/op/bin/jwtgen.bat
+idp.oidc.OP.3.10.dest = bin/jwtgen.bat
 
-idp.oidc.OP.2.11.src = /net/shibboleth/idp/plugin/oidc/op/bin/lib/json-web-key-generator-0.8.2-jar-with-dependencies.jar
-idp.oidc.OP.2.11.dest = bin/lib/json-web-key-generator-0.8.2-jar-with-dependencies.jar
+idp.oidc.OP.3.11.src = /net/shibboleth/idp/plugin/oidc/op/bin/lib/json-web-key-generator-0.8.2-jar-with-dependencies.jar
+idp.oidc.OP.3.11.dest = bin/lib/json-web-key-generator-0.8.2-jar-with-dependencies.jar
 
-idp.oidc.OP.2.12.src = /net/shibboleth/idp/plugin/oidc/op/bin/issue-access-token.sh
-idp.oidc.OP.2.12.dest = bin/issue-access-token.sh
-idp.oidc.OP.2.12.exec = true
+idp.oidc.OP.3.12.src = /net/shibboleth/idp/plugin/oidc/op/bin/issue-access-token.sh
+idp.oidc.OP.3.12.dest = bin/issue-access-token.sh
+idp.oidc.OP.3.12.exec = true
 
-idp.oidc.OP.2.13.src = /net/shibboleth/idp/plugin/oidc/op/bin/issue-access-token.bat
-idp.oidc.OP.2.13.dest = bin/issue-access-token.bat
+idp.oidc.OP.3.13.src = /net/shibboleth/idp/plugin/oidc/op/bin/issue-access-token.bat
+idp.oidc.OP.3.13.dest = bin/issue-access-token.bat
 
-idp.oidc.OP.2.14.src = /net/shibboleth/idp/plugin/oidc/op/bin/oidc-clients.sh
-idp.oidc.OP.2.14.dest = bin/oidc-clients.sh
-idp.oidc.OP.2.14.exec = true
+idp.oidc.OP.3.14.src = /net/shibboleth/idp/plugin/oidc/op/bin/oidc-clients.sh
+idp.oidc.OP.3.14.dest = bin/oidc-clients.sh
+idp.oidc.OP.3.14.exec = true
 
-idp.oidc.OP.2.15.src = /net/shibboleth/idp/plugin/oidc/op/bin/oidc-clients.bat
-idp.oidc.OP.2.15.dest = bin/oidc-clients.bat
+idp.oidc.OP.3.15.src = /net/shibboleth/idp/plugin/oidc/op/bin/oidc-clients.bat
+idp.oidc.OP.3.15.dest = bin/oidc-clients.bat
 
-idp.oidc.OP.2.postenable = See documentation for additional instructions to enable the OP module.
\ No newline at end of file
+idp.oidc.OP.3.postenable = See documentation for additional instructions to enable the OP module.
\ No newline at end of file
diff --git a/idp-oidc-extension-impl/src/main/resources/net/shibboleth/idp/plugin/oidc/op/plugin.properties b/idp-oidc-extension-impl/src/main/resources/net/shibboleth/idp/plugin/oidc/op/plugin.properties
index 333fda29..e071f2ba 100644
--- a/idp-oidc-extension-impl/src/main/resources/net/shibboleth/idp/plugin/oidc/op/plugin.properties
+++ b/idp-oidc-extension-impl/src/main/resources/net/shibboleth/idp/plugin/oidc/op/plugin.properties
@@ -2,7 +2,7 @@
 
 plugin.id = net.shibboleth.idp.plugin.oidc.op
 # Only used when package manifest is not available
-plugin.version = 3.4.0
+plugin.version = 4.0.0
 #plugin.license =
 
-plugin.modules.required = idp.oidc.config.1
+plugin.modules.required = idp.oidc.config.2
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/IssueRegistrationAccessTokenTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/IssueRegistrationAccessTokenTest.java
index 7335cab3..1a892d34 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/IssueRegistrationAccessTokenTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/admin/impl/IssueRegistrationAccessTokenTest.java
@@ -26,10 +26,6 @@ import java.time.Instant;
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.servlet.ServletRequest;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.mock.web.MockHttpServletResponse;
@@ -47,6 +43,9 @@ import com.github.jasminb.jsonapi.models.errors.Errors;
 import com.nimbusds.oauth2.sdk.AccessTokenResponse;
 import com.nimbusds.oauth2.sdk.token.BearerAccessToken;
 
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import net.shibboleth.idp.plugin.oidc.op.cli.IssueRegistrationAccessTokenArguments;
 import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest;
 import net.shibboleth.idp.plugin.oidc.op.token.support.RegistrationClaimsSet;
@@ -54,13 +53,13 @@ import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileR
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.oidc.metadata.policy.MetadataPolicy;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.FunctionSupport;
-import net.shibboleth.utilities.java.support.primitive.NonnullSupplier;
-import net.shibboleth.utilities.java.support.security.AccessControl;
-import net.shibboleth.utilities.java.support.security.AccessControlService;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.primitive.NonnullSupplier;
+import net.shibboleth.shared.security.AccessControl;
+import net.shibboleth.shared.security.AccessControlService;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
 
 /**
  * Unit tests for {@link IssueRegistrationAccessToken}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/matcher/impl/AttributeInOIDCRequestedClaimsMatcherTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/matcher/impl/AttributeInOIDCRequestedClaimsMatcherTest.java
index 5c612c2b..1fe27f22 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/matcher/impl/AttributeInOIDCRequestedClaimsMatcherTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/matcher/impl/AttributeInOIDCRequestedClaimsMatcherTest.java
@@ -76,12 +76,13 @@ public class AttributeInOIDCRequestedClaimsMatcherTest {
         } else {
             msgCtx.setMessage(new AuthenticationRequest(new URI("htts://example.org"), ResponseType.getDefault(), null,
                     new Scope("openid"), new ClientID(), new URI("htts://example.org"), new State(), new Nonce(), null,
-                    null, 0, null, null, null, null, null, getClaimsRequest(idtoken, userinfo), null, null, null, null, null, null, userinfo, null));
+                    null, null, null, 0, null, null, null, null, null, getClaimsRequest(idtoken, userinfo), null, null,
+                    null, null, null, null, userinfo, null));
             respCtx.setRequestedClaims(getClaimsRequest(idtoken, userinfo));
             setMappedClaims(respCtx, idtoken, userinfo);
         }
         // shortcut, may break the test
-        filtercontext = prc.getSubcontext(AttributeFilterContext.class, true);
+        filtercontext = prc.ensureSubcontext(AttributeFilterContext.class);
         ctx = new OIDCMetadataContext();
         final OIDCClientMetadata metadata = new OIDCClientMetadata();
         final OIDCClientInformation information = new OIDCClientInformation(new ClientID(), new Date(), metadata,
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/policyrule/impl/AttributeOIDCScopePolicyRuleTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/policyrule/impl/AttributeOIDCScopePolicyRuleTest.java
index 5f7970b6..2562993b 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/policyrule/impl/AttributeOIDCScopePolicyRuleTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/policyrule/impl/AttributeOIDCScopePolicyRuleTest.java
@@ -51,7 +51,7 @@ public class AttributeOIDCScopePolicyRuleTest {
         msgCtx = new MessageContext();
         prc.setOutboundMessageContext(msgCtx);
         // shortcut, may break the test
-        filtercontext = prc.getSubcontext(AttributeFilterContext.class, true);
+        filtercontext = prc.ensureSubcontext(AttributeFilterContext.class);
         authRespCtx = new OIDCAuthenticationResponseContext();
         msgCtx.addSubcontext(authRespCtx);
         final Scope scope = new Scope();
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/matcher/impl/AttributeInOIDCRequestedClaimsRuleParserTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/matcher/impl/AttributeInOIDCRequestedClaimsRuleParserTest.java
index 34b8f2e5..4ae1a664 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/matcher/impl/AttributeInOIDCRequestedClaimsRuleParserTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/attribute/filter/spring/matcher/impl/AttributeInOIDCRequestedClaimsRuleParserTest.java
@@ -21,12 +21,12 @@ import org.springframework.context.support.GenericApplicationContext;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import net.shibboleth.ext.spring.context.FilesystemGenericApplicationContext;
 import net.shibboleth.idp.attribute.filter.AttributeRule;
 import net.shibboleth.idp.attribute.filter.Matcher;
 import net.shibboleth.idp.attribute.filter.spring.testing.BaseAttributeFilterParserTest;
 import net.shibboleth.idp.plugin.oidc.op.attribute.filter.matcher.impl.AttributeInOIDCRequestedClaimsMatcher;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.spring.context.FilesystemGenericApplicationContext;
 
 public class AttributeInOIDCRequestedClaimsRuleParserTest extends BaseAttributeFilterParserTest {
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ExtractClientAuthenticationFromRequestTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ExtractClientAuthenticationFromRequestTest.java
index 8f948838..70664938 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ExtractClientAuthenticationFromRequestTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ExtractClientAuthenticationFromRequestTest.java
@@ -22,8 +22,8 @@ import java.net.URISyntaxException;
 import java.security.KeyPair;
 import java.security.KeyPairGenerator;
 import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
 import java.security.interfaces.RSAPrivateKey;
-import java.security.interfaces.RSAPublicKey;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.springframework.webflow.execution.Event;
@@ -52,10 +52,10 @@ import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.context.UsernamePasswordContext;
 import net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext;
+import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link ExtractClientAuthenticationFromRequest}.
@@ -68,7 +68,6 @@ public class ExtractClientAuthenticationFromRequestTest {
     private URI endpointUri;
     
     private RSAPrivateKey rsaPrivateKey;
-    private RSAPublicKey rsaPublicKey;
     
     private ExtractClientAuthenticationFromRequest action;
     
@@ -81,7 +80,6 @@ public class ExtractClientAuthenticationFromRequestTest {
         keyGen.initialize(2048);
         final KeyPair keyPair = keyGen.genKeyPair();
         rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
-        rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
     }
 
     @BeforeMethod
@@ -104,7 +102,8 @@ public class ExtractClientAuthenticationFromRequestTest {
         } else if (method.equals(ClientAuthenticationMethod.CLIENT_SECRET_JWT)) {
             clientAuth = new ClientSecretJWT(clientId, endpointUri, JWSAlgorithm.HS256, clientSecret);
         } else if (method.equals(ClientAuthenticationMethod.PRIVATE_KEY_JWT)) {
-            clientAuth = new PrivateKeyJWT(clientId, endpointUri, JWSAlgorithm.RS256, rsaPrivateKey, null, null);
+            clientAuth = new PrivateKeyJWT(clientId, endpointUri, JWSAlgorithm.RS256, (PrivateKey) rsaPrivateKey, null,
+                    null);
         } else {
             clientAuth = null;
         }
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/JWTCredentialValidatorTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/JWTCredentialValidatorTest.java
index 915e218a..915d15a8 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/JWTCredentialValidatorTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/JWTCredentialValidatorTest.java
@@ -29,11 +29,10 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.opensaml.messaging.context.navigate.ChildContextLookup;
 import org.opensaml.storage.ReplayCache;
 import org.opensaml.storage.impl.MemoryStorageService;
+import org.opensaml.storage.impl.StorageServiceReplayCache;
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
 import org.testng.annotations.BeforeClass;
@@ -60,13 +59,12 @@ import com.nimbusds.oauth2.sdk.id.ClientID;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
+import jakarta.servlet.http.HttpServletRequest;
 import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.impl.ValidateCredentials;
 import net.shibboleth.idp.authn.impl.testing.BaseAuthenticationContextTest;
 import net.shibboleth.idp.authn.principal.UsernamePrincipal;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.context.navigate.RelyingPartyIdLookupFunction;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext;
 import net.shibboleth.oidc.jwt.claims.ClaimsValidator;
@@ -80,8 +78,10 @@ import net.shibboleth.oidc.security.jwt.claims.impl.ExactMatchClaimsValidator;
 import net.shibboleth.oidc.security.jwt.claims.impl.ExpiryClaimsValidator;
 import net.shibboleth.oidc.security.jwt.claims.impl.IssuedAtClaimsValidator;
 import net.shibboleth.oidc.security.jwt.claims.impl.JWTIdentifierClaimsValidator;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.BiFunctionSupport;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.context.navigate.RelyingPartyIdLookupFunction;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.BiFunctionSupport;
 
 /**
  * Unit tests for {@link JWTCredentialValidator}.
@@ -122,7 +122,7 @@ public class JWTCredentialValidatorTest extends BaseAuthenticationContextTest {
             throw new ComponentInitializationException(e);
         }
 
-        final ReplayCache replayCache = new ReplayCache();
+        final StorageServiceReplayCache replayCache = new StorageServiceReplayCache();
         final MemoryStorageService storageService = new MemoryStorageService();
         storageService.setId("mockId");
         storageService.initialize();
@@ -169,11 +169,11 @@ public class JWTCredentialValidatorTest extends BaseAuthenticationContextTest {
             clientAuth = null;
         }
 
-        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, true);
+        final AuthenticationContext ac = prc.ensureSubcontext(AuthenticationContext.class);
         ac.setAttemptedFlow(authenticationFlows.get(0));
-        ac.getSubcontext(OAuth2ClientAuthenticationContext.class, true).setClientAuthentication(clientAuth);
+        ac.ensureSubcontext(OAuth2ClientAuthenticationContext.class).setClientAuthentication(clientAuth);
         
-        prc.getSubcontext(RelyingPartyContext.class, true).setRelyingPartyId(clientId.getValue());
+        prc.ensureSubcontext(RelyingPartyContext.class).setRelyingPartyId(clientId.getValue());
         
         final AuthorizationGrant authzGrant = new AuthorizationCodeGrant(new AuthorizationCode(), null);
         completeSetup(new TokenRequest(null, clientAuth, authzGrant), method, sameSecret);
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/OIDCClientInfoCredentialValidatorTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/OIDCClientInfoCredentialValidatorTest.java
index 3c128f97..8162867d 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/OIDCClientInfoCredentialValidatorTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/OIDCClientInfoCredentialValidatorTest.java
@@ -35,9 +35,9 @@ import net.shibboleth.idp.authn.impl.testing.BaseAuthenticationContextTest;
 import net.shibboleth.idp.authn.principal.UsernamePrincipal;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
-import net.shibboleth.utilities.java.support.codec.StringDigester;
-import net.shibboleth.utilities.java.support.codec.StringDigester.OutputFormat;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.codec.StringDigester;
+import net.shibboleth.shared.codec.StringDigester.OutputFormat;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
@@ -103,7 +103,7 @@ public class OIDCClientInfoCredentialValidatorTest extends BaseAuthenticationCon
     @Test public void testMissingUser2() {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
         ac.setAttemptedFlow(authenticationFlows.get(0));
-        ac.getSubcontext(UsernamePasswordContext.class, true);
+        ac.ensureSubcontext(UsernamePasswordContext.class);
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.NO_CREDENTIALS);
@@ -112,7 +112,7 @@ public class OIDCClientInfoCredentialValidatorTest extends BaseAuthenticationCon
     @Test public void testBadPassword() {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
         ac.setAttemptedFlow(authenticationFlows.get(0));
-        ac.getSubcontext(UsernamePasswordContext.class, true).setUsername(clientId.getValue()).setPassword("foo");
+        ac.ensureSubcontext(UsernamePasswordContext.class).setUsername(clientId.getValue()).setPassword("foo");
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, "InvalidPassword");
@@ -125,7 +125,7 @@ public class OIDCClientInfoCredentialValidatorTest extends BaseAuthenticationCon
     @Test public void testAuthorized() {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
         ac.setAttemptedFlow(authenticationFlows.get(0));
-        ac.getSubcontext(UsernamePasswordContext.class, true).setUsername(clientId.getValue()).setPassword(clientSecret.getValue());
+        ac.ensureSubcontext(UsernamePasswordContext.class).setUsername(clientId.getValue()).setPassword(clientSecret.getValue());
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
@@ -138,7 +138,7 @@ public class OIDCClientInfoCredentialValidatorTest extends BaseAuthenticationCon
     @Test public void testAuthorizedSHA2() throws NoSuchAlgorithmException {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
         ac.setAttemptedFlow(authenticationFlows.get(0));
-        ac.getSubcontext(UsernamePasswordContext.class, true).setUsername(clientId.getValue()).setPassword(clientSecret.getValue());
+        ac.ensureSubcontext(UsernamePasswordContext.class).setUsername(clientId.getValue()).setPassword(clientSecret.getValue());
 
         final OIDCClientMetadata metadata = new OIDCClientMetadata();
         final Secret secret = new Secret("{SHA2}" + new StringDigester("SHA-256", OutputFormat.BASE64).apply(clientSecret.getValue()));
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ValidateClientAuthenticationTypeTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ValidateClientAuthenticationTypeTest.java
index 99113827..5a8cd654 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ValidateClientAuthenticationTypeTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/authn/impl/ValidateClientAuthenticationTypeTest.java
@@ -42,10 +42,10 @@ import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.oidc.authn.context.OAuth2ClientAuthenticationContext;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
+import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link ValidateClientAuthenticationType}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCAuthenticationRequestDecoderTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCAuthenticationRequestDecoderTest.java
index 0815bf5d..95b024a1 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCAuthenticationRequestDecoderTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCAuthenticationRequestDecoderTest.java
@@ -17,8 +17,6 @@
 
 package net.shibboleth.idp.plugin.oidc.op.decoding.impl;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecodingException;
 import org.springframework.mock.web.MockHttpServletRequest;
@@ -29,7 +27,8 @@ import org.testng.annotations.Test;
 import com.nimbusds.oauth2.sdk.ResponseType;
 import com.nimbusds.openid.connect.sdk.AuthenticationRequest;
 
-import net.shibboleth.utilities.java.support.primitive.NonnullSupplier;
+import jakarta.servlet.http.HttpServletRequest;
+import net.shibboleth.shared.primitive.NonnullSupplier;
 
 /**
  * Unit tests for {@link OIDCAuthenticationRequestDecoder}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCClientRegistrationRequestDecoderTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCClientRegistrationRequestDecoderTest.java
index e8f8ae9f..9eabb2d2 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCClientRegistrationRequestDecoderTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCClientRegistrationRequestDecoderTest.java
@@ -20,8 +20,6 @@ package net.shibboleth.idp.plugin.oidc.op.decoding.impl;
 import java.io.File;
 import java.io.IOException;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecodingException;
 import org.springframework.mock.web.MockHttpServletRequest;
@@ -33,7 +31,8 @@ import com.google.common.io.Files;
 import com.nimbusds.oauth2.sdk.http.HTTPRequest.Method;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientRegistrationRequest;
 
-import net.shibboleth.utilities.java.support.primitive.NonnullSupplier;
+import jakarta.servlet.http.HttpServletRequest;
+import net.shibboleth.shared.primitive.NonnullSupplier;
 
 /**
  * Unit tests for {@link OIDCClientRegistrationRequestDecoder}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCTokenRequestDecoderTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCTokenRequestDecoderTest.java
index 613a44a4..3da66759 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCTokenRequestDecoderTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCTokenRequestDecoderTest.java
@@ -19,8 +19,6 @@ package net.shibboleth.idp.plugin.oidc.op.decoding.impl;
 
 import java.io.IOException;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecodingException;
 import org.springframework.mock.web.MockHttpServletRequest;
@@ -31,7 +29,8 @@ import org.testng.annotations.Test;
 import com.nimbusds.oauth2.sdk.TokenRequest;
 import com.nimbusds.oauth2.sdk.http.HTTPRequest.Method;
 
-import net.shibboleth.utilities.java.support.primitive.NonnullSupplier;
+import jakarta.servlet.http.HttpServletRequest;
+import net.shibboleth.shared.primitive.NonnullSupplier;
 
 /**
  * Unit tests for {@link OIDCTokenRequestDecoder}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCUserInfoRequestDecoderTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCUserInfoRequestDecoderTest.java
index e09a11b0..101945ab 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCUserInfoRequestDecoderTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/decoding/impl/OIDCUserInfoRequestDecoderTest.java
@@ -19,8 +19,6 @@ package net.shibboleth.idp.plugin.oidc.op.decoding.impl;
 
 import java.io.IOException;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecodingException;
 import org.springframework.mock.web.MockHttpServletRequest;
@@ -31,7 +29,8 @@ import org.testng.annotations.Test;
 import com.nimbusds.oauth2.sdk.http.HTTPRequest.Method;
 import com.nimbusds.openid.connect.sdk.UserInfoRequest;
 
-import net.shibboleth.utilities.java.support.primitive.NonnullSupplier;
+import jakarta.servlet.http.HttpServletRequest;
+import net.shibboleth.shared.primitive.NonnullSupplier;
 
 /**
  * Unit tests for {@link OIDCUserInfoRequestDecoder}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/CredentialMetadataValueResolverTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/CredentialMetadataValueResolverTest.java
index 39e46b10..e9444861 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/CredentialMetadataValueResolverTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/CredentialMetadataValueResolverTest.java
@@ -25,20 +25,20 @@ import java.util.Map;
 import org.mockito.Mockito;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.security.credential.Credential;
-import org.opensaml.xmlsec.SignatureSigningConfiguration;
 import org.springframework.core.io.FileSystemResource;
 import org.springframework.webflow.execution.RequestContext;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import net.shibboleth.idp.profile.config.SecurityConfiguration;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
+import net.shibboleth.oidc.profile.config.JSONSecurityConfiguration;
 import net.shibboleth.oidc.profile.config.impl.DefaultOIDCProviderInformationConfiguration;
 import net.shibboleth.oidc.security.credential.BasicJWKCredentialFactoryBean;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.oidc.security.jose.SignatureSigningConfiguration;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link CredentialMetadataValueResolver}.
@@ -62,12 +62,12 @@ public class CredentialMetadataValueResolverTest {
         final CredentialMetadataValueResolver resolver = new CredentialMetadataValueResolver();
         resolver.setId("mockId");
         resolver.initialize();
-        final RelyingPartyContext rpCtx = profileRequestCtx.getSubcontext(RelyingPartyContext.class, true);
+        final RelyingPartyContext rpCtx = profileRequestCtx.ensureSubcontext(RelyingPartyContext.class);
         final DefaultOIDCProviderInformationConfiguration profileConfig = new DefaultOIDCProviderInformationConfiguration();
-        final SecurityConfiguration secConfig = new SecurityConfiguration();
+        final JSONSecurityConfiguration secConfig = new JSONSecurityConfiguration();
         final SignatureSigningConfiguration signConfig = Mockito.mock(SignatureSigningConfiguration.class);
         Mockito.when(signConfig.getSigningCredentials()).thenReturn(Arrays.asList(credential));
-        secConfig.setSignatureSigningConfiguration(signConfig);
+        secConfig.setJwtSignatureSigningConfiguration(signConfig);
         profileConfig.setSecurityConfiguration(secConfig);
         rpCtx.setProfileConfig(profileConfig);
         return resolver;
@@ -80,6 +80,7 @@ public class CredentialMetadataValueResolverTest {
         Assert.assertNotNull(result);
         System.out.println(result);
         Assert.assertTrue(result instanceof List);
+        @SuppressWarnings({ "rawtypes", "unchecked" })
         final Map<String, Object> json = (Map<String, Object>)((List) result).get(0);
         Assert.assertEquals(json.keySet().size(), 6);
         Assert.assertEquals(json.get("kty"), "RSA");
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemProviderMetdataResolverTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemProviderMetdataResolverTest.java
index cc960648..2091f98d 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemProviderMetdataResolverTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/metadata/impl/FilesystemProviderMetdataResolverTest.java
@@ -28,8 +28,8 @@ import org.testng.annotations.Test;
 import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.ProviderMetadataResolver;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.relyingparty.RelyingPartyConfiguration;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.relyingparty.RelyingPartyConfiguration;
 
 /**
  * Unit tests for {@link FilesystemProviderMetadataResolver}.
@@ -64,9 +64,9 @@ public class FilesystemProviderMetdataResolverTest {
     
     protected ProfileRequestContext initMockWithRpId(final String id) {
         final ProfileRequestContext profileRequestContext = new ProfileRequestContext();
-        final RelyingPartyContext rpCtx = profileRequestContext.getSubcontext(RelyingPartyContext.class, true);
+        final RelyingPartyContext rpCtx = profileRequestContext.ensureSubcontext(RelyingPartyContext.class);
         final RelyingPartyConfiguration configuration = Mockito.mock(RelyingPartyConfiguration.class);
-        Mockito.when(configuration.getResponderId(profileRequestContext)).thenReturn(id);
+        Mockito.when(configuration.getIssuer(profileRequestContext)).thenReturn(id);
         rpCtx.setConfiguration(configuration);
         return profileRequestContext;
     }
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2RevocationRequestDecoderTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2RevocationRequestDecoderTest.java
index 1e788bf9..dbb3988b 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2RevocationRequestDecoderTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/decoding/impl/OAuth2RevocationRequestDecoderTest.java
@@ -17,8 +17,6 @@
 
 package net.shibboleth.idp.plugin.oidc.op.oauth2.decoding.impl;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.messaging.decoder.MessageDecodingException;
 import org.springframework.mock.web.MockHttpServletRequest;
@@ -28,7 +26,8 @@ import org.testng.annotations.Test;
 
 import com.nimbusds.oauth2.sdk.TokenRevocationRequest;
 
-import net.shibboleth.utilities.java.support.primitive.NonnullSupplier;
+import jakarta.servlet.http.HttpServletRequest;
+import net.shibboleth.shared.primitive.NonnullSupplier;
 
 /**
  * Unit tests for {@link OAuth2RevocationRequestDecoder}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/OAuth2RevocationErrorResponseTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/OAuth2RevocationErrorResponseTest.java
index 87602c03..c3d6f030 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/OAuth2RevocationErrorResponseTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/OAuth2RevocationErrorResponseTest.java
@@ -22,7 +22,7 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 import com.nimbusds.oauth2.sdk.ErrorObject;
 
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 /**
  * Tests for {@link OAuth2RevocationErrorResponse}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/SetEntityIdToSAMLPeerEntityContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/SetEntityIdToSAMLPeerEntityContextTest.java
index 6fdd01a4..5ef7fe51 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/SetEntityIdToSAMLPeerEntityContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/messaging/impl/SetEntityIdToSAMLPeerEntityContextTest.java
@@ -29,9 +29,9 @@ import org.testng.annotations.Test;
 
 import com.nimbusds.oauth2.sdk.id.ClientID;
 
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.UnmodifiableComponentException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.component.UnmodifiableComponentException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 /**
  * Unit tests for {@link SetEntityIdToSAMLPeerEntityContext}.
@@ -108,6 +108,7 @@ public class SetEntityIdToSAMLPeerEntityContextTest {
     }
 
     protected Function<MessageContext, ClientID> mockClientIdLookupStrategy(final String clientID) {
+        @SuppressWarnings("unchecked")
         Function<MessageContext, ClientID> function = Mockito.mock(Function.class);
         Mockito.when(function.apply(Mockito.any())).thenReturn(clientID == null ? null : new ClientID(clientID));
         return function;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessTokenTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessTokenTest.java
index 1f67c907..65318b13 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessTokenTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/BuildAccessTokenTest.java
@@ -27,11 +27,11 @@ import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest
 import net.shibboleth.idp.plugin.oidc.op.token.support.AccessTokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.FunctionSupport;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.security.DataSealerException;
 
 import java.security.NoSuchAlgorithmException;
 import java.text.ParseException;
@@ -69,7 +69,7 @@ public class BuildAccessTokenTest extends BaseOIDCResponseActionTest {
     protected void setUp() throws Exception {
         super.setUp();
         
-        profileRequestCtx.getSubcontext(SubjectContext.class, true).setPrincipalName("jdoe");
+        profileRequestCtx.ensureSubcontext(SubjectContext.class).setPrincipalName("jdoe");
         
         respCtx.setAuthTime(Instant.now());
         respCtx.setSubject(clientId);
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/RevokeTokenTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/RevokeTokenTest.java
index 010bc9ed..e9c6c3c3 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/RevokeTokenTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/RevokeTokenTest.java
@@ -21,8 +21,8 @@ import java.time.Duration;
 import java.time.Instant;
 
 import org.opensaml.profile.context.ProfileRequestContext;
-import org.opensaml.storage.RevocationCache;
 import org.opensaml.storage.impl.MemoryStorageService;
+import org.opensaml.storage.impl.StorageServiceRevocationCache;
 import org.springframework.webflow.execution.RequestContext;
 import org.testng.Assert;
 import org.testng.annotations.AfterMethod;
@@ -39,7 +39,7 @@ import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileR
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.oidc.profile.oauth2.config.OAuth2TokenRevocationConfiguration.OAuth2TokenRevocationMethod;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 // Checkstyle: ThrowsCount OFF
 
@@ -56,7 +56,7 @@ public class RevokeTokenTest extends BaseTokenClaimsSetTest {
 
     private RefreshTokenClaimsSet rfClaimsSet;
 
-    private RevocationCache revocationCache;
+    private StorageServiceRevocationCache revocationCache;
     
     private RequestContext src;
     
@@ -75,7 +75,7 @@ public class RevokeTokenTest extends BaseTokenClaimsSetTest {
         storageService.setId("test");
         storageService.initialize();
 
-        revocationCache = new RevocationCache();
+        revocationCache = new StorageServiceRevocationCache();
         revocationCache.setId("mockCache");
         revocationCache.setEntryExpiration(Duration.ofHours(1));
         revocationCache.setStorage(storageService);
@@ -111,7 +111,7 @@ public class RevokeTokenTest extends BaseTokenClaimsSetTest {
 
         src = new RequestContextBuilder().buildRequestContext();
         prc = new WebflowRequestContextProfileRequestContextLookup().apply(src);
-        tokenCtx = prc.getOutboundMessageContext().getSubcontext(OAuth2TokenMgmtResponseContext.class, true);
+        tokenCtx = prc.getOutboundMessageContext().ensureSubcontext(OAuth2TokenMgmtResponseContext.class);
     }
 
     @AfterMethod
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAuthorizationCodeToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAuthorizationCodeToResponseContextTest.java
index 1ccea4c9..32e30749 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAuthorizationCodeToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetAuthorizationCodeToResponseContextTest.java
@@ -23,10 +23,11 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationRes
 import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest;
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.security.DataSealerException;
+
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.NoSuchAlgorithmException;
@@ -69,7 +70,7 @@ public class SetAuthorizationCodeToResponseContextTest extends BaseOIDCResponseA
             action.setTokenClaimsSetManipulationStrategyLookupStrategy(manipulationStrategy);
         }
         action.initialize();
-        final SubjectContext subjectCtx = profileRequestCtx.getSubcontext(SubjectContext.class, true);
+        final SubjectContext subjectCtx = profileRequestCtx.ensureSubcontext(SubjectContext.class);
         subjectCtx.setPrincipalName("userPrin");
     }
     
@@ -282,7 +283,7 @@ public class SetAuthorizationCodeToResponseContextTest extends BaseOIDCResponseA
     public void testFailNoProfileConf()
             throws NoSuchAlgorithmException, ComponentInitializationException, URISyntaxException {
         init();
-        final RelyingPartyContext rpCtx = profileRequestCtx.getSubcontext(RelyingPartyContext.class, false);
+        final RelyingPartyContext rpCtx = profileRequestCtx.getSubcontext(RelyingPartyContext.class);
         rpCtx.setProfileConfig(null);
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertEvent(event, IdPEventIds.INVALID_PROFILE_CONFIG);
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContextTest.java
index 5e550497..14396598 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/SetRequestObjectToResponseContextTest.java
@@ -20,9 +20,9 @@ package net.shibboleth.idp.plugin.oidc.op.oauth2.profile.impl;
 import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.httpclient.HttpClientBuilder;
-import net.shibboleth.utilities.java.support.httpclient.HttpClientSupport;
-import net.shibboleth.utilities.java.support.test.repository.RepositorySupport;
+import net.shibboleth.shared.httpclient.HttpClientBuilder;
+import net.shibboleth.shared.httpclient.HttpClientSupport;
+import net.shibboleth.shared.testing.RepositorySupport;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -49,6 +49,7 @@ public class SetRequestObjectToResponseContextTest extends BaseOIDCResponseActio
     /** Action. */
     private SetRequestObjectToResponseContext action;
     
+    @SuppressWarnings("unchecked")
     private Predicate<ProfileRequestContext> enforceRequestObjects = Mockito.mock(Predicate.class);
 
     /** Init. */
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAudienceTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAudienceTest.java
index beca747e..ec6c49cc 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAudienceTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAudienceTest.java
@@ -27,7 +27,7 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
@@ -60,7 +60,7 @@ public class ValidateAudienceTest extends BaseOIDCResponseActionTest {
         action = new ValidateAudience();
         action.initialize();
         final OIDCMetadataContext oidcCtx =
-                profileRequestCtx.getInboundMessageContext().getSubcontext(OIDCMetadataContext.class, true);
+                profileRequestCtx.getInboundMessageContext().ensureSubcontext(OIDCMetadataContext.class);
         metaData = new OIDCClientMetadata();
         metaData.setCustomField("audience", List.of("https://sp.example.org", "https://sp2.example.org"));
         final OIDCClientInformation information =
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAuthorizationRequestTypeTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAuthorizationRequestTypeTest.java
index beccac7e..837d31f3 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAuthorizationRequestTypeTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateAuthorizationRequestTypeTest.java
@@ -31,8 +31,8 @@ import com.nimbusds.openid.connect.sdk.AuthenticationRequest;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.UnmodifiableComponentException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.component.UnmodifiableComponentException;
 
 /**
  * Unit tests for {@link ValidateAuthorizationRequestType}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateCodeChallengeTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateCodeChallengeTest.java
index 3dc086ff..501380c6 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateCodeChallengeTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateCodeChallengeTest.java
@@ -22,7 +22,7 @@ import java.net.URISyntaxException;
 import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.springframework.webflow.execution.Event;
 import org.testng.annotations.BeforeMethod;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRedirectURITest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRedirectURITest.java
index 00bf129f..716e3613 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRedirectURITest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRedirectURITest.java
@@ -25,7 +25,7 @@ import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
@@ -81,7 +81,7 @@ public class ValidateRedirectURITest extends BaseOIDCResponseActionTest {
     @Test
     public void testNoMatch() throws ComponentInitializationException, URISyntaxException {
         init();
-        OIDCMetadataContext oidcCtx = profileRequestCtx.getInboundMessageContext().getSubcontext(OIDCMetadataContext.class, true);
+        OIDCMetadataContext oidcCtx = profileRequestCtx.getInboundMessageContext().ensureSubcontext(OIDCMetadataContext.class);
         OIDCClientMetadata metaData = new OIDCClientMetadata();
         metaData.setRedirectionURI(new URI("https://notmatching.org"));
         OIDCClientInformation information = new OIDCClientInformation(new ClientID("test"), null, metaData, null, null, null);
@@ -100,7 +100,7 @@ public class ValidateRedirectURITest extends BaseOIDCResponseActionTest {
     @Test
     public void testMatch() throws ComponentInitializationException, URISyntaxException {
         init();
-        OIDCMetadataContext oidcCtx = profileRequestCtx.getInboundMessageContext().getSubcontext(OIDCMetadataContext.class, true);
+        OIDCMetadataContext oidcCtx = profileRequestCtx.getInboundMessageContext().ensureSubcontext(OIDCMetadataContext.class);
         OIDCClientMetadata metaData = new OIDCClientMetadata();
         metaData.setRedirectionURI(new URI("https://client.example.org/cb"));
         OIDCClientInformation information = new OIDCClientInformation(new ClientID("test"), null, metaData, null, null, null);
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRequestObjectTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRequestObjectTest.java
index 6fec7652..a0db29cf 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRequestObjectTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateRequestObjectTest.java
@@ -28,7 +28,8 @@ import net.shibboleth.oidc.security.jwt.claims.impl.ChainingJWTClaimsValidator;
 import net.shibboleth.oidc.security.jwt.claims.impl.ExactMatchClaimsValidator;
 import net.shibboleth.oidc.security.jwt.claims.impl.ExpiryClaimsValidator;
 import net.shibboleth.oidc.security.jwt.claims.impl.NotBeforeClaimsValidator;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.InvalidAlgorithmParameterException;
@@ -88,7 +89,7 @@ public class ValidateRequestObjectTest {
     public void setup() throws ComponentInitializationException, NoSuchAlgorithmException {
         requestCtx = new RequestContextBuilder().buildRequestContext();
         prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
-        oidcCtx = prc.getInboundMessageContext().getSubcontext(OIDCMetadataContext.class, true);
+        oidcCtx = prc.getInboundMessageContext().ensureSubcontext(OIDCMetadataContext.class);
         oidcRespCtx = new OIDCAuthenticationResponseContext();
         prc.getOutboundMessageContext().addSubcontext(oidcRespCtx);
         issuer = "https://op.example.org/";
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateResponseTypeTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateResponseTypeTest.java
index 3c22c2a2..12a7e194 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateResponseTypeTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateResponseTypeTest.java
@@ -26,7 +26,7 @@ import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.springframework.webflow.execution.Event;
 import org.testng.annotations.BeforeMethod;
@@ -50,7 +50,7 @@ public class ValidateResponseTypeTest extends BaseOIDCResponseActionTest {
         action = new ValidateResponseType();
         action.initialize();
         final OIDCMetadataContext oidcCtx =
-                profileRequestCtx.getInboundMessageContext().getSubcontext(OIDCMetadataContext.class, true);
+                profileRequestCtx.getInboundMessageContext().ensureSubcontext(OIDCMetadataContext.class);
         metaData = new OIDCClientMetadata();
         final Set<ResponseType> responseTypes = new HashSet<ResponseType>();
         responseTypes.add(ResponseType.parse("code"));
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateScopeTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateScopeTest.java
index 3914b0f5..736dc8dc 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateScopeTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/oauth2/profile/impl/ValidateScopeTest.java
@@ -27,7 +27,7 @@ import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
@@ -68,7 +68,7 @@ public class ValidateScopeTest extends BaseOIDCResponseActionTest {
         action = new ValidateScope();
         action.initialize();
         final OIDCMetadataContext oidcCtx =
-                profileRequestCtx.getInboundMessageContext().getSubcontext(OIDCMetadataContext.class, true);
+                profileRequestCtx.getInboundMessageContext().ensureSubcontext(OIDCMetadataContext.class);
         metaData = new OIDCClientMetadata();
         final Scope scope = new Scope();
         for (final Scope.Value value : values) {
@@ -82,7 +82,7 @@ public class ValidateScopeTest extends BaseOIDCResponseActionTest {
 
         // Populate grant-basec claims for detection of purge.
         final OIDCAuthenticationResponseTokenClaimsContext tokenClaimsCtx =
-                respCtx.getSubcontext(OIDCAuthenticationResponseTokenClaimsContext.class, true);
+                respCtx.ensureSubcontext(OIDCAuthenticationResponseTokenClaimsContext.class);
         tokenClaimsCtx.getClaims().setClaim("gen", "value1");
         tokenClaimsCtx.getIdtokenClaims().setClaim("idtoken", "value2");
         tokenClaimsCtx.getUserinfoClaims().setClaim("userinfo", "value3");        
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractIssuedJWTSecurityTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractIssuedJWTSecurityTest.java
index 7e0530a1..cc9c7113 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractIssuedJWTSecurityTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractIssuedJWTSecurityTest.java
@@ -67,9 +67,9 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.oidc.security.credential.JWKCredential;
 import net.shibboleth.oidc.security.impl.support.TestCredentialHelper;
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.security.DataSealerException;
 
 public abstract class AbstractIssuedJWTSecurityTest extends AbstractOidcFlowTest {
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcApiFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcApiFlowTest.java
index ccb5b534..3debf680 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcApiFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcApiFlowTest.java
@@ -44,8 +44,8 @@ import com.nimbusds.openid.connect.sdk.claims.ClaimsSet;
 
 import net.shibboleth.idp.plugin.oidc.op.token.support.AccessTokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.RefreshTokenClaimsSet;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.security.DataSealerException;
 
 /**
  * Abstract unit test for the OIDC flows using access tokens.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcClientAuthenticationFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcClientAuthenticationFlowTest.java
index 93ae585c..65926f5b 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcClientAuthenticationFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcClientAuthenticationFlowTest.java
@@ -47,7 +47,7 @@ import com.nimbusds.oauth2.sdk.auth.PrivateKeyJWT;
 import com.nimbusds.oauth2.sdk.auth.Secret;
 import com.nimbusds.oauth2.sdk.id.ClientID;
 
-import net.shibboleth.utilities.java.support.collection.Pair;
+import net.shibboleth.shared.collection.Pair;
 
 /**
  * Base unit test class for flows involving JWT based authentication (client_secret_jwt
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcFlowTest.java
index 23522c4c..6ba76f71 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AbstractOidcFlowTest.java
@@ -37,9 +37,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import org.apache.commons.codec.binary.Base64;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.storage.StorageService;
@@ -98,10 +95,10 @@ import net.shibboleth.oidc.metadata.impl.BaseStorageServiceClientInformationComp
 import net.shibboleth.oidc.security.credential.BasicJWKCredential;
 import net.shibboleth.oidc.security.credential.BasicJWKCredentialFactoryBean;
 import net.shibboleth.oidc.security.credential.JWKCredentialSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.net.HttpServletRequestResponseContext;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.servlet.impl.HttpServletRequestResponseContext;
 
 /**
  * Abstract unit test for the OIDC flows.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AuthorizeFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AuthorizeFlowTest.java
index a7a1bde5..200673e0 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AuthorizeFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/AuthorizeFlowTest.java
@@ -65,8 +65,8 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.AccessTokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.session.SessionException;
 import net.shibboleth.oidc.profile.core.OidcError;
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.security.DataSealerException;
 
 /**
  * Tests for the authorize-flow.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/ClientCredentialsTokenFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/ClientCredentialsTokenFlowTest.java
index fce5d8f5..58967883 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/ClientCredentialsTokenFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/ClientCredentialsTokenFlowTest.java
@@ -65,9 +65,9 @@ import com.nimbusds.oauth2.sdk.token.AccessToken;
 import net.shibboleth.idp.plugin.oidc.op.token.support.AccessTokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.oidc.profile.core.OidcError;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.security.DataSealerException;
 
 /**
  * Unit tests for the token flow when using the client_credentials grant type.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/ConfigurationFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/ConfigurationFlowTest.java
index c247db05..441dbe82 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/ConfigurationFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/ConfigurationFlowTest.java
@@ -52,7 +52,8 @@ public class ConfigurationFlowTest extends AbstractOidcFlowTest {
         final FlowExecutionResult result = flowExecutor.launchExecution(FLOW_ID, null, externalContext);
         final Response response = parseResponse(result);
         Assert.assertTrue(response.indicatesSuccess());
-        final Resource resource = new FileSystemResource("src/test/resources/conf/openid-configuration.json");
+        final Resource resource = new FileSystemResource(
+                "src/test/resources/net/shibboleth/idp/module/conf/openid-configuration.json");
         final OIDCProviderMetadata originalMetadata = 
                 OIDCProviderMetadata.parse(IOUtils.toString(resource.getInputStream(), "UTF-8"));
         Assert.assertNotNull(originalMetadata.getIDTokenJWSAlgs());
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IntrospectionFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IntrospectionFlowTest.java
index a34eae59..ea896dda 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IntrospectionFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IntrospectionFlowTest.java
@@ -50,9 +50,9 @@ import com.nimbusds.oauth2.sdk.id.ClientID;
 import net.shibboleth.idp.plugin.oidc.op.storage.RevocationCacheContexts;
 import net.shibboleth.idp.plugin.oidc.op.token.support.AccessTokenClaimsSet;
 import net.shibboleth.oidc.security.credential.JWKCredential;
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.security.DataSealerException;
 
 // Checkstyle: ThrowsCount OFF
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IssueRegistrationAccessTokenFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IssueRegistrationAccessTokenFlowTest.java
index bd6b96eb..1d8af7a2 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IssueRegistrationAccessTokenFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IssueRegistrationAccessTokenFlowTest.java
@@ -44,7 +44,7 @@ import net.shibboleth.idp.plugin.oidc.op.cli.IssueRegistrationAccessTokenArgumen
 import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest;
 import net.shibboleth.idp.plugin.oidc.op.token.support.RegistrationClaimsSet;
 import net.shibboleth.oidc.metadata.policy.MetadataPolicy;
-import net.shibboleth.utilities.java.support.security.DataSealer;
+import net.shibboleth.shared.security.DataSealer;
 
 /**
  * issue-registration-access-token flow test.
@@ -103,7 +103,7 @@ public class IssueRegistrationAccessTokenFlowTest extends AbstractOidcFlowTest {
     @Test
     public void testWithValidPolicyLocationAndId() throws Exception {
 
-        buildRequest("P1D", "src/test/resources/conf/metadata-policy1.json", "mockRpId", null, null);
+        buildRequest("P1D", "src/test/resources/net/shibboleth/idp/module/conf/metadata-policy1.json", "mockRpId", null, null);
         
         initializeThreadLocals();
         
@@ -125,7 +125,7 @@ public class IssueRegistrationAccessTokenFlowTest extends AbstractOidcFlowTest {
     @Test
     public void testWithPolicyLocationOnly() throws Exception {
 
-        buildRequest("P1D", "src/test/resources/conf/metadata-policy1.json", null, null, null);
+        buildRequest("P1D", "src/test/resources/net/shibboleth/idp/module/conf/metadata-policy1.json", null, null, null);
         
         initializeThreadLocals();
         
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IssuedSignedJWTTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IssuedSignedJWTTest.java
index 899e31dd..badef0fb 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IssuedSignedJWTTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/IssuedSignedJWTTest.java
@@ -28,7 +28,7 @@ import com.nimbusds.jose.JWSAlgorithm;
 import com.nimbusds.jwt.JWT;
 import com.nimbusds.openid.connect.sdk.UserInfoSuccessResponse;
 
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.security.DataSealerException;
 
 /**
  * Tests for verifying that the signature on JWT issued by OP matches the expected configuration. OP may issue JWTs
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RegistrationFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RegistrationFlowTest.java
index db599eb5..7ac88325 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RegistrationFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RegistrationFlowTest.java
@@ -44,7 +44,6 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.minidev.json.JSONObject;
 import net.minidev.json.parser.JSONParser;
-import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest;
 import net.shibboleth.oidc.metadata.impl.BaseStorageServiceClientInformationComponent;
 
 /**
@@ -316,7 +315,7 @@ public class RegistrationFlowTest extends AbstractOidcFlowTest {
                 "\"replacement\":" + Boolean.toString(replacement) + "," +
                 "\"metadata\":" + (metadata.length() == 0 ? "null" : "{" + metadata.toString()) + "}" +
                 "}";
-        return new BearerAccessToken(BaseOIDCResponseActionTest.initializeDataSealer().wrap(json,
+        return new BearerAccessToken(getDataSealer().wrap(json,
                 Instant.now().plusSeconds(30)));
     }
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RegistrationManagementFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RegistrationManagementFlowTest.java
index 1ddffc5c..f1c7eb43 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RegistrationManagementFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RegistrationManagementFlowTest.java
@@ -24,7 +24,6 @@ import java.net.URI;
 import java.util.Map;
 
 import javax.annotation.Nonnull;
-import javax.servlet.http.HttpServletResponse;
 
 import org.opensaml.storage.StorageService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +41,7 @@ import com.nimbusds.oauth2.sdk.id.ClientID;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
+import jakarta.servlet.http.HttpServletResponse;
 import net.minidev.json.JSONObject;
 import net.shibboleth.oidc.metadata.impl.BaseStorageServiceClientInformationComponent;
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RequestObjectJWETest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RequestObjectJWETest.java
index d262ddfb..fd98247a 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RequestObjectJWETest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RequestObjectJWETest.java
@@ -49,9 +49,9 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.oidc.security.credential.BasicJWKCredential;
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.security.DataSealerException;
 
 public class RequestObjectJWETest extends IssuedEncryptedJWTTest {
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RequestObjectJWSTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RequestObjectJWSTest.java
index 3926d281..796cb3b4 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RequestObjectJWSTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RequestObjectJWSTest.java
@@ -46,9 +46,9 @@ import com.nimbusds.openid.connect.sdk.claims.ClaimsSetRequest;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.primitive.StringSupport;
+import net.shibboleth.shared.security.DataSealerException;
 
 public class RequestObjectJWSTest extends IssuedSignedJWTTest {
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RevocationFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RevocationFlowTest.java
index 5b23e464..9f0abb93 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RevocationFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/RevocationFlowTest.java
@@ -49,9 +49,9 @@ import net.shibboleth.idp.plugin.oidc.op.oauth2.messaging.impl.OAuth2RevocationS
 import net.shibboleth.idp.plugin.oidc.op.storage.RevocationCacheContexts;
 import net.shibboleth.idp.plugin.oidc.op.token.support.AccessTokenClaimsSet;
 import net.shibboleth.oidc.security.credential.JWKCredential;
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.security.DataSealerException;
 
 // Checkstyle: ThrowsCount OFF
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/TokenFlowTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/TokenFlowTest.java
index 4c6a33a8..5d27b589 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/TokenFlowTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/TokenFlowTest.java
@@ -72,9 +72,9 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.RefreshTokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.oidc.profile.core.OidcError;
-import net.shibboleth.utilities.java.support.collection.Pair;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.shared.collection.Pair;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 /**
  * Unit tests for the token flow.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/UserInfoTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/UserInfoTest.java
index 70e94d84..777776a6 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/UserInfoTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/flow/UserInfoTest.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 import java.net.URISyntaxException;
 import java.security.NoSuchAlgorithmException;
 import java.text.ParseException;
+import java.util.List;
 
 import org.opensaml.storage.RevocationCache;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,6 +33,7 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Factory;
 import org.testng.annotations.Test;
 
+import com.nimbusds.jose.JOSEException;
 import com.nimbusds.jose.JWSAlgorithm;
 import com.nimbusds.jwt.JWT;
 import com.nimbusds.jwt.JWTClaimsSet;
@@ -46,8 +48,9 @@ import com.nimbusds.openid.connect.sdk.claims.ClaimsSet;
 import com.nimbusds.openid.connect.sdk.claims.UserInfo;
 
 import net.shibboleth.idp.plugin.oidc.op.storage.RevocationCacheContexts;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.oidc.security.credential.JWKCredential;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.security.DataSealerException;
 
 /**
  * Unit tests for the OIDC UserInfo flow.
@@ -66,6 +69,10 @@ public class UserInfoTest extends AbstractOidcApiFlowTest {
     @Qualifier("shibboleth.oidc.RevocationCache")
     private RevocationCache revocationCache;
 
+    @Autowired
+    @Qualifier("testbed.DefaultRSSigningCredential")
+    private JWKCredential signingKey = null;
+
     public UserInfoTest() {
         super(FLOW_ID);
     }
@@ -166,6 +173,53 @@ public class UserInfoTest extends AbstractOidcApiFlowTest {
         Assert.assertNull(response.getUserInfoJWT());
     }
 
+    @Test
+    public void testSuccessOnlySubjectWithJWTNoAudience() throws URISyntaxException, NoSuchAlgorithmException, DataSealerException,
+        ComponentInitializationException, IOException, com.nimbusds.oauth2.sdk.ParseException, JOSEException {
+        final BearerAccessToken token = buildJWTToken(clientId, subject , new Scope("openid"), null, signingKey.getPrivateKey(), "RS256");
+
+        storeMetadata(storageService, clientId, "mockSecret", scope);
+        request.addHeader("Authorization", token.toAuthorizationHeader());
+        final FlowExecutionResult result = flowExecutor.launchExecution(FLOW_ID, null, externalContext);
+        final UserInfoSuccessResponse response = parseSuccessResponse(result, UserInfoSuccessResponse.class);
+        Assert.assertEquals(response.getUserInfo().getSubject().getValue(), subject);
+        final UserInfo userInfo = response.getUserInfo();
+        Assert.assertNotNull(userInfo);
+        Assert.assertNull(userInfo.getEmailAddress());
+        Assert.assertNull(userInfo.getNickname());
+        Assert.assertNull(response.getUserInfoJWT());
+    }
+
+    @Test
+    public void testSuccessOnlySubjectWithJWTAudience() throws URISyntaxException, NoSuchAlgorithmException, DataSealerException,
+        ComponentInitializationException, IOException, com.nimbusds.oauth2.sdk.ParseException, JOSEException {
+        final BearerAccessToken token = buildJWTToken(clientId, subject , new Scope("openid"),
+                List.of("https://sp.example.org", "https://op.example.org"), signingKey.getPrivateKey(), "RS256");
+
+        storeMetadata(storageService, clientId, "mockSecret", scope);
+        request.addHeader("Authorization", token.toAuthorizationHeader());
+        final FlowExecutionResult result = flowExecutor.launchExecution(FLOW_ID, null, externalContext);
+        final UserInfoSuccessResponse response = parseSuccessResponse(result, UserInfoSuccessResponse.class);
+        Assert.assertEquals(response.getUserInfo().getSubject().getValue(), subject);
+        final UserInfo userInfo = response.getUserInfo();
+        Assert.assertNotNull(userInfo);
+        Assert.assertNull(userInfo.getEmailAddress());
+        Assert.assertNull(userInfo.getNickname());
+        Assert.assertNull(response.getUserInfoJWT());
+    }
+
+    @Test
+    public void testFailsWhenWrongJWTAudience() throws URISyntaxException, NoSuchAlgorithmException, DataSealerException,
+        ComponentInitializationException, IOException, com.nimbusds.oauth2.sdk.ParseException, JOSEException {
+        final BearerAccessToken token = buildJWTToken(clientId, subject , new Scope("openid"),
+                List.of("https://sp.example.org"), signingKey.getPrivateKey(), "RS256");
+
+        storeMetadata(storageService, clientId, "mockSecret", scope);
+        request.addHeader("Authorization", token.toAuthorizationHeader());
+        final FlowExecutionResult result = flowExecutor.launchExecution(FLOW_ID, null, externalContext);
+        assertErrorCode(result, BearerTokenError.INVALID_TOKEN.getCode());
+    }
+
     @Test
     public void testSuccessOnlySubjectSaml() throws URISyntaxException, NoSuchAlgorithmException, DataSealerException,
         ComponentInitializationException, IOException {
@@ -181,7 +235,6 @@ public class UserInfoTest extends AbstractOidcApiFlowTest {
         Assert.assertNull(response.getUserInfoJWT());
     }
 
-
     @Test
     public void testSuccessEmailResolution() throws URISyntaxException, NoSuchAlgorithmException, DataSealerException,
         ComponentInitializationException, IOException {
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAccessTokenHashToIDTokenTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAccessTokenHashToIDTokenTest.java
index 32557a6a..90ce9a55 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAccessTokenHashToIDTokenTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAccessTokenHashToIDTokenTest.java
@@ -24,7 +24,7 @@ import java.time.Instant;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.security.jose.SignatureSigningParameters;
 import net.shibboleth.oidc.security.jose.context.SecurityParametersContext;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.security.credential.Credential;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAcrToIDTokenTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAcrToIDTokenTest.java
index 79d1b98b..3c45ce77 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAcrToIDTokenTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAcrToIDTokenTest.java
@@ -20,7 +20,7 @@ package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 import java.time.Instant;
 
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.profile.action.EventIds;
 import org.springframework.webflow.execution.Event;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddApplicationTypeToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddApplicationTypeToClientMetadataTest.java
index 18d8be67..6220a4a5 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddApplicationTypeToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddApplicationTypeToClientMetadataTest.java
@@ -24,7 +24,7 @@ import org.testng.annotations.Test;
 import com.nimbusds.openid.connect.sdk.rp.ApplicationType;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link AddApplicationTypeToClientMetadata}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAttributesToClaimsSetTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAttributesToClaimsSetTest.java
index 070728fb..604b96b1 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAttributesToClaimsSetTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAttributesToClaimsSetTest.java
@@ -38,7 +38,6 @@ import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Multimap;
 import com.nimbusds.oauth2.sdk.ParseException;
 
-import net.shibboleth.ext.spring.testing.MockApplicationContext;
 import net.shibboleth.idp.attribute.AttributesMapContainer;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
@@ -49,15 +48,16 @@ import net.shibboleth.idp.attribute.transcoding.BasicNamingFunction;
 import net.shibboleth.idp.attribute.transcoding.TranscodingRule;
 import net.shibboleth.idp.attribute.transcoding.impl.AttributeTranscoderRegistryImpl;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseConsentContext;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.attribute.transcoding.AbstractOIDCAttributeTranscoder;
 import net.shibboleth.oidc.attribute.transcoding.OIDCAttributeTranscoder;
 import net.shibboleth.oidc.attribute.transcoding.impl.OIDCStringAttributeTranscoder;
 import net.shibboleth.oidc.profile.config.impl.DefaultOIDCAuthorizationConfiguration;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.test.service.MockReloadableService;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.testing.MockApplicationContext;
+import net.shibboleth.shared.testing.MockReloadableService;
 
 /** {@link AddAttributesToClaimsSet} unit test. */
 public class AddAttributesToClaimsSetTest extends BaseOIDCResponseActionTest {
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthTimeToIDTokenTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthTimeToIDTokenTest.java
index 80380883..f61840a7 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthTimeToIDTokenTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthTimeToIDTokenTest.java
@@ -22,7 +22,7 @@ import java.time.temporal.ChronoUnit;
 import java.util.Date;
 
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 import org.opensaml.profile.action.EventIds;
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthorizationCodeHashToIDTokenTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthorizationCodeHashToIDTokenTest.java
index b8a3cb95..b1740530 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthorizationCodeHashToIDTokenTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddAuthorizationCodeHashToIDTokenTest.java
@@ -25,7 +25,7 @@ import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.ResponseContex
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.security.jose.SignatureSigningParameters;
 import net.shibboleth.oidc.security.jose.context.SecurityParametersContext;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.security.credential.Credential;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddClientNameToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddClientNameToClientMetadataTest.java
index 6287bc19..847054ad 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddClientNameToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddClientNameToClientMetadataTest.java
@@ -27,7 +27,7 @@ import com.nimbusds.langtag.LangTag;
 import com.nimbusds.langtag.LangTagException;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link AddClientNameToClientMetadata}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddContactsToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddContactsToClientMetadataTest.java
index 26ed573e..005b6c33 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddContactsToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddContactsToClientMetadataTest.java
@@ -26,7 +26,7 @@ import org.testng.annotations.Test;
 
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link AddContactsToClientMetadata}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddGrantTypeToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddGrantTypeToClientMetadataTest.java
index f7d3c78b..299c3684 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddGrantTypeToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddGrantTypeToClientMetadataTest.java
@@ -36,7 +36,7 @@ import com.nimbusds.oauth2.sdk.GrantType;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link AddGrantTypeToClientMetadata}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddIDTokenShellTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddIDTokenShellTest.java
index 91129692..eadf2124 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddIDTokenShellTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddIDTokenShellTest.java
@@ -18,7 +18,7 @@
 package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddJwksToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddJwksToClientMetadataTest.java
index 9702651d..467ffe37 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddJwksToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddJwksToClientMetadataTest.java
@@ -23,12 +23,12 @@ import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.Collections;
 
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.protocol.HttpContext;
+import org.apache.hc.client5.http.ClientProtocolException;
+import org.apache.hc.client5.http.classic.HttpClient;
+import org.apache.hc.core5.http.ClassicHttpRequest;
+import org.apache.hc.core5.http.ClassicHttpResponse;
+import org.apache.hc.core5.http.io.entity.StringEntity;
+import org.apache.hc.core5.http.protocol.HttpContext;
 import org.mockito.Mockito;
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.security.httpclient.HttpClientSecurityParameters;
@@ -66,10 +66,10 @@ public class AddJwksToClientMetadataTest extends BaseOIDCClientMetadataPopulatio
     }
     
     protected HttpClient buildMockHttpClient(String contents) throws ClientProtocolException, IOException {
-        HttpResponse mockResponse = Mockito.mock(HttpResponse.class);
+        ClassicHttpResponse mockResponse = Mockito.mock(ClassicHttpResponse.class);
         Mockito.when(mockResponse.getEntity()).thenReturn(new StringEntity(contents));
         HttpClient mockClient = Mockito.mock(HttpClient.class);
-        Mockito.when(mockClient.execute((HttpUriRequest) Mockito.any(),
+        Mockito.when(mockClient.executeOpen(Mockito.any(), (ClassicHttpRequest) Mockito.any(),
                 (HttpContext) Mockito.any())).thenReturn(mockResponse);
         return mockClient;
     }
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddNonceToIDTokenTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddNonceToIDTokenTest.java
index 8e377ec5..25b317eb 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddNonceToIDTokenTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddNonceToIDTokenTest.java
@@ -20,7 +20,7 @@ package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 import java.time.Instant;
 
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.profile.action.EventIds;
 import org.springframework.webflow.execution.Event;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRedirectUrisToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRedirectUrisToClientMetadataTest.java
index 0bab60e2..7857abe3 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRedirectUrisToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRedirectUrisToClientMetadataTest.java
@@ -28,7 +28,7 @@ import org.testng.annotations.Test;
 
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link AddRedirectUrisToClientMetadata}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRemainingClaimsToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRemainingClaimsToClientMetadataTest.java
index eabeecc4..758218cd 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRemainingClaimsToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRemainingClaimsToClientMetadataTest.java
@@ -28,7 +28,7 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 import net.minidev.json.JSONObject;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistrationMetadataPolicyContext;
 import net.shibboleth.oidc.metadata.policy.MetadataPolicy;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link AddRemainingClaimsToClientMetadata}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestObjectSecurityConfigurationToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestObjectSecurityConfigurationToClientMetadataTest.java
index e7583a82..20499a89 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestObjectSecurityConfigurationToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestObjectSecurityConfigurationToClientMetadataTest.java
@@ -34,7 +34,7 @@ import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.jwa.support.EncryptionConstants;
 import net.shibboleth.oidc.jwa.support.KeyManagementConstants;
 import net.shibboleth.oidc.jwa.support.SignatureConstants;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link AddRequestObjectSecurityConfigurationToClientMetadata}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestUrisToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestUrisToClientMetadataTest.java
index 37a480c5..f2662360 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestUrisToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddRequestUrisToClientMetadataTest.java
@@ -27,7 +27,7 @@ import org.testng.annotations.Test;
 
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link AddRequestUrisToClientMetadata}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddResponseTypesToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddResponseTypesToClientMetadataTest.java
index 3fa71794..716833f6 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddResponseTypesToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddResponseTypesToClientMetadataTest.java
@@ -39,7 +39,7 @@ import com.nimbusds.openid.connect.sdk.OIDCResponseTypeValue;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link AddResponseTypesToClientMetadata}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddScopeToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddScopeToClientMetadataTest.java
index 34d74ac7..724bf447 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddScopeToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddScopeToClientMetadataTest.java
@@ -25,8 +25,8 @@ import com.nimbusds.oauth2.sdk.Scope;
 import com.nimbusds.openid.connect.sdk.OIDCScopeValue;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 /**
  * Unit test for {@link AddScopeToClientMetadata}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSecurityConfigurationToClientMetadataTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSecurityConfigurationToClientMetadataTest.java
index cd23cbd2..553afaeb 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSecurityConfigurationToClientMetadataTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddSecurityConfigurationToClientMetadataTest.java
@@ -32,8 +32,6 @@ import com.nimbusds.jose.JWEAlgorithm;
 import com.nimbusds.jose.JWSAlgorithm;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.idp.profile.config.ProfileConfiguration;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.jwa.support.EncryptionConstants;
 import net.shibboleth.oidc.jwa.support.KeyManagementConstants;
@@ -41,7 +39,9 @@ import net.shibboleth.oidc.jwa.support.SignatureConstants;
 import net.shibboleth.oidc.profile.config.JSONSecurityConfiguration;
 import net.shibboleth.oidc.security.jose.EncryptionConfiguration;
 import net.shibboleth.oidc.security.jose.SignatureSigningConfiguration;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.profile.config.ProfileConfiguration;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link AddSecurityConfigurationToClientMetadata}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenDeliveryAttributesToClaimsSetTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenDeliveryAttributesToClaimsSetTest.java
index 407e5977..63f38faf 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenDeliveryAttributesToClaimsSetTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/AddTokenDeliveryAttributesToClaimsSetTest.java
@@ -21,7 +21,7 @@ import java.time.Instant;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseTokenClaimsContext;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.profile.action.EventIds;
 import org.springframework.webflow.execution.Event;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCClientMetadataPopulationTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCClientMetadataPopulationTest.java
index 744caf80..766c21c2 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCClientMetadataPopulationTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCClientMetadataPopulationTest.java
@@ -33,8 +33,8 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistratio
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 /**
  * Base class for testing actions extending {@link AbstractOIDCClientMetadataPopulationAction}.
@@ -54,8 +54,8 @@ public abstract class BaseOIDCClientMetadataPopulationTest {
         profileRequestCtx.setOutboundMessageContext(new MessageContext());
         final OIDCClientRegistrationResponseContext responseCtx = new OIDCClientRegistrationResponseContext();
         final OIDCClientRegistrationMetadataPolicyContext policyCtx = 
-                profileRequestCtx.getInboundMessageContext().getSubcontext(
-                        OIDCClientRegistrationMetadataPolicyContext.class, true);
+                profileRequestCtx.getInboundMessageContext().ensureSubcontext(
+                        OIDCClientRegistrationMetadataPolicyContext.class);
         responseCtx.setClientMetadata(output);
         policyCtx.setPolicyEnforcedMetadata(input);
         profileRequestCtx.getOutboundMessageContext().addSubcontext(responseCtx);
@@ -92,6 +92,7 @@ public abstract class BaseOIDCClientMetadataPopulationTest {
     protected ContextDataLookupFunction<ProfileRequestContext,OIDCClientMetadata> initializeNullLookup()
             throws ComponentInitializationException {
         setUpContext(new OIDCClientMetadata(), new OIDCClientMetadata());
+        @SuppressWarnings("unchecked")
         final ContextDataLookupFunction<ProfileRequestContext,OIDCClientMetadata> lookup =
                 Mockito.mock(ContextDataLookupFunction.class);
         Mockito.when(lookup.apply((ProfileRequestContext)Mockito.any())).thenReturn(null);
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCRegistrationRequestTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCRegistrationRequestTest.java
index c2848927..8bece2d2 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCRegistrationRequestTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCRegistrationRequestTest.java
@@ -24,7 +24,7 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientRegistrationRequest;
 
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Base class for all unit tests related to dealing with OpenID Connect Dynamic Client Registration requests.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCResponseActionTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCResponseActionTest.java
index 99ce1f9c..4d7d622a 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCResponseActionTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BaseOIDCResponseActionTest.java
@@ -34,7 +34,7 @@ import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.opensaml.security.credential.Credential;
-import org.opensaml.storage.RevocationCache;
+import org.opensaml.storage.impl.StorageServiceRevocationCache;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.webflow.execution.RequestContext;
 import org.testng.annotations.BeforeMethod;
@@ -58,20 +58,20 @@ import com.nimbusds.openid.connect.sdk.claims.UserInfo;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.ext.spring.resource.ResourceHelper;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
 import net.shibboleth.oidc.profile.config.impl.DefaultOIDCAuthorizationConfiguration;
 import net.shibboleth.oidc.security.credential.BasicJWKCredentialFactoryBean;
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.security.DataSealer;
-import net.shibboleth.utilities.java.support.security.IdentifierGenerationStrategy;
-import net.shibboleth.utilities.java.support.security.impl.BasicKeystoreKeyStrategy;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.security.DataSealer;
+import net.shibboleth.shared.security.IdentifierGenerationStrategy;
+import net.shibboleth.shared.security.impl.BasicKeystoreKeyStrategy;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.shared.spring.resource.ResourceHelper;
 
 /** base class for tests expecting to have inbound and outbound msg ctxs etc in place. */
 public abstract class BaseOIDCResponseActionTest extends OpenSAMLInitBaseTestCase {
@@ -161,7 +161,7 @@ public abstract class BaseOIDCResponseActionTest extends OpenSAMLInitBaseTestCas
         final OIDCClientInformation information =
                 new OIDCClientInformation(new ClientID(clientId), new Date(), new OIDCClientMetadata(), new Secret());
         metadataCtx.setClientInformation(information);
-        rpCtx = profileRequestCtx.getSubcontext(RelyingPartyContext.class, true);
+        rpCtx = profileRequestCtx.ensureSubcontext(RelyingPartyContext.class);
         rpCtx.setRelyingPartyId(clientId);
         respCtx.setSubject(subject);
         rpCtx.setProfileConfig(new DefaultOIDCAuthorizationConfiguration());
@@ -238,7 +238,7 @@ public abstract class BaseOIDCResponseActionTest extends OpenSAMLInitBaseTestCas
                 .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
     }
 
-    public class MockRevocationCache extends RevocationCache {
+    public class MockRevocationCache extends StorageServiceRevocationCache {
 
         boolean revoke;
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildClientInformationTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildClientInformationTest.java
index cb670a7f..c8ee626d 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildClientInformationTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildClientInformationTest.java
@@ -34,7 +34,7 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformationResponse;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCClientRegistrationResponseContext;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link BuildClientInformation}.
@@ -63,7 +63,7 @@ public class BuildClientInformationTest {
         messageCtx = new MessageContext();
         Assert.assertNull(messageCtx.getMessage());
         profileRequestCtx.setOutboundMessageContext(messageCtx);
-        registrationCtx = profileRequestCtx.getOutboundMessageContext().getSubcontext(OIDCClientRegistrationResponseContext.class, true);
+        registrationCtx = profileRequestCtx.getOutboundMessageContext().ensureSubcontext(OIDCClientRegistrationResponseContext.class);
         clientId = "mockClientId";
         clientSecret = "mockSecret";
         metadata = new OIDCClientMetadata();
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildJSONErrorResponseFromEventTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildJSONErrorResponseFromEventTest.java
index 4caf49d6..7878821b 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildJSONErrorResponseFromEventTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/BuildJSONErrorResponseFromEventTest.java
@@ -35,7 +35,7 @@ import com.nimbusds.oauth2.sdk.ErrorObject;
 import net.shibboleth.idp.plugin.oidc.op.messaging.JSONErrorResponse;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link BuildJSONErrorResponseFromEvent}.
@@ -51,6 +51,7 @@ public class BuildJSONErrorResponseFromEventTest {
             throws ComponentInitializationException {
         BuildJSONErrorResponseFromEvent action = new BuildJSONErrorResponseFromEvent();
         if (eventId != null) {
+            @SuppressWarnings("unchecked")
             Function<ProfileRequestContext, EventContext> function = Mockito.mock(Function.class);
             EventContext eventContext = new EventContext();
             eventContext.setEvent(eventId);
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/CheckRedirectUrisTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/CheckRedirectUrisTest.java
index 4becdf6c..445e5a84 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/CheckRedirectUrisTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/CheckRedirectUrisTest.java
@@ -25,12 +25,12 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.protocol.HttpContext;
+import org.apache.hc.client5.http.ClientProtocolException;
+import org.apache.hc.client5.http.classic.HttpClient;
+import org.apache.hc.core5.http.ClassicHttpRequest;
+import org.apache.hc.core5.http.ClassicHttpResponse;
+import org.apache.hc.core5.http.HttpEntity;
+import org.apache.hc.core5.http.protocol.HttpContext;
 import org.mockito.Mockito;
 import org.opensaml.profile.action.EventIds;
 import org.testng.Assert;
@@ -43,7 +43,7 @@ import com.nimbusds.openid.connect.sdk.rp.OIDCClientRegistrationRequest;
 
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /**
  * Unit tests for {@link CheckRedirectURIs}.
@@ -169,13 +169,13 @@ public class CheckRedirectUrisTest extends BaseOIDCRegistrationRequestTest {
     protected HttpClient buildMockHttpClient(final String contents) throws ClientProtocolException, IOException {
         final HttpClient mockClient = Mockito.mock(HttpClient.class);
         if (contents == null) {
-            Mockito.when(mockClient.execute((HttpUriRequest)Mockito.any())).thenThrow(new IOException("mock"));
+            Mockito.when(mockClient.executeOpen(Mockito.any(), (ClassicHttpRequest)Mockito.any(), Mockito.any())).thenThrow(new IOException("mock"));
         } else {
-            final HttpResponse httpResponse = Mockito.mock(HttpResponse.class);
+            final ClassicHttpResponse httpResponse = Mockito.mock(ClassicHttpResponse.class);
             final HttpEntity httpEntity = Mockito.mock(HttpEntity.class);
             Mockito.when(httpEntity.getContent()).thenReturn(new ByteArrayInputStream(contents.getBytes()));
             Mockito.when(httpResponse.getEntity()).thenReturn(httpEntity);
-            Mockito.when(mockClient.execute((HttpUriRequest)Mockito.any(), 
+            Mockito.when(mockClient.executeOpen(Mockito.any(), (ClassicHttpRequest)Mockito.any(), 
                     (HttpContext)Mockito.any())).thenReturn(httpResponse);
         }
         return mockClient;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundAuthenticationResponseMessageTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundAuthenticationResponseMessageTest.java
index cc0ebb26..9a799897 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundAuthenticationResponseMessageTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundAuthenticationResponseMessageTest.java
@@ -22,7 +22,7 @@ import java.net.URISyntaxException;
 import java.time.Instant;
 
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.EventIds;
 import org.springframework.webflow.execution.Event;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundDiscoveryResponseTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundDiscoveryResponseTest.java
index 0cce4b49..89b7e165 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundDiscoveryResponseTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundDiscoveryResponseTest.java
@@ -21,9 +21,6 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import org.mockito.Mockito;
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.springframework.core.io.ClassPathResource;
@@ -43,6 +40,8 @@ import com.nimbusds.oauth2.sdk.Scope;
 import com.nimbusds.openid.connect.sdk.SubjectType;
 import com.nimbusds.openid.connect.sdk.op.OIDCProviderMetadata;
 
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 import net.shibboleth.idp.plugin.oidc.op.messaging.JSONSuccessResponse;
 import net.shibboleth.idp.plugin.oidc.op.metadata.impl.DynamicFilesystemProviderMetadataResolver;
 import net.shibboleth.idp.plugin.oidc.op.metadata.impl.FilesystemProviderMetadataResolver;
@@ -51,8 +50,8 @@ import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.ProviderMetadataResol
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.primitive.NonnullSupplier;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.primitive.NonnullSupplier;
 
 /**
  * Unit tests for {@link FormOutboundDiscoveryResponse}.
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundTokenResponseMessageTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundTokenResponseMessageTest.java
index acc15a8d..7da4a0c5 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundTokenResponseMessageTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/FormOutboundTokenResponseMessageTest.java
@@ -22,7 +22,7 @@ import java.time.Duration;
 import java.time.Instant;
 
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.EventIds;
 import org.springframework.webflow.execution.Event;
@@ -87,6 +87,7 @@ public class FormOutboundTokenResponseMessageTest extends BaseOIDCResponseAction
             throws ComponentInitializationException, URISyntaxException, ParseException, JOSEException {
         respCtx.setProcessedToken(null);
         final Event event = action.execute(requestCtx);
+        ActionTestingSupport.assertProceedEvent(event);
         Assert.assertTrue(((MessageContext) respCtx.getParent()).getMessage() instanceof TokenResponse);
     }
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeAuthenticationContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeAuthenticationContextTest.java
index 4cb3ed75..d7a3690a 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeAuthenticationContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeAuthenticationContextTest.java
@@ -23,8 +23,8 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationRes
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 import java.net.URI;
 import java.time.Duration;
@@ -97,7 +97,7 @@ public class InitializeAuthenticationContextTest {
         prc.getInboundMessageContext().setMessage(req);
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
-        final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class, false);
+        final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class);
         Assert.assertNotNull(authnCtx);
         Assert.assertFalse(authnCtx.isForceAuthn());
         Assert.assertTrue(authnCtx.isPassive());
@@ -111,7 +111,7 @@ public class InitializeAuthenticationContextTest {
         prc.getInboundMessageContext().setMessage(req);
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
-        final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class, false);
+        final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class);
         Assert.assertNotNull(authnCtx);
         Assert.assertFalse(authnCtx.isForceAuthn());
         Assert.assertFalse(authnCtx.isPassive());
@@ -128,7 +128,7 @@ public class InitializeAuthenticationContextTest {
         prc.getInboundMessageContext().setMessage(req);
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
-        final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class, false);
+        final AuthenticationContext authnCtx = prc.getSubcontext(AuthenticationContext.class);
         Assert.assertNotNull(authnCtx);
         Assert.assertTrue(authnCtx.isForceAuthn());
         Assert.assertFalse(authnCtx.isPassive());
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundAuthenticationResponseMessageContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundAuthenticationResponseMessageContextTest.java
index 7dda631c..86d33f1e 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundAuthenticationResponseMessageContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundAuthenticationResponseMessageContextTest.java
@@ -17,12 +17,12 @@
 
 package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.idp.saml.profile.context.navigate.SAMLMetadataContextLookupFunction;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.saml.profile.context.navigate.SAMLMetadataContextLookupFunction;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -47,7 +47,7 @@ import com.nimbusds.openid.connect.sdk.AuthenticationRequest;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** {@link InitializeOutboundAuthenticationResponseMessageContext} unit test. */
 public class InitializeOutboundAuthenticationResponseMessageContextTest {
@@ -68,7 +68,7 @@ public class InitializeOutboundAuthenticationResponseMessageContextTest {
         action.initialize();
         requestCtx = new RequestContextBuilder().setInboundMessage(request).buildRequestContext();
         prc = new WebflowRequestContextProfileRequestContextLookup().apply(requestCtx);
-        prc.getSubcontext(RelyingPartyContext.class, true);
+        prc.ensureSubcontext(RelyingPartyContext.class);
         metadataCtx = (OIDCMetadataContext) prc.getInboundMessageContext().addSubcontext(new OIDCMetadataContext());
         OIDCClientInformation information =
                 new OIDCClientInformation(new ClientID("clientId"), new Date(), new OIDCClientMetadata(), new Secret());
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundResponseMessageContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundResponseMessageContextTest.java
index 6a26bb1a..f4d16ac5 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundResponseMessageContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeOutboundResponseMessageContextTest.java
@@ -28,7 +28,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** {@link InitializeOutboundResponseMessageContext} unit test. */
 public class InitializeOutboundResponseMessageContextTest {
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRelyingPartyContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRelyingPartyContextTest.java
index 7ba70cf5..6147287e 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRelyingPartyContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeRelyingPartyContextTest.java
@@ -17,11 +17,11 @@
 
 package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
+import net.shibboleth.profile.context.RelyingPartyContext;
 
 import java.net.URI;
 import java.util.Date;
@@ -43,8 +43,8 @@ import com.nimbusds.openid.connect.sdk.AuthenticationRequest;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 /** {@link InitializeRelyingPartyContext} unit test. */
 public class InitializeRelyingPartyContextTest {
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeSubjectContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeSubjectContextTest.java
index b79496e0..4d3d44d6 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeSubjectContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeSubjectContextTest.java
@@ -22,7 +22,7 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import java.net.URI;
 import java.net.URISyntaxException;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeUnverifiedRelyingPartyContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeUnverifiedRelyingPartyContextTest.java
index 89be56cf..3d8ab1c5 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeUnverifiedRelyingPartyContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/InitializeUnverifiedRelyingPartyContextTest.java
@@ -17,10 +17,10 @@
 
 package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
+import net.shibboleth.profile.context.RelyingPartyContext;
 
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.springframework.webflow.execution.Event;
@@ -29,8 +29,8 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 /** {@link InitializeUnverifiedRelyingPartyContext} unit test. */
 public class InitializeUnverifiedRelyingPartyContextTest {
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDTokenTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDTokenTest.java
index 51474ddb..1ced2fbf 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDTokenTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ManipulateClaimsForIDTokenTest.java
@@ -37,7 +37,7 @@ import com.nimbusds.openid.connect.sdk.claims.IDTokenClaimsSet;
 import net.shibboleth.idp.profile.IdPEventIds;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.config.impl.DefaultOIDCAuthorizationConfiguration;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** {@link ManipulateClaimsForIDToken} unit test. */
 public class ManipulateClaimsForIDTokenTest extends BaseOIDCResponseActionTest {
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ProcessRequestedAuthnContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ProcessRequestedAuthnContextTest.java
index 29ce9e48..aee56b61 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ProcessRequestedAuthnContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ProcessRequestedAuthnContextTest.java
@@ -23,7 +23,7 @@ import net.shibboleth.idp.authn.context.PreferredPrincipalContext;
 import net.shibboleth.idp.authn.context.RequestedPrincipalContext;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.authn.principal.AuthenticationContextClassReferencePrincipal;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.List;
@@ -102,7 +102,7 @@ public class ProcessRequestedAuthnContextTest extends BaseOIDCResponseActionTest
         AuthenticationContext ctx =
                 (AuthenticationContext) profileRequestCtx.addSubcontext(new AuthenticationContext());
         final Event event = action.execute(requestCtx);
-        PreferredPrincipalContext rpCtx = ctx.getSubcontext(PreferredPrincipalContext.class, false);
+        PreferredPrincipalContext rpCtx = ctx.getSubcontext(PreferredPrincipalContext.class);
         ActionTestingSupport.assertProceedEvent(event);
         Assert.assertNotNull(rpCtx);
         Assert.assertTrue(rpCtx.getPreferredPrincipals().contains(new AuthenticationContextClassReferencePrincipal("1")));
@@ -127,7 +127,7 @@ public class ProcessRequestedAuthnContextTest extends BaseOIDCResponseActionTest
         AuthenticationContext ctx =
                 (AuthenticationContext) profileRequestCtx.addSubcontext(new AuthenticationContext());
         final Event event = action.execute(requestCtx);
-        PreferredPrincipalContext ppCtx = ctx.getSubcontext(PreferredPrincipalContext.class, false);
+        PreferredPrincipalContext ppCtx = ctx.getSubcontext(PreferredPrincipalContext.class);
         ActionTestingSupport.assertProceedEvent(event);
         Assert.assertNotNull(ppCtx);
         Assert.assertTrue(ppCtx.getPreferredPrincipals().contains(new AuthenticationContextClassReferencePrincipal("1")));
@@ -154,7 +154,7 @@ public class ProcessRequestedAuthnContextTest extends BaseOIDCResponseActionTest
         AuthenticationContext ctx =
                 (AuthenticationContext) profileRequestCtx.addSubcontext(new AuthenticationContext());
         final Event event = action.execute(requestCtx);
-        RequestedPrincipalContext rpCtx = ctx.getSubcontext(RequestedPrincipalContext.class, false);
+        RequestedPrincipalContext rpCtx = ctx.getSubcontext(RequestedPrincipalContext.class);
         ActionTestingSupport.assertProceedEvent(event);
         Assert.assertNotNull(rpCtx);
         Assert.assertTrue(rpCtx.getRequestedPrincipals().contains(new AuthenticationContextClassReferencePrincipal("1")));
@@ -177,7 +177,7 @@ public class ProcessRequestedAuthnContextTest extends BaseOIDCResponseActionTest
         AuthenticationContext ctx =
                 (AuthenticationContext) profileRequestCtx.addSubcontext(new AuthenticationContext());
         final Event event = action.execute(requestCtx);
-        RequestedPrincipalContext rpCtx = ctx.getSubcontext(RequestedPrincipalContext.class, false);
+        RequestedPrincipalContext rpCtx = ctx.getSubcontext(RequestedPrincipalContext.class);
         ActionTestingSupport.assertProceedEvent(event);
         Assert.assertNull(rpCtx);
     }
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/RevokeConsentTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/RevokeConsentTest.java
index b259b053..f87670c5 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/RevokeConsentTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/RevokeConsentTest.java
@@ -19,8 +19,8 @@ package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 
 import net.shibboleth.idp.consent.context.ConsentManagementContext;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 import java.net.URI;
 import java.security.NoSuchAlgorithmException;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceFromAuthzCodeToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceFromAuthzCodeToResponseContextTest.java
index 1ee2cf24..0685c36b 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceFromAuthzCodeToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceFromAuthzCodeToResponseContextTest.java
@@ -19,8 +19,9 @@ package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.security.DataSealerException;
+
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.NoSuchAlgorithmException;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceToResponseContextTest.java
index 200f2a39..6b5fda5f 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationContextClassReferenceToResponseContextTest.java
@@ -26,7 +26,7 @@ import net.shibboleth.idp.authn.context.RequestedPrincipalContext;
 import net.shibboleth.idp.authn.impl.DefaultAuthenticationResultSerializer;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.authn.principal.AuthenticationContextClassReferencePrincipal;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -63,7 +63,7 @@ public class SetAuthenticationContextClassReferenceToResponseContextTest extends
         final RequestedPrincipalContext rpCtx = new RequestedPrincipalContext();
         rpCtx.setOperator(AuthnContextComparisonTypeEnumeration.EXACT.toString());
         rpCtx.setRequestedPrincipals(principals);
-        profileRequestCtx.getSubcontext(AuthenticationContext.class, true).addSubcontext(rpCtx, true);
+        profileRequestCtx.ensureSubcontext(AuthenticationContext.class).addSubcontext(rpCtx, true);
         
         final Subject authSubject = new Subject();
         authSubject.getPrincipals().add(new AuthenticationContextClassReferencePrincipal("2"));
@@ -98,7 +98,7 @@ public class SetAuthenticationContextClassReferenceToResponseContextTest extends
         profileRequestCtx.getSubcontext(AuthenticationContext.class).removeSubcontext(RequestedPrincipalContext.class);
         final PreferredPrincipalContext ppCtx = new PreferredPrincipalContext();
         ppCtx.setPreferredPrincipals(principals);
-        profileRequestCtx.getSubcontext(AuthenticationContext.class, true).addSubcontext(ppCtx, true);
+        profileRequestCtx.ensureSubcontext(AuthenticationContext.class).addSubcontext(ppCtx, true);
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
         Assert.assertEquals(respCtx.getAcr(), new ACR("2"));
@@ -114,7 +114,7 @@ public class SetAuthenticationContextClassReferenceToResponseContextTest extends
         principals.clear();
         principals.add(new AuthenticationContextClassReferencePrincipal("1"));
         ppCtx.setPreferredPrincipals(principals);
-        profileRequestCtx.getSubcontext(AuthenticationContext.class, true).addSubcontext(ppCtx, true);
+        profileRequestCtx.ensureSubcontext(AuthenticationContext.class).addSubcontext(ppCtx, true);
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
         Assert.assertTrue(respCtx.getAcr().equals(new ACR("2")));
@@ -130,7 +130,7 @@ public class SetAuthenticationContextClassReferenceToResponseContextTest extends
         principals.clear();
         principals.add(new AuthenticationContextClassReferencePrincipal("1"));
         ppCtx.setPreferredPrincipals(principals);
-        profileRequestCtx.getSubcontext(AuthenticationContext.class, true).addSubcontext(ppCtx, true);
+        profileRequestCtx.ensureSubcontext(AuthenticationContext.class).addSubcontext(ppCtx, true);
         AuthenticationResult result = new AuthenticationResult("flowId", new Subject());
         profileRequestCtx.getSubcontext(AuthenticationContext.class).setAuthenticationResult(result);
         final Event event = action.execute(requestCtx);
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationTimeToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationTimeToResponseContextTest.java
index 04cd34df..45dec359 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationTimeToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetAuthenticationTimeToResponseContextTest.java
@@ -20,7 +20,7 @@ package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 import net.shibboleth.idp.authn.AuthenticationResult;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import java.time.Instant;
 
@@ -61,7 +61,7 @@ public class SetAuthenticationTimeToResponseContextTest extends BaseOIDCResponse
     @Test
     public void testSuccess() throws ComponentInitializationException {
         init();
-        AuthenticationContext authCtx = profileRequestCtx.getSubcontext(AuthenticationContext.class, true);
+        AuthenticationContext authCtx = profileRequestCtx.ensureSubcontext(AuthenticationContext.class);
         AuthenticationResult result = new AuthenticationResult("id", new Subject());
         result.setAuthenticationInstant(Instant.ofEpochMilli(1000));
         authCtx.setAuthenticationResult(result);
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentFromTokenToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentFromTokenToResponseContextTest.java
index bec93d20..c1096121 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentFromTokenToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentFromTokenToResponseContextTest.java
@@ -22,7 +22,7 @@ import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationRes
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.time.Instant;
@@ -55,7 +55,7 @@ public class SetConsentFromTokenToResponseContextTest extends BaseOIDCResponseAc
         final Event event = action.execute(requestCtx);
         respCtx.removeSubcontext(OIDCAuthenticationResponseConsentContext.class);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNull(respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class, false));
+        Assert.assertNull(respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class));
     }
 
     /**
@@ -84,7 +84,7 @@ public class SetConsentFromTokenToResponseContextTest extends BaseOIDCResponseAc
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
         final OIDCAuthenticationResponseConsentContext ctx =
-                respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class, false);
+                respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class);
         Assert.assertNotNull(ctx);
         Assert.assertEquals(ctx.getConsentedAttributes(), consentedClaims);
     }
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentToResponseContextTest.java
index 0461f9bc..e1df64c5 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetConsentToResponseContextTest.java
@@ -29,10 +29,10 @@ import com.google.common.base.Predicates;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.context.AttributeContext;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseConsentContext;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.config.impl.DefaultOIDCAuthorizationConfiguration;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** {@link SetConsentToResponseContext} unit test. */
 public class SetConsentToResponseContextTest extends BaseOIDCResponseActionTest {
@@ -65,7 +65,7 @@ public class SetConsentToResponseContextTest extends BaseOIDCResponseActionTest
         init(false, false);
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNull(respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class, false));
+        Assert.assertNull(respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class));
     }
 
     /**
@@ -79,7 +79,7 @@ public class SetConsentToResponseContextTest extends BaseOIDCResponseActionTest
         profileRequestCtx.getSubcontext(RelyingPartyContext.class).removeSubcontext(AttributeContext.class);
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNull(respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class, false));
+        Assert.assertNull(respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class));
     }
 
     /**
@@ -92,7 +92,7 @@ public class SetConsentToResponseContextTest extends BaseOIDCResponseActionTest
         init(true, false);
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNull(respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class, false));
+        Assert.assertNull(respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class));
     }
 
     /**
@@ -106,7 +106,7 @@ public class SetConsentToResponseContextTest extends BaseOIDCResponseActionTest
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
         final OIDCAuthenticationResponseConsentContext ctx =
-                respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class, false);
+                respCtx.getSubcontext(OIDCAuthenticationResponseConsentContext.class);
         Assert.assertNotNull(ctx);
         Assert.assertTrue(ctx.getConsentedAttributes().contains("1"));
         Assert.assertTrue(ctx.getConsentedAttributes().contains("2"));
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRefreshTokenToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRefreshTokenToResponseContextTest.java
index 7ce13b18..1d845169 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRefreshTokenToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRefreshTokenToResponseContextTest.java
@@ -24,11 +24,11 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.RefreshTokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.security.DataSealerException;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -44,8 +44,8 @@ import java.util.function.Function;
 
 import org.opensaml.profile.action.EventIds;
 import org.opensaml.profile.context.ProfileRequestContext;
-import org.opensaml.storage.RevocationCache;
 import org.opensaml.storage.impl.MemoryStorageService;
+import org.opensaml.storage.impl.StorageServiceRevocationCache;
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
@@ -60,7 +60,7 @@ public class SetRefreshTokenToResponseContextTest extends BaseOIDCResponseAction
 
     private SetRefreshTokenToResponseContext action;
 
-    RevocationCache revocationCache;
+    StorageServiceRevocationCache revocationCache;
 
     private boolean enforceRotation;
 
@@ -86,7 +86,7 @@ public class SetRefreshTokenToResponseContextTest extends BaseOIDCResponseAction
         final MemoryStorageService storageService = new MemoryStorageService();
         storageService.setId("id");
         storageService.initialize();
-        revocationCache = new RevocationCache();
+        revocationCache = new StorageServiceRevocationCache();
         revocationCache.setStorage(storageService);
         revocationCache.setId("mockCache");
         revocationCache.initialize();
@@ -335,7 +335,7 @@ public class SetRefreshTokenToResponseContextTest extends BaseOIDCResponseAction
     @Test
     public void testFailNoProfileConf()
             throws NoSuchAlgorithmException, ComponentInitializationException, URISyntaxException {
-        final RelyingPartyContext rpCtx = profileRequestCtx.getSubcontext(RelyingPartyContext.class, false);
+        final RelyingPartyContext rpCtx = profileRequestCtx.getSubcontext(RelyingPartyContext.class);
         rpCtx.setProfileConfig(null);
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertEvent(event, IdPEventIds.INVALID_PROFILE_CONFIG);
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedClaimsToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedClaimsToResponseContextTest.java
index 8c9fba72..32c97dc4 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedClaimsToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedClaimsToResponseContextTest.java
@@ -32,12 +32,13 @@ import com.nimbusds.openid.connect.sdk.OIDCClaimsRequest;
 import com.nimbusds.openid.connect.sdk.claims.ACR;
 
 import net.minidev.json.JSONObject;
+import net.shibboleth.idp.attribute.transcoding.impl.AttributeTranscoderRegistryImpl;
 import net.shibboleth.idp.authn.context.SubjectContext;
 import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.TokenRequestRequestedClaimsLookupFunction;
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.test.service.MockReloadableService;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.testing.MockReloadableService;
 
 /**
  * Unit tests for {@link SetRequestedClaimsToResponseContext}.
@@ -71,11 +72,14 @@ public class SetRequestedClaimsToResponseContextTest extends BaseOIDCResponseAct
         respCtx.setAuthorizationGrantClaimsSet(claims);
         respCtx.setAcr("0");
         respCtx.setRedirectURI(new URI("http://example.com"));
+        final AttributeTranscoderRegistryImpl registry = new AttributeTranscoderRegistryImpl();
+        registry.setId("mockRegistryId");
+        registry.initialize();
         action = new SetRequestedClaimsToResponseContext();
-        action.setTranscoderRegistry(new MockReloadableService<>(null));
+        action.setTranscoderRegistry(new MockReloadableService<>(registry));
         action.setRequestedClaimsLookupStrategy(new TokenRequestRequestedClaimsLookupFunction());
         action.initialize();
-        final SubjectContext subjectCtx = profileRequestCtx.getSubcontext(SubjectContext.class, true);
+        final SubjectContext subjectCtx = profileRequestCtx.ensureSubcontext(SubjectContext.class);
         subjectCtx.setPrincipalName("userPrin");
     }
     
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedSubjectToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedSubjectToResponseContextTest.java
index cbbcfca4..147d8e60 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedSubjectToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetRequestedSubjectToResponseContextTest.java
@@ -18,7 +18,7 @@
 package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 import java.net.URI;
 import org.testng.Assert;
 import org.springframework.webflow.execution.Event;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSectorIdentifierForAttributeResolutionTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSectorIdentifierForAttributeResolutionTest.java
index f866f32a..d7f05831 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSectorIdentifierForAttributeResolutionTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSectorIdentifierForAttributeResolutionTest.java
@@ -23,8 +23,8 @@ import java.net.URISyntaxException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
@@ -57,7 +57,7 @@ public class SetSectorIdentifierForAttributeResolutionTest extends BaseOIDCRespo
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
         final AttributeResolutionContext attribCtx =
-                profileRequestCtx.getSubcontext(AttributeResolutionContext.class, true);
+                profileRequestCtx.ensureSubcontext(AttributeResolutionContext.class);
         Assert.assertEquals(attribCtx.getAttributeRecipientGroupID(), "public");
     }
 
@@ -72,7 +72,7 @@ public class SetSectorIdentifierForAttributeResolutionTest extends BaseOIDCRespo
         final Event event = action.execute(requestCtx);
         ActionTestingSupport.assertProceedEvent(event);
         final AttributeResolutionContext attribCtx =
-                profileRequestCtx.getSubcontext(AttributeResolutionContext.class, true);
+                profileRequestCtx.ensureSubcontext(AttributeResolutionContext.class);
         Assert.assertEquals(attribCtx.getAttributeRecipientGroupID(), "example.com");
     }
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSessionIdToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSessionIdToResponseContextTest.java
index 525138fe..6f1d7b00 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSessionIdToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSessionIdToResponseContextTest.java
@@ -21,9 +21,10 @@ import net.shibboleth.idp.plugin.oidc.op.profile.context.navigate.TokenRequestSe
 import net.shibboleth.idp.plugin.oidc.op.token.support.AccessTokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.UnmodifiableComponentException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.component.UnmodifiableComponentException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
+
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.NoSuchAlgorithmException;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSubjectToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSubjectToResponseContextTest.java
index 426c96ec..d18429be 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSubjectToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetSubjectToResponseContextTest.java
@@ -22,9 +22,10 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.AccessTokenClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.UnmodifiableComponentException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.component.UnmodifiableComponentException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
+
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.NoSuchAlgorithmException;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesFromTokenToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesFromTokenToResponseContextTest.java
index a34dabcc..2f82b333 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesFromTokenToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesFromTokenToResponseContextTest.java
@@ -20,8 +20,8 @@ package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseTokenClaimsContext;
 import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 import java.net.URI;
 import java.net.URISyntaxException;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesToResponseContextTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesToResponseContextTest.java
index 5449f881..4b89ec88 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesToResponseContextTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/SetTokenDeliveryAttributesToResponseContextTest.java
@@ -34,7 +34,6 @@ import org.testng.annotations.Test;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Multimap;
 
-import net.shibboleth.ext.spring.testing.MockApplicationContext;
 import net.shibboleth.idp.attribute.AttributesMapContainer;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
@@ -45,14 +44,15 @@ import net.shibboleth.idp.attribute.transcoding.BasicNamingFunction;
 import net.shibboleth.idp.attribute.transcoding.TranscodingRule;
 import net.shibboleth.idp.attribute.transcoding.impl.AttributeTranscoderRegistryImpl;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseTokenClaimsContext;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.attribute.transcoding.AbstractOIDCAttributeTranscoder;
 import net.shibboleth.oidc.attribute.transcoding.OIDCAttributeTranscoder;
 import net.shibboleth.oidc.attribute.transcoding.impl.OIDCStringAttributeTranscoder;
 import net.shibboleth.oidc.profile.config.impl.DefaultOIDCAuthorizationConfiguration;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.test.service.MockReloadableService;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.testing.MockApplicationContext;
+import net.shibboleth.shared.testing.MockReloadableService;
 
 /** {@link SetTokenDeliveryAttributesToResponseContext} unit test. */
 public class SetTokenDeliveryAttributesToResponseContextTest extends BaseOIDCResponseActionTest {
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantTest.java
index 124ac739..5f001df7 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantTest.java
@@ -26,9 +26,9 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.idp.profile.IdPEventIds;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
-import net.shibboleth.utilities.java.support.security.impl.SecureRandomIdentifierGenerationStrategy;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
+import net.shibboleth.shared.security.impl.SecureRandomIdentifierGenerationStrategy;
 
 import java.net.URI;
 import java.security.NoSuchAlgorithmException;
@@ -39,9 +39,10 @@ import java.util.function.Function;
 
 import org.mockito.Mockito;
 import org.opensaml.profile.context.ProfileRequestContext;
-import org.opensaml.storage.ReplayCache;
 import org.opensaml.storage.RevocationCache;
 import org.opensaml.storage.impl.MemoryStorageService;
+import org.opensaml.storage.impl.StorageServiceReplayCache;
+import org.opensaml.storage.impl.StorageServiceRevocationCache;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -137,7 +138,7 @@ public class ValidateGrantTest extends BaseOIDCResponseActionTest {
             action.setChainRevocationLifetimeLookupStrategy(revocationLifetimeLookup);
         }
         action.setRevocationCache(revocationCache);
-        final ReplayCache replayCache = new ReplayCache();
+        final StorageServiceReplayCache replayCache = new StorageServiceReplayCache();
         replayCache.setStorage(storageService);
         action.setReplayCache(replayCache);
         if (refreshTokensEnabled) {
@@ -310,7 +311,7 @@ public class ValidateGrantTest extends BaseOIDCResponseActionTest {
     }
 
     protected RevocationCache buildRevocationCache() throws ComponentInitializationException {
-        final RevocationCache revocationCache = new RevocationCache();
+        final StorageServiceRevocationCache revocationCache = new StorageServiceRevocationCache();
         revocationCache.setId("mockCache");
         revocationCache.setStorage(storageService);
         revocationCache.initialize();
@@ -390,7 +391,7 @@ public class ValidateGrantTest extends BaseOIDCResponseActionTest {
     @Test(expectedExceptions = ComponentInitializationException.class)
     public void testNoRevocationCache() throws ComponentInitializationException, NoSuchAlgorithmException {
         action = new ValidateGrant(getDataSealer());
-        final ReplayCache replayCache = new ReplayCache();
+        final StorageServiceReplayCache replayCache = new StorageServiceReplayCache();
         final MemoryStorageService storageService = new MemoryStorageService();
         storageService.setId("mockId");
         storageService.initialize();
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantTypeTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantTypeTest.java
index 185c5592..c684321a 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantTypeTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidateGrantTypeTest.java
@@ -35,11 +35,11 @@ import com.nimbusds.oauth2.sdk.token.RefreshToken;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientInformation;
 import com.nimbusds.openid.connect.sdk.rp.OIDCClientMetadata;
 
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.metadata.context.OIDCMetadataContext;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
 import net.shibboleth.oidc.profile.oauth2.config.impl.DefaultOAuth2TokenConfiguration;
+import net.shibboleth.profile.context.RelyingPartyContext;
 
 /** {@link ValidateGrantType} unit test. */
 public class ValidateGrantTypeTest extends BaseOIDCResponseActionTest {
@@ -58,7 +58,7 @@ public class ValidateGrantTypeTest extends BaseOIDCResponseActionTest {
         action = new ValidateGrantType();
         action.initialize();
         final OIDCMetadataContext oidcCtx =
-                profileRequestCtx.getInboundMessageContext().getSubcontext(OIDCMetadataContext.class, true);
+                profileRequestCtx.getInboundMessageContext().ensureSubcontext(OIDCMetadataContext.class);
         metaData = new OIDCClientMetadata();
         final Set<GrantType> grantTypes = new HashSet<>();
         grantTypes.add(GrantType.parse("refresh_token"));
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidatePKCETest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidatePKCETest.java
index 153c787c..9de0c398 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidatePKCETest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/ValidatePKCETest.java
@@ -43,7 +43,7 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.AuthorizeCodeClaimsSet;
 import net.shibboleth.idp.plugin.oidc.op.token.support.RefreshTokenClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.config.impl.DefaultOIDCAuthorizationConfiguration;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** {@link ValidatePKCE} unit test. */
 public class ValidatePKCETest extends BaseOIDCResponseActionTest {
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/VerifyRequestedSubjectIdentifierTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/VerifyRequestedSubjectIdentifierTest.java
index fac8edfe..2efbbafd 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/VerifyRequestedSubjectIdentifierTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/impl/VerifyRequestedSubjectIdentifierTest.java
@@ -19,7 +19,7 @@ package net.shibboleth.idp.plugin.oidc.op.profile.impl;
 
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 import org.testng.Assert;
 import org.springframework.webflow.execution.Event;
 import org.testng.annotations.Test;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeResolutionSubjectLookupFunctionTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeResolutionSubjectLookupFunctionTest.java
index dd835daf..941d3917 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeResolutionSubjectLookupFunctionTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/AttributeResolutionSubjectLookupFunctionTest.java
@@ -23,7 +23,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import net.shibboleth.ext.spring.testing.MockApplicationContext;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.StringAttributeValue;
@@ -32,7 +31,6 @@ import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.attribute.transcoding.BasicNamingFunction;
 import net.shibboleth.idp.attribute.transcoding.TranscodingRule;
 import net.shibboleth.idp.attribute.transcoding.impl.AttributeTranscoderRegistryImpl;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
 import net.shibboleth.idp.saml.attribute.transcoding.AbstractSAML2AttributeTranscoder;
@@ -41,9 +39,11 @@ import net.shibboleth.idp.saml.attribute.transcoding.impl.SAML2StringAttributeTr
 import net.shibboleth.oidc.attribute.transcoding.AbstractOIDCAttributeTranscoder;
 import net.shibboleth.oidc.attribute.transcoding.OIDCAttributeTranscoder;
 import net.shibboleth.oidc.attribute.transcoding.impl.OIDCStringAttributeTranscoder;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
-import net.shibboleth.utilities.java.support.test.service.MockReloadableService;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
+import net.shibboleth.shared.testing.MockApplicationContext;
+import net.shibboleth.shared.testing.MockReloadableService;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.profile.context.ProfileRequestContext;
@@ -138,7 +138,7 @@ public class AttributeResolutionSubjectLookupFunctionTest extends OpenSAMLInitBa
         attributes.add(attribute1);
         attributes.add(attribute2);
         attributeCtx.setIdPAttributes(attributes);
-        prc.getSubcontext(RelyingPartyContext.class, true).addSubcontext(attributeCtx);
+        prc.ensureSubcontext(RelyingPartyContext.class).addSubcontext(attributeCtx);
     }
 
     @AfterMethod
@@ -169,7 +169,7 @@ public class AttributeResolutionSubjectLookupFunctionTest extends OpenSAMLInitBa
      */
     @Test
     public void testNoAttributes() {
-        prc.getSubcontext(RelyingPartyContext.class, true).getSubcontext(AttributeContext.class).setIdPAttributes(null);
+        prc.ensureSubcontext(RelyingPartyContext.class).getSubcontext(AttributeContext.class).setIdPAttributes(null);
         Assert.assertNull(lookup.apply(prc));
     }
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/SubjectActivationConditionTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/SubjectActivationConditionTest.java
index 4166eba6..755dc589 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/SubjectActivationConditionTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/logic/SubjectActivationConditionTest.java
@@ -20,7 +20,7 @@ package net.shibboleth.idp.plugin.oidc.op.profile.logic;
 import net.shibboleth.idp.plugin.oidc.op.messaging.context.OIDCAuthenticationResponseContext;
 import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.context.ProfileRequestContext;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/spring/relyingparty/metadata/impl/ReloadProviderResolverServiceConfigurationTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/spring/relyingparty/metadata/impl/ReloadProviderResolverServiceConfigurationTest.java
index 3041eb26..71a19686 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/spring/relyingparty/metadata/impl/ReloadProviderResolverServiceConfigurationTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/profile/spring/relyingparty/metadata/impl/ReloadProviderResolverServiceConfigurationTest.java
@@ -23,8 +23,6 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Function;
 
-import javax.servlet.http.HttpServletResponse;
-
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.Resource;
@@ -32,24 +30,23 @@ import org.springframework.mock.web.MockHttpServletResponse;
 import org.springframework.webflow.execution.Event;
 import org.springframework.webflow.execution.RequestContext;
 import org.testng.Assert;
-import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import net.shibboleth.ext.spring.service.ReloadableSpringService;
+import jakarta.servlet.http.HttpServletResponse;
 import net.shibboleth.idp.plugin.oidc.op.metadata.impl.FilesystemProviderMetadataResolver;
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.ProviderMetadataResolver;
-import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.RefreshableProviderMetadataResolver;
 import net.shibboleth.idp.plugin.oidc.op.metadata.resolver.ServiceableProviderMetadataProvider;
 import net.shibboleth.idp.profile.impl.ReloadServiceConfiguration;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.component.ComponentSupport;
-import net.shibboleth.utilities.java.support.primitive.NonnullSupplier;
-import net.shibboleth.utilities.java.support.service.ReloadableService;
-import net.shibboleth.utilities.java.support.service.ServiceableComponent;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.primitive.NonnullSupplier;
+import net.shibboleth.shared.service.ReloadableService;
+import net.shibboleth.shared.service.ServiceException;
+import net.shibboleth.shared.service.ServiceableComponent;
+import net.shibboleth.shared.spring.service.ReloadableSpringService;
 
 /**
  * Unit tests for {@link ProviderMetadataResolverServiceStrategy}.
@@ -59,7 +56,7 @@ import net.shibboleth.utilities.java.support.service.ServiceableComponent;
 public class ReloadProviderResolverServiceConfigurationTest {
 
     /** The service. */
-    private ReloadableSpringService<RefreshableProviderMetadataResolver> service;
+    private ReloadableSpringService<ProviderMetadataResolver> service;
 
     private RequestContext src;
     
@@ -72,7 +69,8 @@ public class ReloadProviderResolverServiceConfigurationTest {
     }
 
     public void setupResolver(final List<Resource> serviceConfigurations) throws ComponentInitializationException {
-        service = new ReloadableSpringService(ProviderMetadataResolver.class, new ProviderMetadataResolverServiceStrategy());
+        service = new ReloadableSpringService<>(ProviderMetadataResolver.class,
+                new ProviderMetadataResolverServiceStrategy());
         service.setFailFast(true);
         service.setId("mockId");
         service.setServiceConfigurations(serviceConfigurations);
@@ -88,13 +86,15 @@ public class ReloadProviderResolverServiceConfigurationTest {
         final Instant time = service.getLastReloadAttemptInstant();
         service.reload();
         Assert.assertNotEquals(time, service.getLastReloadAttemptInstant());
-        final ServiceableComponent<RefreshableProviderMetadataResolver> component = service.getServiceableComponent();
-        final ProviderMetadataResolver resolver = component.getComponent();
-        component.unpinComponent();
-        Assert.assertTrue(resolver instanceof ServiceableProviderMetadataProvider);
-        final ServiceableProviderMetadataProvider rpProvider = (ServiceableProviderMetadataProvider) resolver;
-        final ProviderMetadataResolver embedded = rpProvider.getEmbeddedResolver();
-        Assert.assertTrue(embedded instanceof FilesystemProviderMetadataResolver);
+        try (final ServiceableComponent<ProviderMetadataResolver> component = service.getServiceableComponent()) {
+            final ProviderMetadataResolver resolver = component.getComponent();
+            Assert.assertTrue(resolver instanceof ServiceableProviderMetadataProvider);
+            final ProviderMetadataResolver embedded =
+                    ((ServiceableProviderMetadataProvider) resolver).getEmbeddedResolver();
+            Assert.assertTrue(embedded instanceof FilesystemProviderMetadataResolver);
+        } catch (final ServiceException e) {
+            Assert.fail();
+        }
     }
     
     @Test(expectedExceptions = ComponentInitializationException.class) public void noResources() 
@@ -132,9 +132,4 @@ public class ReloadProviderResolverServiceConfigurationTest {
         return action;
     }
 
-    
-    @AfterClass public void teardown() {
-        ComponentSupport.destroy(service);
-    }
-
 }
\ No newline at end of file
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/AddUserInfoShellTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/AddUserInfoShellTest.java
index 1f7c0a9b..b4edb1c2 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/AddUserInfoShellTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/AddUserInfoShellTest.java
@@ -19,11 +19,11 @@ package net.shibboleth.idp.plugin.oidc.op.userinfo.profile.impl;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest;
 import net.shibboleth.idp.profile.IdPEventIds;
-import net.shibboleth.idp.profile.context.RelyingPartyContext;
-import net.shibboleth.idp.profile.context.navigate.ResponderIdLookupFunction;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.ConstraintViolationException;
+import net.shibboleth.profile.context.RelyingPartyContext;
+import net.shibboleth.profile.context.navigate.IssuerLookupFunction;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.ConstraintViolationException;
 
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
@@ -40,7 +40,7 @@ public class AddUserInfoShellTest extends BaseOIDCResponseActionTest {
     @BeforeMethod
     public void init() throws ComponentInitializationException {
         action = new AddUserInfoShell();
-        action.setIssuerLookupStrategy(new ResponderIdLookupFunction());
+        action.setIssuerLookupStrategy(new IssuerLookupFunction());
         action.initialize();
     }
 
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/FormOutboundUserInfoResponseMessageTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/FormOutboundUserInfoResponseMessageTest.java
index bfe4d6a6..9715113f 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/FormOutboundUserInfoResponseMessageTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/FormOutboundUserInfoResponseMessageTest.java
@@ -21,7 +21,8 @@ import java.net.URISyntaxException;
 
 import net.shibboleth.idp.plugin.oidc.op.profile.impl.BaseOIDCResponseActionTest;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+
 import org.opensaml.messaging.context.MessageContext;
 import org.opensaml.profile.action.EventIds;
 import org.springframework.webflow.execution.Event;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ParseAccessTokenTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ParseAccessTokenTest.java
index 0f6c64bf..8c48b2c1 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ParseAccessTokenTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ParseAccessTokenTest.java
@@ -24,10 +24,11 @@ import net.shibboleth.idp.plugin.oidc.op.token.support.TokenClaimsSet;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.oidc.profile.core.OidcEventIds;
 import net.shibboleth.oidc.security.credential.BasicJWKCredential;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.resolver.CriteriaSet;
-import net.shibboleth.utilities.java.support.resolver.ResolverException;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.resolver.CriteriaSet;
+import net.shibboleth.shared.resolver.ResolverException;
+import net.shibboleth.shared.security.DataSealerException;
+
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.KeyPair;
diff --git a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ValidateAccessTokenTest.java b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ValidateAccessTokenTest.java
index 2ee902c4..2c08f8fa 100644
--- a/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ValidateAccessTokenTest.java
+++ b/idp-oidc-extension-impl/src/test/java/net/shibboleth/idp/plugin/oidc/op/userinfo/profile/impl/ValidateAccessTokenTest.java
@@ -28,9 +28,10 @@ import net.shibboleth.oidc.security.jwt.claims.impl.ChainingJWTClaimsValidator;
 import net.shibboleth.oidc.security.jwt.claims.impl.ExpiryClaimsValidator;
 import net.shibboleth.oidc.security.jwt.claims.impl.NotBeforeClaimsValidator;
 import net.shibboleth.oidc.security.jwt.claims.impl.RequiredClaimsValidator;
-import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
-import net.shibboleth.utilities.java.support.logic.BiFunctionSupport;
-import net.shibboleth.utilities.java.support.security.DataSealerException;
+import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.BiFunctionSupport;
+import net.shibboleth.shared.security.DataSealerException;
+
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.security.NoSuchAlgorithmException;
diff --git a/idp-oidc-extension-impl/src/test/resources/credentials/sealer.jks b/idp-oidc-extension-impl/src/test/resources/credentials/sealer.jks
index 5ab65e2b..c9e54c44 100644
Binary files a/idp-oidc-extension-impl/src/test/resources/credentials/sealer.jks and b/idp-oidc-extension-impl/src/test/resources/credentials/sealer.jks differ
diff --git a/idp-oidc-extension-impl/src/test/resources/credentials/sealer.kver b/idp-oidc-extension-impl/src/test/resources/credentials/sealer.kver
index 8a34ad71..c232bd38 100644
--- a/idp-oidc-extension-impl/src/test/resources/credentials/sealer.kver
+++ b/idp-oidc-extension-impl/src/test/resources/credentials/sealer.kver
@@ -1 +1 @@
-CurrentVersion=1
+CurrentVersion = 2
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/attribute-filter.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/attribute-filter.xml
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/attribute-filter.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/attribute-filter.xml
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/attribute-registry.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/attribute-registry.xml
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/attribute-registry.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/attribute-registry.xml
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/attribute-resolver.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/attribute-resolver.xml
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/attribute-resolver.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/attribute-resolver.xml
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/authn/oauth2client-authn-config.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/authn/oauth2client-authn-config.xml
similarity index 80%
rename from idp-oidc-extension-impl/src/test/resources/conf/authn/oauth2client-authn-config.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/authn/oauth2client-authn-config.xml
index 7a2f7316..032594b7 100644
--- a/idp-oidc-extension-impl/src/test/resources/conf/authn/oauth2client-authn-config.xml
+++ b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/authn/oauth2client-authn-config.xml
@@ -18,7 +18,11 @@
         <ref bean="shibboleth.JWTValidator" />
         <bean parent="shibboleth.HTPasswdValidator">
             <property name="resource">
-                <bean class="org.springframework.core.io.ClassPathResource" c:path="/credentials/htpasswd.txt" />
+                <bean class="net.shibboleth.shared.spring.resource.ConditionalResource">
+                    <constructor-arg>
+                        <bean class="org.springframework.core.io.ClassPathResource" c:path="/credentials/htpasswd.txt" />
+                     </constructor-arg>
+                </bean>
             </property>
         </bean>
     </util:list>
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/credentials.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/credentials.xml
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/credentials.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/credentials.xml
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/global.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/global.xml
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/global.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/global.xml
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/idp.properties b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/idp.properties
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/idp.properties
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/idp.properties
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/logback.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/logback.xml
similarity index 99%
rename from idp-oidc-extension-impl/src/test/resources/conf/logback.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/logback.xml
index be3df465..2e38cbbd 100644
--- a/idp-oidc-extension-impl/src/test/resources/conf/logback.xml
+++ b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/logback.xml
@@ -42,7 +42,7 @@
     <!-- =========================================================== -->
 
     <!-- Logs IdP, but not OpenSAML, messages -->
-    <logger name="net.shibboleth.idp" level="${idp.loglevel.idp}"/>
+    <logger name="net.shibboleth" level="${idp.loglevel.idp}"/>
     <logger name="net.shibboleth.oidc" level="${idp.loglevel.oidc}"/>
     <logger name="net.shibboleth.idp.plugin.oidc.op" level="${idp.loglevel.oidc-op}"/>
 
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/metadata-policy1.json b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/metadata-policy1.json
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/metadata-policy1.json
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/metadata-policy1.json
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/metadata-policy2.json b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/metadata-policy2.json
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/metadata-policy2.json
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/metadata-policy2.json
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/metadata-providers.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/metadata-providers.xml
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/metadata-providers.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/metadata-providers.xml
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/oidc-clientinfo-resolvers.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/oidc-clientinfo-resolvers.xml
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/oidc-clientinfo-resolvers.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/oidc-clientinfo-resolvers.xml
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/oidc-credentials.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/oidc-credentials.xml
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/oidc-credentials.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/oidc-credentials.xml
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/oidc.properties b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/oidc.properties
similarity index 72%
rename from idp-oidc-extension-impl/src/test/resources/conf/oidc.properties
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/oidc.properties
index e341dcf4..117a8451 100644
--- a/idp-oidc-extension-impl/src/test/resources/conf/oidc.properties
+++ b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/oidc.properties
@@ -4,7 +4,7 @@ idp.signing.oidc.rsa.enc.key = /credentials/idp-encryption-rsa.jwk
 idp.oidc.issuer = https://op.example.org
 idp.oidc.subject.sourceAttribute = uid
 idp.oidc.subject.salt = isfd07fsddfs70sdf9d99s8
-idp.oidc.discovery.template = src/test/resources/conf/openid-configuration.json
+idp.oidc.discovery.template = src/test/resources/net/shibboleth/idp/module/conf/openid-configuration.json
 
 idp.oidc.nodePrefix = ServerA
 
@@ -12,10 +12,10 @@ idp.oidc.admin.registration.policyLocationPolicy = AccessByIPAddress
 idp.oidc.admin.registration.policyIdPolicy = AccessByIPAddress
 idp.oidc.admin.registration.clientIdPolicy = AccessByIPAddress
 
-idp.oidc.dynreg.defaultMetadataPolicyFile = src/test/resources/conf/metadata-policy1.json
+idp.oidc.dynreg.defaultMetadataPolicyFile = src/test/resources/net/shibboleth/idp/module/conf/metadata-policy1.json
 
 idp.oauth2.requireAuthenticationRequestPredicate = shibboleth.Conditions.FALSE
 idp.oauth2.grantTypes = authorization_code,refresh_token,client_credentials
 idp.oauth2.defaultAllowedAudience = https://rp.example.org
 
-idp.oidc.discovery.resolver.values = CustomConfigurationValues
\ No newline at end of file
+idp.oidc.discovery.resolver.values = CustomConfigurationValues
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/openid-configuration.json b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/openid-configuration.json
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/openid-configuration.json
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/openid-configuration.json
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/relying-party.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/relying-party.xml
similarity index 99%
rename from idp-oidc-extension-impl/src/test/resources/conf/relying-party.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/relying-party.xml
index 6bda558c..78a9adfd 100644
--- a/idp-oidc-extension-impl/src/test/resources/conf/relying-party.xml
+++ b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/relying-party.xml
@@ -254,7 +254,7 @@
 
     <bean id="shibboleth.oidc.dynreg.AnotherMetadataPolicyLookupStrategy"
         parent="shibboleth.oidc.dynreg.MetadataPolicyLookupStrategy"
-        c:resource="classpath:conf/metadata-policy2.json"
+        c:resource="classpath:net/shibboleth/idp/module/conf/metadata-policy2.json"
         c:id="AnotherProfileMetadataPolicyCache" />
 
 </beans>
diff --git a/idp-oidc-extension-impl/src/test/resources/conf/services.xml b/idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/services.xml
similarity index 100%
rename from idp-oidc-extension-impl/src/test/resources/conf/services.xml
rename to idp-oidc-extension-impl/src/test/resources/net/shibboleth/idp/module/conf/services.xml
diff --git a/pom.xml b/pom.xml
index 74f2480b..e42ee928 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,18 +5,28 @@
      <parent>
         <groupId>net.shibboleth</groupId>
         <artifactId>parent</artifactId>
-        <version>11.3.4</version>
+        <version>17.0.0-SNAPSHOT</version>
     </parent>
     <groupId>net.shibboleth.idp.plugin.oidc</groupId>
     <artifactId>idp-plugin-oidc-op-parent</artifactId>
-    <version>3.4.1-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
     <name>Shibboleth IdP :: Plugins :: OpenID Connect Provider</name>
     <packaging>pom</packaging>
     <properties>
-        <shib.idp.version>4.3.0</shib.idp.version>
-        <opensaml.version>4.3.0</opensaml.version>
-        <oidc.common.version>2.2.0</oidc.common.version>
-        <oidc.config.version>1.0.1</oidc.config.version>
+        <shib-shared.groupId>net.shibboleth</shib-shared.groupId>
+        <oidc-common.groupId>net.shibboleth.oidc</oidc-common.groupId>
+        <idp.groupId>net.shibboleth.idp</idp.groupId>
+        <idp.version>5.0.0-SNAPSHOT</idp.version>
+        <opensaml.groupId>org.opensaml</opensaml.groupId>
+        <opensaml.version>5.0.0-SNAPSHOT</opensaml.version>
+        <nimbus-jose-jwt.version>9.29</nimbus-jose-jwt.version>
+        <oauth2-oidc-sdk.version>10.5.1</oauth2-oidc-sdk.version>
+        <json.smart.version>2.4.8</json.smart.version>
+        <accessors.smart.version>1.2</accessors.smart.version>
+        <nimbus.lang.tag.version>1.7</nimbus.lang.tag.version>
+        <nimbus.content.type.version>2.2</nimbus.content.type.version>
+        <oidc.common.version>3.0.0-SNAPSHOT</oidc.common.version>
+        <oidc.config.version>2.0.0-SNAPSHOT</oidc.config.version>
         <commons.io.version>2.6</commons.io.version>
         <checkstyle.configLocation>${project.basedir}/resources/checkstyle.xml</checkstyle.configLocation>
         <!--
@@ -85,15 +95,20 @@
         <dependencies>
             <!-- IdP BOM when importing IdP dependencies -->
             <dependency>
-                <groupId>net.shibboleth.idp</groupId>
+                <groupId>${idp.groupId}</groupId>
                 <artifactId>idp-bom</artifactId>
-                <version>${shib.idp.version}</version>
+                <version>${idp.version}</version>
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
+            <dependency>
+                <groupId>${idp.groupId}</groupId>
+                <artifactId>idp-cli</artifactId>
+                <version>${idp.version}</version>
+            </dependency>
             <!-- OIDC Common BOM when importing OIDC dependencies -->
              <dependency>
-                <groupId>net.shibboleth.oidc</groupId>
+                <groupId>${oidc-common.groupId}</groupId>
                 <artifactId>oidc-common-bom</artifactId>
                 <version>${oidc.common.version}</version>
                 <type>pom</type>
@@ -110,21 +125,29 @@
                 <version>${project.version}</version>
                 <artifactId>idp-plugin-oidc-op-api</artifactId>
             </dependency>
-            <!-- Test IdP bom dependencies -->
+            <!-- Test bom dependencies -->
             <dependency>
-                <groupId>net.shibboleth.idp</groupId>
+                <groupId>${idp.groupId}</groupId>
                 <artifactId>idp-tests-bom</artifactId>
-                <version>${shib.idp.version}</version>
+                <version>${idp.version}</version>
                 <type>pom</type>
                 <scope>import</scope>
-            </dependency>            
+            </dependency>
+            <!-- Test bom dependencies -->
+            <dependency>
+                <groupId>${shib-shared.groupId}</groupId>
+                <artifactId>shib-testing</artifactId>
+                <version>9.0.0-SNAPSHOT</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
              <!-- Other Test Dependencies -->
             <dependency>
                 <groupId>commons-io</groupId>
                 <artifactId>commons-io</artifactId>
                 <version>${commons.io.version}</version>
                 <scope>test</scope>
-            </dependency>       
+            </dependency>
             <dependency>
                 <groupId>net.shibboleth.idp.plugin.oidc</groupId>
                 <version>${project.version}</version>
@@ -141,5 +164,4 @@
         <url>https://git.shibboleth.net/view/?p=java-idp-oidc.git</url>
     </scm>
 
-
 </project>

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


More information about the commits mailing list