You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/11/29 22:55:10 UTC

[isis] branch v2 updated: 2039 redesign of config (#134)

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/v2 by this push:
     new a33232c  2039 redesign of config (#134)
a33232c is described below

commit a33232cae8c85af3ea7c5cf210dfab4e66bbf75d
Author: Andi Huber <ho...@gmx.at>
AuthorDate: Thu Nov 29 23:55:06 2018 +0100

    2039 redesign of config (#134)
    
    * ISIS-2039: major refactoring
    
    move config code into its own module
    
    remove number of classes in metamodel, that hold a reference to
    IsisConfiguration or its implementation
    
    hide the mutable IsisConfigurationDefault
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: reduce visibility of some config classes
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: simplify config access
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: cleaning up the component-provider mess
    
    for web-modules: no longer negotiate by writing attributes to the
    servlet-context, instead use a java class for that
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: fixing some tests
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: removing arguments of @PostConstruct methods
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: lazy binding to config for wicket
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: proposed test fix
    
    also cleaning up verbose tests
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: more test fixes
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: experimenting with AppConfig managed by Guice
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: solving the AppManifest lookup problem independently of the
    configuration bootstrapping
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: simplify helloworld
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: moving type discovery to an earlier stage in bootstrapping
    
    Integration Test Bootstrapping works.
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: on web-context: move the config bootstrapping from wicket
    module to the main ServletContextListener
    
    such that the wicket module is no longer responsible for initiating the
    framework
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: config bootstrapping: fixes the resource chain
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: allow ServiceLoader lookup for AppConfig to fallback ...
    
    to previous behavior, that is to lookup the AppManifest from config
    property 'isis.appManifest'
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: fixes concurrent modification with _Context
    
    add a property 'isUnitTesting' to the IsisSystemEnvironment, to help
    with the decision on how to bootstrap the configuration
    
    also doing some cleaning up
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: fixing junit tests ...
    
    by having the IsisSystemEnvironment#isUnitTesting correctly setup by
    JunitRuleMocker2
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: further fixing tests ...
    
    also moving ExceptionRecognizer services that depend on the 'config'
    module from 'applib' to 'runtime'
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: fixing tests, that fail due to new domain object annot.
    processing
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: unify config bootstrapping code for maven-plugin,
    wicket-viewer and headless
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: to fix prev. commit: let the maven-plugin bootstrap the
    configuration properly
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: fixing mm verification tests
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: reinstating the ConfigurationServiceDefault
    
    also renaming packages within the 'config' module -> 'o.a.i.config'
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: removing the ConfigurationService interface
    
    use the singleton IsisConfiguration instead
    
    for the UI, the ConfigurationServiceMenu was renamed to
    ConfigurationMenu which uses a ConfigurationViewService for the single
    purpose of displaying config values
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
    
    * ISIS-2039: reorg. packages
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2039
---
 .../java/org/apache/isis/applib/AppManifest.java   |  39 ++-
 .../main/java/org/apache/isis/applib/Module.java   |   4 +-
 .../org/apache/isis/applib/PropertyResource.java   |  41 ++-
 .../isis/applib/annotation/DomainService.java      |   6 +-
 .../isis/applib/annotation/PropertyLayout.java     |   6 +-
 .../apache/isis/applib/annotation/ViewModel.java   |   6 +-
 .../apache/isis/applib/client/RestfulClient.java   |   4 +-
 .../isis/applib/client/auth/BasicAuthFilter.java   |   4 +-
 .../applib/fixturescripts/ExecutionParameters.java |   7 +-
 .../isis/applib/fixturescripts/FixtureResult.java  |  10 +-
 .../setup/PersonaEnumPersistAll.java               |   1 -
 .../isis/applib/services/audit/AuditerService.java |   6 +-
 .../isis/applib/services/clock/ClockService.java   |   2 +
 .../services/config/ConfigurationService.java      |  54 ----
 .../ConfigurationMenu.java}                        |  10 +-
 .../ConfigurationProperty.java                     |  35 +--
 .../ConfigurationProperty.layout.xml               |   0
 .../{config => confview}/ConfigurationProperty.png | Bin
 .../ConfigurationViewService.java}                 |  14 +-
 .../{config => confview}/package-info.java         |   4 +-
 .../applib/services/eventbus/EventBusService.java  |   2 +-
 .../services/exceprecog/ExceptionRecognizer.java   |   5 +-
 .../exceprecog/ExceptionRecognizerAbstract.java    |  13 +-
 .../exceprecog/ExceptionRecognizerComposite.java   |  12 +-
 .../fixturespec/FixtureScriptsDefault.java         |   4 +-
 .../fixturespec/FixtureScriptsSpecification.java   |   2 +-
 .../applib/services/guice/GuiceBeanProvider.java   |   1 +
 .../applib/services/hsqldb/HsqlDbManagerMenu.java  |   3 +-
 .../isis/applib/services/i18n/LocaleProvider.java  |   1 +
 .../applib/services/i18n/TranslationsResolver.java |   1 +
 .../jaxb/CatalogingSchemaOutputResolver.java       |   5 +-
 .../applib/services/linking/DeepLinkService.java   |   1 +
 .../services/publish/PublisherServiceLogging.java  |   5 +-
 .../isis/applib/services/sudo/SudoService.java     |   2 +-
 .../services/userreg/EmailNotificationService.java |   2 +
 .../services/wrapper/InteractionException.java     |   2 +-
 .../apache/isis/applib/util/ObjectContracts.java   |   5 +-
 .../apache/isis/schema/utils/CommonDtoUtils.java   |  13 +-
 .../ExceptionRecognizerCompositeTest.java          |   4 +-
 .../isis/commons/internal/base/_Strings.java       |  35 +++
 .../isis/commons/internal/context/_Context.java    |  60 +++-
 .../isis/commons/internal/reflection/_Reflect.java |  37 +++
 .../commons/internal/resources/_Resources.java     |  32 +-
 .../core/commons/exceptions/IsisException.java     |   0
 .../plugins/environment/IsisSystemEnvironment.java |  42 ++-
 .../isis/commons/internal/context/ContextTest.java |  13 +-
 core/{metamodel => config}/pom.xml                 |  97 +++---
 .../java/org/apache/isis/config/AppConfig.java}    |  17 +-
 .../org/apache/isis/config/AppConfigLocator.java   |  64 ++++
 .../org/apache/isis/config/AppManifestFinder.java  |  83 +++++
 .../apache/isis/config/ConfigurationConstants.java |  88 ++++++
 .../org/apache/isis}/config/IsisConfiguration.java | 111 +++++--
 .../isis}/config/IsisConfigurationException.java   |   2 +-
 .../org/apache/isis}/config/NotFoundPolicy.java    |   2 +-
 .../org/apache/isis/config}/WebAppConstants.java   |   3 +-
 .../config/builder/IsisConfigurationBuilder.java   | 109 +++++++
 .../builder/IsisConfigurationBuilderDefault.java}  | 294 +++++++++---------
 .../config/builder}/IsisConfigurationDefault.java  |  94 +++---
 .../isis/config/builder/ModulePackageHelper.java   | 202 +++++++++++++
 .../builder}/PersistenceCapableTypeFinder.java     |   2 +-
 .../PrimerForEnvironmentVariableISIS_OPTS.java     |   4 +-
 .../PrimerForEnvironmentVariablesIsisPrefix.java   |   4 +-
 .../config/builder/PrimerForServletContext.java    | 108 +++++++
 .../config/builder}/PrimerForSystemProperties.java |   4 +-
 .../isis/config/builder}/PropertiesReader.java     |  11 +-
 .../org/apache/isis/config/internal/_Config.java   | 125 ++++++++
 .../config/internal/_Config_LifecycleResource.java |  84 ++++++
 .../java/org/apache/isis}/config/package-info.java |  14 +-
 .../config}/resource/ResourceStreamSource.java     |   2 +-
 .../resource/ResourceStreamSourceAbstract.java     |   4 +-
 .../ResourceStreamSourceChainOfResponsibility.java |   2 +-
 .../resource/ResourceStreamSourceComposite.java    |   2 +-
 ...ResourceStreamSourceContextLoaderClassPath.java |   6 +-
 .../ResourceStreamSourceCurrentClassClassPath.java |   2 +-
 .../resource/ResourceStreamSourceFileSystem.java   |   2 +-
 .../resource}/ResourceStreamSourceForWebInf.java   |   7 +-
 .../resource/ResourceStreamSource_UsingClass.java} |  23 +-
 .../apache/isis/config}/resource/package-info.java |  12 +-
 .../view/ConfigurationViewServiceDefault.java      |  75 +++++
 .../ConfigurationConstants_isProtected_Test.java}  |  34 ++-
 .../config/ConfigurationConstants_mask_Test.java}  |  14 +-
 ...ConfigurationBuilder_PeekConfigurationTest.java |  23 +-
 .../IsisConfigurationDefaultTest_createSubset.java |   5 +-
 .../IsisConfigurationDefault_PropertNamesTest.java |   9 +-
 .../IsisConfigurationDefault_WhitespaceTest.java   |   4 +-
 ...PrimerForEnvironmentVariableISIS_OPTS_Test.java |  14 +-
 .../ServiceInjectorTestUsingCodegenPlugin.java     |  19 +-
 .../ServiceInstantiatorTestUsingCodegenPlugin.java |  10 +-
 .../IsisSystemEnvironmentPluginForTesting.java     |  46 ---
 .../apache/isis/applib/DomainObjectContainer.java  |  23 +-
 .../isis/tool/mavenplugin/IsisMojoAbstract.java    |  17 +-
 core/metamodel/pom.xml                             |   5 +
 .../core/commons/components/InstallerAbstract.java |  16 +-
 .../commons/config/ConfigurationConstants.java     |  37 ---
 .../isis/core/commons/lang/StringExtensions.java   |  15 +-
 .../adapter/concurrency/ConcurrencyChecking.java   |   2 +-
 .../core/metamodel/facetapi/MetaModelRefiner.java  |   3 +-
 .../facetapi/MetaModelValidatorRefiner.java        |   3 +-
 .../isis/core/metamodel/facets/Annotations.java    |  32 +-
 .../metamodel/facets/FacetFactoryAbstract.java     |  10 +-
 .../MethodPrefixBasedFacetFactoryAbstract.java     |   6 +-
 ...nChoicesForCollectionParameterFacetFactory.java |   6 +-
 .../command/CommandActionsConfiguration.java       |   2 +-
 .../command/CommandFacetForActionAnnotation.java   |   2 +-
 ...ctionInvocationFacetForDomainEventAbstract.java |   5 +-
 .../publishing/PublishActionsConfiguration.java    |   2 +-
 .../PublishedActionFacetForActionAnnotation.java   |   2 +-
 .../annotation/HomePageFacetAnnotationFactory.java |   7 +-
 .../PromptStyleFacetForActionLayoutAnnotation.java |   2 +-
 .../CollectionAccessorFacetViaAccessor.java        |   7 +-
 .../CollectionAccessorFacetViaAccessorFactory.java |   2 +-
 ...aultViewFacetForCollectionLayoutAnnotation.java |   2 +-
 .../annotation/SortedByFacetAnnotationFactory.java |   4 +-
 .../metamodel/facets/jaxb/JaxbFacetFactory.java    |   8 +-
 ...assFacetOnActionFromConfiguredRegexFactory.java |   2 +-
 .../annotprop/CssClassFaFacetOnMemberFactory.java  |   2 +-
 .../ViewModelSemanticCheckingFacetFactory.java     |   4 +-
 .../BookmarkPolicyFacetFallbackFactory.java        |   3 +-
 .../object/defaults/DefaultsProviderUtil.java      |   2 +-
 .../annotcfg/DefaultedFacetAnnotation.java         |   2 +-
 .../DomainObjectAnnotationFacetFactory.java        |   9 +-
 .../auditing/AuditObjectsConfiguration.java        |   2 +-
 .../AuditableFacetForDomainObjectAnnotation.java   |   2 +-
 .../auditing/DefaultViewConfiguration.java         |   2 +-
 .../editing/EditingObjectsConfiguration.java       |   2 +-
 .../ImmutableFacetForDomainObjectAnnotation.java   |   2 +-
 .../publishing/PublishObjectsConfiguration.java    |   2 +-
 ...lishedObjectFacetForDomainObjectAnnotation.java |   2 +-
 ...ObjectLayoutAnnotationUsingCssClassUiEvent.java |   2 +-
 ...mainObjectLayoutAnnotationUsingIconUiEvent.java |   2 +-
 ...ainObjectLayoutAnnotationUsingTitleUiEvent.java |  18 +-
 .../DomainServiceFacetAnnotationFactory.java       |   8 +-
 .../object/encodeable/EncoderDecoderUtil.java      |   2 +-
 .../mixin/MixinFacetForMixinAnnotationFactory.java |   3 +-
 .../NavigableParentAnnotationFacetFactory.java     |   3 +-
 ...jectSpecIdFacetDerivedFromClassNameFactory.java |   6 +-
 .../facets/object/parseable/ParserUtil.java        |   2 +-
 .../promptStyle/PromptStyleConfiguration.java      |   2 +-
 .../recreatable/RecreatableObjectFacetFactory.java |   6 +-
 .../annotation/TitleAnnotationFacetFactory.java    |   3 +-
 .../value/annotcfg/ValueFacetAnnotation.java       |  27 +-
 .../ValueSemanticsProviderAndFacetAbstract.java    |   7 +-
 .../value/vsp/ValueSemanticsProviderUtil.java      |   2 +-
 .../parameter/ParameterAnnotationFacetFactory.java |   3 +-
 .../PropertyOrCollectionAccessorFacetAbstract.java |   8 -
 .../accessor/PropertyAccessorFacetViaAccessor.java |   7 +-
 .../PropertyAccessorFacetViaAccessorFactory.java   |   1 -
 .../property/PropertyAnnotationFacetFactory.java   |   3 +-
 .../command/CommandFacetForPropertyAnnotation.java |   2 +-
 .../command/CommandPropertiesConfiguration.java    |   2 +-
 .../publishing/PublishPropertiesConfiguration.java |   2 +-
 ...ublishedPropertyFacetForPropertyAnnotation.java |   2 +-
 ...romptStyleFacetForPropertyLayoutAnnotation.java |   2 +-
 .../DateAndTimeValueSemanticsProviderAbstract.java |   2 +-
 .../ValueSemanticsProviderAbstractTemporal.java    |   2 +-
 .../date/DateValueSemanticsProviderAbstract.java   |   2 +-
 .../Jdk8LocalDateValueSemanticsProvider.java       |   2 +-
 .../JodaLocalDateValueSemanticsProvider.java       |   2 +-
 .../Jdk8LocalDateTimeValueSemanticsProvider.java   |   2 +-
 ...fsetDateTimeValueSemanticsProviderAbstract.java |   2 +-
 ...JodaDateTimeValueSemanticsProviderAbstract.java |   2 +-
 .../JodaLocalDateTimeValueSemanticsProvider.java   |   2 +-
 .../value/money/MoneyValueSemanticsProvider.java   |   2 +-
 .../PercentageValueSemanticsProvider.java          |   2 +-
 .../time/TimeValueSemanticsProviderAbstract.java   |   2 +-
 .../TimeStampValueSemanticsProviderAbstract.java   |   2 +-
 .../core/metamodel/progmodel/FacetFactorySet.java  |   7 +-
 .../progmodel/ProgrammingModelAbstract.java        |  13 +-
 .../core/metamodel/services/ServicesInjector.java  |  59 ++--
 .../services/ServicesInjectorBuilder.java          |  76 +++++
 .../ApplicationFeatureRepositoryDefault.java       |  14 +-
 .../config/ConfigurationServiceDefault.java        | 142 ---------
 .../ConfigurationServiceInternal.java              |  32 --
 .../exceprecog/ExceptionRecognizerDocDefault.java  |   6 +-
 .../metamodel/MetaModelServiceDefault.java         |   2 +-
 .../RepositoryServiceInternalDefault.java          |   7 +-
 .../services/swagger/SwaggerServiceDefault.java    |  14 +-
 .../services/swagger/internal/Generation.java      |   2 +-
 .../metamodel/specloader/ReflectorConstants.java   |   4 +-
 .../metamodel/specloader/ServiceInitializer.java   |   2 +-
 .../metamodel/specloader/SpecificationLoader.java  |  19 +-
 .../specloader/specimpl/FacetedMethodsBuilder.java |   4 +-
 .../specimpl/FacetedMethodsBuilderContext.java     |   6 +-
 .../MetaModelValidatorForDeprecatedAbstract.java   |   2 +-
 .../apache/isis/core/metamodel/util/EventUtil.java |   2 +-
 .../fixture/LogonFixtureAuthenticator.java         |   5 +-
 .../standard/AuthenticationManagerStandard.java    |  11 +-
 ...enticationManagerStandardInstallerAbstract.java |   9 +-
 .../standard/AuthenticatorAbstract.java            |  16 -
 .../standard/AuthenticatorDefault.java             |   7 +-
 .../PasswordRequestAuthenticatorAbstract.java      |   5 +-
 .../AuthorizationManagerAbstract.java              |  16 -
 .../standard/AuthorizationConstants.java           |   2 +-
 .../standard/AuthorizationManagerStandard.java     |  40 +--
 ...horizationManagerStandardInstallerAbstract.java |   9 +-
 .../runtime/authorization/standard/Authorizor.java |  36 +++
 .../core/runtime/optionhandler/OptionHandler.java  |   2 +-
 .../query/JdoQueryAnnotationFacetFactory.java      |   7 +-
 .../version/JdoVersionAnnotationFacetFactory.java  |   4 +-
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |   3 +-
 ...ndatoryFromJdoColumnAnnotationFacetFactory.java |   3 +-
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |   3 +-
 .../isis/progmodels/dflt/JavaReflectorHelper.java  |  18 +-
 .../dflt/ProgrammingModelFacetsJava5.java          |   5 -
 .../facets/AbstractFacetFactoryJUnit4TestCase.java |  18 +-
 .../metamodel/facets/AbstractFacetFactoryTest.java |  20 +-
 .../actions/ActionMethodsFacetFactoryTest.java     |   7 -
 .../action/ActionAnnotationFacetFactoryTest.java   |  35 +--
 ...tionLayoutAnnotationFacetFactoryJunit4Test.java |  29 +-
 ...nLayoutXmlLayoutAnnotationFacetFactoryTest.java |  14 +-
 .../CollectionAnnotationFacetFactoryTest.java      |   1 -
 ...etForCollectionLayoutAnnotationFactoryTest.java |  19 +-
 .../ViewModelSemanticCheckingFacetFactoryTest.java |  22 +-
 .../object/defaults/DefaultedFacetFactoryTest.java |  19 +-
 .../DomainObjectAnnotationFacetFactoryTest.java    |  42 +--
 .../DomainObjectLayoutFactoryTest.java             |  24 +-
 ...eFacetAnnotationOrConfigurationFactoryTest.java |  11 +-
 .../promptstyle/PromptStyleConfiguration_Test.java |   2 +-
 ...romptStyleFacetFromPropertyAnnotation_Test.java |   2 +-
 .../PropertyAnnotationFacetFactoryTest.java        |  16 +-
 .../BigDecimalValueSemanticsProviderTest.java      |  16 +-
 .../value/BigIntValueSemanticsProviderTest.java    |  15 +-
 .../value/ByteValueSemanticsProviderTest.java      |  17 +-
 .../value/DoubleValueSemanticsProviderTest.java    |  17 +-
 .../value/FloatValueSemanticsProviderTest.java     |  16 +-
 .../ImageValueSemanticsProviderAbstractTest.java   |  17 +-
 .../value/IntValueSemanticsProviderTest.java       |  17 +-
 .../JavaSqlDateValueSemanticsProviderTest.java     |  10 +-
 .../JavaSqlTimeValueSemanticsProviderTest.java     |  10 +-
 .../JavaUtilDateValueSemanticsProviderTest.java    |  10 +-
 .../value/LongValueSemanticsProviderTest.java      |  15 +-
 .../PercentageValueSemanticsProviderTest.java      |  14 +-
 .../value/ShortValueSemanticsProviderTest.java     |  16 +-
 .../ValueSemanticsProviderAbstractTestCase.java    |  36 +--
 ...odaLocalDateTimeValueSemanticsProviderTest.java |  22 +-
 .../services/ServicesInjectorDefaultTest.java      |  17 +-
 .../ServicesInjectorDefaultTest_usingFields.java   |  19 +-
 ...rvicesInjectorDefaultTest_validateServices.java |  14 +-
 .../core/metamodel/services/grid/BS3GridTest.java  |  13 +-
 .../services/menubars/BS3MenuBarsTest.java         |   8 +-
 .../metamodel/MetaModelServiceDefaultTest.java     |  14 +-
 .../RepositoryServiceDefaultTest_allMatches.java   |  19 +-
 .../specloader/ServiceInitializerTest.java         |   2 +-
 .../SpecificationLoaderTestAbstract.java           |  23 +-
 .../testspec/ObjectSpecificationStub.java          |   7 -
 .../fixture/LogonFixtureAuthenticatorTest.java     |   5 +-
 .../runtime/threadpool/ThreadPoolSupportTest.java  |   3 -
 core/plugins/eventbus-axon/pom.xml                 |   7 +
 .../EventBusServiceDefaultUsingAxonSimpleTest.java |  42 +--
 core/plugins/eventbus-guava/pom.xml                |   8 +
 .../EventBusServiceDefaultUsingGuavaTest.java      |  45 +--
 .../conneg/IsisPrettyPrintingProcessor.java        |   2 +-
 .../DataNucleusApplicationComponents4.java         |   2 +-
 .../persistence/PersistenceSessionFactory4.java    |   8 +-
 .../runtime/system/ObjectMemberAbstractTest.java   |  14 +-
 .../WrapperFactoryDefaultTest_wrappedObject.java   |  19 +-
 ...FactoryDefaultTest_wrappedObject_transient.java |   5 +-
 .../DataNucleusApplicationComponents5.java         |   2 +-
 .../persistence/PersistenceSessionFactory5.java    |   8 +-
 .../plugins/jdo/dn5/IsisJdoSupportPlugin5.java     |   4 +-
 .../runtime/system/ObjectMemberAbstractTest.java   |  28 +-
 .../WrapperFactoryDefaultTest_wrappedObject.java   |  17 +-
 ...FactoryDefaultTest_wrappedObject_transient.java |   6 +-
 .../shiro/ShiroAuthenticatorOrAuthorizor.java      |  15 +-
 .../apache/isis/security/shiro/ShiroConstants.java |   2 +-
 .../ShiroAuthenticationManagerInstaller.java       |   7 +-
 .../ShiroAuthorizationManagerInstaller.java        |   7 +-
 ...AuthenticatorOrAuthorizorTest_authenticate.java |  17 +-
 ...ticatorOrAuthorizorTest_isVisibleInAnyRole.java |  12 +-
 core/pom.xml                                       |  25 +-
 ...eptionRecognizerCompositeForJdoObjectStore.java |  16 +-
 ...xceptionRecognizerForJDODataStoreException.java |   0
 ...traintViolationForeignKeyNoActionException.java |   1 +
 ...ionRecognizerForJDOObjectNotFoundException.java |   0
 ...yConstraintViolationUniqueOrIndexException.java |   0
 ...gerStandardInstallerAbstractForDfltRuntime.java |  15 +-
 .../fixtures/FixturesInstallerAbstract.java        |   2 +-
 .../fixtures/FixturesInstallerDelegate.java        |   5 +-
 .../FixturesInstallerFromConfiguration.java        |  68 +----
 .../HeadlessWithBootstrappingAbstract.java         |   8 +-
 .../headless/IsisComponentProviderDefault.java     |  34 ---
 .../isis/core/runtime/headless/IsisSystem.java     | 101 ++-----
 .../runtime/headless/IsisSystemBootstrapper.java   |  56 ++--
 .../opts/OptionHandlerAdditionalProperty.java      |   2 +-
 .../runner/opts/OptionHandlerAppManifest.java      |  12 +-
 .../runner/opts/OptionHandlerConfiguration.java    |  17 +-
 .../runner/opts/OptionHandlerFixtureAbstract.java  |   4 +-
 .../runtime/runner/opts/OptionHandlerHelp.java     |   2 +-
 .../runner/opts/OptionHandlerInitParameters.java   |   2 +-
 .../runtime/runner/opts/OptionHandlerPassword.java |   2 +-
 .../runner/opts/OptionHandlerSystemProperties.java |   2 +-
 .../runtime/runner/opts/OptionHandlerUser.java     |   2 +-
 .../core/runtime/services/ServiceInstantiator.java |  23 +-
 .../services/ServicesInstallerAbstract.java        |   7 +-
 .../services/ServicesInstallerFromAnnotation.java  | 120 +-------
 .../ServicesInstallerFromConfiguration.java        |  39 +--
 ...cesInstallerFromConfigurationAndAnnotation.java |  15 +-
 .../background/BackgroundServiceDefault.java       |   2 +-
 .../command/CommandDtoServiceInternalDefault.java  |   3 +-
 .../services/email/EmailServiceDefault.java        |   5 +-
 .../services/eventbus/EventBusServiceDefault.java  |  18 +-
 .../services/i18n/po/TranslationServicePo.java     |   8 +-
 .../apache/isis/core/runtime/startup-objects.ucls  | 111 -------
 .../isis/core/runtime/system/SystemConstants.java  |  10 +-
 .../core/runtime/system/context/IsisContext.java   | 116 ++++---
 .../system/internal/IsisLocaleInitializer.java     |   2 +-
 .../system/internal/IsisTimeZoneInitializer.java   |   4 +-
 .../system/persistence/PersistenceSession.java     |   2 +-
 .../system/persistence/PersistenceSessionBase.java |   5 +-
 .../persistence/PersistenceSessionFactory.java     |   7 +-
 .../PersistenceSessionFactoryMetamodelRefiner.java |   6 +-
 .../runtime/system/session/IsisSessionFactory.java |  23 +-
 .../system/session/IsisSessionFactoryBuilder.java  |  31 +-
 .../systemusinginstallers/AuthenticatorBypass.java |   5 -
 .../IsisComponentProvider.java                     | 333 +++------------------
 .../IsisComponentProviderBuilder.java              |  61 ++++
 .../IsisComponentProviderDefault2.java             |  85 ------
 ...isComponentProviderHelper_UsingInstallers.java} |  71 ++---
 .../isis/core/webapp/IsisWebAppBootstrapper.java   | 102 -------
 .../isis/core/webapp/IsisWebAppConfigProvider.java | 162 ----------
 .../core/webapp/IsisWebAppContextListener.java     |  34 +--
 .../auth/AuthenticationSessionStrategyDefault.java |   2 +-
 .../apache/isis/core/webapp/modules/WebModule.java | 103 +------
 .../isis/core/webapp/modules/WebModuleContext.java | 109 +++++++
 .../modules/WebModule_FallbackBootstrapper.java    |  51 ----
 .../modules/WebModule_LogOnExceptionLogger.java    |  26 +-
 .../core/webapp/modules/WebModule_RestEasy.java    |  14 +-
 .../isis/core/webapp/modules/WebModule_Shiro.java  |  10 +-
 .../webapp/modules/WebModule_StaticResources.java  |   4 +-
 .../isis/core/webapp/modules/WebModule_Wicket.java |  25 +-
 .../objectstore/jdo/service/RegisterEntities.java  |   6 -
 .../IsisComponentProvider_within_Test.java         |   6 +-
 .../standard/AuthenticatorDefaultTest.java         |  11 +-
 ...rdAuthenticationManager_AuthenticationTest.java |   5 +-
 ...rdAuthenticationManager_AuthenticatorsTest.java |  13 +-
 .../eventbus/EventBusServiceDefaultTest.java       |  57 ++--
 ...onRecognizerCompositeForJdoObjectStoreTest.java |  26 +-
 ...LIntegrityConstraintViolationExceptionTest.java |   2 +-
 .../system/ObjectActionLayoutXmlDefaultTest.java   |  23 +-
 .../system/OneToManyAssociationDefaultTest.java    |  17 +-
 .../authentication/AuthenticatorBypass.java        |   5 -
 .../BypassAuthenticationManagerInstaller.java      |   7 +-
 .../BypassAuthorizationManagerInstaller.java       |   5 +-
 .../jmocking/JUnitRuleMockery2.java                |   9 +-
 .../restfulobjects/rendering/RendererContext.java  |   2 +-
 .../RepresentationServiceContentNegotiator.java    |   3 +-
 .../service/conneg/ContentNegotiationService.java  |   4 +-
 .../conneg/ContentNegotiationServiceAbstract.java  |   3 +-
 ...entNegotiationServiceForRestfulObjectsV1_0.java |   9 +-
 .../restfulobjects/server/ResourceContext.java     |   2 +-
 .../server/resources/DomainResourceHelper.java     |   2 +-
 .../server/resources/ResourceAbstract.java         |   2 +-
 .../server/ResourceContextTest_getArg.java         |   2 +-
 ..._ensureCompatibleAcceptHeader_ContractTest.java |   2 +-
 .../wicket/viewer/IsisWicketApplication.java       |  94 ++----
 .../viewer/wicket/viewer/IsisWicketModule.java     |  50 +++-
 .../viewer/integration/isis/IsisInjectModule.java  | 132 +-------
 .../services/TranslationsResolverWicket.java       |   3 +-
 .../settings/WicketViewerSettingsDefault.java      |   2 +-
 .../isisWicketModule_bindingsStandard_Test.java    |  24 +-
 .../wicket/model/models/BookmarkedPagesModel.java  |   2 +-
 .../models/whereami/WhereAmIModelDefault.java      |   2 +-
 .../wicket/ui/components/footer/FooterPanel.java   |   2 +-
 .../datepicker/TextFieldWithDateTimePicker.java    |   2 +-
 .../widgets/themepicker/ThemeChooser.java          |   2 +-
 .../isis/viewer/wicket/ui/pages/PageAbstract.java  |   2 +-
 .../accmngt/AccountManagementPageAbstract.java     |   2 +-
 .../wicket/ui/pages/mmverror/MmvErrorPage.java     |   3 +-
 .../viewer/wicket/ui/panels/PanelAbstract.java     |   2 +-
 .../org/apache/isis/core/webserver/WebServer.java  |  60 ++--
 .../isis/core/webserver/WebServerConstants.java    |   2 +-
 .../webserver/config/WebServerConfigBuilder.java   |  93 ++++++
 .../webserver/internal/OptionHandlerAddress.java   |   2 +-
 .../core/webserver/internal/OptionHandlerPort.java |   2 +-
 .../internal/OptionHandlerResourceBase.java        |   2 +-
 .../internal/OptionHandlerStartupMode.java         |   2 +-
 .../org.apache.isis.core.commons.config.AppConfig  |   1 +
 .../application/HelloWorldAppManifest.java         |  10 +-
 .../application/isis-non-changing.properties       |  12 -
 .../application/HelloWorldAppConfigTest.java       |  34 +++
 ...application.fixture.scenarios.DomainAppDemo.xml |  25 +-
 ...ication.services.homepage.HomePageViewModel.xml |  25 +-
 ...ainapp.modules.simple.dom.impl.SimpleObject.xml |  36 +--
 383 files changed, 3459 insertions(+), 3889 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
index b834758..a30dc03 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
@@ -157,7 +157,7 @@ public interface AppManifest {
      */
     public final static class Registry {
 
-        public final static List<String> FRAMEWORK_PROVIDED_SERVICES = Collections.unmodifiableList(Arrays.asList(
+        public final static List<String> FRAMEWORK_PROVIDED_SERVICE_PACKAGES = Collections.unmodifiableList(Arrays.asList(
                 "org.apache.isis.applib",
                 "org.apache.isis.core.wrapper" ,
                 "org.apache.isis.core.metamodel.services" ,
@@ -167,7 +167,8 @@ public interface AppManifest {
                 "org.apache.isis.viewer.restfulobjects.rendering.service" ,
                 "org.apache.isis.objectstore.jdo.datanucleus.service.support" ,
                 "org.apache.isis.objectstore.jdo.datanucleus.service.eventbus" ,
-                "org.apache.isis.viewer.wicket.viewer.services"));
+                "org.apache.isis.viewer.wicket.viewer.services", 
+                "org.apache.isis.core.integtestsupport.components"));
 
         private static Registry instance = new Registry();
         public static Registry instance() {
@@ -256,6 +257,39 @@ public interface AppManifest {
         //endregion
 
     }
+    
+    // -- NOOP
+    
+    static final AppManifest NOOP = new AppManifest() {
+        @Override public List<Class<?>> getModules() {
+            return null;
+        }
+        @Override public List<Class<?>> getAdditionalServices() {
+            return null;
+        }
+
+        @Override public String getAuthenticationMechanism() {
+            return null;
+        }
+
+        @Override public String getAuthorizationMechanism() {
+            return null;
+        }
+
+        @Override public List<Class<? extends FixtureScript>> getFixtures() {
+            return null;
+        }
+
+        @Override public Map<String, String> getConfigurationProperties() {
+            return null;
+        }
+    };
+    
+    public static AppManifest noop() {
+        return NOOP;
+    }
+    
+    // -- UTIL
 
     public static class Util {
 
@@ -305,7 +339,6 @@ public interface AppManifest {
             // automatically install any fixtures that might have been registered
             map.put(ISIS_PERSISTOR_DATANUCLEUS + "install-fixtures", "true");
             map.put(ISIS_PERSISTOR + "enforceSafeSemantics", "false");
-            map.put("isis.deploymentType", "server_prototype");
             map.put("isis.services.eventbus.allowLateRegistration", "true");
 
             return map;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/Module.java b/core/applib/src/main/java/org/apache/isis/applib/Module.java
index d004bb2..6f78394 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/Module.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/Module.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.applib;
 
-import static org.apache.isis.commons.internal.collections._Maps.newLinkedHashMap;
-
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -31,6 +29,8 @@ import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Sets;
 
+import static org.apache.isis.commons.internal.collections._Maps.newLinkedHashMap;
+
 /**
  * Represents a collection of entities and domain services that provide a set of coherent functionality under a
  * single package (or subpackages therein), with the module itself residing at the top-level package.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/PropertyResource.java b/core/applib/src/main/java/org/apache/isis/applib/PropertyResource.java
index f701c03..34d1f9a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/PropertyResource.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/PropertyResource.java
@@ -22,28 +22,41 @@ import java.io.InputStream;
 import java.util.Map;
 import java.util.Properties;
 
-public class PropertyResource {
-    private final Class<?> propertiesFileContext;
-    private final String propertiesFile;
+public final class PropertyResource {
+    private final Class<?> resourceContext;
+    private final String resourceName;
 
-    PropertyResource(final Class<?> propertiesFileContext, final String propertiesFile) {
-        this.propertiesFileContext = propertiesFileContext;
-        this.propertiesFile = propertiesFile;
+    /**
+     * @since 2.0.0-M2
+     */
+    public static PropertyResource ofClassContext(final Class<?> resourceContext, final String resourceName) {
+        return new PropertyResource(resourceContext, resourceName);
+    }
+    
+    PropertyResource(final Class<?> resourceContext, final String resourceName) {
+        this.resourceContext = resourceContext;
+        this.resourceName = resourceName;
     }
 
-    Class<?> getPropertiesFileContext() {
-        return propertiesFileContext;
+    /**
+     * @since 2.0.0-M2
+     */
+    public Class<?> getResourceContext() {
+        return resourceContext;
     }
 
-    String getPropertiesFile() {
-        return propertiesFile;
+    /**
+     * @since 2.0.0-M2
+     */
+    public String getResourceName() {
+        return resourceName;
     }
 
-    void loadPropsInto(
-            final Map<String, String> props) {
+    void loadPropsInto(final Map<String, String> props) {
+        
         final Properties properties = new Properties();
         try {
-            try (final InputStream stream = propertiesFileContext.getResourceAsStream(propertiesFile)) {
+            try (final InputStream stream = resourceContext.getResourceAsStream(resourceName)) {
                 properties.load(stream);
                 for (Object key : properties.keySet()) {
                     final Object value = properties.get(key);
@@ -54,7 +67,7 @@ public class PropertyResource {
             }
         } catch (Exception e) {
             throw new RuntimeException(
-                    String.format("Failed to load '%s' file relative to %s", getPropertiesFile(), getPropertiesFileContext().getName()), e);
+                    String.format("Failed to load '%s' file relative to %s", getResourceName(), getResourceContext().getName()), e);
         }
     }
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
index 269b781..418c22f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainService.java
@@ -19,7 +19,11 @@
 
 package org.apache.isis.applib.annotation;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Indicates that the class should be automatically recognized as a domain service.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
index 0e6554d..6db4cc3 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/PropertyLayout.java
@@ -19,7 +19,11 @@
 
 package org.apache.isis.applib.annotation;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 /**
  * Layout hints for properties.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
index 5816721..0912744 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/ViewModel.java
@@ -19,7 +19,11 @@
 
 package org.apache.isis.applib.annotation;
 
-import java.lang.annotation.*;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
 
 import javax.xml.bind.annotation.XmlRootElement;
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/client/RestfulClient.java b/core/applib/src/main/java/org/apache/isis/applib/client/RestfulClient.java
index 53c0fc4..6fd9078 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/client/RestfulClient.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/client/RestfulClient.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.applib.client;
 
-import static org.apache.isis.commons.internal.base._NullSafe.stream;
-
 import java.util.EnumSet;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Future;
@@ -37,6 +35,8 @@ import org.apache.isis.applib.client.log.RestfulLoggingFilter;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.context._Context;
 
+import static org.apache.isis.commons.internal.base._NullSafe.stream;
+
 /**
  * Setup the Restful Client with Basic-Auth:
  * <blockquote><pre>
diff --git a/core/applib/src/main/java/org/apache/isis/applib/client/auth/BasicAuthFilter.java b/core/applib/src/main/java/org/apache/isis/applib/client/auth/BasicAuthFilter.java
index 201e35b..8b4a1e2 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/client/auth/BasicAuthFilter.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/client/auth/BasicAuthFilter.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.applib.client.auth;
 
-import static org.apache.isis.commons.internal.base._With.requires;
-
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 
@@ -30,6 +28,8 @@ import javax.xml.bind.DatatypeConverter;
 
 import org.apache.isis.commons.internal.base._Strings;
 
+import static org.apache.isis.commons.internal.base._With.requires;
+
 /**
  * 
  * @since 2.0.0-M2
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParameters.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParameters.java
index 0f26640..4762540 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParameters.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParameters.java
@@ -25,14 +25,15 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.commons.internal.collections._Maps;
 import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
 import org.joda.time.format.ISODateTimeFormat;
 
+import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.collections._Maps;
+
 public class ExecutionParameters {
 
     private final static Pattern keyEqualsValuePattern = Pattern.compile("([^=]*)=(.*)");
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java
index 1c36613..eeb94a0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResult.java
@@ -18,7 +18,15 @@
  */
 package org.apache.isis.applib.fixturescripts;
 
-import org.apache.isis.applib.annotation.*;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Optionality;
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
+import org.apache.isis.applib.annotation.ViewModelLayout;
 
 @DomainObject(
         nature = Nature.VIEW_MODEL,
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/setup/PersonaEnumPersistAll.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/setup/PersonaEnumPersistAll.java
index be43cee..f1f1bd0 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/setup/PersonaEnumPersistAll.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/setup/PersonaEnumPersistAll.java
@@ -20,7 +20,6 @@ package org.apache.isis.applib.fixturescripts.setup;
 
 import java.util.List;
 
-
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.fixturescripts.BuilderScriptAbstract;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditerService.java b/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditerService.java
index 182d1d1..3e340cf 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditerService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditerService.java
@@ -18,12 +18,12 @@
  */
 package org.apache.isis.applib.services.audit;
 
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.bookmark.Bookmark;
-
 import java.sql.Timestamp;
 import java.util.UUID;
 
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.services.bookmark.Bookmark;
+
 /**
  * Will be called whenever an auditable entity has changed its state.
  *
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java b/core/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java
index 11dd223..c1ef0bc 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/clock/ClockService.java
@@ -17,9 +17,11 @@
 package org.apache.isis.applib.services.clock;
 
 import java.sql.Timestamp;
+
 import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
+
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationService.java b/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationService.java
deleted file mode 100644
index eda7bc4..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationService.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF 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 org.apache.isis.applib.services.config;
-
-import java.util.List;
-import java.util.Set;
-
-import org.apache.isis.applib.annotation.Programmatic;
-
-public interface ConfigurationService {
-
-    /**
-     * Get the configuration property with the specified name.
-     */
-    @Programmatic
-    String getProperty(String name);
-
-    /**
-     * Get the configuration property with the specified name and if it doesn't
-     * exist then return the specified default value.
-     */
-    @Programmatic
-    String getProperty(String name, String defaultValue);
-
-    /**
-     * Get the names of all the available properties.
-     */
-    @Programmatic
-    List<String> getPropertyNames();
-
-    /**
-     * Returns all properties, each as an instance of {@link ConfigurationProperty} (a view model).
-     */
-    @Programmatic
-    Set<ConfigurationProperty> allProperties();
-
-}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationServiceMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
similarity index 88%
rename from core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationServiceMenu.java
rename to core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
index ff15fa0..12f1c3b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationServiceMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationMenu.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.applib.services.config;
+package org.apache.isis.applib.services.confview;
 
 import java.util.Set;
 
@@ -32,16 +32,16 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 
 @DomainService(
         nature = NatureOfService.VIEW_MENU_ONLY,
-        objectType = "isisApplib.ConfigurationServiceMenu"
+        objectType = "isisApplib.ConfigurationMenu"
         )
 @DomainServiceLayout(
         menuBar = DomainServiceLayout.MenuBar.TERTIARY,
         menuOrder = "500.900"
         )
-public class ConfigurationServiceMenu {
+public class ConfigurationMenu {
 
     public static abstract class ActionDomainEvent
-    extends IsisApplibModule.ActionDomainEvent<ConfigurationServiceMenu> {
+    extends IsisApplibModule.ActionDomainEvent<ConfigurationMenu> {
         private static final long serialVersionUID = 1L;
     }
 
@@ -63,6 +63,6 @@ public class ConfigurationServiceMenu {
     }
 
     @javax.inject.Inject
-    private ConfigurationService configurationService;
+    private ConfigurationViewService configurationService;
 
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationProperty.java b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
similarity index 69%
rename from core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationProperty.java
rename to core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
index 5f22d88..631c0ec 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationProperty.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
@@ -17,9 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.applib.services.config;
-
-import java.util.List;
+package org.apache.isis.applib.services.confview;
 
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -30,8 +28,6 @@ import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.commons.internal.collections._Lists;
 
 @XmlRootElement(name = "configurationProperty")
 @XmlType(
@@ -72,7 +68,7 @@ public class ConfigurationProperty implements Comparable<ConfigurationProperty>
 
     @XmlElement(required = true)
     public String getValue() {
-        return Util.maskIfProtected(key, value);
+        return value;
     }
 
     public void setValue(final String value) {
@@ -85,31 +81,4 @@ public class ConfigurationProperty implements Comparable<ConfigurationProperty>
         return _NullSafe.compareNullsLast(getKey(), other.getKey());
     }
 
-    public static class Util {
-
-        private static final List<String> PROTECTED_KEYS =
-                _Lists.of("password", "apiKey", "authToken");
-
-
-        private Util(){}
-
-        static boolean isProtected(final String key) {
-            if(_Strings.isNullOrEmpty(key)) {
-                return false;
-            }
-            final String toLowerCase = key.toLowerCase();
-            for (String protectedKey : PROTECTED_KEYS) {
-                if(toLowerCase.contains(protectedKey.toLowerCase())) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        public static String maskIfProtected(final String key, final String value) {
-            return isProtected(key) ? "********" : value;
-        }
-    }
-
-
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationProperty.layout.xml b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.layout.xml
similarity index 100%
rename from core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationProperty.layout.xml
rename to core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.layout.xml
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationProperty.png b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.png
similarity index 100%
rename from core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationProperty.png
rename to core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.png
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationsResolver.java b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewService.java
similarity index 73%
copy from core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationsResolver.java
copy to core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewService.java
index 218725c..3e5c040 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationsResolver.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewService.java
@@ -16,14 +16,20 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.services.i18n;
 
-import java.util.List;
+package org.apache.isis.applib.services.confview;
+
+import java.util.Set;
+
 import org.apache.isis.applib.annotation.Programmatic;
 
-public interface TranslationsResolver {
+public interface ConfigurationViewService {
 
+    /**
+     * Returns all properties, each as an instance of {@link ConfigurationProperty} (a view model).
+     * Mask sensitive values if required.
+     */
     @Programmatic
-    public List<String> readLines(final String file);
+    Set<ConfigurationProperty> allProperties();
 
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/config/package-info.java b/core/applib/src/main/java/org/apache/isis/applib/services/confview/package-info.java
similarity index 86%
rename from core/applib/src/main/java/org/apache/isis/applib/services/config/package-info.java
rename to core/applib/src/main/java/org/apache/isis/applib/services/confview/package-info.java
index 99814d4..f54a267 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/config/package-info.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/confview/package-info.java
@@ -18,9 +18,9 @@
  */
 
 /**
- * The {@link org.apache.isis.applib.services.config.ConfigurationService} allows domain objects to read the
+ * The {@link org.apache.isis.applib.services.confview.ConfigurationViewService} allows domain objects to read the
  * configuration properties aggregated from the various configuration files.
  *
  * @see <a href="http://isis.apache.org/guides/rgsvc/rgsvc.html#_rgsvc_core-domain-api_ConfigurationService">Reference guide</a>
  */
-package org.apache.isis.applib.services.config;
\ No newline at end of file
+package org.apache.isis.applib.services.confview;
\ No newline at end of file
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
index 4d63503..d1f2fc9 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
@@ -86,7 +86,7 @@ public abstract class EventBusService {
      */
     @Programmatic
     @PostConstruct
-    public void init(final Map<String, String> properties) {
+    public void init() {
         hasPosted = false; // reset state
     }
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizer.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizer.java
index c997632..f5bacf1 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizer.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizer.java
@@ -18,10 +18,9 @@
  */
 package org.apache.isis.applib.services.exceprecog;
 
-import java.util.Map;
-
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
+
 import org.apache.isis.applib.annotation.Programmatic;
 
 
@@ -72,7 +71,7 @@ public interface ExceptionRecognizer {
 
     @Programmatic
     @PostConstruct
-    public void init(Map<String, String> properties);
+    public void init();
 
     @Programmatic
     @PreDestroy
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
index 4bbac94..542e4b8 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.applib.services.exceprecog;
 
-import java.util.Map;
 import java.util.Objects;
 import java.util.function.Function;
 import java.util.function.Predicate;
@@ -54,7 +53,8 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
      * <p>
      * This key is primarily for diagnostic purposes, to log the exception regardless.
      */
-    private static final String KEY_LOG_RECOGNIZED_EXCEPTIONS = "isis.services.exceprecog.logRecognizedExceptions";
+    private static final String KEY_LOG_RECOGNIZED_EXCEPTIONS = 
+            "isis.services.exceprecog.logRecognizedExceptions";
 
 
     /**
@@ -118,9 +118,10 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
 
     @Override
     @PostConstruct
-    public void init(Map<String, String> properties) {
-        final String prop = properties.get(KEY_LOG_RECOGNIZED_EXCEPTIONS);
-        this.logRecognizedExceptions = Boolean.parseBoolean(prop);
+    public void init() {
+      //FIXME[2039]        
+//        final String prop = properties.get(KEY_LOG_RECOGNIZED_EXCEPTIONS);
+//        this.logRecognizedExceptions = Boolean.parseBoolean(prop);
     }
 
     @Override
@@ -166,5 +167,5 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
 
     @javax.inject.Inject
     protected TranslationService translationService;
-
+    
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
index a02d857..5f987a4 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
@@ -125,11 +125,11 @@ public class ExceptionRecognizerComposite implements ExceptionRecognizer {
      *     Typical usage:
      * </p>
      * <pre>
-     *    public void init(Map&lt;String,String> properties) {
+     *    public void init() {
      *        add(new ExceptionRecognizerForThisException());
      *        add(new ExceptionRecognizerForThatException());
      *        add(new ExceptionRecognizerForTheOtherException());
-     *        super.init(properties);
+     *        super.init();
      *    }
      * </pre>
      *
@@ -137,9 +137,9 @@ public class ExceptionRecognizerComposite implements ExceptionRecognizer {
     @PostConstruct
     @Override
     @Programmatic
-    public void init(final Map<String, String> properties) {
+    public void init() {
         injectServices();
-        initRecognizers(properties);
+        initRecognizers();
     }
 
     protected void injectServices() {
@@ -150,9 +150,9 @@ public class ExceptionRecognizerComposite implements ExceptionRecognizer {
         }
     }
 
-    protected void initRecognizers(final Map<String, String> properties) {
+    protected void initRecognizers() {
         for (final ExceptionRecognizer ers : exceptionRecognizers) {
-            ers.init(properties);
+            ers.init();
         }
     }
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsDefault.java b/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsDefault.java
index cef7bec..3eb3277 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsDefault.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsDefault.java
@@ -33,11 +33,11 @@ import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.RestrictTo;
-import org.apache.isis.applib.fixturescripts.events.FixturesInstalledEvent;
-import org.apache.isis.applib.fixturescripts.events.FixturesInstallingEvent;
 import org.apache.isis.applib.fixturescripts.FixtureResult;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.applib.fixturescripts.FixtureScripts;
+import org.apache.isis.applib.fixturescripts.events.FixturesInstalledEvent;
+import org.apache.isis.applib.fixturescripts.events.FixturesInstallingEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 
 /**
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsSpecification.java b/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsSpecification.java
index cbb4418..1ef6d75 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsSpecification.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/fixturespec/FixtureScriptsSpecification.java
@@ -19,8 +19,8 @@ package org.apache.isis.applib.services.fixturespec;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.fixturescripts.FixtureResultList;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
-import org.apache.isis.applib.fixturescripts.FixtureScripts;
 import org.apache.isis.applib.fixturescripts.FixtureScriptWithExecutionStrategy;
+import org.apache.isis.applib.fixturescripts.FixtureScripts;
 
 /**
  * Pulls together the various state that influences the behaviour of {@link FixtureScripts} service.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/guice/GuiceBeanProvider.java b/core/applib/src/main/java/org/apache/isis/applib/services/guice/GuiceBeanProvider.java
index 0e5ebd3..0093a68 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/guice/GuiceBeanProvider.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/guice/GuiceBeanProvider.java
@@ -17,6 +17,7 @@
 package org.apache.isis.applib.services.guice;
 
 import java.lang.annotation.Annotation;
+
 import org.apache.isis.applib.annotation.Programmatic;
 
 /**
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java
index 8212f04..3bf388c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java
@@ -22,6 +22,8 @@ import java.util.Map;
 
 import javax.annotation.PostConstruct;
 
+import org.hsqldb.util.DatabaseManagerSwing;
+
 import org.apache.isis.applib.IsisApplibModule;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
@@ -32,7 +34,6 @@ import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.context._Context;
-import org.hsqldb.util.DatabaseManagerSwing;
 
 @DomainService(
         nature = NatureOfService.VIEW_MENU_ONLY,
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/LocaleProvider.java b/core/applib/src/main/java/org/apache/isis/applib/services/i18n/LocaleProvider.java
index 9bb5c3d..f5656cb 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/LocaleProvider.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/i18n/LocaleProvider.java
@@ -19,6 +19,7 @@
 package org.apache.isis.applib.services.i18n;
 
 import java.util.Locale;
+
 import org.apache.isis.applib.annotation.Programmatic;
 
 public interface LocaleProvider {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationsResolver.java b/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationsResolver.java
index 218725c..7fe418f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationsResolver.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslationsResolver.java
@@ -19,6 +19,7 @@
 package org.apache.isis.applib.services.i18n;
 
 import java.util.List;
+
 import org.apache.isis.applib.annotation.Programmatic;
 
 public interface TranslationsResolver {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/CatalogingSchemaOutputResolver.java b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/CatalogingSchemaOutputResolver.java
index 43c9826..e8a5229 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/CatalogingSchemaOutputResolver.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/CatalogingSchemaOutputResolver.java
@@ -32,8 +32,6 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.commons.internal.collections._Maps;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -41,6 +39,9 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 
+import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.collections._Maps;
+
 /**
  * An implementation of {@link SchemaOutputResolver} that keeps track of all the schemas for which it has
  * {@link #createOutput(String, String) created} an output {@link StreamResult} containing the content of the schema.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/linking/DeepLinkService.java b/core/applib/src/main/java/org/apache/isis/applib/services/linking/DeepLinkService.java
index 4d23b61..f9cd7a5 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/linking/DeepLinkService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/linking/DeepLinkService.java
@@ -19,6 +19,7 @@
 package org.apache.isis.applib.services.linking;
 
 import java.net.URI;
+
 import org.apache.isis.applib.annotation.Programmatic;
 
 /**
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/publish/PublisherServiceLogging.java b/core/applib/src/main/java/org/apache/isis/applib/services/publish/PublisherServiceLogging.java
index ac190aa..3b0e29a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/publish/PublisherServiceLogging.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/publish/PublisherServiceLogging.java
@@ -20,6 +20,9 @@ package org.apache.isis.applib.services.publish;
 
 import javax.annotation.PostConstruct;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.services.iactn.Interaction;
@@ -27,8 +30,6 @@ import org.apache.isis.schema.chg.v1.ChangesDto;
 import org.apache.isis.schema.ixn.v1.InteractionDto;
 import org.apache.isis.schema.utils.ChangesDtoUtils;
 import org.apache.isis.schema.utils.InteractionDtoUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 @DomainService(
         nature = NatureOfService.DOMAIN,
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java b/core/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java
index 3047270..9c6118b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java
@@ -22,8 +22,8 @@ package org.apache.isis.applib.services.sudo;
 import java.util.List;
 import java.util.concurrent.Callable;
 
-import org.apache.isis.applib.services.user.UserService;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.services.user.UserService;
 
 /**
  * Intended only for use by fixture scripts and integration tests, allows a block of code to execute
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/userreg/EmailNotificationService.java b/core/applib/src/main/java/org/apache/isis/applib/services/userreg/EmailNotificationService.java
index d12a0f8..95660a5 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/userreg/EmailNotificationService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/userreg/EmailNotificationService.java
@@ -19,7 +19,9 @@
 package org.apache.isis.applib.services.userreg;
 
 import java.io.Serializable;
+
 import javax.annotation.PostConstruct;
+
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.userreg.events.EmailRegistrationEvent;
 import org.apache.isis.applib.services.userreg.events.PasswordResetEvent;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/InteractionException.java b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/InteractionException.java
index 72aa884..ef7005d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/InteractionException.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/InteractionException.java
@@ -19,8 +19,8 @@
 
 package org.apache.isis.applib.services.wrapper;
 
-import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.RecoverableException;
 import org.apache.isis.applib.services.wrapper.events.InteractionEvent;
 
 public abstract class InteractionException extends RecoverableException {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java b/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
index 01829f9..d19dd17 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
@@ -22,11 +22,12 @@ import java.util.Comparator;
 import java.util.Objects;
 import java.util.function.Function;
 
-import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.commons.internal.base._NullSafe;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.commons.internal.base._NullSafe;
+
 /**
  * Provides fluent composition for Objects' equals, hashCode and toString.
  *
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
index 579d90d..dfe291b 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.schema.utils;
 
-import static org.apache.isis.commons.internal.collections._Maps.entry;
-
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Collection;
@@ -28,6 +26,11 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Function;
 
+import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
+import org.joda.time.LocalDateTime;
+import org.joda.time.LocalTime;
+
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.value.Blob;
@@ -52,10 +55,8 @@ import org.apache.isis.schema.utils.jaxbadapters.JodaDateTimeXMLGregorianCalenda
 import org.apache.isis.schema.utils.jaxbadapters.JodaLocalDateTimeXMLGregorianCalendarAdapter;
 import org.apache.isis.schema.utils.jaxbadapters.JodaLocalDateXMLGregorianCalendarAdapter;
 import org.apache.isis.schema.utils.jaxbadapters.JodaLocalTimeXMLGregorianCalendarAdapter;
-import org.joda.time.DateTime;
-import org.joda.time.LocalDate;
-import org.joda.time.LocalDateTime;
-import org.joda.time.LocalTime;
+
+import static org.apache.isis.commons.internal.collections._Maps.entry;
 
 public final class CommonDtoUtils {
 
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerCompositeTest.java b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerCompositeTest.java
index 455ce4a..6795bfb 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerCompositeTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerCompositeTest.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.applib.services.exceprecog;
 
-import java.util.Map;
-
 import org.jmock.auto.Mock;
 import org.junit.Before;
 import org.junit.Rule;
@@ -52,7 +50,7 @@ public class ExceptionRecognizerCompositeTest {
         }
 
         @Override
-        public void init(Map<String, String> properties) {
+        public void init() {
         }
 
         @Override
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
index 8596840..151cfc7 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings.java
@@ -23,6 +23,7 @@ import static org.apache.isis.commons.internal.base._NullSafe.size;
 import static org.apache.isis.commons.internal.base._Strings_SplitIterator.splitIterator;
 import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
 import static org.apache.isis.commons.internal.base._With.requires;
+import static org.apache.isis.commons.internal.base._With.requiresNotEmpty;
 
 import java.io.InputStream;
 import java.nio.charset.Charset;
@@ -237,6 +238,40 @@ public final class _Strings {
         }
         return input + suffix;
     }
+    
+    // -- REDUCTION (BINARY OPERATIOR)
+    
+    /**    
+     * Combines 2 strings {@code left} and {@code right} into a single string, such that left
+     * and right are delimited by the {@code delimiter} and such that
+     * the result does not introduce a sequence of delimiters, like for example when building file-system 
+     * paths from chunks.
+     *    
+     * @param left
+     * @param right
+     * @param delimiter
+     * @return non-null
+     */
+    public static String combineWithDelimiter(
+            @Nullable String left, @Nullable String right, String delimiter) {
+        
+        requiresNotEmpty(delimiter, "pathDelimiter");
+        
+        if (isNullOrEmpty(left) && isNullOrEmpty(right)) {
+            return "";
+        }
+        if (isNullOrEmpty(left)) {
+            return right;
+        }
+        if (isNullOrEmpty(right)) {
+            return left;
+        }
+        if (left.endsWith(delimiter) || right.startsWith(delimiter)) {
+            return left + right;
+        }
+        return left + delimiter + right;
+    }
+    
 
     // -- PADDING
 
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context.java b/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context.java
index 2add9d9..6356fae 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context.java
@@ -26,11 +26,11 @@ import java.util.function.Function;
 import java.util.function.Supplier;
 
 import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.plugins.environment.IsisSystemEnvironment;
 import org.apache.isis.core.plugins.environment.IsisSystemEnvironmentPlugin;
 
+import static org.apache.isis.commons.internal.base._NullSafe.stream;
 import static org.apache.isis.commons.internal.base._With.ifPresentElseGet;
 import static org.apache.isis.commons.internal.base._With.ifPresentElseThrow;
 import static org.apache.isis.commons.internal.base._With.requires;
@@ -124,9 +124,21 @@ public final class _Context {
         requires(type, "type");
         requires(factory, "factory");
 
+        final String key = toKey(type);
+        
         // let writes to the map be atomic
         synchronized (singletonMap) {
-            return _Casts.uncheckedCast(singletonMap.computeIfAbsent(toKey(type), __->factory.apply(type)));
+            
+            // Note: cannot just use 'singletonMap.computeIfAbsent(toKey(type), __->factory.apply(type));'
+            // here because it does not allow for modification of singletonMap inside the factory call
+            
+            final T existingIfAny =  _Casts.uncheckedCast(singletonMap.get(key));
+            if(existingIfAny!=null) {
+                return existingIfAny;
+            }
+            final T t = factory.apply(type);
+            singletonMap.put(key, t);
+            return t;
         }
     }
 
@@ -159,6 +171,18 @@ public final class _Context {
         return ifPresentElseThrow(getIfAny(type), onNotFound);
     }
 
+    // -- REMOVAL
+    
+    public static void remove(Class<?> type) {
+        // let writes to the map be atomic
+        synchronized (singletonMap) {
+            singletonMap.remove(toKey(type));
+        }
+        tryClose(type);
+    }
+    
+    // -- CLEARING
+    
     /**
      * Removes any singleton references from the current context. <br/>
      * Any singletons that implement the AutoClosable interface are being closed.
@@ -175,16 +199,8 @@ public final class _Context {
     }
 
     private static void closeAnyClosables(List<Object> objects) {
-        _NullSafe.stream(objects)
-        .filter(singleton->singleton instanceof AutoCloseable)
-        .map(singleton->(AutoCloseable)singleton)
-        .forEach(autoCloseable->{
-            try {
-                autoCloseable.close();
-            } catch (Exception e) {
-                // [ahuber] nothing we can do here, so ignore
-            }
-        });
+        stream(objects)
+        .forEach(_Context::tryClose);
     }
 
     // -- DEFAULT CLASSLOADER
@@ -251,14 +267,30 @@ public final class _Context {
     public static boolean isPrototyping() {
         return getEnvironment().getDeploymentType().isPrototyping();
     }
+    
+    /** framework internal, shortcut for convenience */
+    public static boolean isUnitTesting() {
+        return getEnvironment().isUnitTesting();
+    }
 
     // -- HELPER
 
     private static String toKey(Class<?> type) {
         return type.getName();
     }
-
-
+    
+    private static void tryClose(Object singleton) {
+        if(singleton==null) {
+            return;
+        }
+        if(singleton instanceof AutoCloseable) {
+            try {
+                ((AutoCloseable)singleton).close();
+            } catch (Exception e) {
+                // [ahuber] nothing we can do here, so ignore
+            }
+        }
+    }
 
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java b/core/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java
index cf4db82..21962c8 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java
@@ -23,6 +23,7 @@ import static org.apache.isis.commons.internal.base._NullSafe.stream;
 import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
 import static org.apache.isis.commons.internal.base._With.requires;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.Member;
 import java.lang.reflect.Method;
@@ -163,6 +164,42 @@ public final class _Reflect {
                 }, false);
     }
 
+    /**
+     * Searches for annotation on provided class, and if not found for the
+     * superclass.
+     */
+    public static <T extends Annotation> T getAnnotation(final Class<?> cls, final Class<T> annotationClass) {
+        if (cls == null) {
+            return null;
+        }
+        final T annotation = cls.getAnnotation(annotationClass);
+        if (annotation != null) {
+            return annotation;
+        }
+
+        // search superclasses
+        final Class<?> superclass = cls.getSuperclass();
+        if (superclass != null) {
+            try {
+                final T annotationFromSuperclass = getAnnotation(superclass, annotationClass);
+                if (annotationFromSuperclass != null) {
+                    return annotationFromSuperclass;
+                }
+            } catch (final SecurityException e) {
+                // fall through
+            }
+        }
+
+        // search implemented interfaces
+        final Class<?>[] interfaces = cls.getInterfaces();
+        for (final Class<?> iface : interfaces) {
+            final T annotationFromInterface = getAnnotation(iface, annotationClass);
+            if (annotationFromInterface != null) {
+                return annotationFromInterface;
+            }
+        }
+        return null;
+    }
 
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
index 8da4741..b01d3a9 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Resources.java
@@ -25,6 +25,8 @@ import java.nio.charset.Charset;
 import java.util.function.Predicate;
 import java.util.regex.Pattern;
 
+import javax.annotation.Nullable;
+
 import org.apache.isis.commons.internal.base._Bytes;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.context._Context;
@@ -77,7 +79,7 @@ public final class _Resources {
         final InputStream is = load(contextClass, resourceName);
         return _Strings.ofBytes(_Bytes.of(is), charset);
     }
-    
+
     /**
      * @param resourceName
      * @return The resource location as an URL, or null if the resource could not be found.
@@ -150,9 +152,9 @@ public final class _Resources {
         return ifPresentElseThrow(getRestfulPathIfAny(), 
                 ()->new NullPointerException(
                         "Could not find BasePath for the REST Service "
-                        + "config value on the context."));
+                                + "config value on the context."));
     }
-    
+
     /**
      * Stores the {@code restfulPath} as an application scoped resource-object.
      * @param restfulPath
@@ -161,12 +163,12 @@ public final class _Resources {
     public final static void putRestfulPath(String restfulPath) {
         _Context.put(_Resources_RestfulPath.class, new _Resources_RestfulPath(restfulPath), false);
     }
-    
+
     // -- LOCAL vs EXTERNAL resource path
-    
+
     private static final Predicate<String> externalResourcePattern = 
             Pattern.compile("^\\w+?://.*$").asPredicate(); 
-    
+
     /**
      * Returns whether the {@code resourcePath} is intended local and relative 
      * to the web-app's context root. 
@@ -177,6 +179,18 @@ public final class _Resources {
         return !externalResourcePattern.test(resourcePath);
     }
 
+    /**
+     * To build a path from chunks {@code 'a' + 'b' -> 'a/b'}, also handling cases eg.
+     * {@code 'a/' + '/b' -> 'a/b'}
+     * 
+     * @param extendee
+     * @param suffix
+     * @return
+     */
+    public static String combinePath(@Nullable String extendee, @Nullable String suffix) {
+        return _Strings.combineWithDelimiter(extendee, suffix, "/");
+    }
+
     // -- HELPER
 
     /*
@@ -203,12 +217,6 @@ public final class _Resources {
         }
         return name;
     }
-
-
-
-
-
     
 
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/exceptions/IsisException.java b/core/commons/src/main/java/org/apache/isis/core/commons/exceptions/IsisException.java
similarity index 100%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/exceptions/IsisException.java
rename to core/commons/src/main/java/org/apache/isis/core/commons/exceptions/IsisException.java
diff --git a/core/commons/src/main/java/org/apache/isis/core/plugins/environment/IsisSystemEnvironment.java b/core/commons/src/main/java/org/apache/isis/core/plugins/environment/IsisSystemEnvironment.java
index 186f98f..b6aba62 100644
--- a/core/commons/src/main/java/org/apache/isis/core/plugins/environment/IsisSystemEnvironment.java
+++ b/core/commons/src/main/java/org/apache/isis/core/plugins/environment/IsisSystemEnvironment.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.core.plugins.environment;
 
+import org.apache.isis.commons.internal.base._Lazy;
+
 /**
  * Represents configuration, that is available in an early phase of bootstrapping. 
  * It is regarded immutable for an application's life-cycle.
@@ -29,6 +31,7 @@ public interface IsisSystemEnvironment {
     // -- INTERFACE
     
     public DeploymentType getDeploymentType();
+    public boolean isUnitTesting();
     
     // -- FACTORIES
     
@@ -36,15 +39,46 @@ public interface IsisSystemEnvironment {
         return DEFAULT;
     }
     
-    public static IsisSystemEnvironment of(DeploymentType deploymentType) {
-        return ()->deploymentType;        
-    }
+    // -- INIT
 
+    /**
+     * For framework internal unit tests.<p>
+     * Let the framework know what context we are running on.
+     * Must be set prior to configuration bootstrapping.
+     * @param isUnitTesting
+     */
+    public static void setUnitTesting(boolean isUnitTesting) {
+        System.setProperty("UNITTESTING", ""+isUnitTesting);
+    }
+    
+    /**
+     * To set the framework's deployment-type programmatically.<p>
+     * Must be set prior to configuration bootstrapping.
+     * @param isPrototyping
+     */
+    public static void setPrototyping(boolean isPrototyping) {
+        System.setProperty("PROTOTYPING", ""+isPrototyping);
+    }
+    
     // -- DEFAULT IMPLEMENTATION
     
     public static final IsisSystemEnvironment DEFAULT = new IsisSystemEnvironment() {
+        
         @Override
         public DeploymentType getDeploymentType() {
+            return deploymentType.get();
+        }
+
+        @Override
+        public boolean isUnitTesting() {
+            return "true".equalsIgnoreCase(System.getProperty("UNITTESTING"));
+        }
+        
+        // -- HELPER
+        
+        private _Lazy<DeploymentType> deploymentType = _Lazy.threadSafe(this::decideDeploymentType); 
+        
+        private DeploymentType decideDeploymentType() {
             boolean anyVoteForPrototyping = false;
             boolean anyVoteForProduction = false;
             
@@ -78,6 +112,8 @@ public interface IsisSystemEnvironment {
             
             return deploymentType;
         }
+
+        
     };
         
     
diff --git a/core/commons/src/test/java/org/apache/isis/commons/internal/context/ContextTest.java b/core/commons/src/test/java/org/apache/isis/commons/internal/context/ContextTest.java
index f752a9d..2668480 100644
--- a/core/commons/src/test/java/org/apache/isis/commons/internal/context/ContextTest.java
+++ b/core/commons/src/test/java/org/apache/isis/commons/internal/context/ContextTest.java
@@ -26,8 +26,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
+@Disabled("some tests fail to run on eclipse -> "
+        + "java.lang.ClassNotFoundException: org.junit.platform.commons.logging.LogRecordListener")
 class ContextTest {
     
     public static class AClass {
@@ -222,13 +225,15 @@ class ContextTest {
     }
 
     @Test
-    void testLoadClass() throws ClassNotFoundException {
-        assertNotNull(_Context.loadClass(AClass.class.getName()));
+    void testLoadClass() {
+        assertThrows(ClassNotFoundException.class, 
+                ()->_Context.loadClass(AClass.class.getName()));
     }
 
     @Test
-    void testLoadClassAndInitialize() throws ClassNotFoundException {
-        assertNotNull(_Context.loadClassAndInitialize(AClass.class.getName()));
+    void testLoadClassAndInitialize() {
+        assertThrows(ClassNotFoundException.class, 
+                ()->_Context.loadClassAndInitialize(AClass.class.getName()));
     }
 
 }
diff --git a/core/metamodel/pom.xml b/core/config/pom.xml
similarity index 71%
copy from core/metamodel/pom.xml
copy to core/config/pom.xml
index 8bf7d1b..415e0cd 100644
--- a/core/metamodel/pom.xml
+++ b/core/config/pom.xml
@@ -26,83 +26,85 @@
         <version>${revision}</version>
     </parent>
 
-    <artifactId>isis-core-metamodel</artifactId>
-    <name>Apache Isis MetaModel</name>
+    <artifactId>isis-core-config</artifactId>
+
+    <name>Apache Isis Configuration</name>
+    <description>
+        Isis configuration library for framework internal use.
+    </description>
 
     <properties>
-        <jar-plugin.automaticModuleName>org.apache.isis.core.metamodel</jar-plugin.automaticModuleName>
-        <git-plugin.propertiesDir>org/apache/isis/core/metamodel</git-plugin.propertiesDir>
+        <jar-plugin.automaticModuleName>org.apache.isis.config</jar-plugin.automaticModuleName>
+        <git-plugin.propertiesDir>org/apache/isis/config</git-plugin.propertiesDir>
     </properties>
 
     <build>
-        <testResources>
-            <testResource>
+        <resources>
+            <resource>
                 <filtering>false</filtering>
-                <directory>src/test/resources</directory>
-            </testResource>
-            <testResource>
+                <directory>src/main/resources</directory>
+            </resource>
+            <resource>
                 <filtering>false</filtering>
-                <directory>src/test/java</directory>
+                <directory>src/main/java</directory>
                 <includes>
                     <include>**</include>
                 </includes>
                 <excludes>
                     <exclude>**/*.java</exclude>
                 </excludes>
-            </testResource>
-        </testResources>
+            </resource>
+        </resources>
     </build>
 
     <dependencies>
     
-        <!-- JDO API (non transient, provided by plugin) -->
-        <dependency>
-            <groupId>javax.jdo</groupId>
-            <artifactId>jdo-api</artifactId>
-            <version>${jdo-api.version}</version>
-            <!-- provided by plugins -->
-            <scope>provided</scope>
-        </dependency>
-    
-        <dependency>
-            <groupId>org.apache.isis.core</groupId>
-            <artifactId>isis-core-unittestsupport</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
+    	<dependency>
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-applib</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.apache.isis.core</groupId>
-            <artifactId>isis-core-applib</artifactId>
-            <type>test-jar</type>
-            <scope>test</scope>
+        
+        <!-- [2039] only to discover persistence capable classes, not required if every 
+        	relevant entity is annotated with @DomainObject-->
+		<dependency>
+        	<groupId>javax.jdo</groupId>
+        	<artifactId>jdo-api</artifactId>
+        	<version>${jdo-api.version}</version>
+        	<scope>provided</scope>
         </dependency>
-
-		<!-- command line options support  -->
-        <dependency>
-            <groupId>commons-cli</groupId>
-            <artifactId>commons-cli</artifactId>
+        
+        <!-- [2039] only to configure log4j from servlet context resources -->
+		<dependency>
+        	<groupId>org.apache.isis.core</groupId>
+        	<artifactId>isis-core-log4j</artifactId>
+        	<scope>provided</scope>
         </dependency>
-
+    
+        <!-- TESTS -->
         <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-core</artifactId>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-unittestsupport</artifactId>
+            <scope>test</scope>
             <exclusions>
-            	<!-- metamodel has no more compile dependency on guava -->
+            	<!-- whatever unittestsupport is dependent on, it should not be transitive  -->
             	<exclusion>
-            		<groupId>com.google.guava</groupId>
-            		<artifactId>guava</artifactId>
+                    <groupId>org.reflections</groupId>
+                    <artifactId>reflections</artifactId>
             	</exclusion>
-            	<!-- already provided by JEE API -->
             	<exclusion>
-            		<groupId>javax.validation</groupId>
-            		<artifactId>validation-api</artifactId>
+                    <groupId>com.google.guava</groupId>
+                    <artifactId>guava</artifactId>
             	</exclusion>
             </exclusions>
         </dependency>
+
+        <dependency>
+        	<groupId>org.apache.isis.core</groupId>
+        	<artifactId>isis-core-applib</artifactId>
+        	<type>test-jar</type>
+        </dependency>
+
+
     </dependencies>
 
     <profiles>
@@ -150,5 +152,4 @@
         </profile>
     </profiles>
 
-
 </project>
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/LocaleProvider.java b/core/config/src/main/java/org/apache/isis/config/AppConfig.java
similarity index 79%
copy from core/applib/src/main/java/org/apache/isis/applib/services/i18n/LocaleProvider.java
copy to core/config/src/main/java/org/apache/isis/config/AppConfig.java
index 9bb5c3d..42d076a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/LocaleProvider.java
+++ b/core/config/src/main/java/org/apache/isis/config/AppConfig.java
@@ -16,13 +16,16 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.services.i18n;
+package org.apache.isis.config;
 
-import java.util.Locale;
-import org.apache.isis.applib.annotation.Programmatic;
-
-public interface LocaleProvider {
+/**
+ * Entry-point for Application Bootstrapping
+ *  
+ * @since 2.0.0-M2
+ */
+@FunctionalInterface
+public interface AppConfig {
 
-    @Programmatic
-    Locale getLocale();
+    public IsisConfiguration isisConfiguration();
+    
 }
diff --git a/core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java b/core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java
new file mode 100644
index 0000000..3127094
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/config/AppConfigLocator.java
@@ -0,0 +1,64 @@
+package org.apache.isis.config;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.commons.internal.context._Plugin;
+import org.apache.isis.config.builder.IsisConfigurationBuilder;
+import org.apache.isis.core.commons.exceptions.IsisException;
+
+public final class AppConfigLocator {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(AppConfigLocator.class);
+    
+    private AppConfigLocator() { }
+    
+    public static AppConfig getAppConfig() {
+        return _Context.computeIfAbsent(AppConfig.class, __->lookupAppConfig());
+    }
+    
+    // -- HELPER
+    
+    private static AppConfig lookupAppConfig() {
+        return _Plugin.getOrElse(AppConfig.class,
+                ambiguousPlugins->{
+                    throw _Plugin.ambiguityNonRecoverable(AppConfig.class, ambiguousPlugins);
+                },
+                ()->{
+                    LOG.warn("Failed to locate AppConfig via ServiceLoader, falling back to "
+                            + "search utilizing config properties.");
+                    return lookupAppConfig_UsingConfigProperties();
+                });
+    }
+    
+    // to support pre 2.0.0-M2 behavior    
+    private static AppConfig lookupAppConfig_UsingConfigProperties() {
+        
+        IsisConfigurationBuilder builder = IsisConfigurationBuilder.getDefault();
+        String appManifestClassName =  builder.peekAtString("isis.appManifest");
+        
+        final Class<AppManifest> appManifestClass;
+        try {
+            appManifestClass = _Casts.uncheckedCast(_Context.loadClassAndInitialize(appManifestClassName));
+        } catch (ClassNotFoundException e) {
+            throw new IsisException("Failed to locate the AppManifest using config properties.", e);
+        }
+        
+        final AppManifest appManifest;
+        try {
+            appManifest = appManifestClass.newInstance();
+        } catch (InstantiationException | IllegalAccessException e) {
+            throw new IsisException(
+                    String.format("Failed to create instance of AppManifest '%s'.", appManifestClass), e);
+        }
+        
+        // Note: AppConfig is a FunctionalInterface
+        return ()->IsisConfiguration.buildFromAppManifest(appManifest);
+        
+    }
+    
+
+}
diff --git a/core/config/src/main/java/org/apache/isis/config/AppManifestFinder.java b/core/config/src/main/java/org/apache/isis/config/AppManifestFinder.java
new file mode 100644
index 0000000..c82a2c8
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/config/AppManifestFinder.java
@@ -0,0 +1,83 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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 org.apache.isis.config;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Optional;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.context._Context;
+
+import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
+import static org.apache.isis.commons.internal.base._Strings.isNullOrEmpty;
+
+/**
+ * 
+ * @since 2.0.0-M2
+ * 
+ * @deprecated does not work, use {@link AppManifestLocator instead}
+ */
+class AppManifestFinder {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(AppManifestFinder.class);
+
+    static AppManifest findAppMainfestOrThrow() {
+        
+        // lookup all sorts of places for 'isis.properties' and other;
+        // see if we can find an entry 'isis.appManifest=xxx'
+        // that points to the AppManifest to use
+        
+        final String manifestKey = ConfigurationConstants.APP_MANIFEST_KEY;
+        
+        final String appManifestClassName = 
+            _Strings.read(_Context.getDefaultClassLoader().getResourceAsStream("/META-INF/app.manifest"), 
+                    StandardCharsets.UTF_8);
+        
+        //final String appManifestClassName = _Config.peekAtString(manifestKey);
+        if(isNullOrEmpty(appManifestClassName)) {
+            throw new IsisConfigurationException(
+                    String.format("Failed to find AppManifest from config properties. No value for key '%s' found.", 
+                            manifestKey));
+        }
+        Object appManifest;
+        try {
+            appManifest = _Context.loadClassAndInitialize(appManifestClassName);
+        } catch (ClassNotFoundException e) {
+            throw new IsisConfigurationException(
+                    String.format("Failed to instantiate AppManifest from config value '%s'.", 
+                            appManifestClassName));
+        }
+        return uncheckedCast(appManifest);
+    }
+    
+    static Optional<AppManifest> findAppMainfest() {
+        try {
+            return Optional.ofNullable(findAppMainfestOrThrow());
+        } catch (Exception e) {
+            LOG.warn(e.getMessage());
+            return Optional.empty();
+        }
+    }
+    
+    
+}
diff --git a/core/config/src/main/java/org/apache/isis/config/ConfigurationConstants.java b/core/config/src/main/java/org/apache/isis/config/ConfigurationConstants.java
new file mode 100644
index 0000000..2cf8881
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/config/ConfigurationConstants.java
@@ -0,0 +1,88 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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 org.apache.isis.config;
+
+import java.util.List;
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.collections._Lists;
+
+public final class ConfigurationConstants {
+    
+    public static final String ROOT = "isis.";
+    
+    /**
+     * Key used to lookup {@link AppManifest} (if any) from the {@link IsisConfiguration}.
+     * @deprecated AppManifest lookup changed with 2.0.0-M2
+     */
+    public static final String APP_MANIFEST_KEY = ConfigurationConstants.ROOT + "appManifest";
+
+
+    public static final String LIST_SEPARATOR = ",";
+    public static final String DELIMITER = ".";
+    public static final String DEFAULT_CONFIG_DIRECTORY = "config";
+    public static final String WEBINF_DIRECTORY = "WEB-INF";
+    public static final String WEBINF_FULL_DIRECTORY = "src/main/webapp/" + WEBINF_DIRECTORY;
+
+    public static final String DEFAULT_CONFIG_FILE = "isis.properties";
+    public static final String WEB_CONFIG_FILE = "web.properties";
+
+    public static final List<String> PROTECTED_KEYS =
+            _Lists.of("password", "apiKey", "authToken");
+
+    public static String maskIfProtected(final String key, final String value) {
+        return isProtected(key) ? "********" : value;
+    }
+    
+    public static Map<String, String> maskIfProtected(
+            final Map<String, String> inMap, 
+            final Supplier<Map<String, String>> mapFactory) {
+        final Map<String, String> result = mapFactory.get();
+        
+        inMap.forEach((k, v)->{
+            result.put(k, maskIfProtected(k, v));
+        });
+        
+        return result;
+    }
+    
+    // -- HELPER
+    
+    private ConfigurationConstants() {}
+
+    static boolean isProtected(final String key) {
+        if(_Strings.isNullOrEmpty(key)) {
+            return false;
+        }
+        final String toLowerCase = key.toLowerCase();
+        for (String protectedKey : ConfigurationConstants.PROTECTED_KEYS) {
+            if(toLowerCase.contains(protectedKey.toLowerCase())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    
+    
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
similarity index 71%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
rename to core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
index 356ec8f..a0e0717 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
@@ -17,17 +17,23 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.config;
+package org.apache.isis.config;
 
 import java.awt.Color;
 import java.awt.Font;
 import java.util.Iterator;
 import java.util.Map;
 
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.core.commons.components.ApplicationScopedComponent;
-import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.Module;
+import org.apache.isis.applib.PropertyResource;
+import org.apache.isis.config.builder.IsisConfigurationBuilder;
+import org.apache.isis.config.resource.ResourceStreamSource;
+
+import static org.apache.isis.commons.internal.base._NullSafe.stream;
+import static org.apache.isis.config.internal._Config.acceptBuilder;
+import static org.apache.isis.config.internal._Config.clear;
+import static org.apache.isis.config.internal._Config.getConfiguration;
 
 /**
  * Immutable set of properties representing the configuration of the running
@@ -43,7 +49,72 @@ import org.apache.isis.core.commons.resource.ResourceStreamSource;
  * Thus the {@link IsisConfiguration} held by different components may vary, but
  * with each being a possible superset of the previous.
  */
-public interface IsisConfiguration extends ApplicationScopedComponent {
+public interface IsisConfiguration {
+    
+    /**
+     * How to handle the case when the configuration already contains the key being added.
+     */
+    public enum ContainsPolicy {
+        /**
+         * If the configuration already contains the key, then ignore the new value.
+         */
+        IGNORE,
+        /**
+         * If the configuration already contains the key, then overwrite with the new.
+         */
+        OVERWRITE,
+        /**
+         * If the configuration already contains the key, then throw an exception.
+         */
+        EXCEPTION
+    }
+    
+    // -- BUILDERS
+    
+    /**
+     * 
+     * @param topModule
+     * @param additionalPropertyResources
+     * @return
+     * @since 2.0.0-M2
+     */
+    static IsisConfiguration buildFromModuleTree(Module topModule, PropertyResource ... additionalPropertyResources) {
+        clear();
+        acceptBuilder(builder->{
+            stream(additionalPropertyResources)
+            .forEach(builder::addPropertyResource);
+            builder.addTopModule(topModule);
+        });
+        return getConfiguration();
+    }
+    
+    /**
+     * 
+     * @param topModule
+     * @param additionalPropertyResources
+     * @return
+     * @since 2.0.0-M2
+     */
+    static IsisConfiguration buildFromAppManifest(AppManifest appManifest) {
+        clear();
+        acceptBuilder(builder->{
+            builder.addAppManifest(appManifest);
+        });
+        return getConfiguration();
+    }
+    
+    // -- VERSION
+    
+    public static String getVersion() {
+        return "2.0.0-M2";
+    }
+    
+    // --
+    
+    /**
+     * @since 2.0.0-M2
+     */
+    public AppManifest getAppManifest();
 
     /**
      * Creates a new IsisConfiguration containing the properties starting with
@@ -53,7 +124,6 @@ public interface IsisConfiguration extends ApplicationScopedComponent {
      *
      * @see #getProperties(String)
      */
-    @Programmatic
     IsisConfiguration createSubset(String prefix);
 
     /**
@@ -64,7 +134,6 @@ public interface IsisConfiguration extends ApplicationScopedComponent {
      * @param name
      *            the property name
      */
-    @Programmatic
     boolean getBoolean(String name);
 
     /**
@@ -77,7 +146,6 @@ public interface IsisConfiguration extends ApplicationScopedComponent {
      * @param defaultValue
      *            the value to use as a default
      */
-    @Programmatic
     boolean getBoolean(String name, boolean defaultValue);
 
     /**
@@ -87,7 +155,6 @@ public interface IsisConfiguration extends ApplicationScopedComponent {
      * @param name
      *            the property name
      */
-    @Programmatic
     Color getColor(String name);
 
     /**
@@ -99,7 +166,6 @@ public interface IsisConfiguration extends ApplicationScopedComponent {
      * @param defaultValue
      *            the value to use as a default
      */
-    @Programmatic
     Color getColor(String name, Color defaultValue);
 
     /**
@@ -109,7 +175,6 @@ public interface IsisConfiguration extends ApplicationScopedComponent {
      * @param name
      *            the property name
      */
-    @Programmatic
     Font getFont(String name);
 
     /**
@@ -121,7 +186,6 @@ public interface IsisConfiguration extends ApplicationScopedComponent {
      * @param defaultValue
      *            the color to use as a default
      */
-    @Programmatic
     Font getFont(String name, Font defaultValue);
 
     /**
@@ -131,14 +195,12 @@ public interface IsisConfiguration extends ApplicationScopedComponent {
      * <p>
      * If there is no matching property then returns an empty array.
      */
-    @Programmatic
     String[] getList(String name);
 
     /**
      * Returns a list of entries for the single configuration property with the
      * specified name.
      */
-    @Programmatic
     String[] getList(String name, String defaultListAsCommaSeparatedArray);
 
     /**
@@ -148,7 +210,6 @@ public interface IsisConfiguration extends ApplicationScopedComponent {
      * @param name
      *            the property name
      */
-    @Programmatic
     int getInteger(String name);
 
     /**
@@ -160,7 +221,6 @@ public interface IsisConfiguration extends ApplicationScopedComponent {
      * @param defaultValue
      *            the value to use as a default
      */
-    @Programmatic
     int getInteger(String name, int defaultValue);
 
     /**
@@ -172,48 +232,45 @@ public interface IsisConfiguration extends ApplicationScopedComponent {
      *
      * @see #createSubset(String)
      */
-    @Programmatic
     IsisConfiguration getProperties(String withPrefix);
 
     /**
      * Returns the configuration property with the specified name. If there is
      * no matching property then null is returned.
      */
-    @Programmatic
     String getString(String name);
 
-    @Programmatic
     String getString(String name, String defaultValue);
 
-    @Programmatic
     boolean hasProperty(String name);
 
-    @Programmatic
     boolean isEmpty();
 
     /**
      * Iterates over the property names of this configuration.
      */
-    @Programmatic
     Iterator<String> iterator();
 
-    @Programmatic
     Iterable<String> asIterable();
 
-    @Programmatic
     int size();
 
     /**
      * The {@link ResourceStreamSource} that was used to build this
      * configuration.
      */
-    @Programmatic
     ResourceStreamSource getResourceStreamSource();
 
     /**
      * A mutable copy of the current set of properties (name/values) held in this configuration.
      */
-    @Programmatic
     Map<String, String> asMap();
 
+    // -- SHORTCUTS
+    
+    default boolean explicitAnnotationsForActions() {
+        return getBoolean("isis.reflector.explicitAnnotations.action");
+    }
+    
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationException.java b/core/config/src/main/java/org/apache/isis/config/IsisConfigurationException.java
similarity index 96%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationException.java
rename to core/config/src/main/java/org/apache/isis/config/IsisConfigurationException.java
index 706d969..bd1ce25 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationException.java
+++ b/core/config/src/main/java/org/apache/isis/config/IsisConfigurationException.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.config;
+package org.apache.isis.config;
 
 import org.apache.isis.core.commons.exceptions.IsisException;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/NotFoundPolicy.java b/core/config/src/main/java/org/apache/isis/config/NotFoundPolicy.java
similarity index 95%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/config/NotFoundPolicy.java
rename to core/config/src/main/java/org/apache/isis/config/NotFoundPolicy.java
index 0ab7b81..806d686 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/NotFoundPolicy.java
+++ b/core/config/src/main/java/org/apache/isis/config/NotFoundPolicy.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.config;
+package org.apache.isis.config;
 
 public enum NotFoundPolicy {
     CONTINUE, FAIL_FAST
diff --git a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebAppConstants.java b/core/config/src/main/java/org/apache/isis/config/WebAppConstants.java
similarity index 95%
rename from core/runtime/src/main/java/org/apache/isis/core/webapp/WebAppConstants.java
rename to core/config/src/main/java/org/apache/isis/config/WebAppConstants.java
index f3bf67b..2a9663e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/webapp/WebAppConstants.java
+++ b/core/config/src/main/java/org/apache/isis/config/WebAppConstants.java
@@ -17,10 +17,9 @@
  *  under the License.
  */
 
-package org.apache.isis.core.webapp;
+package org.apache.isis.config;
 
 import org.apache.isis.applib.fixtures.LogonFixture;
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
 
 public final class WebAppConstants {
 
diff --git a/core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationBuilder.java b/core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationBuilder.java
new file mode 100644
index 0000000..e273493
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationBuilder.java
@@ -0,0 +1,109 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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 org.apache.isis.config.builder;
+
+import java.util.List;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.Module;
+import org.apache.isis.applib.PropertyResource;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.NotFoundPolicy;
+import org.apache.isis.config.resource.ResourceStreamSource;
+
+public interface IsisConfigurationBuilder {
+    
+    void addPropertyResource(PropertyResource propertyResource);
+
+    void addResourceStreamSource(ResourceStreamSource resourceStreamSource);
+    void addResourceStreamSources(ResourceStreamSource... resourceStreamSources);
+    void addResourceStreamSources(List<ResourceStreamSource> resourceStreamSources);
+
+    /**
+     * Registers the configuration resource (usually, a file) with the specified
+     * name from the first {@link ResourceStreamSource} available.
+     *
+     * <p>
+     * If the configuration resource cannot be found then the provided
+     * {@link NotFoundPolicy} determines whether an exception is thrown or not.
+     */
+    void addConfigurationResource(String configurationResource, NotFoundPolicy notFoundPolicy,
+            IsisConfigurationDefault.ContainsPolicy containsPolicy);
+
+    /**
+     * Adds additional property; if already present then will _not_ be replaced.
+     */
+    void add(String key, String value);
+
+    /**
+     * Adds/updates property; if already present then _will_ be replaced.
+     */
+    void put(String key, String value);
+
+    void primeWith(Primer primer);
+
+    String peekAtString(String key);
+    String peekAtString(String key, String defaultValue);
+
+    boolean peekAtBoolean(String key);
+    boolean peekAtBoolean(String key, boolean defaultValue);
+
+    String[] peekAtList(String key);
+    
+    /**
+     * Walks the module tree starting at the topModule to resolve all key/value pairs that 
+     * contribute to the configuration.
+     * @param topModule
+     * @since 2.0.0-M2
+     */
+    void addTopModule(Module topModule);
+    
+    /**
+     * @param appManifest
+     * @since 2.0.0-M2
+     */
+    void addAppManifest(AppManifest appManifest);
+
+    /** internal only **/
+    IsisConfiguration build();
+
+    /**
+     * Log a summary of resources found or not found.
+     */
+    void dumpResourcesToLog();
+    
+    // -- PRIMING
+    
+    public interface Primer {
+        void prime(IsisConfigurationBuilder isisConfigurationBuilder);
+    }
+
+    // -- FACTORIES
+    
+    static IsisConfigurationBuilder getDefault() {
+        return IsisConfigurationBuilderDefault.getDefault();
+    }
+
+    static IsisConfigurationBuilder empty() {
+        return IsisConfigurationBuilderDefault.empty();
+    }
+
+    
+
+}
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java b/core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationBuilderDefault.java
similarity index 64%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
rename to core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationBuilderDefault.java
index 5689658..2f931ee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
+++ b/core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationBuilderDefault.java
@@ -17,35 +17,32 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.configbuilder;
+package org.apache.isis.config.builder;
 
 import java.io.IOException;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
-import java.util.Properties;
 import java.util.Set;
 
-import org.apache.commons.cli.CommandLine;
-import org.apache.commons.cli.CommandLineParser;
-import org.apache.commons.cli.DefaultParser;
-import org.apache.commons.cli.Options;
-import org.apache.commons.cli.ParseException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.applib.util.ToString;
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.AppManifestAbstract2;
+import org.apache.isis.applib.Module;
+import org.apache.isis.applib.PropertyResource;
 import org.apache.isis.commons.internal.collections._Sets;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault.ContainsPolicy;
-import org.apache.isis.core.commons.config.NotFoundPolicy;
+import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.NotFoundPolicy;
+import org.apache.isis.config.IsisConfiguration.ContainsPolicy;
+import org.apache.isis.config.resource.ResourceStreamSource;
+import org.apache.isis.config.resource.ResourceStreamSourceChainOfResponsibility;
+import org.apache.isis.config.resource.ResourceStreamSourceFileSystem;
+import org.apache.isis.config.resource.ResourceStreamSource_UsingClass;
 import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
-import org.apache.isis.core.runtime.optionhandler.BootPrinter;
-import org.apache.isis.core.runtime.optionhandler.OptionHandler;
 
 /**
  * Holds a mutable set of properties representing the configuration.
@@ -64,33 +61,47 @@ import org.apache.isis.core.runtime.optionhandler.OptionHandler;
  * @see {@link IsisConfiguration} for more details on the mutable/immutable pair pattern.
  *
  */
-public final class IsisConfigurationBuilder {
+final class IsisConfigurationBuilderDefault implements IsisConfigurationBuilder {
 
-    private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilder.class);
-
-    // -- constructor, fields
+    private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationBuilderDefault.class);
 
     private final ResourceStreamSourceChainOfResponsibility resourceStreamSourceChain;
 
-    /* package */ final IsisConfigurationDefault configuration;
-    private boolean locked;
+    private IsisConfigurationDefault configuration;
 
     private final Set<String> configurationResourcesFound = _Sets.newLinkedHashSet();
     private final Set<String> configurationResourcesNotFound = _Sets.newLinkedHashSet();
-
-    public IsisConfigurationBuilder() {
-        this(ResourceStreamSourceFileSystem.create(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY));
-    }
-
-    public IsisConfigurationBuilder(final ResourceStreamSource... resourceStreamSources) {
-        this(createComposite(Arrays.asList(resourceStreamSources)));
+    
+    // -- FACTORIES
+    
+    static IsisConfigurationBuilder empty() {
+        ResourceStreamSourceChainOfResponsibility chain = createComposite(Collections.emptyList());
+        IsisConfigurationBuilderDefault builder = new IsisConfigurationBuilderDefault(chain);
+        return builder;
     }
-
-    public IsisConfigurationBuilder(final List<ResourceStreamSource> resourceStreamSources) {
-        this(createComposite(resourceStreamSources));
+    
+    static IsisConfigurationBuilder getDefault() {
+        
+        if(_Context.isUnitTesting()) {
+            return empty();
+        }
+        
+        final ResourceStreamSourceChainOfResponsibility chain = createComposite(Arrays.asList(
+                ResourceStreamSourceFileSystem.create(ConfigurationConstants.DEFAULT_CONFIG_DIRECTORY)        
+                ));
+        final IsisConfigurationBuilderDefault builder = new IsisConfigurationBuilderDefault(chain);
+        
+        builder.addDefaultPrimers();
+        builder.addTopLevelDefaultConfigurationResource();
+        builder.addDefaultConfigurationResources();
+        
+        return builder;
+        
     }
+    
+    // -- 
 
-    public IsisConfigurationBuilder(final ResourceStreamSourceChainOfResponsibility resourceStreamSourceChain) {
+    private IsisConfigurationBuilderDefault(final ResourceStreamSourceChainOfResponsibility resourceStreamSourceChain) {
         this.resourceStreamSourceChain = resourceStreamSourceChain;
         configuration = new IsisConfigurationDefault(resourceStreamSourceChain);
     }
@@ -107,17 +118,15 @@ public final class IsisConfigurationBuilder {
         return composite;
     }
 
-    public void addDefaultConfigurationResourcesAndPrimers() {
-        addDefaultConfigurationResources();
-        addDefaultPrimers();
+    private void addTopLevelDefaultConfigurationResource() {
+        addConfigurationResource(ConfigurationConstants.DEFAULT_CONFIG_FILE, 
+                NotFoundPolicy.FAIL_FAST, ContainsPolicy.IGNORE);
     }
 
     private void addDefaultConfigurationResources() {
-        IsisConfigurationDefault.ContainsPolicy ignorePolicy = IsisConfigurationDefault.ContainsPolicy.IGNORE;
+        ContainsPolicy ignorePolicy = ContainsPolicy.IGNORE;
         NotFoundPolicy continuePolicy = NotFoundPolicy.CONTINUE;
 
-        addConfigurationResource(ConfigurationConstants.DEFAULT_CONFIG_FILE, NotFoundPolicy.FAIL_FAST, ignorePolicy);
-
         addConfigurationResource(ConfigurationConstants.WEB_CONFIG_FILE, continuePolicy, ignorePolicy);
         addConfigurationResource("war.properties", continuePolicy, ignorePolicy);
 
@@ -157,29 +166,28 @@ public final class IsisConfigurationBuilder {
         primeWith(new PrimerForSystemProperties());
         primeWith(new PrimerForEnvironmentVariablesIsisPrefix());
         primeWith(new PrimerForEnvironmentVariableISIS_OPTS());
+        primeWith(new PrimerForServletContext());
     }
 
-
-
     // -- addResourceStreamSource, addResourceStreamSources
 
+    @Override
     public void addResourceStreamSource(final ResourceStreamSource resourceStreamSource) {
         addResourceStreamSources(resourceStreamSource);
     }
 
+    @Override
     public void addResourceStreamSources(final ResourceStreamSource... resourceStreamSources) {
         addResourceStreamSources(Arrays.asList(resourceStreamSources));
     }
 
+    @Override
     public void addResourceStreamSources(final List<ResourceStreamSource> resourceStreamSources) {
-        ensureNotLocked();
         for (ResourceStreamSource resourceStreamSource : resourceStreamSources) {
             this.resourceStreamSourceChain.addResourceStreamSource(resourceStreamSource);
         }
     }
 
-
-
     // -- addConfigurationResource
 
     /**
@@ -191,15 +199,14 @@ public final class IsisConfigurationBuilder {
      * {@link NotFoundPolicy} determines whether an exception is thrown or not.
      *
      * <p>
-     * Must be called before {@link IsisConfigurationBuilder#getConfiguration()}.
+     * Must be called before {@link IsisConfigurationBuilderDefault#getConfiguration()}.
      */
+    @Override
     public void addConfigurationResource(
             final String configurationResource,
             final NotFoundPolicy notFoundPolicy,
             final IsisConfigurationDefault.ContainsPolicy containsPolicy) {
 
-        ensureNotLocked();
-
         if(LOG.isDebugEnabled()) {
             LOG.debug(String.format(
                     "checking availability of configuration resource: %s, notFoundPolicy: %s",
@@ -247,127 +254,108 @@ public final class IsisConfigurationBuilder {
         return new PropertiesReader(resourceStreamSource, configurationResource);
     }
 
-
-
-
     // -- add, put
 
     /**
      * Adds additional property; if already present then will _not_ be replaced.
      */
+    @Override
     public void add(final String key, final String value) {
-        ensureNotLocked();
         configuration.add(key, value);
     }
 
     /**
      * Adds/updates property; if already present then _will_ be replaced.
      */
+    @Override
     public void put(final String key, final String value) {
-        ensureNotLocked();
         configuration.put(key, value);
     }
 
+    // -- PRIMING
 
-
-
-    // -- parseAndPrimeWith, primeWith
-
-    public boolean parseAndPrimeWith(final List<OptionHandler> optionHandlers, final String[] args) {
-
-        // add options (ie cmd line flags)
-        final Options options = new Options();
-        for (final OptionHandler optionHandler : optionHandlers) {
-            optionHandler.addOption(options);
-        }
-
-        // parse options from the cmd line
-        final boolean parsedOk = parseAndPrimeWith(options, optionHandlers, args);
-
-        if(parsedOk) {
-            for (final OptionHandler optionHandler : optionHandlers) {
-                primeWith(optionHandler);
-            }
-        }
-
-        return parsedOk;
-    }
-
-    private boolean parseAndPrimeWith(final Options options, final List<OptionHandler> optionHandlers, final String[] args) {
-        final BootPrinter printer = new BootPrinter(getClass());
-        final CommandLineParser parser = new DefaultParser();
-        try {
-            final CommandLine commandLine = parser.parse(options, args);
-            for (final OptionHandler optionHandler : optionHandlers) {
-                if (!optionHandler.handle(commandLine, printer, options)) {
-                    return false;
-                }
-            }
-        } catch (final ParseException e) {
-            printer.printErrorMessage(e.getMessage());
-            printer.printHelp(options);
-            return false;
-        }
-        return true;
-    }
-
-    public interface Primer {
-        void prime(IsisConfigurationBuilder isisConfigurationBuilder);
-    }
-
+    @Override
     public void primeWith(final Primer primer) {
-        ensureNotLocked();
-
         LOG.debug("priming configurations for '{}'", primer);
         primer.prime(this);
     }
+    
+    // -- LOAD MODULE TREE
+    
+    @Override
+    public void addTopModule(Module topModule) {
+        final AppManifestAbstract2.Builder manifestBuilder = AppManifestAbstract2.Builder
+                .forModule(topModule);
+        final AppManifestAbstract2 manifest = new AppManifestAbstract2(manifestBuilder) {};
+        addAppManifest(manifest);
+    }
+    
+    @Override
+    public void addAppManifest(AppManifest appManifest) {
+        configuration.setAppManifest(appManifest);
+        appManifest.getConfigurationProperties().forEach((k, v)->{
+            put(k, v);
+        });
+    }
+        
+    // -- LOAD SINGLE RESOURCE
+        
+    @Override
+    public void addPropertyResource(PropertyResource propertyResource) {
+        IsisConfigurationDefault.ContainsPolicy ignorePolicy = IsisConfigurationDefault.ContainsPolicy.IGNORE;
+        NotFoundPolicy continuePolicy = NotFoundPolicy.CONTINUE;
+        
+        addResourceStreamSource(new ResourceStreamSource_UsingClass(propertyResource.getResourceContext()));
+        addConfigurationResource(propertyResource.getResourceName(), continuePolicy, ignorePolicy);
+    }
 
+    // -- PEEKING
+    
+    @Override
+    public String peekAtString(String key) {
+        return configuration.getString(key);
+    }
 
-
-    // -- getConfiguration, peekConfiguration, isLocked
-
-    /**
-     * Returns the {@link IsisConfiguration}; this will cause the configuration to be locked
-     */
-    public IsisConfigurationDefault getConfiguration() {
-        if(!locked) {
-            locked = true;
-            dumpResourcesToLog();
-        }
-        return configuration;
+    @Override
+    public String peekAtString(String key, String defaultValue) {
+        return configuration.getString(key, defaultValue);
     }
 
-    /**
-     * Set once {@link #getConfiguration()} is called.
-     */
-    public boolean isLocked() {
-        return locked;
+    @Override
+    public boolean peekAtBoolean(String key) {
+        return configuration.getBoolean(key);
     }
 
-    /**
-     * Creates a copy of the current {@link #getConfiguration()}, without locking.
-     *
-     * <p>
-     *     Used while bootstrapping, to obtain the web.server port etc.
-     * </p>
-     */
-    public IsisConfiguration peekConfiguration() {
-        IsisConfigurationDefault cfg = new IsisConfigurationDefault(resourceStreamSourceChain);
-        // no locking
-        Properties props = new Properties();
-        props.putAll(configuration.asMap());
-        cfg.add(props, ContainsPolicy.OVERWRITE);
-        return cfg;
+    @Override
+    public boolean peekAtBoolean(String key, boolean defaultValue) {
+        return configuration.getBoolean(key, defaultValue);
     }
+    
+    @Override
+    public String[] peekAtList(String key) {
+        return configuration.getList(key);
+    }
+    
+    // -- BUILD
 
-    private void ensureNotLocked() {
-        if (locked) {
-            throw new IsisException("Configuration has been locked and cannot be changed");
+    @Override
+    public IsisConfiguration build() {
+
+        if(configuration.getAppManifest()!=null) {
+            configuration.triggerTypeDiscovery();
+        } else {
+            LOG.info("Skipping domain type discovery due to missing AppManifest.");
+        }
+        
+        if (LOG.isDebugEnabled()) {
+            dumpResourcesToLog();    
         }
-    }
 
-    public String peekAt(String key) {
-        return configuration.getString(key);
+        final IsisConfigurationDefault ref = configuration;
+        
+        configuration = null; // once built this builder is no longer usable
+        
+        return ref;
     }
 
     // -- dumpResourcesToLog, toString
@@ -375,28 +363,24 @@ public final class IsisConfigurationBuilder {
     /**
      * Log a summary of resources found or not found.
      */
+    @Override
     public void dumpResourcesToLog() {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Configuration resources FOUND:");
-            for (String resource : configurationResourcesFound) {
-                LOG.debug("*  {}", resource);
-            }
-            LOG.debug("Configuration resources NOT FOUND (but not needed):");
-            for (String resource : configurationResourcesNotFound) {
-                LOG.debug("*  {}", resource);
-            }
+        LOG.info("Configuration resources FOUND:");
+        for (String resource : configurationResourcesFound) {
+            LOG.info("*  {}", resource);
+        }
+        LOG.info("Configuration resources NOT FOUND (but not needed):");
+        for (String resource : configurationResourcesNotFound) {
+            LOG.info("*  {}", resource);
         }
     }
 
-    private final static ToString<IsisConfigurationBuilder> toString =
-            ToString.<IsisConfigurationBuilder>
-    toString("resourceStream", x->x.resourceStreamSourceChain)
-    .thenToString("configResources", x->x.configurationResourcesFound)
-    ;
-
     @Override
     public String toString() {
-        return toString.toString(this);
+        return String.format("IsisConfigurationBuilder {resourceStream=%s, configResources=%s}", 
+                resourceStreamSourceChain, configurationResourcesFound);
     }
 
+   
+
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java b/core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationDefault.java
similarity index 87%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
rename to core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationDefault.java
index 5ed1e25..b992aae 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/IsisConfigurationDefault.java
+++ b/core/config/src/main/java/org/apache/isis/config/builder/IsisConfigurationDefault.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.config;
+package org.apache.isis.config.builder;
 
 import java.awt.Color;
 import java.awt.Font;
@@ -31,14 +31,21 @@ import java.util.StringTokenizer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.config.ConfigurationProperty;
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.commons.internal.base._Lazy;
+import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfigurationException;
+import org.apache.isis.config.resource.ResourceStreamSource;
 import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
+
+import static org.apache.isis.commons.internal.base._With.requires;
+
 
 /**
  * This object will typically be registered as the implementation of the {@link ConfigurationServiceInternal}
@@ -46,10 +53,13 @@ import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServi
  * {@link ServicesInjector#addFallbackIfRequired(Class, Object)}.
  *
  * <p>
- *     If an integration test is running, then the <code>IsisConfigurationForJdoIntegTests</code> will be used instead.
+ *     If an integration test is running, then the <code>IsisConfigurationForJdoIntegTests</code> 
+ *     will be used instead.
  * </p>
  */
-public class IsisConfigurationDefault implements ConfigurationServiceInternal {
+//[2039] @DomainObject(objectType=...) fixes meta-data validation complaining, otherwise not required ...
+@DomainObject(nature=Nature.INMEMORY_ENTITY, objectType="internal.IsisConfiguration") 
+class IsisConfigurationDefault implements IsisConfiguration {
 
     private static final Logger LOG = LoggerFactory.getLogger(IsisConfigurationDefault.class);
     private final ResourceStreamSource resourceStreamSource;
@@ -58,6 +68,7 @@ public class IsisConfigurationDefault implements ConfigurationServiceInternal {
      * derived lazily from {@link #properties}.
      */
     private Properties applicationProperties;
+    private AppManifest appManifest;
 
     // ////////////////////////////////////////////////
     // Constructor
@@ -77,6 +88,30 @@ public class IsisConfigurationDefault implements ConfigurationServiceInternal {
     }
 
     // ////////////////////////////////////////////////
+    // Property - Manifest
+    // ////////////////////////////////////////////////
+    
+    @Override
+    public AppManifest getAppManifest() {
+        return appManifest;
+    }
+    
+    public void setAppManifest(AppManifest appManifest) {
+        requires(appManifest, "appManifest");
+        this.appManifest = appManifest;
+    }
+    
+    // ////////////////////////////////////////////////
+    // Type Discovery
+    // ////////////////////////////////////////////////
+    
+    _Lazy<Integer> typeDiscovery = _Lazy.threadSafe(()->ModulePackageHelper.runTypeDiscovery(this.getAppManifest()));
+    
+    public void triggerTypeDiscovery() {
+        typeDiscovery.get();
+    }
+    
+    // ////////////////////////////////////////////////
     // ResourceStreamSource
     // ////////////////////////////////////////////////
 
@@ -90,27 +125,8 @@ public class IsisConfigurationDefault implements ConfigurationServiceInternal {
     // ////////////////////////////////////////////////
 
     /**
-     * How to handle the case when the configuration already contains the key being added.
-     */
-    public enum ContainsPolicy {
-        /**
-         * If the configuration already contains the key, then ignore the new value.
-         */
-        IGNORE,
-        /**
-         * If the configuration already contains the key, then overwrite with the new.
-         */
-        OVERWRITE,
-        /**
-         * If the configuration already contains the key, then throw an exception.
-         */
-        EXCEPTION
-    }
-
-    /**
      * Add the properties from an existing Properties object.
      */
-    @Programmatic
     public void add(final Properties properties, final ContainsPolicy containsPolicy) {
         for(Object key: properties.keySet()) {
             Object value = properties.get(key);
@@ -125,7 +141,6 @@ public class IsisConfigurationDefault implements ConfigurationServiceInternal {
      * @see #addPerPolicy(String, String, ContainsPolicy)
      * @see #put(String, String)
      */
-    @Programmatic
     public void add(final String key, final String value) {
         addPerPolicy(key, value, ContainsPolicy.IGNORE);
     }
@@ -137,7 +152,6 @@ public class IsisConfigurationDefault implements ConfigurationServiceInternal {
      * @see #add(String, String)
      * @see #addPerPolicy(String, String, ContainsPolicy)
      */
-    @Programmatic
     public void put(final String key, final String value) {
         addPerPolicy(key, value, ContainsPolicy.OVERWRITE);
     }
@@ -160,10 +174,10 @@ public class IsisConfigurationDefault implements ConfigurationServiceInternal {
         if (properties.containsKey(key)) {
             switch (policy) {
             case IGNORE:
-                LOG.info("ignoring {}={} as value already set (with {})", key, value, properties.get(key));
+                LOG.info("ignoring '{}' = '{}' as value already set (with {})", key, value, properties.get(key));
                 break;
             case OVERWRITE:
-                LOG.info("overwriting {}={} (previous value was {})", key, value, properties.get(key));
+                LOG.info("overwriting '{}' = '{}' (previous value was {})", key, value, properties.get(key));
                 properties.put(key, value);
                 break;
             case EXCEPTION:
@@ -171,16 +185,11 @@ public class IsisConfigurationDefault implements ConfigurationServiceInternal {
                         "Configuration already has a key {}, value of {}%s, value of %s", key, properties.get(key)));
             }
         } else {
-            LOG.info("adding {} = {}", key , safe(key, value));
+            LOG.info("adding '{}' = '{}'", key , ConfigurationConstants.maskIfProtected(key, value));
             properties.put(key, value);
         }
     }
 
-    static String safe(final String key, final String value) {
-        return ConfigurationProperty.Util.maskIfProtected(key, value);
-    }
-
-    @Override
     public IsisConfiguration createSubset(final String prefix) {
         final IsisConfigurationDefault subset = new IsisConfigurationDefault(resourceStreamSource);
 
@@ -230,18 +239,19 @@ public class IsisConfigurationDefault implements ConfigurationServiceInternal {
     @Override
     public boolean getBoolean(final String name, final boolean defaultValue) {
         String value = getPropertyElseNull(name);
-        if (value == null) {
+        if (_Strings.isNullOrEmpty(value)) {
             return defaultValue;
         }
         value = value.toLowerCase();
-        if (value.equals("on") || value.equals("yes") || value.equals("true") || value.equals("")) {
+        if (value.equals("on") || value.equals("yes") || value.equals("true") ) {
             return true;
         }
         if (value.equals("off") || value.equals("no") || value.equals("false")) {
             return false;
         }
 
-        throw new IsisConfigurationException("Illegal flag for " + name + "; must be one of on, off, yes, no, true or false");
+        throw new IsisConfigurationException("Illegal flag for " + name
+                + "; must be one of on, off, yes, no, true or false");
     }
 
     /**
@@ -469,7 +479,7 @@ public class IsisConfigurationDefault implements ConfigurationServiceInternal {
 
 
     // -- ConfigurationService impl
-    @Override
+//    @Override
     public String getProperty(final String name) {
         initAppPropertiesIfRequired();
         return applicationProperties.getProperty(name);
@@ -493,7 +503,7 @@ public class IsisConfigurationDefault implements ConfigurationServiceInternal {
     }
 
 
-    @Override
+//    @Override
     public List<String> getPropertyNames() {
         initAppPropertiesIfRequired();
         final List<String> list = _Lists.newArrayList();
diff --git a/core/config/src/main/java/org/apache/isis/config/builder/ModulePackageHelper.java b/core/config/src/main/java/org/apache/isis/config/builder/ModulePackageHelper.java
new file mode 100644
index 0000000..4fb5d5c
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/config/builder/ModulePackageHelper.java
@@ -0,0 +1,202 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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 org.apache.isis.config.builder;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import javax.xml.bind.annotation.XmlElement;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.annotation.Mixin;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.annotation.ViewModel;
+import org.apache.isis.applib.annotation.ViewModelLayout;
+import org.apache.isis.applib.fixturescripts.DiscoverableFixtureScript;
+import org.apache.isis.applib.fixturescripts.FixtureScript;
+import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.collections._Sets;
+import org.apache.isis.commons.internal.reflection._Reflect;
+import org.apache.isis.core.plugins.classdiscovery.ClassDiscovery;
+import org.apache.isis.core.plugins.classdiscovery.ClassDiscoveryPlugin;
+
+import static org.apache.isis.commons.internal.base._With.requires;
+
+/**
+ * @since 2.0.0-M2
+ */
+class ModulePackageHelper {
+    
+    private static final Logger LOG = LoggerFactory.getLogger(ModulePackageHelper.class);
+
+    public static int runTypeDiscovery(final AppManifest appManifest) {
+        
+        final List<String> moduleAndFrameworkPackages = 
+                findAndRegisterTypes(appManifest);
+        
+        return moduleAndFrameworkPackages.size();
+        
+    }
+    
+    // -- HELPER
+    
+    private static Stream<String> modulePackageNamesFrom(final AppManifest appManifest) {
+        
+        final List<Class<?>> modules = appManifest.getModules();
+        
+        if (modules == null || modules.isEmpty()) {
+            throw new IllegalArgumentException(
+                    "If an appManifest is provided then it must return a non-empty set of modules");
+        }
+
+        return modules.stream()
+                .map(Class::getPackage)
+                .map(Package::getName);
+    }
+    
+    private static List<String> findAndRegisterTypes(final AppManifest appManifest) {
+        
+        requires(appManifest, "appManifest");
+        
+        LOG.info(String.format(
+                "Discover the application's domain and register all types using manifest '%s' ...",
+                appManifest.getClass().getName()) );
+        
+        final AppManifest.Registry registry = AppManifest.Registry.instance();
+
+        final List<String> moduleAndFrameworkPackages = _Lists.newArrayList();
+        moduleAndFrameworkPackages.addAll(AppManifest.Registry.FRAMEWORK_PROVIDED_SERVICE_PACKAGES);
+        
+        modulePackageNamesFrom(appManifest)
+            .forEach(moduleAndFrameworkPackages::add);
+
+        final ClassDiscovery discovery = ClassDiscoveryPlugin.get().discover(moduleAndFrameworkPackages);
+
+        final Set<Class<?>> domainServiceTypes = _Sets.newLinkedHashSet();
+        domainServiceTypes.addAll(discovery.getTypesAnnotatedWith(DomainService.class));
+        domainServiceTypes.addAll(discovery.getTypesAnnotatedWith(DomainServiceLayout.class));
+        
+        final Set<Class<?>> persistenceCapableTypes = PersistenceCapableTypeFinder.find(discovery);
+
+        final Set<Class<? extends FixtureScript>> fixtureScriptTypes = discovery.getSubTypesOf(FixtureScript.class)
+                .stream()
+                .filter(aClass -> {
+                    // the fixtureScript types are introspected just to provide a drop-down when running fixture scripts
+                    // in prototyping mode (though they may be introspected lazily if actually run).
+                    // we therefore try to limit the set of fixture types eagerly introspected at startup
+                    //
+                    // specifically, we ignore as a fixture script if annotated with @Programmatic
+                    // (though directly implementing DiscoverableFixtureScript takes precedence and will NOT ignore)
+                    return DiscoverableFixtureScript.class.isAssignableFrom(aClass) ||
+                            _Reflect.getAnnotation(aClass, Programmatic.class) == null;
+                })
+                .collect(Collectors.toSet());
+
+        final Set<Class<?>> domainObjectTypes = _Sets.newLinkedHashSet();
+        domainObjectTypes.addAll(discovery.getTypesAnnotatedWith(DomainObject.class));
+        domainObjectTypes.addAll(discovery.getTypesAnnotatedWith(DomainObjectLayout.class));
+
+        final Set<Class<?>> mixinTypes = _Sets.newHashSet();
+        mixinTypes.addAll(discovery.getTypesAnnotatedWith(Mixin.class));
+        domainObjectTypes.stream()
+        .filter(input -> {
+            final DomainObject annotation = input.getAnnotation(DomainObject.class);
+            return annotation != null && annotation.nature() == Nature.MIXIN;
+        })
+        .forEach(mixinTypes::add);
+
+        final Set<Class<?>> viewModelTypes = _Sets.newLinkedHashSet();
+        viewModelTypes.addAll(discovery.getTypesAnnotatedWith(ViewModel.class));
+        viewModelTypes.addAll(discovery.getTypesAnnotatedWith(ViewModelLayout.class));
+
+        final Set<Class<?>> xmlElementTypes = _Sets.newLinkedHashSet();
+        xmlElementTypes.addAll(discovery.getTypesAnnotatedWith(XmlElement.class));
+
+        // add in any explicitly registered services...
+        domainServiceTypes.addAll(appManifest.getAdditionalServices());
+
+        // Reflections seems to have a bug whereby it will return some classes outside the
+        // set of packages that we want (think this is to do with the fact that it matches based on
+        // the prefix and gets it wrong); so we double check and filter out types outside our
+        // required set of packages.
+
+        // for a tiny bit of efficiency, we append a '.' to each package name here, outside the loops
+        final List<String> packagesWithDotSuffix =
+                moduleAndFrameworkPackages.stream()
+                .map(s -> s != null ? s + "." : null)
+                .collect(Collectors.toList());
+
+        registry.setDomainServiceTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, domainServiceTypes));
+        registry.setPersistenceCapableTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, persistenceCapableTypes));
+        registry.setFixtureScriptTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, fixtureScriptTypes));
+        registry.setMixinTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, mixinTypes));
+        registry.setDomainObjectTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, domainObjectTypes));
+        registry.setViewModelTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, viewModelTypes));
+        registry.setXmlElementTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, xmlElementTypes));
+        
+        return moduleAndFrameworkPackages;
+    }
+    
+    static <T> Set<Class<? extends T>> withinPackageAndNotAnonymous(
+            final Collection<String> packageNames,
+            final Set<Class<? extends T>> classes) {
+        
+        final Set<Class<? extends T>> classesWithin = _Sets.newLinkedHashSet();
+        for (Class<? extends T> clz : classes) {
+            final String className = clz.getName();
+            if(containedWithin(packageNames, className) && notAnonymous(clz)) {
+                classesWithin.add(clz);
+            }
+        }
+        return classesWithin;
+    }
+    
+    static private boolean containedWithin(final Collection<String> packageNames, final String className) {
+        for (String packageName : packageNames) {
+            if (className.startsWith(packageName)) {
+                return true;
+            }
+        }
+        //TODO [2039] we may need to re-think this policy, there should not be surprising use-cases
+        LOG.warn("Skipping a service for registration because due to not being part of the packagess to include: " + className);
+        return false;
+    }
+
+    private static <T> boolean notAnonymous(final Class<? extends T> clz) {
+        try {
+            return !clz.isAnonymousClass();
+        } catch(NoClassDefFoundError error) {
+            return false; // ignore, assume anonymous
+        }
+    }
+    
+    
+}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/PersistenceCapableTypeFinder.java b/core/config/src/main/java/org/apache/isis/config/builder/PersistenceCapableTypeFinder.java
similarity index 97%
rename from core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/PersistenceCapableTypeFinder.java
rename to core/config/src/main/java/org/apache/isis/config/builder/PersistenceCapableTypeFinder.java
index a7f402a..92472a9 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/PersistenceCapableTypeFinder.java
+++ b/core/config/src/main/java/org/apache/isis/config/builder/PersistenceCapableTypeFinder.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.runtime.systemusinginstallers;
+package org.apache.isis.config.builder;
 
 import java.lang.annotation.Annotation;
 import java.util.LinkedHashSet;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariableISIS_OPTS.java b/core/config/src/main/java/org/apache/isis/config/builder/PrimerForEnvironmentVariableISIS_OPTS.java
similarity index 95%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariableISIS_OPTS.java
rename to core/config/src/main/java/org/apache/isis/config/builder/PrimerForEnvironmentVariableISIS_OPTS.java
index 269e2d0..fbf731b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariableISIS_OPTS.java
+++ b/core/config/src/main/java/org/apache/isis/config/builder/PrimerForEnvironmentVariableISIS_OPTS.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.commons.configbuilder;
+package org.apache.isis.config.builder;
 
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -26,7 +26,7 @@ import java.util.stream.Collectors;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Maps;
 
-public class PrimerForEnvironmentVariableISIS_OPTS implements IsisConfigurationBuilder.Primer {
+class PrimerForEnvironmentVariableISIS_OPTS implements IsisConfigurationBuilder.Primer {
 
     public static final String OPT_ENV = "ISIS_OPTS";
     public static final String SEPARATOR_ENV = "ISIS_OPTS_SEPARATOR";
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariablesIsisPrefix.java b/core/config/src/main/java/org/apache/isis/config/builder/PrimerForEnvironmentVariablesIsisPrefix.java
similarity index 89%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariablesIsisPrefix.java
rename to core/config/src/main/java/org/apache/isis/config/builder/PrimerForEnvironmentVariablesIsisPrefix.java
index b5e5a4d..8e3eac7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariablesIsisPrefix.java
+++ b/core/config/src/main/java/org/apache/isis/config/builder/PrimerForEnvironmentVariablesIsisPrefix.java
@@ -16,11 +16,11 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.commons.configbuilder;
+package org.apache.isis.config.builder;
 
 import java.util.Map;
 
-public class PrimerForEnvironmentVariablesIsisPrefix implements IsisConfigurationBuilder.Primer {
+class PrimerForEnvironmentVariablesIsisPrefix implements IsisConfigurationBuilder.Primer {
     @Override
     public void prime(final IsisConfigurationBuilder builder) {
         final Map<String, String> envVars = System.getenv();
diff --git a/core/config/src/main/java/org/apache/isis/config/builder/PrimerForServletContext.java b/core/config/src/main/java/org/apache/isis/config/builder/PrimerForServletContext.java
new file mode 100644
index 0000000..b518f76
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/config/builder/PrimerForServletContext.java
@@ -0,0 +1,108 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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 org.apache.isis.config.builder;
+
+import java.util.Enumeration;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.config.WebAppConstants;
+import org.apache.isis.config.resource.ResourceStreamSourceContextLoaderClassPath;
+import org.apache.isis.config.resource.ResourceStreamSourceCurrentClassClassPath;
+import org.apache.isis.config.resource.ResourceStreamSourceFileSystem;
+import org.apache.isis.config.resource.ResourceStreamSourceForWebInf;
+import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
+
+import static org.apache.isis.commons.internal.base._With.ifPresentElseGet;
+
+class PrimerForServletContext implements IsisConfigurationBuilder.Primer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(PrimerForServletContext.class);
+    
+    @Override
+    public void prime(final IsisConfigurationBuilder builder) {
+        final ServletContext servletContext  = _Context.getIfAny(ServletContext.class);
+        if(servletContext==null) {
+            LOG.info("No servlet context found to prime configuration from.");
+            return;
+        }
+        LOG.info("Priming configuration from servlet context ...");
+        
+        asMap(servletContext).forEach((k, v)->builder.put(k, v));
+        addServletContextConstants(servletContext, builder);
+        addResourceStreamSources(servletContext, builder);
+        
+        final String loggingPropertiesDir = 
+                ifPresentElseGet(
+                        servletContext.getInitParameter("isis.config.dir"),
+                        ()->servletContext.getRealPath("/WEB-INF"));
+    
+        final IsisLoggingConfigurer loggingConfigurer = new IsisLoggingConfigurer();
+        loggingConfigurer.configureLogging(loggingPropertiesDir, new String[0]);
+
+    }
+
+    // -- HELPER
+
+    private static Map<String, String> asMap(ServletContext servletContext) {
+        Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
+        final Map<String,String> map = _Maps.newTreeMap();
+        while(initParameterNames.hasMoreElements()) {
+            final String initParameterName = initParameterNames.nextElement();
+            final String initParameterValue = servletContext.getInitParameter(initParameterName);
+            if (initParameterName.startsWith("isis.")) {
+                map.put(initParameterName, initParameterValue);
+            }
+        }
+        return map;
+    }
+    
+    private static void addServletContextConstants(
+            final ServletContext servletContext,
+            final IsisConfigurationBuilder isisConfigurationBuilder) {
+
+        final String webappDir = servletContext.getRealPath("/");
+        isisConfigurationBuilder.add(WebAppConstants.WEB_APP_DIR, webappDir);
+    }
+
+    private static void addResourceStreamSources(
+            final ServletContext servletContext,
+            final IsisConfigurationBuilder builder) {
+
+        // will load either from WEB-INF, from the class-path or from config directory.
+        final String configLocation = servletContext.getInitParameter(WebAppConstants.CONFIG_DIR_PARAM);
+        if ( configLocation != null ) {
+            LOG.info("Config override location: {}", configLocation );
+            builder.addResourceStreamSource(ResourceStreamSourceFileSystem.create(configLocation));
+        } else {
+            LOG.info("Config override location: No override location configured" );
+
+            builder.addResourceStreamSource(ResourceStreamSourceContextLoaderClassPath.create());
+            builder.addResourceStreamSource(new ResourceStreamSourceCurrentClassClassPath());
+            builder.addResourceStreamSource(new ResourceStreamSourceForWebInf(servletContext));
+        }
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForSystemProperties.java b/core/config/src/main/java/org/apache/isis/config/builder/PrimerForSystemProperties.java
similarity index 93%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForSystemProperties.java
rename to core/config/src/main/java/org/apache/isis/config/builder/PrimerForSystemProperties.java
index 078243f..e9921af 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PrimerForSystemProperties.java
+++ b/core/config/src/main/java/org/apache/isis/config/builder/PrimerForSystemProperties.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.commons.configbuilder;
+package org.apache.isis.config.builder;
 
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -24,7 +24,7 @@ import java.util.Properties;
 
 import org.apache.isis.commons.internal.collections._Maps;
 
-public class PrimerForSystemProperties implements IsisConfigurationBuilder.Primer {
+class PrimerForSystemProperties implements IsisConfigurationBuilder.Primer {
 
     @Override
     public void prime(final IsisConfigurationBuilder builder) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PropertiesReader.java b/core/config/src/main/java/org/apache/isis/config/builder/PropertiesReader.java
similarity index 80%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PropertiesReader.java
rename to core/config/src/main/java/org/apache/isis/config/builder/PropertiesReader.java
index 2c58d15..a089148 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/PropertiesReader.java
+++ b/core/config/src/main/java/org/apache/isis/config/builder/PropertiesReader.java
@@ -17,14 +17,13 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.configbuilder;
+package org.apache.isis.config.builder;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
 
-import org.apache.isis.core.commons.lang.CloseableExtensions;
-import org.apache.isis.core.commons.resource.ResourceStreamSource;
+import org.apache.isis.config.resource.ResourceStreamSource;
 
 /**
  * Loads properties using the specified {@link ResourceStreamSource}.
@@ -35,15 +34,11 @@ class PropertiesReader {
 
     public PropertiesReader(final ResourceStreamSource resourceStream, final String configurationResource) throws IOException {
 
-        InputStream in = null;
-        try {
-            in = resourceStream.readResource(configurationResource);
+        try (InputStream in = resourceStream.readResource(configurationResource)){
             if (in == null) {
                 throw new IOException("Unable to find resource " + configurationResource);
             }
             properties.load(in);
-        } finally {
-            CloseableExtensions.closeSafely(in);
         }
     }
 
diff --git a/core/config/src/main/java/org/apache/isis/config/internal/_Config.java b/core/config/src/main/java/org/apache/isis/config/internal/_Config.java
new file mode 100644
index 0000000..054766c
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/config/internal/_Config.java
@@ -0,0 +1,125 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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 org.apache.isis.config.internal;
+
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.builder.IsisConfigurationBuilder;
+
+/**
+ * @since 2.0.0-M2
+ */
+public class _Config {
+    
+    // -- CONFIG ACCESS
+    
+    public static IsisConfiguration getConfiguration() {
+        return getLifecycleResource().getConfiguration();
+    }
+    
+    public static void acceptConfig(Consumer<IsisConfiguration> configConsumer) {
+        configConsumer.accept(getConfiguration());
+    }
+    
+    public static <T> T applyConfig(Function<IsisConfiguration, T> configMapper) {
+        return configMapper.apply(getConfiguration());
+    }
+    
+    // -- BUILDER ACCESS
+    
+    public static void acceptBuilder(Consumer<IsisConfigurationBuilder> builderConsumer) {
+        builderConsumer.accept(getConfigurationBuilder());
+    }
+    
+    public static <T> T applyBuilder(Function<IsisConfigurationBuilder, T> builderMapper) {
+        return builderMapper.apply(getConfigurationBuilder());
+    }
+    
+    /**
+     * Most likely used for testing.
+     * <p>
+     * Throws away any configuration resources currently on this life-cycle's context.
+     * Makes a new config builder singleton instance lazily available. 
+     */
+    public static void clear() {
+        _Context.remove(_Config_LifecycleResource.class);
+    }
+    
+    // -- CONFIG SHORTCUTS
+    
+    
+    
+    // -- BUILDER SHORTCUTS
+    
+    public static void put(String key, String value) {
+        getConfigurationBuilder().put(key, value);
+    }
+    
+    public static void put(String key, boolean value) {
+        getConfigurationBuilder().put(key, ""+value);
+    }
+    
+    public static String peekAtString(String key) {
+        return getConfigurationBuilder().peekAtString(key);
+    }
+    
+    public static String peekAtString(String key, String defaultValue) {
+        return getConfigurationBuilder().peekAtString(key, defaultValue);
+    }
+    
+    public static boolean peekAtBoolean(String key) {
+        return getConfigurationBuilder().peekAtBoolean(key);
+    }
+    
+    public static boolean peekAtBoolean(String key, boolean defaultValue) {
+        return getConfigurationBuilder().peekAtBoolean(key, defaultValue);
+    }
+    
+    
+    // -- HELPER -- BUILDER
+    
+    private static IsisConfigurationBuilder getConfigurationBuilder() {
+        _Config_LifecycleResource lifecycle = getLifecycleResource();
+        IsisConfigurationBuilder builder = lifecycle.getBuilder()
+                .orElseThrow(lifecycle::configurationAlreadyInUse);
+        return builder;
+    }
+    
+    private static IsisConfigurationBuilder createBuilder() {
+        final IsisConfigurationBuilder builder = IsisConfigurationBuilder.getDefault(); 
+        return builder;
+    }
+
+    // -- HELPER -- LIFECYCLE
+    
+    private static _Config_LifecycleResource getLifecycleResource() {
+        final _Config_LifecycleResource lifecycle = 
+                _Context.computeIfAbsent(_Config_LifecycleResource.class, __->createLifecycleResource());
+        return lifecycle;
+    }
+
+    private static _Config_LifecycleResource createLifecycleResource() {
+        return new _Config_LifecycleResource(createBuilder());
+    }
+    
+    
+}
diff --git a/core/config/src/main/java/org/apache/isis/config/internal/_Config_LifecycleResource.java b/core/config/src/main/java/org/apache/isis/config/internal/_Config_LifecycleResource.java
new file mode 100644
index 0000000..aef3c66
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/config/internal/_Config_LifecycleResource.java
@@ -0,0 +1,84 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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 org.apache.isis.config.internal;
+
+import java.util.Optional;
+
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.commons.internal.base._Lazy;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.builder.IsisConfigurationBuilder;
+
+import static org.apache.isis.commons.internal.base._With.requires;
+
+class _Config_LifecycleResource {
+    
+    private final IsisConfigurationBuilder builder; 
+    private final _Lazy<IsisConfiguration> configuration;
+    
+    _Config_LifecycleResource(final IsisConfigurationBuilder builder) {
+        requires(builder, "builder");
+        this.builder = builder;
+        this.configuration = _Lazy.threadSafe(this::build);
+    }
+    
+    IsisConfiguration getConfiguration() {
+        return configuration.get();
+    }
+    
+    Optional<IsisConfigurationBuilder> getBuilder() {
+        if(!configuration.isMemoized()) {
+            return Optional.of(builder);    
+        }
+        return Optional.empty();
+    }
+
+    private IsisConfiguration build() {
+        
+        // we throw an exception, catch it and keep it for later, to provide
+        // causal information, in case the builder is accessed after it already
+        // built the configuration
+        try {
+            throw new IllegalStateException("IsisConfiguration Build (previously already triggered by ...)");
+        } catch(IllegalStateException e) {
+            this.configurationBuildStacktrace = e;
+        }
+        
+        // Logging in the context of IsisConfiguration
+        LoggerFactory.getLogger(IsisConfiguration.class).info("=== BUILT/DONE ===");
+        
+        return builder.build();
+        
+    }
+    
+    // -- HELPER -- EXCEPTIONS
+    
+    private IllegalStateException configurationBuildStacktrace;
+    
+    IllegalStateException configurationAlreadyInUse() {
+        
+        IllegalStateException cause = configurationBuildStacktrace;
+        
+        return new IllegalStateException("The IsisConfigurationBuilder is no longer valid, because it has "
+                + "already built the IsisConfiguration for this application's life-cycle.", cause);
+    }
+    
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java b/core/config/src/main/java/org/apache/isis/config/package-info.java
similarity index 74%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java
rename to core/config/src/main/java/org/apache/isis/config/package-info.java
index 1066958..70bb83f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/package-info.java
+++ b/core/config/src/main/java/org/apache/isis/config/package-info.java
@@ -18,23 +18,23 @@
  */
 
 /**
- * Defines the {@link org.apache.isis.core.commons.config.IsisConfiguration}
+ * Defines the {@link org.apache.isis.config.IsisConfiguration}
  * which collects an immutable set of configuration options (like a hashmap),
  * along with a number of supporting classes.
  *
  * <p>
- * Chief among these supporting classes is {@link org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder},
+ * Chief among these supporting classes is {@link org.apache.isis.config.builder.IsisConfigurationBuilder},
  * which holds a (mutable) collection of properties and is used to build an
- * {@link org.apache.isis.core.commons.config.IsisConfiguration}.  The
- * {@link org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder} and
- * {@link org.apache.isis.core.commons.config.IsisConfiguration} types form
+ * {@link org.apache.isis.config.IsisConfiguration}.  The
+ * {@link org.apache.isis.config.builder.IsisConfigurationBuilder} and
+ * {@link org.apache.isis.config.IsisConfiguration} types form
  * an mutable/immutable pair (cf {@link java.lang.StringBuilder} / {@link java.lang.String}).
  *
  * <p>
- * The {@link org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder} is used
+ * The {@link org.apache.isis.config.builder.IsisConfigurationBuilder} is used
  * by {@link org.apache.isis.core.commons.components.InstallerAbstract}, an
  * implementation of {@link org.apache.isis.core.commons.components.Installer}
  * that allows the configuration to be added to as each component is
  * installed.
  */
-package org.apache.isis.core.commons.config;
\ No newline at end of file
+package org.apache.isis.config;
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSource.java b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSource.java
similarity index 96%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSource.java
rename to core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSource.java
index d1d7e84..49cf8ee 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSource.java
+++ b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSource.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.resource;
+package org.apache.isis.config.resource;
 
 import java.io.InputStream;
 import java.io.OutputStream;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceAbstract.java b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceAbstract.java
similarity index 94%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceAbstract.java
rename to core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceAbstract.java
index 4a25256..e0c1512 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceAbstract.java
+++ b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceAbstract.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.resource;
+package org.apache.isis.config.resource;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -26,7 +26,7 @@ import java.io.OutputStream;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public abstract class ResourceStreamSourceAbstract implements ResourceStreamSource {
+abstract class ResourceStreamSourceAbstract implements ResourceStreamSource {
 
     private static Logger LOG = LoggerFactory.getLogger(ResourceStreamSourceAbstract.class);
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceChainOfResponsibility.java b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceChainOfResponsibility.java
similarity index 98%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceChainOfResponsibility.java
rename to core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceChainOfResponsibility.java
index 6e3f0c2..8232fe3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceChainOfResponsibility.java
+++ b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceChainOfResponsibility.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.resource;
+package org.apache.isis.config.resource;
 
 import java.io.InputStream;
 import java.io.OutputStream;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceComposite.java b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceComposite.java
similarity index 98%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceComposite.java
rename to core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceComposite.java
index e3e67f1..20a5e76 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceComposite.java
+++ b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceComposite.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.resource;
+package org.apache.isis.config.resource;
 
 import java.io.InputStream;
 import java.io.OutputStream;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceContextLoaderClassPath.java b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceContextLoaderClassPath.java
similarity index 91%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceContextLoaderClassPath.java
rename to core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceContextLoaderClassPath.java
index f80cf83..ad44ba8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceContextLoaderClassPath.java
+++ b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceContextLoaderClassPath.java
@@ -17,12 +17,12 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.resource;
+package org.apache.isis.config.resource;
 
 import java.io.InputStream;
 
 import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.core.commons.lang.StringExtensions;
+import org.apache.isis.commons.internal.resources._Resources;
 
 /**
  * Loads the properties from the ContextClassLoader.
@@ -51,7 +51,7 @@ public class ResourceStreamSourceContextLoaderClassPath extends ResourceStreamSo
     @Override
     protected InputStream doReadResource(final String resourcePath) {
         final ClassLoader classLoader = _Context.getDefaultClassLoader();
-        final String path = StringExtensions.combinePath(prefix, resourcePath);
+        final String path = _Resources.combinePath(prefix, resourcePath);
         return classLoader.getResourceAsStream(path);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceCurrentClassClassPath.java b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceCurrentClassClassPath.java
similarity index 97%
copy from core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceCurrentClassClassPath.java
copy to core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceCurrentClassClassPath.java
index 0d7f422..5fc2681 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceCurrentClassClassPath.java
+++ b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceCurrentClassClassPath.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.resource;
+package org.apache.isis.config.resource;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceFileSystem.java b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceFileSystem.java
similarity index 98%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceFileSystem.java
rename to core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceFileSystem.java
index cec06d8..c72f549 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceFileSystem.java
+++ b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceFileSystem.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.resource;
+package org.apache.isis.config.resource;
 
 import java.io.File;
 import java.io.FileInputStream;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/webapp/config/ResourceStreamSourceForWebInf.java b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceForWebInf.java
similarity index 86%
rename from core/metamodel/src/main/java/org/apache/isis/core/webapp/config/ResourceStreamSourceForWebInf.java
rename to core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceForWebInf.java
index 28ccf15..b2799aa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/webapp/config/ResourceStreamSourceForWebInf.java
+++ b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSourceForWebInf.java
@@ -17,15 +17,14 @@
  *  under the License.
  */
 
-package org.apache.isis.core.webapp.config;
+package org.apache.isis.config.resource;
 
 import java.io.IOException;
 import java.io.InputStream;
 
 import javax.servlet.ServletContext;
 
-import org.apache.isis.core.commons.lang.StringExtensions;
-import org.apache.isis.core.commons.resource.ResourceStreamSourceAbstract;
+import org.apache.isis.commons.internal.resources._Resources;
 
 public class ResourceStreamSourceForWebInf extends ResourceStreamSourceAbstract {
 
@@ -50,7 +49,7 @@ public class ResourceStreamSourceForWebInf extends ResourceStreamSourceAbstract
 
     @Override
     public InputStream doReadResource(final String resourcePath) throws IOException {
-        final String fullyQualifiedResourcePath = StringExtensions.combinePath(configurationDirectory, resourcePath);
+        final String fullyQualifiedResourcePath = _Resources.combinePath(configurationDirectory, resourcePath);
         return servletContext.getResourceAsStream(fullyQualifiedResourcePath);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceCurrentClassClassPath.java b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSource_UsingClass.java
similarity index 67%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceCurrentClassClassPath.java
rename to core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSource_UsingClass.java
index 0d7f422..09b58cb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/ResourceStreamSourceCurrentClassClassPath.java
+++ b/core/config/src/main/java/org/apache/isis/config/resource/ResourceStreamSource_UsingClass.java
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.resource;
+package org.apache.isis.config.resource;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -25,24 +25,25 @@ import java.io.InputStream;
 import org.apache.isis.commons.internal.resources._Resources;
 
 /**
- * Load from this class' ClassLoader.
- *
- * <p>
- * This is useful if (a) the contextClassLoader is not available and (b) the
- * contextClassLoader does not load from this classes ClassLoader (for example
- * when running under Ant while running unit tests as part of an automated
- * build).
+ * Load relative to the class-path context of the specified class.
+ * @since 2.0.0-M2
  */
-public class ResourceStreamSourceCurrentClassClassPath extends ResourceStreamSourceAbstract {
+public class ResourceStreamSource_UsingClass extends ResourceStreamSourceAbstract {
+
+    private final Class<?> contextClass;
+    
+    public ResourceStreamSource_UsingClass(Class<?> contextClass) {
+        this.contextClass = contextClass;
+    }
 
     @Override
     protected InputStream doReadResource(final String resourcePath) throws IOException {
-        return _Resources.load(getClass(), resourcePath);
+        return _Resources.load(contextClass, resourcePath);
     }
 
     @Override
     public String getName() {
-        return "current class' classpath";
+        return "classpath of '" + contextClass.getName() + "'";
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/package-info.java b/core/config/src/main/java/org/apache/isis/config/resource/package-info.java
similarity index 63%
rename from core/metamodel/src/main/java/org/apache/isis/core/commons/resource/package-info.java
rename to core/config/src/main/java/org/apache/isis/config/resource/package-info.java
index d447644..a20bacf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/resource/package-info.java
+++ b/core/config/src/main/java/org/apache/isis/config/resource/package-info.java
@@ -18,17 +18,17 @@
  */
 
 /**
- * Provides an {@link org.apache.isis.core.commons.resource.ResourceStreamSource abstraction}
+ * Provides an {@link org.apache.isis.config.resource.ResourceStreamSource abstraction}
  * over {@link java.io.InputStream}s for accessing
  * resources.
  *
  * <p>
  * The principle usage is to allow the easy searching of a single resource (eg
- * <tt>isis.properties</tt> file) in {@link org.apache.isis.core.commons.resource.ResourceStreamSourceContextLoaderClassPath multiple}
- * {@link org.apache.isis.core.commons.resource.ResourceStreamSourceCurrentClassClassPath locations}
- * and {@link org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem technologies}
+ * <tt>isis.properties</tt> file) in {@link org.apache.isis.config.resource.ResourceStreamSourceContextLoaderClassPath multiple}
+ * {@link org.apache.isis.config.resource.ResourceStreamSourceCurrentClassClassPath locations}
+ * and {@link org.apache.isis.config.resource.ResourceStreamSourceFileSystem technologies}
  * on the classpath through
- * the use of a {@link org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsibility composite}
+ * the use of a {@link org.apache.isis.config.resource.ResourceStreamSourceChainOfResponsibility composite}
  * pattern.
  */
-package org.apache.isis.core.commons.resource;
\ No newline at end of file
+package org.apache.isis.config.resource;
\ No newline at end of file
diff --git a/core/config/src/main/java/org/apache/isis/config/services/view/ConfigurationViewServiceDefault.java b/core/config/src/main/java/org/apache/isis/config/services/view/ConfigurationViewServiceDefault.java
new file mode 100644
index 0000000..e68100c
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/config/services/view/ConfigurationViewServiceDefault.java
@@ -0,0 +1,75 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF 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 org.apache.isis.config.services.view;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.services.confview.ConfigurationProperty;
+import org.apache.isis.applib.services.confview.ConfigurationViewService;
+import org.apache.isis.commons.internal.base._Lazy;
+import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
+
+/**
+ * @since 2.0.0-M2
+ */
+@DomainService(
+        nature = NatureOfService.DOMAIN,
+        menuOrder = "" + Integer.MAX_VALUE
+        )
+public class ConfigurationViewServiceDefault implements ConfigurationViewService {
+    
+    @Override
+    public Set<ConfigurationProperty> allProperties() {
+        return new TreeSet<>(config.get().values());
+    }
+
+    // -- HELPER
+    
+    private _Lazy<Map<String, ConfigurationProperty>> config = _Lazy.of(this::loadConfiguration);
+
+    private Map<String, ConfigurationProperty> loadConfiguration() {
+        
+        final Map<String, ConfigurationProperty> map = new HashMap<>();
+
+        _Config.getConfiguration().asMap().forEach((k, v)->add(k, v, map));
+
+        // for convenience add some additional info to the top ...
+        add("[ Isis Version ]", IsisConfiguration.getVersion(), map);
+        add("[ Deployment Type ]", _Context.getEnvironment().getDeploymentType().name(), map);
+        add("[ Unit Testing ]", ""+_Context.getEnvironment().isUnitTesting(), map);
+        
+        return map;
+    }
+    
+    private static void add(String key, String value, Map<String, ConfigurationProperty> map) {
+        
+        value = ConfigurationConstants.maskIfProtected(key, value);
+        
+        map.put(key, new ConfigurationProperty(key, value));
+    }
+    
+}
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/config/ConfigurationProperty_isProtected_Test.java b/core/config/src/test/java/org/apache/isis/config/ConfigurationConstants_isProtected_Test.java
similarity index 52%
rename from core/applib/src/test/java/org/apache/isis/applib/services/config/ConfigurationProperty_isProtected_Test.java
rename to core/config/src/test/java/org/apache/isis/config/ConfigurationConstants_isProtected_Test.java
index 285ed80..44f8e01 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/config/ConfigurationProperty_isProtected_Test.java
+++ b/core/config/src/test/java/org/apache/isis/config/ConfigurationConstants_isProtected_Test.java
@@ -16,51 +16,53 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.applib.services.config;
+package org.apache.isis.config;
 
 import org.junit.Test;
 
+import org.apache.isis.config.ConfigurationConstants;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class ConfigurationProperty_isProtected_Test {
+public class ConfigurationConstants_isProtected_Test {
 
     @Test
     public void null_is_not() {
-        assertFalse(ConfigurationProperty.Util.isProtected(null));
+        assertFalse(ConfigurationConstants.isProtected(null));
 
-        assertEquals("xxx", ConfigurationProperty.Util.maskIfProtected(null, "xxx"));
+        assertEquals("xxx", ConfigurationConstants.maskIfProtected(null, "xxx"));
     }
 
     @Test
     public void empty_is_not() {
-        assertFalse(ConfigurationProperty.Util.isProtected(""));
+        assertFalse(ConfigurationConstants.isProtected(""));
     }
 
     @Test
     public void password_is() {
-        assertTrue(ConfigurationProperty.Util.isProtected("foo.PassWord.bar"));
-        assertTrue(ConfigurationProperty.Util.isProtected("password.bar"));
-        assertTrue(ConfigurationProperty.Util.isProtected("foo.PASSWORD"));
+        assertTrue(ConfigurationConstants.isProtected("foo.PassWord.bar"));
+        assertTrue(ConfigurationConstants.isProtected("password.bar"));
+        assertTrue(ConfigurationConstants.isProtected("foo.PASSWORD"));
 
-        assertEquals("********", ConfigurationProperty.Util.maskIfProtected("password", "xxx"));
+        assertEquals("********", ConfigurationConstants.maskIfProtected("password", "xxx"));
     }
 
     @Test
     public void apiKey_is() {
-        assertTrue(ConfigurationProperty.Util.isProtected("foo.apiKey.bar"));
-        assertTrue(ConfigurationProperty.Util.isProtected("APIKEY.bar"));
-        assertTrue(ConfigurationProperty.Util.isProtected("foo.apikey"));
+        assertTrue(ConfigurationConstants.isProtected("foo.apiKey.bar"));
+        assertTrue(ConfigurationConstants.isProtected("APIKEY.bar"));
+        assertTrue(ConfigurationConstants.isProtected("foo.apikey"));
     }
     @Test
     public void authToken_is() {
-        assertTrue(ConfigurationProperty.Util.isProtected("foo.authToken.bar"));
-        assertTrue(ConfigurationProperty.Util.isProtected("AUTHTOKEN.bar"));
-        assertTrue(ConfigurationProperty.Util.isProtected("foo.authtoken"));
+        assertTrue(ConfigurationConstants.isProtected("foo.authToken.bar"));
+        assertTrue(ConfigurationConstants.isProtected("AUTHTOKEN.bar"));
+        assertTrue(ConfigurationConstants.isProtected("foo.authtoken"));
     }
     @Test
     public void otherwise_is_not() {
-        assertFalse(ConfigurationProperty.Util.isProtected("foo"));
+        assertFalse(ConfigurationConstants.isProtected("foo"));
     }
 }
\ No newline at end of file
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_safe_Test.java b/core/config/src/test/java/org/apache/isis/config/ConfigurationConstants_mask_Test.java
similarity index 68%
rename from core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_safe_Test.java
rename to core/config/src/test/java/org/apache/isis/config/ConfigurationConstants_mask_Test.java
index 4a167eb..e16319a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_safe_Test.java
+++ b/core/config/src/test/java/org/apache/isis/config/ConfigurationConstants_mask_Test.java
@@ -16,34 +16,36 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.commons.config;
+package org.apache.isis.config;
 
 import org.junit.Test;
 
+import org.apache.isis.config.ConfigurationConstants;
+
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
 
-public class IsisConfigurationDefault_safe_Test {
+public class ConfigurationConstants_mask_Test {
 
     @Test
     public void not_a_password() {
-        assertThat(IsisConfigurationDefault.safe("foo", "bar"), is(equalTo("bar")));
+        assertThat(ConfigurationConstants.maskIfProtected("foo", "bar"), is(equalTo("bar")));
     }
 
     @Test
     public void a_password() {
-        assertThat(IsisConfigurationDefault.safe("xyz.password.abc", "bar"), is(equalTo("********")));
+        assertThat(ConfigurationConstants.maskIfProtected("xyz.password.abc", "bar"), is(equalTo("********")));
     }
 
     @Test
     public void a_PassWord() {
-        assertThat(IsisConfigurationDefault.safe("xyz.PassWord.abc", "bar"), is(equalTo("********")));
+        assertThat(ConfigurationConstants.maskIfProtected("xyz.PassWord.abc", "bar"), is(equalTo("********")));
     }
 
     @Test
     public void is_null() {
-        assertThat(IsisConfigurationDefault.safe(null, "bar"), is(equalTo("bar")));
+        assertThat(ConfigurationConstants.maskIfProtected(null, "bar"), is(equalTo("bar")));
     }
 
 }
\ No newline at end of file
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder_PeekConfigurationTest.java b/core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationBuilder_PeekConfigurationTest.java
similarity index 73%
rename from core/metamodel/src/test/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder_PeekConfigurationTest.java
rename to core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationBuilder_PeekConfigurationTest.java
index 36739b8..6d7807d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder_PeekConfigurationTest.java
+++ b/core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationBuilder_PeekConfigurationTest.java
@@ -17,9 +17,10 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.configbuilder;
+package org.apache.isis.config.builder;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.builder.IsisConfigurationBuilder;
 
 import junit.framework.TestCase;
 
@@ -33,7 +34,7 @@ public class IsisConfigurationBuilder_PeekConfigurationTest extends TestCase {
 
     @Override
     protected void setUp() throws Exception {
-    	configurationBuilder = new IsisConfigurationBuilder();
+    	configurationBuilder = IsisConfigurationBuilder.empty();
     	configurationBuilder.add("isis.test", "val");
     }
 
@@ -43,15 +44,17 @@ public class IsisConfigurationBuilder_PeekConfigurationTest extends TestCase {
     	
     	// pre-conditions
     	assertNull(configuration);
-    	assertEquals("val", configurationBuilder.configuration.getString("isis.test"));
-    	assertFalse(configurationBuilder.isLocked());
+    	assertEquals("val", configurationBuilder.peekAtString("isis.test"));
     	
-    	// peek into the configuration
-    	configuration = configurationBuilder.peekConfiguration();
+    	configuration = configurationBuilder.build();
     	
-    	// invariant holds
-    	assertEquals("val", configurationBuilder.configuration.getString("isis.test"));
-    	assertFalse(configurationBuilder.isLocked());
+    	// builder is no longer usable
+    	try {
+    	    assertEquals("val", configurationBuilder.peekAtString("isis.test"));
+    	    fail("should throw");
+    	} catch (NullPointerException e) {
+    	    // expected
+        }
     	
     	// post-conditions
     	assertNotNull(configuration);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefaultTest_createSubset.java b/core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationDefaultTest_createSubset.java
similarity index 95%
rename from core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefaultTest_createSubset.java
rename to core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationDefaultTest_createSubset.java
index bb68519..a103185 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefaultTest_createSubset.java
+++ b/core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationDefaultTest_createSubset.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.commons.config;
+package org.apache.isis.config.builder;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
@@ -27,6 +27,9 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.builder.IsisConfigurationDefault;
+
 public class IsisConfigurationDefaultTest_createSubset {
     
     private IsisConfigurationDefault configuration;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_PropertNamesTest.java b/core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationDefault_PropertNamesTest.java
similarity index 85%
rename from core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_PropertNamesTest.java
rename to core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationDefault_PropertNamesTest.java
index 03b812d..24b6265 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_PropertNamesTest.java
+++ b/core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationDefault_PropertNamesTest.java
@@ -17,10 +17,13 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.config;
+package org.apache.isis.config.builder;
 
 import java.util.Properties;
 
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.builder.IsisConfigurationDefault;
+
 import junit.framework.TestCase;
 
 public class IsisConfigurationDefault_PropertNamesTest extends TestCase {
@@ -39,12 +42,12 @@ public class IsisConfigurationDefault_PropertNamesTest extends TestCase {
         final Properties p = new Properties();
         p.put("isis.bool", "on");
         p.put("isis.str", "original");
-        configuration.add(p, IsisConfigurationDefault.ContainsPolicy.IGNORE);
+        configuration.add(p, IsisConfiguration.ContainsPolicy.IGNORE);
 
         final Properties p1 = new Properties();
         p1.put("isis.int", "1");
         p1.put("isis.str", "replacement");
-        configuration.add(p1, IsisConfigurationDefault.ContainsPolicy.IGNORE);
+        configuration.add(p1, IsisConfiguration.ContainsPolicy.IGNORE);
     }
 
     public void testDuplicatedPropertyIsNotReplaced() {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_WhitespaceTest.java b/core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationDefault_WhitespaceTest.java
similarity index 95%
rename from core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_WhitespaceTest.java
rename to core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationDefault_WhitespaceTest.java
index 03d71bc..5920c80 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/commons/config/IsisConfigurationDefault_WhitespaceTest.java
+++ b/core/config/src/test/java/org/apache/isis/config/builder/IsisConfigurationDefault_WhitespaceTest.java
@@ -17,10 +17,12 @@
  *  under the License.
  */
 
-package org.apache.isis.core.commons.config;
+package org.apache.isis.config.builder;
 
 import java.util.Properties;
 
+import org.apache.isis.config.builder.IsisConfigurationDefault;
+
 import junit.framework.TestCase;
 
 public class IsisConfigurationDefault_WhitespaceTest extends TestCase {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariableISIS_OPTS_Test.java b/core/config/src/test/java/org/apache/isis/config/builder/PrimerForEnvironmentVariableISIS_OPTS_Test.java
similarity index 87%
rename from core/metamodel/src/test/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariableISIS_OPTS_Test.java
rename to core/config/src/test/java/org/apache/isis/config/builder/PrimerForEnvironmentVariableISIS_OPTS_Test.java
index 20c412e..c24c364 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/commons/configbuilder/PrimerForEnvironmentVariableISIS_OPTS_Test.java
+++ b/core/config/src/test/java/org/apache/isis/config/builder/PrimerForEnvironmentVariableISIS_OPTS_Test.java
@@ -16,12 +16,14 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.commons.configbuilder;
+package org.apache.isis.config.builder;
 
 import org.junit.Before;
 import org.junit.Test;
 
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.builder.IsisConfigurationBuilder;
+import org.apache.isis.config.builder.PrimerForEnvironmentVariableISIS_OPTS;
 
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
@@ -34,7 +36,7 @@ public class PrimerForEnvironmentVariableISIS_OPTS_Test {
 
     @Before
     public void setUp() throws Exception {
-        builder = new IsisConfigurationBuilder();
+        builder = IsisConfigurationBuilder.empty();
     }
 
     @Test
@@ -54,7 +56,7 @@ public class PrimerForEnvironmentVariableISIS_OPTS_Test {
         primer.prime(builder);
 
         // then
-        final IsisConfigurationDefault configuration = builder.getConfiguration();
+        final IsisConfiguration configuration = builder.build();
         assertThat(configuration.asMap().size(), is(1));
         assertThat(configuration.getString("isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL"), is("jdbc:sqlserver://HALCHILLBLAST;instance=.;databaseName=estatio"));
     }
@@ -76,7 +78,7 @@ public class PrimerForEnvironmentVariableISIS_OPTS_Test {
         primer.prime(builder);
 
         // then
-        final IsisConfigurationDefault configuration = builder.getConfiguration();
+        final IsisConfiguration configuration = builder.build();
 
         assertThat(configuration.asMap().size(), is(1));
         assertThat(configuration.getString("isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName"), is("com.microsoft.sqlserver.jdbc.SQLServerDriver"));
@@ -99,7 +101,7 @@ public class PrimerForEnvironmentVariableISIS_OPTS_Test {
         primer.prime(builder);
 
         // then
-        final IsisConfigurationDefault configuration = builder.getConfiguration();
+        final IsisConfiguration configuration = builder.build();
         assertThat(configuration.asMap().size(), is(0));
     }
 
diff --git a/core/detached-tests/src/test/java/org/apache/isis/core/runtime/services/ServiceInjectorTestUsingCodegenPlugin.java b/core/detached-tests/src/test/java/org/apache/isis/core/runtime/services/ServiceInjectorTestUsingCodegenPlugin.java
index 853c218..e096653 100644
--- a/core/detached-tests/src/test/java/org/apache/isis/core/runtime/services/ServiceInjectorTestUsingCodegenPlugin.java
+++ b/core/detached-tests/src/test/java/org/apache/isis/core/runtime/services/ServiceInjectorTestUsingCodegenPlugin.java
@@ -16,9 +16,6 @@
  */
 package org.apache.isis.core.runtime.services;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
 import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
@@ -36,11 +33,12 @@ import org.junit.Rule;
 import org.junit.Test;
 
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
 public class ServiceInjectorTestUsingCodegenPlugin {
 
     @Rule
@@ -52,17 +50,16 @@ public class ServiceInjectorTestUsingCodegenPlugin {
     @Before
     public void setUp() throws Exception {
 
-        final IsisConfiguration configuration = new IsisConfigurationDefault();
-        
         serviceInstantiator = new ServiceInstantiator();
-        serviceInstantiator.setConfiguration(configuration);
         
-        final Object[] services = {
+        final List<Object> services = _Lists.of(
                 serviceInstantiator.createInstance(SingletonCalculator.class),
                 serviceInstantiator.createInstance(AccumulatingCalculator.class)
-                };
+                );
         
-        serviceInjector = new ServicesInjector(_Lists.of(services), configuration);
+        serviceInjector = ServicesInjector.builderForTesting()
+                .addServices(services)
+                .build();
     }
 
     @Test
diff --git a/core/detached-tests/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTestUsingCodegenPlugin.java b/core/detached-tests/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTestUsingCodegenPlugin.java
index c8e354c..40c69c3 100644
--- a/core/detached-tests/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTestUsingCodegenPlugin.java
+++ b/core/detached-tests/src/test/java/org/apache/isis/core/runtime/services/ServiceInstantiatorTestUsingCodegenPlugin.java
@@ -16,10 +16,6 @@
  */
 package org.apache.isis.core.runtime.services;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.BrokenBarrierException;
@@ -39,10 +35,13 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
 public class ServiceInstantiatorTestUsingCodegenPlugin {
 
     @Rule
@@ -58,7 +57,6 @@ public class ServiceInstantiatorTestUsingCodegenPlugin {
     public void setUp() throws Exception {
 
         serviceInstantiator = new ServiceInstantiator();
-        serviceInstantiator.setConfiguration(new IsisConfigurationDefault());
     }
 
     @Test
diff --git a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/IsisSystemEnvironmentPluginForTesting.java b/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/IsisSystemEnvironmentPluginForTesting.java
deleted file mode 100644
index 66f7bd7..0000000
--- a/core/integtestsupport/src/main/java/org/apache/isis/core/integtestsupport/components/IsisSystemEnvironmentPluginForTesting.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.apache.isis.core.integtestsupport.components;
-
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.plugins.environment.DeploymentType;
-import org.apache.isis.core.plugins.environment.IsisSystemEnvironment;
-import org.apache.isis.core.plugins.environment.IsisSystemEnvironmentPlugin;
-
-/**
- * To enable this plugin add a META-INF entry to your application as specified by the 
- * Java 7 ServiceLoader mechanism.
- *  
- * @since 2.0.0-M2
- */
-public class IsisSystemEnvironmentPluginForTesting implements IsisSystemEnvironmentPlugin {
-
-    @Override
-    public IsisSystemEnvironment getIsisSystemEnvironment() {
-        
-        final IsisConfiguration config = getConfiguration();
-        
-        final String deploymentTypeLiteral = config.getString("isis.deploymentType");
-        if(_Strings.isNullOrEmpty(deploymentTypeLiteral)) {
-            return IsisSystemEnvironment.getDefault();
-        }
-        
-        // at this point, the deploymentType seem explicitly set via config, so we override any 
-        // environment variables that might be present
-        
-        // throws if type can not be parsed
-        final DeploymentType deploymentType = DeploymentType.valueOf(deploymentTypeLiteral);
-        
-        return IsisSystemEnvironment.of(deploymentType);
-        
-    }
-    
-    // HELPER
-
-    private IsisConfiguration getConfiguration() {
-        // TODO just a stub
-        IsisConfigurationDefault configuration = new IsisConfigurationDefault();
-        return configuration;
-    }
-
-}
diff --git a/core/legacy/transition-1-2/src/main/java/org/apache/isis/applib/DomainObjectContainer.java b/core/legacy/transition-1-2/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
index 392e469..7974b76 100644
--- a/core/legacy/transition-1-2/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
+++ b/core/legacy/transition-1-2/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
@@ -18,21 +18,21 @@
  */
 package org.apache.isis.applib;
 
-import static org.apache.isis.commons.internal.collections._Lists.lastElementIfAny;
-
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
+import com.google.common.base.Predicate;
+
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.filter.Filter;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.security.UserMemento;
-import org.apache.isis.applib.services.config.ConfigurationService;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.services.jdosupport.IsisJdoSupport;
@@ -43,8 +43,10 @@ import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.title.TitleService;
 import org.apache.isis.applib.services.user.UserService;
 import org.apache.isis.applib.services.xactn.TransactionService;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 
-import com.google.common.base.Predicate;
+import static org.apache.isis.commons.internal.collections._Lists.lastElementIfAny;
 
 @DomainService(nature=NatureOfService.DOMAIN)
 @Deprecated
@@ -58,7 +60,6 @@ public class DomainObjectContainer {
 	@Inject private TransactionService transactionService;
 	@Inject private ServiceRegistry serviceRegistry;
 	@Inject private MessageService messageService;
-	@Inject private ConfigurationService configurationService;
 	@Inject private UserService userService;
 	
     /**
@@ -414,30 +415,30 @@ public class DomainObjectContainer {
 
 
     /**
-     * @deprecated - use {@link org.apache.isis.applib.services.config.ConfigurationService#getProperty(String)} instead.
+     * @deprecated - use {@link IsisConfiguration#getProperty(String)} instead.
      */
     @Deprecated
     @Programmatic
     public String getProperty(String name) {
-    	return configurationService.getProperty(name);
+    	return _Config.getConfiguration().getString(name);
     }
 
     /**
-     * @deprecated - use {@link org.apache.isis.applib.services.config.ConfigurationService#getProperty(String, String)} instead.
+     * @deprecated - use {@link IsisConfiguration#getProperty(String, String)} instead.
      */
     @Deprecated
     @Programmatic
     public String getProperty(String name, String defaultValue) {
-    	return configurationService.getProperty(name, defaultValue);	
+    	return _Config.getConfiguration().getString(name, defaultValue);
     }
 
     /**
-     * @deprecated - use {@link org.apache.isis.applib.services.config.ConfigurationService#getPropertyNames()} instead.
+     * @deprecated - use {@link IsisConfiguration#asMap()} instead.
      */
     @Deprecated
     @Programmatic
     public List<String> getPropertyNames() {
-    	return configurationService.getPropertyNames();
+        return new ArrayList<>(_Config.getConfiguration().asMap().keySet());
     }
 
     /**
diff --git a/core/maven-plugin/src/main/java/org/apache/isis/tool/mavenplugin/IsisMojoAbstract.java b/core/maven-plugin/src/main/java/org/apache/isis/tool/mavenplugin/IsisMojoAbstract.java
index bec3b05..cc69c24 100644
--- a/core/maven-plugin/src/main/java/org/apache/isis/tool/mavenplugin/IsisMojoAbstract.java
+++ b/core/maven-plugin/src/main/java/org/apache/isis/tool/mavenplugin/IsisMojoAbstract.java
@@ -32,12 +32,15 @@ import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
 
 import org.apache.isis.applib.AppManifest;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
+import org.apache.isis.core.plugins.environment.IsisSystemEnvironment;
 import org.apache.isis.core.runtime.logging.IsisLoggingConfigurer;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactoryBuilder;
+import org.apache.isis.core.runtime.systemusinginstallers.IsisComponentProvider;
 import org.apache.isis.tool.mavenplugin.util.MavenProjects;
 
 public abstract class IsisMojoAbstract extends AbstractMojo {
@@ -57,14 +60,20 @@ public abstract class IsisMojoAbstract extends AbstractMojo {
     public void execute() throws MojoExecutionException, MojoFailureException {
 
         new IsisLoggingConfigurer(Level.INFO).configureLogging(".", new String[]{});
-
+        IsisSystemEnvironment.setUnitTesting(true);
+        
         final ContextForMojo context = new ContextForMojo(mavenProject, getLog());
 
         final Plugin plugin = MavenProjects.lookupPlugin(mavenProject, CURRENT_PLUGIN_KEY);
 
-        final AppManifest manifest = InstanceUtil.createInstance(this.appManifest, AppManifest.class);
-
-        final IsisSessionFactoryBuilder isisSessionFactoryBuilder = new IsisSessionFactoryBuilder(manifest);
+        final AppManifest appManifest = InstanceUtil.createInstance(this.appManifest, AppManifest.class);
+        IsisConfiguration.buildFromAppManifest(appManifest); // build and finalize config
+        
+        final IsisComponentProvider isisComponentProvider = IsisComponentProvider.builder(appManifest)
+                .build();
+        final IsisSessionFactoryBuilder isisSessionFactoryBuilder = 
+                new IsisSessionFactoryBuilder(isisComponentProvider);
+        
         IsisSessionFactory isisSessionFactory = null;
         try {
             isisSessionFactory = isisSessionFactoryBuilder.buildSessionFactory();
diff --git a/core/metamodel/pom.xml b/core/metamodel/pom.xml
index 8bf7d1b..34d1904 100644
--- a/core/metamodel/pom.xml
+++ b/core/metamodel/pom.xml
@@ -80,6 +80,11 @@
             <type>test-jar</type>
             <scope>test</scope>
         </dependency>
+        
+        <dependency>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-config</artifactId>
+        </dependency>
 
 		<!-- command line options support  -->
         <dependency>
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java
index c69e50c..66c121b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/components/InstallerAbstract.java
@@ -19,21 +19,19 @@
 
 package org.apache.isis.core.commons.components;
 
-import static org.apache.isis.commons.internal.base._NullSafe.stream;
-
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
 
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+
+import static org.apache.isis.commons.internal.base._NullSafe.stream;
 
 public abstract class InstallerAbstract implements Installer {
 
     // -- constructor, fields
 
     private final String name;
-    private final IsisConfiguration isisConfiguration;
 
     /**
      * Subclasses should pass in the type defined as a constant in the
@@ -45,11 +43,8 @@ public abstract class InstallerAbstract implements Installer {
      * <tt>PersistenceMechanismInstaller</tt> should pass this constant value up
      * to this constructor.
      */
-    public InstallerAbstract(
-            final String name,
-            final IsisConfiguration isisConfiguration) {
+    public InstallerAbstract(final String name) {
         this.name = name;
-        this.isisConfiguration = isisConfiguration;
     }
 
 
@@ -58,11 +53,6 @@ public abstract class InstallerAbstract implements Installer {
         return name;
     }
 
-    public IsisConfiguration getConfiguration() {
-        return isisConfiguration;
-    }
-
-
     // -- init, shutdown
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/ConfigurationConstants.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/config/ConfigurationConstants.java
deleted file mode 100644
index 1268c63..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/config/ConfigurationConstants.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF 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 org.apache.isis.core.commons.config;
-
-public final class ConfigurationConstants {
-
-    public static final String ROOT = "isis.";
-
-    public static final String LIST_SEPARATOR = ",";
-    public static final String DELIMITER = ".";
-    public static final String DEFAULT_CONFIG_DIRECTORY = "config";
-    public static final String WEBINF_DIRECTORY = "WEB-INF";
-    public static final String WEBINF_FULL_DIRECTORY = "src/main/webapp/" + WEBINF_DIRECTORY;
-
-    public static final String DEFAULT_CONFIG_FILE = "isis.properties";
-    public static final String WEB_CONFIG_FILE = "web.properties";
-
-    private ConfigurationConstants() {
-    }
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringExtensions.java
index f4530c7..a1f5ff8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringExtensions.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringExtensions.java
@@ -26,6 +26,7 @@ import java.util.StringTokenizer;
 
 import org.apache.isis.applib.util.Enums;
 import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.resources._Resources;
 
 public final class StringExtensions {
 
@@ -290,19 +291,7 @@ public final class StringExtensions {
     }
 
     public static String combinePath(final String extendee, final String suffix) {
-        if (_Strings.isNullOrEmpty(extendee) && _Strings.isNullOrEmpty(suffix)) {
-            return "";
-        }
-        if (_Strings.isNullOrEmpty(extendee)) {
-            return suffix;
-        }
-        if (_Strings.isNullOrEmpty(suffix)) {
-            return extendee;
-        }
-        if (extendee.endsWith("/") || suffix.startsWith("/")) {
-            return extendee + suffix;
-        }
-        return extendee + "/" + suffix;
+        return _Resources.combinePath(extendee, suffix);
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/concurrency/ConcurrencyChecking.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/concurrency/ConcurrencyChecking.java
index 1632f6f..dbdc12b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/concurrency/ConcurrencyChecking.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/concurrency/ConcurrencyChecking.java
@@ -23,7 +23,7 @@ import java.util.concurrent.Callable;
 
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.SemanticsOf;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 
 public enum ConcurrencyChecking {
     NO_CHECK,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java
index 8e60d17..36ede77 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelRefiner.java
@@ -20,7 +20,6 @@
 package org.apache.isis.core.metamodel.facetapi;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
 
@@ -34,6 +33,6 @@ import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
 public interface MetaModelRefiner extends MetaModelValidatorRefiner {
 
     @Programmatic
-    void refineProgrammingModel(ProgrammingModel programmingModel, IsisConfiguration configuration);
+    void refineProgrammingModel(ProgrammingModel programmingModel);
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelValidatorRefiner.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelValidatorRefiner.java
index 9e0ff30..b46f46e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelValidatorRefiner.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/MetaModelValidatorRefiner.java
@@ -20,7 +20,6 @@
 package org.apache.isis.core.metamodel.facetapi;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 
@@ -34,6 +33,6 @@ import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorCom
 public interface MetaModelValidatorRefiner {
 
     @Programmatic
-    void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration);
+    void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator);
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
index 7032cb5..75a73ff 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
@@ -45,6 +45,7 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.reflection._Reflect;
 import org.apache.isis.core.commons.lang.ThrowableExtensions;
 import org.apache.isis.core.commons.reflection.Reflect;
 import org.apache.isis.core.metamodel.exceptions.MetaModelException;
@@ -84,36 +85,7 @@ public final class Annotations  {
      * Added to allow bytecode-mangling libraries such as CGLIB to be supported.
      */
     public static <T extends Annotation> T getAnnotation(final Class<?> cls, final Class<T> annotationClass) {
-        if (cls == null) {
-            return null;
-        }
-        final T annotation = cls.getAnnotation(annotationClass);
-        if (annotation != null) {
-            return annotation;
-        }
-
-        // search superclasses
-        final Class<?> superclass = cls.getSuperclass();
-        if (superclass != null) {
-            try {
-                final T annotationFromSuperclass = getAnnotation(superclass, annotationClass);
-                if (annotationFromSuperclass != null) {
-                    return annotationFromSuperclass;
-                }
-            } catch (final SecurityException e) {
-                // fall through
-            }
-        }
-
-        // search implemented interfaces
-        final Class<?>[] interfaces = cls.getInterfaces();
-        for (final Class<?> iface : interfaces) {
-            final T annotationFromInterface = getAnnotation(iface, annotationClass);
-            if (annotationFromInterface != null) {
-                return annotationFromInterface;
-            }
-        }
-        return null;
+        return _Reflect.getAnnotation(cls, annotationClass);
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
index 1f6996e..8a4a8d2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetFactoryAbstract.java
@@ -22,12 +22,12 @@ package org.apache.isis.core.metamodel.facets;
 import java.util.List;
 
 import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.ServicesInjectorAware;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
 public abstract class FacetFactoryAbstract implements FacetFactory, ServicesInjectorAware {
@@ -76,12 +76,8 @@ public abstract class FacetFactoryAbstract implements FacetFactory, ServicesInje
     }
 
     protected IsisConfiguration getConfiguration() {
-        final ConfigurationServiceInternal configurationServiceInternal = servicesInjector
-                .getConfigurationServiceInternal();
-        return configurationServiceInternal;
+        return _Config.getConfiguration();
     }
 
 
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
index 366e3b0..7d3f90c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
@@ -25,7 +25,7 @@ import java.util.List;
 import java.util.Objects;
 import java.util.stream.Stream;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.Contributed;
@@ -66,7 +66,7 @@ implements MethodPrefixBasedFacetFactory {
     }
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
         if(orphanValidation == OrphanValidation.DONT_VALIDATE) {
             return;
         }
@@ -75,7 +75,7 @@ implements MethodPrefixBasedFacetFactory {
             @Override
             public boolean visit(final ObjectSpecification objectSpec, final ValidationFailures validationFailures) {
 
-                boolean noParamsOnly = configuration.getBoolean(
+                boolean noParamsOnly = _Config.getConfiguration().getBoolean(
                         MethodPrefixBasedFacetFactoryAbstract.ISIS_REFLECTOR_VALIDATOR_NO_PARAMS_ONLY_KEY,
                         MethodPrefixBasedFacetFactoryAbstract.ISIS_REFLECTOR_VALIDATOR_NO_PARAMS_ONLY_DEFAULT);
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
index 886e3a0..1e75e05 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/ActionChoicesForCollectionParameterFacetFactory.java
@@ -19,7 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.actions.action;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
@@ -60,9 +60,9 @@ implements MetaModelValidatorRefiner {
     }
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
 
-        final boolean doCheck = configuration.getBoolean(
+        final boolean doCheck = _Config.getConfiguration().getBoolean(
                 ISIS_REFLECTOR_VALIDATOR_ACTION_COLLECTION_PARAMETER_CHOICES_KEY,
                 ISIS_REFLECTOR_VALIDATOR_ACTION_COLLECTION_PARAMETER_CHOICES_DEFAULT);
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandActionsConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandActionsConfiguration.java
index 2b63609..47bfc42 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandActionsConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandActionsConfiguration.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.core.metamodel.facets.actions.action.command;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.object.domainobject.Util;
 
 public enum CommandActionsConfiguration {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandFacetForActionAnnotation.java
index 7ba09d2..709fd95 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandFacetForActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/command/CommandFacetForActionAnnotation.java
@@ -25,7 +25,7 @@ import org.apache.isis.applib.annotation.CommandExecuteIn;
 import org.apache.isis.applib.annotation.CommandPersistence;
 import org.apache.isis.applib.annotation.CommandReification;
 import org.apache.isis.applib.services.command.CommandDtoProcessor;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
 import org.apache.isis.core.metamodel.facets.actions.command.CommandFacetAbstract;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index 53bab80..11aa75e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -54,9 +54,10 @@ import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.applib.services.xactn.TransactionState;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.lang.ArrayExtensions;
 import org.apache.isis.core.commons.lang.MethodInvocationPreprocessor;
@@ -117,7 +118,7 @@ implements ImperativeFacet {
         this.authenticationSessionProvider = servicesInjector.getAuthenticationSessionProvider();
         this.persistenceSessionServiceInternal = servicesInjector.getPersistenceSessionServiceInternal();
         this.servicesInjector = servicesInjector;
-        this.configuration = servicesInjector.getConfigurationServiceInternal();
+        this.configuration = _Config.getConfiguration();
         this.domainEventHelper = new DomainEventHelper(this.servicesInjector);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishActionsConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishActionsConfiguration.java
index cf46223..d43212a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishActionsConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishActionsConfiguration.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.core.metamodel.facets.actions.action.publishing;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.object.domainobject.Util;
 
 public enum PublishActionsConfiguration {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishedActionFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishedActionFacetForActionAnnotation.java
index 96cb186..ec74b8c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishedActionFacetForActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/publishing/PublishedActionFacetForActionAnnotation.java
@@ -23,7 +23,7 @@ import java.util.List;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.Publishing;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet;
 import org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacetAbstract;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
index bb3ce69..661f812 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/homepage/annotation/HomePageFacetAnnotationFactory.java
@@ -19,15 +19,12 @@
 
 package org.apache.isis.core.metamodel.facets.actions.homepage.annotation;
 
-import static org.apache.isis.commons.internal.functions._Predicates.not;
-
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.isis.applib.annotation.HomePage;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
@@ -43,6 +40,8 @@ import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVis
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorVisiting.Visitor;
 import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
 
+import static org.apache.isis.commons.internal.functions._Predicates.not;
+
 public class HomePageFacetAnnotationFactory extends FacetFactoryAbstract implements MetaModelValidatorRefiner{
 
     public HomePageFacetAnnotationFactory() {
@@ -63,7 +62,7 @@ public class HomePageFacetAnnotationFactory extends FacetFactoryAbstract impleme
      * @see org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner#refineMetaModelValidator(org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite, org.apache.isis.core.commons.config.IsisConfiguration)
      */
     @Override
-    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
+    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(new MetaModelValidatorVisiting(newValidatorVisitor()));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
index 6f9bb4c..875a1bd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
@@ -24,7 +24,7 @@ import java.util.Map;
 
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleConfiguration;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
index eec82ae..e974792 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
@@ -25,8 +25,8 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
@@ -48,11 +48,10 @@ implements ImperativeFacet {
             final ObjectSpecification typeSpec,
             final Method method,
             final FacetHolder holder,
-            final IsisConfiguration isisConfiguration,
             final SpecificationLoader specificationLoader,
             final AuthenticationSessionProvider authenticationSessionProvider,
             final ObjectAdapterProvider adapterManager) {
-        super(typeSpec, holder, isisConfiguration, specificationLoader, authenticationSessionProvider, adapterManager);
+        super(typeSpec, holder, specificationLoader, authenticationSessionProvider, adapterManager);
         this.method = method;
     }
 
@@ -81,7 +80,7 @@ implements ImperativeFacet {
         
         final ObjectAdapter collectionAdapter = getObjectAdapterProvider().adapterFor(collectionOrArray);
 
-        boolean filterForVisibility = getConfiguration().getBoolean("isis.reflector.facet.filterVisibility", true);
+        boolean filterForVisibility = _Config.getConfiguration().getBoolean("isis.reflector.facet.filterVisibility", true);
         if(filterForVisibility) {
             final List<ObjectAdapter> visibleAdapters =
                     ObjectAdapter.Util.visibleAdapters(
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
index 5579ea8..93ef1fd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
@@ -60,7 +60,7 @@ extends PropertyOrCollectionIdentifyingFacetFactoryAbstract {
         FacetUtil.addFacet(
                 new CollectionAccessorFacetViaAccessor(
                         typeSpec, accessorMethod, holder,
-                        getConfiguration(), getSpecificationLoader(),
+                        getSpecificationLoader(),
                         getAuthenticationSessionProvider(), adapterProvider
                         ));
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutAnnotation.java
index 0285d01..b2a949f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/DefaultViewFacetForCollectionLayoutAnnotation.java
@@ -23,7 +23,7 @@ import java.util.List;
 
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacet;
 import org.apache.isis.core.metamodel.facets.collections.collection.defaultview.DefaultViewFacetAbstract;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java
index cf54ba0..2912d58 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/sortedby/annotation/SortedByFacetAnnotationFactory.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.metamodel.facets.collections.sortedby.annotation;
 import java.util.Comparator;
 import java.util.stream.Stream;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
@@ -54,7 +54,7 @@ public class SortedByFacetAnnotationFactory extends FacetFactoryAbstract impleme
     }
 
     @Override
-    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
+    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(new MetaModelValidatorVisiting(newValidatorVisitor()));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java
index 4ca73a0..5898dd0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java
@@ -32,7 +32,8 @@ import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.JdoMetamodelUtil;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -169,10 +170,9 @@ implements MetaModelValidatorRefiner {
     // --
 
     @Override
-    public void refineMetaModelValidator(
-            final MetaModelValidatorComposite metaModelValidator,
-            final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
 
+        final IsisConfiguration configuration = _Config.getConfiguration(); 
         final List<TypeValidator> typeValidators = getTypeValidators(configuration);
         final List<PropertyValidator> propertyValidators = getPropertyValidators(configuration);
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
index 0656926..bbe92d3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/annotprop/CssClassFacetOnActionFromConfiguredRegexFactory.java
@@ -27,7 +27,7 @@ import java.util.regex.Pattern;
 
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
index 2a2815a..291e160 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/annotprop/CssClassFaFacetOnMemberFactory.java
@@ -27,7 +27,7 @@ import java.util.regex.Pattern;
 
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.ContributeeMemberFacetFactory;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java
index 0fe13be..af0a881 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactory.java
@@ -25,7 +25,7 @@ import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.ViewModel;
 import org.apache.isis.applib.annotation.ViewModelLayout;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
 import org.apache.isis.core.metamodel.facets.Annotations;
@@ -171,7 +171,7 @@ public class ViewModelSemanticCheckingFacetFactory extends FacetFactoryAbstract
 
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(validator);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java
index 0353744..b1c1083 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/bookmarkpolicy/bookmarkable/BookmarkPolicyFacetFallbackFactory.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.bookmarkable
 import java.util.stream.Stream;
 
 import org.apache.isis.applib.annotation.BookmarkPolicy;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
@@ -57,7 +56,7 @@ public class BookmarkPolicyFacetFallbackFactory extends FacetFactoryAbstract imp
      * Violation if there is an action that is bookmarkable but does not have safe action semantics.
      */
     @Override
-    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
+    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(new MetaModelValidatorVisiting(new MetaModelValidatorVisiting.Visitor() {
 
             @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultsProviderUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultsProviderUtil.java
index 2d0b714..b86a26e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultsProviderUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultsProviderUtil.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.defaults;
 
 import org.apache.isis.applib.adapters.DefaultsProvider;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotation.java
index 83226ea..14b162d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/defaults/annotcfg/DefaultedFacetAnnotation.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.defaults.annotcfg;
 
 import org.apache.isis.applib.annotation.Defaulted;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetAbstract;
 import org.apache.isis.core.metamodel.facets.object.defaults.DefaultsProviderUtil;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index 01f5d50..fe8a5a6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -40,7 +40,6 @@ import org.apache.isis.applib.events.lifecycle.ObjectUpdatedEvent;
 import org.apache.isis.applib.events.lifecycle.ObjectUpdatingEvent;
 import org.apache.isis.applib.services.HasUniqueId;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -499,7 +498,7 @@ implements MetaModelValidatorRefiner, PostConstructMethodCache {
     // //////////////////////////////////////
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
 
         metaModelValidator.add(new MetaModelValidatorVisiting(new MetaModelValidatorVisiting.Visitor() {
             @Override
@@ -563,18 +562,12 @@ implements MetaModelValidatorRefiner, PostConstructMethodCache {
 
     // //////////////////////////////////////
 
-
     @Override
     public void setServicesInjector(final ServicesInjector servicesInjector) {
         super.setServicesInjector(servicesInjector);
-        //TODO [ahuber] unused because of side effects ?
-        IsisConfiguration configuration = getConfiguration();
-
         this.persistenceSessionServiceInternal = servicesInjector.getPersistenceSessionServiceInternal();
-
     }
 
-
     // //////////////////////////////////////
 
     private final Map<Class<?>, Optional<Method>> postConstructMethods = _Maps.newHashMap();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditObjectsConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditObjectsConfiguration.java
index ace08eb..aa45e6b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditObjectsConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditObjectsConfiguration.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.core.metamodel.facets.object.domainobject.auditing;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.object.domainobject.Util;
 
 public enum AuditObjectsConfiguration {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java
index 2c7ec3a..65669f5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java
@@ -24,7 +24,7 @@ import java.util.List;
 import org.apache.isis.applib.annotation.Auditing;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet;
 import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacetAbstract;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/DefaultViewConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/DefaultViewConfiguration.java
index 7c130a3..56bdb52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/DefaultViewConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/DefaultViewConfiguration.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.core.metamodel.facets.object.domainobject.auditing;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 
 public enum DefaultViewConfiguration {
     HIDDEN("hidden"),
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/EditingObjectsConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/EditingObjectsConfiguration.java
index bd5fb23..078e777 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/EditingObjectsConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/EditingObjectsConfiguration.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.core.metamodel.facets.object.domainobject.editing;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.object.domainobject.Util;
 
 public enum EditingObjectsConfiguration {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
index 2305fc4..29d3b31 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
@@ -26,7 +26,7 @@ import java.util.Map;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/publishing/PublishObjectsConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/publishing/PublishObjectsConfiguration.java
index 5ecf568..776816d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/publishing/PublishObjectsConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/publishing/PublishObjectsConfiguration.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.core.metamodel.facets.object.domainobject.publishing;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.object.domainobject.Util;
 
 public enum PublishObjectsConfiguration {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/publishing/PublishedObjectFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/publishing/PublishedObjectFacetForDomainObjectAnnotation.java
index 25055b9..8b0ab46 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/publishing/PublishedObjectFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/publishing/PublishedObjectFacetForDomainObjectAnnotation.java
@@ -24,7 +24,7 @@ import java.util.List;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
 import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacetAbstract;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java
index 7b41042..8337fa0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java
@@ -30,7 +30,7 @@ import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.events.ui.CssClassUiEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
index 5645e40..39d14b4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
@@ -28,7 +28,7 @@ import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.events.ui.IconUiEvent;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
index 3ccd5fd..a680a49 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
@@ -30,7 +30,7 @@ import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
@@ -47,7 +47,8 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
     public static Facet create(
             final List<DomainObjectLayout> domainObjectLayouts,
             final ServicesInjector servicesInjector,
-            final IsisConfiguration configuration, final FacetHolder facetHolder) {
+            final IsisConfiguration configuration, 
+            final FacetHolder facetHolder) {
 
         return domainObjectLayouts.stream()
                 .map(DomainObjectLayout::titleUiEvent)
@@ -59,9 +60,16 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
                         configuration))
                 .findFirst()
                 .map(titleUiEventClass -> {
-                    final TranslationService translationService = servicesInjector.lookupService(TranslationService.class).orElse(null);;
-                    final ObjectSpecification facetHolderAsSpec = (ObjectSpecification) facetHolder; // bit naughty...
-                    final String translationContext = facetHolderAsSpec.getCorrespondingClass().getCanonicalName();
+                    final TranslationService translationService = servicesInjector.lookupService(TranslationService.class).orElse(null);
+                    
+                    final String translationContext;
+                    if(facetHolder instanceof ObjectSpecification) {
+                        final ObjectSpecification facetHolderAsSpec = (ObjectSpecification) facetHolder; // bit naughty...
+                        translationContext = facetHolderAsSpec.getCorrespondingClass().getCanonicalName();    
+                    } else {
+                        translationContext = null;
+                    }
+                    
                     final EventBusService eventBusService = servicesInjector.lookupServiceElseFail(EventBusService.class);
 
                     return new TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent(
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
index de17cf2..f9773fa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/DomainServiceFacetAnnotationFactory.java
@@ -23,7 +23,7 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -92,9 +92,9 @@ public class DomainServiceFacetAnnotationFactory extends FacetFactoryAbstract im
 
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
 
-        final boolean serviceActionsOnly = configuration.getBoolean(
+        final boolean serviceActionsOnly = _Config.getConfiguration().getBoolean(
                 ISIS_REFLECTOR_VALIDATOR_SERVICE_ACTIONS_ONLY_KEY,
                 ISIS_REFLECTOR_VALIDATOR_SERVICE_ACTIONS_ONLY_DEFAULT);
         if (serviceActionsOnly) {
@@ -135,7 +135,7 @@ public class DomainServiceFacetAnnotationFactory extends FacetFactoryAbstract im
             }));
         }
 
-        boolean mixinsOnly = configuration.getBoolean(
+        boolean mixinsOnly = _Config.getConfiguration().getBoolean(
                 ISIS_REFLECTOR_VALIDATOR_MIXINS_ONLY_KEY,
                 ISIS_REFLECTOR_VALIDATOR_MIXINS_ONLY_DEFAULT);
         if (mixinsOnly) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/EncoderDecoderUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/EncoderDecoderUtil.java
index 0d39402..9a08a26 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/EncoderDecoderUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/encodeable/EncoderDecoderUtil.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.encodeable;
 
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java
index ab56064..6f86b8e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java
@@ -20,7 +20,6 @@
 package org.apache.isis.core.metamodel.facets.object.mixin;
 
 import org.apache.isis.applib.annotation.Mixin;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
@@ -57,7 +56,7 @@ public class MixinFacetForMixinAnnotationFactory extends FacetFactoryAbstract im
 
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(mixinTypeValidator);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
index 7ae60cd..5029f8c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/annotation/NavigableParentAnnotationFacetFactory.java
@@ -24,7 +24,6 @@ import java.util.List;
 
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -109,7 +108,7 @@ public class NavigableParentAnnotationFacetFactory extends FacetFactoryAbstract
      * <a href="https://issues.apache.org/jira/browse/ISIS-1816">ISIS-1816</a>.
      */
     @Override
-    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
+    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(new MetaModelValidatorVisiting(new MetaModelValidatorVisiting.Visitor() {
 
             @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
index cbe493f..e55fe87 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/objectspecid/classname/ObjectSpecIdFacetDerivedFromClassNameFactory.java
@@ -25,7 +25,7 @@ import javax.xml.bind.annotation.XmlType;
 
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -93,9 +93,9 @@ MetaModelValidatorRefiner {
     }
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
 
-        final boolean doCheck = configuration.getBoolean(
+        final boolean doCheck = _Config.getConfiguration().getBoolean(
                 ISIS_REFLECTOR_VALIDATOR_EXPLICIT_OBJECT_TYPE_KEY,
                 ISIS_REFLECTOR_VALIDATOR_EXPLICIT_OBJECT_TYPE_DEFAULT);
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.java
index 7fb3034..5fab758 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/parseable/ParserUtil.java
@@ -23,7 +23,7 @@ import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
 
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleConfiguration.java
index 7cd034c..1ab18cd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/PromptStyleConfiguration.java
@@ -19,7 +19,7 @@
 package org.apache.isis.core.metamodel.facets.object.promptStyle;
 
 import org.apache.isis.applib.annotation.PromptStyle;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 
 
 public class PromptStyleConfiguration {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java
index c47e4a2..30fcce1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java
@@ -29,7 +29,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 import org.apache.isis.applib.RecreatableDomainObject;
 import org.apache.isis.applib.ViewModel;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -55,7 +55,7 @@ implements MetaModelValidatorRefiner, PostConstructMethodCache {
     }
 
     /**
-     * We simply attach all facets we can find; the {@link #refineMetaModelValidator(org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite, org.apache.isis.core.commons.config.IsisConfiguration) meta-model validation} will detect if multiple interfaces/annotations have
+     * We simply attach all facets we can find; the {@link #refineMetaModelValidator(org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite, org.apache.isis.config.IsisConfiguration) meta-model validation} will detect if multiple interfaces/annotations have
      * been attached.
      */
     @Override
@@ -101,7 +101,7 @@ implements MetaModelValidatorRefiner, PostConstructMethodCache {
     // //////////////////////////////////////
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(new MetaModelValidatorVisiting(new MetaModelValidatorVisiting.Visitor() {
 
             @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
index c443458..989b199 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
@@ -28,7 +28,6 @@ import java.util.stream.Collectors;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -152,7 +151,7 @@ public class TitleAnnotationFacetFactory extends FacetFactoryAbstract implements
      * precedence.
      */
     @Override
-    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
+    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(new MetaModelValidatorVisiting(new MetaModelValidatorVisiting.Visitor() {
 
             @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotation.java
index b301fc9..8da44af 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/annotcfg/ValueFacetAnnotation.java
@@ -21,7 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.value.annotcfg;
 
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacetAbstract;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderUtil;
@@ -29,13 +29,14 @@ import org.apache.isis.core.metamodel.services.ServicesInjector;
 
 public class ValueFacetAnnotation extends ValueFacetAbstract {
 
-    private static String semanticsProviderName(final Class<?> annotatedClass, final IsisConfiguration configuration) {
+    private static String semanticsProviderName(final Class<?> annotatedClass) {
         final Value annotation = annotatedClass.getAnnotation(Value.class);
         final String semanticsProviderName = annotation.semanticsProviderName();
         if (!_Strings.isNullOrEmpty(semanticsProviderName)) {
             return semanticsProviderName;
         }
-        return ValueSemanticsProviderUtil.semanticsProviderNameFromConfiguration(annotatedClass, configuration);
+        return ValueSemanticsProviderUtil
+                .semanticsProviderNameFromConfiguration(annotatedClass, _Config.getConfiguration());
     }
 
     private static Class<?> semanticsProviderClass(final Class<?> annotatedClass) {
@@ -43,12 +44,24 @@ public class ValueFacetAnnotation extends ValueFacetAbstract {
         return annotation.semanticsProviderClass();
     }
 
-    public ValueFacetAnnotation(final Class<?> annotatedClass, final FacetHolder holder, final ServicesInjector context) {
-        this(semanticsProviderName(annotatedClass, context.getConfigurationServiceInternal()), semanticsProviderClass(annotatedClass), holder, context);
+    public ValueFacetAnnotation(
+            final Class<?> annotatedClass, 
+            final FacetHolder holder, 
+            final ServicesInjector injector) {
+        
+        this(semanticsProviderName(annotatedClass), 
+                semanticsProviderClass(annotatedClass), holder, injector);
     }
 
-    private ValueFacetAnnotation(final String candidateSemanticsProviderName, final Class<?> candidateSemanticsProviderClass, final FacetHolder holder, final ServicesInjector context) {
-        super(ValueSemanticsProviderUtil.valueSemanticsProviderOrNull(candidateSemanticsProviderClass, candidateSemanticsProviderName), AddFacetsIfInvalidStrategy.DO_ADD, holder, context);
+    private ValueFacetAnnotation(
+            final String candidateSemanticsProviderName, 
+            final Class<?> candidateSemanticsProviderClass, 
+            final FacetHolder holder, 
+            final ServicesInjector injector) {
+        
+        super(ValueSemanticsProviderUtil
+                .valueSemanticsProviderOrNull(candidateSemanticsProviderClass, candidateSemanticsProviderName), 
+                AddFacetsIfInvalidStrategy.DO_ADD, holder, injector);
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
index ae4201b..14c2058 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
@@ -30,8 +30,9 @@ import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.adapters.ValueSemanticsProvider;
 import org.apache.isis.applib.clock.Clock;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.exceptions.UnknownTypeException;
 import org.apache.isis.core.commons.lang.LocaleUtil;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -98,7 +99,7 @@ public abstract class ValueSemanticsProviderAndFacetAbstract<T> extends FacetAbs
         this.equalByContent = (equalByContent == EqualByContent.HONOURED);
         this.defaultValue = defaultValue;
 
-        this.configuration = context.getConfigurationServiceInternal();
+        this.configuration = _Config.getConfiguration();
         this.context = context;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderUtil.java
index 48dd3a9..c6017be 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderUtil.java
@@ -23,7 +23,7 @@ import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
 
 import org.apache.isis.applib.adapters.ValueSemanticsProvider;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.ClassUtil;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
index 8626cba..5782b26 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
@@ -26,7 +26,6 @@ import javax.annotation.Nullable;
 import javax.validation.constraints.Pattern;
 
 import org.apache.isis.applib.annotation.Parameter;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
@@ -145,7 +144,7 @@ public class ParameterAnnotationFacetFactory extends FacetFactoryAbstract implem
 
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(conflictingOptionalityValidator);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacetAbstract.java
index 136852c..447cedb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/propcoll/accessor/PropertyOrCollectionAccessorFacetAbstract.java
@@ -23,7 +23,6 @@ import java.util.Map;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
@@ -38,7 +37,6 @@ implements PropertyOrCollectionAccessorFacet {
     private final ObjectSpecification onType;
     private final ObjectAdapterProvider adapterProvider;
     private final SpecificationLoader specificationLoader;
-    private final IsisConfiguration configuration;
     private final AuthenticationSessionProvider authenticationSessionProvider;
 
     public static Class<? extends Facet> type() {
@@ -48,7 +46,6 @@ implements PropertyOrCollectionAccessorFacet {
     public PropertyOrCollectionAccessorFacetAbstract(
             final ObjectSpecification onType,
             final FacetHolder holder,
-            final IsisConfiguration configuration,
             final SpecificationLoader specificationLoader,
             final AuthenticationSessionProvider authenticationSessionProvider,
             final ObjectAdapterProvider adapterProvider) {
@@ -56,7 +53,6 @@ implements PropertyOrCollectionAccessorFacet {
         this.onType = onType;
         this.adapterProvider = adapterProvider;
         this.specificationLoader = specificationLoader;
-        this.configuration = configuration;
         this.authenticationSessionProvider = authenticationSessionProvider;
     }
 
@@ -79,10 +75,6 @@ implements PropertyOrCollectionAccessorFacet {
         return specificationLoader;
     }
 
-    protected IsisConfiguration getConfiguration() {
-        return configuration;
-    }
-
     public AuthenticationSession getAuthenticationSession() {
         return authenticationSessionProvider.getAuthenticationSession();
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java
index 3cb075c..dad5871 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessor.java
@@ -24,8 +24,8 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
@@ -47,11 +47,10 @@ implements ImperativeFacet {
             final ObjectSpecification typeSpec,
             final Method method,
             final FacetHolder holder,
-            final IsisConfiguration isisConfiguration,
             final SpecificationLoader specificationLoader,
             final AuthenticationSessionProvider authenticationSessionProvider,
             final ObjectAdapterProvider adapterProvider) {
-        super(typeSpec, holder, isisConfiguration, specificationLoader, authenticationSessionProvider, adapterProvider);
+        super(typeSpec, holder, specificationLoader, authenticationSessionProvider, adapterProvider);
         this.method = method;
     }
 
@@ -79,7 +78,7 @@ implements ImperativeFacet {
             return null;
         }
 
-        boolean filterForVisibility = getConfiguration().getBoolean("isis.reflector.facet.filterVisibility", true);
+        boolean filterForVisibility = _Config.getConfiguration().getBoolean("isis.reflector.facet.filterVisibility", true);
         if(filterForVisibility) {
             final ObjectAdapter referencedAdapter = getObjectAdapterProvider().adapterFor(referencedObject);
             final boolean visible = ObjectAdapter.Util
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java
index 813a55c..1a8139a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java
@@ -57,7 +57,6 @@ public class PropertyAccessorFacetViaAccessorFactory extends PropertyOrCollectio
         FacetUtil.addFacet(
                 new PropertyAccessorFacetViaAccessor(
                         typeSpec, accessorMethod, property,
-                        getConfiguration(),
                         getSpecificationLoader(),
                         getAuthenticationSessionProvider(),
                         adapterProvider
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
index 7c5183a..6535902 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
@@ -28,7 +28,6 @@ import javax.validation.constraints.Pattern;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.events.domain.PropertyDomainEvent;
 import org.apache.isis.applib.services.HasUniqueId;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -359,7 +358,7 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
     // //////////////////////////////////////
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(conflictingOptionalityValidator);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandFacetForPropertyAnnotation.java
index b31ef45..d9a4384 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandFacetForPropertyAnnotation.java
@@ -25,7 +25,7 @@ import org.apache.isis.applib.annotation.CommandPersistence;
 import org.apache.isis.applib.annotation.CommandReification;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.services.command.CommandDtoProcessor;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.action.command.CommandFacetFromConfiguration;
 import org.apache.isis.core.metamodel.facets.actions.command.CommandFacet;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandPropertiesConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandPropertiesConfiguration.java
index 7683800..c6e5477 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandPropertiesConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/command/CommandPropertiesConfiguration.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.core.metamodel.facets.properties.property.command;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.object.domainobject.Util;
 
 public enum CommandPropertiesConfiguration {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishPropertiesConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishPropertiesConfiguration.java
index 34e2742..07987e3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishPropertiesConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishPropertiesConfiguration.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.core.metamodel.facets.properties.property.publishing;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.object.domainobject.Util;
 
 public enum PublishPropertiesConfiguration {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishedPropertyFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishedPropertyFacetForPropertyAnnotation.java
index ff82d74..eb528dc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishedPropertyFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/publishing/PublishedPropertyFacetForPropertyAnnotation.java
@@ -23,7 +23,7 @@ import java.util.List;
 
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.Publishing;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.properties.publish.PublishedPropertyFacet;
 import org.apache.isis.core.metamodel.facets.properties.publish.PublishedPropertyFacetAbstract;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
index 9b2eff9..c4f2708 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
@@ -24,7 +24,7 @@ import java.util.Map;
 
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleConfiguration;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/DateAndTimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/DateAndTimeValueSemanticsProviderAbstract.java
index a850191..249e961 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/DateAndTimeValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/DateAndTimeValueSemanticsProviderAbstract.java
@@ -27,7 +27,7 @@ import java.util.Map;
 import java.util.TimeZone;
 
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
index 3fe8670..8e7f5d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
@@ -33,7 +33,7 @@ import java.util.TimeZone;
 import org.apache.isis.applib.adapters.EncodingException;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/date/DateValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/date/DateValueSemanticsProviderAbstract.java
index da3da52..7ac02cd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/date/DateValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/date/DateValueSemanticsProviderAbstract.java
@@ -27,7 +27,7 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueSemanticsProvider.java
index a2377b8..03f05eb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueSemanticsProvider.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.EncodingException;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
index 60fcc6d..f868b87 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
@@ -32,7 +32,7 @@ import org.apache.isis.applib.adapters.EncodingException;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueSemanticsProvider.java
index 854c23f..1230e56 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueSemanticsProvider.java
@@ -34,7 +34,7 @@ import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.EncodingException;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProviderAbstract.java
index 527857d..8fd3527 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProviderAbstract.java
@@ -27,7 +27,7 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProviderAbstract.java
index 3b32742..2cc6fdd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProviderAbstract.java
@@ -27,7 +27,7 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
index 0c1b19d..10c2025 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.adapters.EncodingException;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/money/MoneyValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/money/MoneyValueSemanticsProvider.java
index b54c0ee..5dcb9dd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/money/MoneyValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/money/MoneyValueSemanticsProvider.java
@@ -28,7 +28,7 @@ import java.util.Map;
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.value.Money;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java
index acb1a8c..05eea63 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java
@@ -26,7 +26,7 @@ import java.text.ParseException;
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.value.Percentage;
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
index e005f67..3cf9116 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
@@ -26,7 +26,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/TimeStampValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/TimeStampValueSemanticsProviderAbstract.java
index 6bacd38..bb298c9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/TimeStampValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/timestampsql/TimeStampValueSemanticsProviderAbstract.java
@@ -26,7 +26,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.TimeZone;
 
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/FacetFactorySet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/FacetFactorySet.java
index 448c5d2..306a547 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/FacetFactorySet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/FacetFactorySet.java
@@ -21,8 +21,10 @@ package org.apache.isis.core.metamodel.progmodel;
 
 import java.util.List;
 
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.builder.IsisConfigurationBuilder;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 import org.apache.isis.core.metamodel.specloader.ReflectorConstants;
@@ -81,5 +83,6 @@ public interface FacetFactorySet {
                 programmingModel.removeFactory(facetFactory);
             }
         }
+        
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java
index e8d96cf..6249669 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/progmodel/ProgrammingModelAbstract.java
@@ -24,7 +24,8 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.builder.IsisConfigurationBuilder;
 import org.apache.isis.core.commons.factory.InstanceUtil;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
@@ -46,6 +47,12 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
             boolean ignoreDep = configuration.getBoolean(KEY_IGNORE_DEPRECATED, false);
             return ignoreDep ? IGNORE : HONOUR;
         }
+        
+        public static DeprecatedPolicy parse(final IsisConfigurationBuilder configuration) {
+            boolean ignoreDep = configuration.peekAtBoolean(KEY_IGNORE_DEPRECATED, false);
+            return ignoreDep ? IGNORE : HONOUR;
+        }
+        
     }
 
     protected final DeprecatedPolicy deprecatedPolicy;
@@ -153,11 +160,11 @@ public abstract class ProgrammingModelAbstract implements ProgrammingModel {
     }
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
         for (final FacetFactory facetFactory : getList()) {
             if(facetFactory instanceof MetaModelValidatorRefiner) {
                 final MetaModelValidatorRefiner metaModelValidatorRefiner = (MetaModelValidatorRefiner) facetFactory;
-                metaModelValidatorRefiner.refineMetaModelValidator(metaModelValidator, configuration);
+                metaModelValidatorRefiner.refineMetaModelValidator(metaModelValidator);
             }
         }
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
index 94dabc7..3644dd1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjector.java
@@ -41,13 +41,12 @@ import org.apache.isis.commons.internal.collections._Collections;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.collections._Multimaps;
 import org.apache.isis.commons.internal.collections._Multimaps.ListMultimap;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.metamodel.exceptions.MetaModelException;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.spec.InjectorMethodEvaluator;
 import org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
@@ -71,10 +70,9 @@ public class ServicesInjector implements ApplicationScopedComponent, ServiceRegi
 
     private static final Logger LOG = LoggerFactory.getLogger(ServicesInjector.class);
 
-    public static final String KEY_SET_PREFIX = "isis.services.injector.setPrefix";
-    public static final String KEY_INJECT_PREFIX = "isis.services.injector.injectPrefix";
+    private static final String KEY_SET_PREFIX = "isis.services.injector.setPrefix";
+    private static final String KEY_INJECT_PREFIX = "isis.services.injector.injectPrefix";
 
-    // -- CONSTRUCTOR, FIELDS
     /**
      * This is mutable internally, but only ever exposed (in {@link #streamRegisteredServices()}).
      */
@@ -93,37 +91,40 @@ public class ServicesInjector implements ApplicationScopedComponent, ServiceRegi
     private final boolean autowireSetters;
     private final boolean autowireInject;
 
-    public ServicesInjector(final List<Object> services, final IsisConfiguration configuration) {
-        this(services, null, configuration);
-    }
-
-    public static ServicesInjector forTesting(
-            final List<Object> services,
-            final IsisConfigurationDefault configuration,
-            final InjectorMethodEvaluator injectorMethodEvaluator) {
-        return new ServicesInjector(services, injectorMethodEvaluator, defaultAutowiring(configuration));
+    // -- BUILDER
+    
+    public static ServicesInjectorBuilder builder() {
+        final IsisConfiguration config = _Config.getConfiguration();
+        return new ServicesInjectorBuilder()
+                .addService(config)
+                .autowireSetters(config.getBoolean(KEY_SET_PREFIX, true))
+                .autowireInject(config.getBoolean(KEY_INJECT_PREFIX, true));
     }
-
-    private static IsisConfiguration defaultAutowiring(final IsisConfigurationDefault configuration) {
-        configuration.put(KEY_SET_PREFIX, ""+true);
-        configuration.put(KEY_INJECT_PREFIX, ""+false);
-        return configuration;
+    
+    public static ServicesInjectorBuilder builderForTesting() {
+        return builder()
+                .autowireSetters(true)
+                .autowireInject(false);
     }
+    
+    // -- CONSTRUCTOR (NOT EXPOSED)
 
-    private ServicesInjector(
+    ServicesInjector(
             final List<Object> services,
             final InjectorMethodEvaluator injectorMethodEvaluator,
-            final IsisConfiguration configuration) {
+            final boolean autowireSetters,
+            final boolean autowireInject
+            ) {
         
-        this.services = new ArrayList<>(services);//_Lists.unmodifiable(services);
+        this.services = new ArrayList<>(services);
 
         this.injectorMethodEvaluator =
                 injectorMethodEvaluator != null
                 ? injectorMethodEvaluator
                         : new InjectorMethodEvaluatorDefault();
 
-        this.autowireSetters = configuration.getBoolean(KEY_SET_PREFIX, true);
-        this.autowireInject = configuration.getBoolean(KEY_INJECT_PREFIX, false);
+        this.autowireSetters = autowireSetters;
+        this.autowireInject = autowireInject;
     }
 
     public boolean isRegisteredService(final Class<?> cls) {
@@ -485,12 +486,4 @@ public class ServicesInjector implements ApplicationScopedComponent, ServiceRegi
                         : (persistenceSessionServiceInternal = lookupServiceElseFail(PersistenceSessionServiceInternal.class));
     }
 
-    private ConfigurationServiceInternal configurationServiceInternal;
-    @Programmatic
-    public ConfigurationServiceInternal getConfigurationServiceInternal() {
-        return configurationServiceInternal != null
-                ? configurationServiceInternal
-                        : (configurationServiceInternal = lookupServiceElseFail(ConfigurationServiceInternal.class));
-    }
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorBuilder.java
new file mode 100644
index 0000000..2275da5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServicesInjectorBuilder.java
@@ -0,0 +1,76 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF 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 org.apache.isis.core.metamodel.services;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.isis.core.metamodel.spec.InjectorMethodEvaluator;
+import org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
+
+import static org.apache.isis.commons.internal.base._With.computeIfAbsent;
+
+public class ServicesInjectorBuilder {
+
+    private final List<Object> services = new ArrayList<>();
+    private InjectorMethodEvaluator injectorMethodEvaluator;
+    private boolean autowireSetters = false; 
+    private boolean autowireInject = false;
+    
+    public ServicesInjectorBuilder addService(Object service) {
+        services.add(service);
+        return this;
+    }
+    
+    public ServicesInjectorBuilder addServices(List<Object> services) {
+        this.services.addAll(services);
+        return this;
+    }
+    
+    public ServicesInjectorBuilder injectorMethodEvaluator(InjectorMethodEvaluator injectorMethodEvaluator) {
+        this.injectorMethodEvaluator = injectorMethodEvaluator;
+        return this;
+    }
+    
+    public ServicesInjectorBuilder autowireSetters(boolean autowireSetters) {
+        this.autowireSetters = autowireSetters;
+        return this;
+    }
+    
+    public ServicesInjectorBuilder autowireInject(boolean autowireInject) {
+        this.autowireInject = autowireInject;
+        return this;
+    }
+    
+    // -- BUILD
+    
+    public ServicesInjector build() {
+        return new ServicesInjector(
+                new ArrayList<>(services), 
+                computeIfAbsent(injectorMethodEvaluator, this::defaultInjectorMethodEvaluatorDefault),
+                autowireSetters,
+                autowireInject
+                );
+    }
+    
+    // -- HELPER
+    
+    private InjectorMethodEvaluator defaultInjectorMethodEvaluatorDefault() {
+        return new InjectorMethodEvaluatorDefault();
+    }
+    
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
index df98224..e03f2d6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
@@ -18,8 +18,6 @@
  */
 package org.apache.isis.core.metamodel.services.appfeat;
 
-import static org.apache.isis.commons.internal.base._NullSafe.stream;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -38,7 +36,6 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
-import org.apache.isis.applib.services.config.ConfigurationService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
@@ -58,6 +55,9 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.specimpl.ContributeeMember;
 
+import static org.apache.isis.commons.internal.base._NullSafe.stream;
+import static org.apache.isis.config.internal._Config.getConfiguration;
+
 @DomainService(
         nature = NatureOfService.DOMAIN,
         repositoryFor = ApplicationFeature.class,
@@ -88,14 +88,11 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
     }
 
     private boolean isEagerInitialize() {
-        final String configuredValue = configurationService.getProperty(KEY);
+        final String configuredValue = getConfiguration().getString(KEY);
         return "eager".equalsIgnoreCase(configuredValue) ||
                 "eagerly".equalsIgnoreCase(configuredValue);
     }
 
-
-
-
     // -- initializeIfRequired
 
     enum InitializationState {
@@ -558,9 +555,6 @@ public class ApplicationFeatureRepositoryDefault implements ApplicationFeatureRe
     ServiceRegistry serviceRegistry;
 
     @javax.inject.Inject
-    ConfigurationService configurationService;
-
-    @javax.inject.Inject
     SpecificationLoader specificationLoader;
 
     @javax.inject.Inject
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/config/ConfigurationServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/config/ConfigurationServiceDefault.java
deleted file mode 100644
index 5f28e8a..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/config/ConfigurationServiceDefault.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF 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 org.apache.isis.core.metamodel.services.config;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import javax.annotation.PostConstruct;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.services.config.ConfigurationProperty;
-import org.apache.isis.applib.services.config.ConfigurationService;
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.commons.internal.collections._Sets;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
-
-/**
- * This is the implementation of the applib's {@link ConfigurationService}, different from the internal
- * {@link ConfigurationServiceInternal} domain service (implemented by {@link IsisConfigurationDefault}).
- *
- * TODO: unify these two type hierarchies...
- */
-@DomainService(
-        nature = NatureOfService.DOMAIN,
-        menuOrder = "" + Integer.MAX_VALUE
-        )
-public class ConfigurationServiceDefault implements ConfigurationService {
-
-    private final Logger LOG = LoggerFactory.getLogger(ConfigurationServiceDefault.class);
-
-    private final Map<String, String> properties = _Maps.newHashMap();
-
-    @Programmatic
-    @PostConstruct
-    public void init(final Map<String,String> properties) {
-        Objects.requireNonNull(properties);
-        Objects.requireNonNull(configurationServiceInternal);
-
-        // [ahuber] not sure which of the two to has precedence ...
-        final Map<String, String> a = properties;
-        final Map<String, String> b = configurationServiceInternal.asMap();
-
-        // ... so we report if there is a clash in configured values
-        {
-            Set<String> potentialClashKeys = _Sets.intersect(a.keySet(), b.keySet());
-
-            long clashCount = potentialClashKeys.stream()
-                    .filter(key->{
-                        if(!Objects.equals(a.get(key), b.get(key))){
-
-                            LOG.warn(String.format("config value clash, having two versions for key '%s': '%s' <--> '%s'",
-                                    key, ""+a.get(key), ""+b.get(key)	));
-
-                            return true;
-                        }
-                        return false;
-                    })
-                    .count();
-
-            if(clashCount>0) {
-                LOG.error("===================================================================");
-                LOG.error(" config clashes detected, likely a framework bug");
-                LOG.error("===================================================================");
-            }
-
-        }
-
-        this.properties.putAll(a);
-        this.properties.putAll(b);
-
-
-    }
-
-    @Programmatic
-    @Override
-    public SortedSet<ConfigurationProperty> allProperties() {
-        final SortedSet<ConfigurationProperty> kv = new TreeSet<>();
-
-        properties.entrySet().stream()
-        .map(this::toConfigurationProperty)
-        .forEach(kv::add);
-
-        return java.util.Collections.unmodifiableSortedSet(kv);
-    }
-
-    @Programmatic
-    @Override
-    public String getProperty(final String name) {
-        return properties.get(name);
-    }
-
-    @Programmatic
-    @Override
-    public String getProperty(final String name, final String defaultValue) {
-        final String value = getProperty(name);
-        return value == null ? defaultValue : value;
-    }
-
-    @Programmatic
-    @Override
-    public List<String> getPropertyNames() {
-        return _Lists.unmodifiable(properties.keySet());
-    }
-
-    @javax.inject.Inject
-    ConfigurationServiceInternal configurationServiceInternal;
-
-    // -- HELPER
-
-    private ConfigurationProperty toConfigurationProperty(Map.Entry<String, String> entry) {
-        return new ConfigurationProperty(entry.getKey(), entry.getValue());
-    }
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/configinternal/ConfigurationServiceInternal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/configinternal/ConfigurationServiceInternal.java
deleted file mode 100644
index 499c07e..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/configinternal/ConfigurationServiceInternal.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF 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 org.apache.isis.core.metamodel.services.configinternal;
-
-import java.util.List;
-
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-
-public interface ConfigurationServiceInternal extends IsisConfiguration {
-
-    @Programmatic
-    String getProperty(String name);
-
-    @Programmatic
-    List<String> getPropertyNames();
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java
index 5e08871..c0fc1a5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/exceprecog/ExceptionRecognizerDocDefault.java
@@ -19,8 +19,6 @@
 
 package org.apache.isis.core.metamodel.services.exceprecog;
 
-import java.util.Map;
-
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
@@ -47,9 +45,9 @@ implements ExceptionRecognizer {
     @Programmatic
     @PostConstruct
     @Override
-    public void init(Map<String, String> properties) {
+    public void init() {
         serviceRegistry.injectServicesInto(recognizer);
-        recognizer.init(properties);
+        recognizer.init();
     }
 
     @Programmatic
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index 7d59d8b..bb54f4d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@ -73,7 +73,7 @@ public class MetaModelServiceDefault implements MetaModelService {
 
     @PostConstruct
     @Programmatic
-    public void init(Map<String,String> properties) {
+    public void init() {
         metaModelExporter = new MetaModelExporter(specificationLookup);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceInternalDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceInternalDefault.java
index 25623e6..b0c6af6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceInternalDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceInternalDefault.java
@@ -21,7 +21,6 @@ package org.apache.isis.core.metamodel.services.repository;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
@@ -43,6 +42,8 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 
+import static org.apache.isis.config.internal._Config.getConfiguration;
+
 @DomainService(
         nature = NatureOfService.DOMAIN,
         menuOrder = "" + Integer.MAX_VALUE
@@ -53,8 +54,8 @@ public class RepositoryServiceInternalDefault implements RepositoryService {
 
     @Programmatic
     @PostConstruct
-    public void init(Map<String, String> properties) {
-        final boolean disableAutoFlush = Boolean.parseBoolean(properties.get(KEY_DISABLE_AUTOFLUSH));
+    public void init() {
+        final boolean disableAutoFlush = getConfiguration().getBoolean(KEY_DISABLE_AUTOFLUSH, false);
         this.autoFlush = !disableAutoFlush;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java
index 97b4db7..a4254d8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/SwaggerServiceDefault.java
@@ -18,13 +18,6 @@
  */
 package org.apache.isis.core.metamodel.services.swagger;
 
-import static org.apache.isis.commons.internal.base._Strings.prefix;
-import static org.apache.isis.commons.internal.base._With.ifPresentElse;
-import static org.apache.isis.commons.internal.resources._Resources.getRestfulPathIfAny;
-import static org.apache.isis.commons.internal.resources._Resources.prependContextPathIfPresent;
-
-import java.util.Map;
-
 import javax.annotation.PostConstruct;
 
 import org.slf4j.Logger;
@@ -37,6 +30,11 @@ import org.apache.isis.applib.services.swagger.SwaggerService;
 import org.apache.isis.core.metamodel.services.swagger.internal.SwaggerSpecGenerator;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
+import static org.apache.isis.commons.internal.base._Strings.prefix;
+import static org.apache.isis.commons.internal.base._With.ifPresentElse;
+import static org.apache.isis.commons.internal.resources._Resources.getRestfulPathIfAny;
+import static org.apache.isis.commons.internal.resources._Resources.prependContextPathIfPresent;
+
 @DomainService(
         nature = NatureOfService.DOMAIN,
         menuOrder = "" + Integer.MAX_VALUE
@@ -49,7 +47,7 @@ public class SwaggerServiceDefault implements SwaggerService {
     private String basePath;
 
     @PostConstruct
-    public void init(final Map<String,String> properties) {
+    public void init() {
 
         final String restfulPath = ifPresentElse(getRestfulPathIfAny(), "undefined");
         
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/Generation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/Generation.java
index 7707b08..abd5304 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/Generation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/swagger/internal/Generation.java
@@ -172,7 +172,7 @@ class Generation {
 //                        objectSpecification.getCorrespondingClass().getName())
 //                .toSortedList(Ordering.natural());
 //        final String all = Joiner.on(",").join(specs);
-//        System.out.println(all);
+//        System .out.println(all);
 //    }
 
     void appendObjectPathsAndDefinitions() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ReflectorConstants.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ReflectorConstants.java
index f587d82..eca0e91 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ReflectorConstants.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ReflectorConstants.java
@@ -19,8 +19,8 @@
 
 package org.apache.isis.core.metamodel.specloader;
 
-import org.apache.isis.core.commons.config.ConfigurationConstants;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 import org.apache.isis.core.metamodel.metamodelvalidator.dflt.MetaModelValidatorDefault;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
index c5ec38e..10a8534 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ServiceInitializer.java
@@ -27,7 +27,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.commons.lang.MethodExtensions;
 
 public class ServiceInitializer {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index 878f3eb..82e667e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@ -31,8 +31,9 @@ import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.components.ApplicationScopedComponent;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.ensure.Assert;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.lang.ClassUtil;
@@ -42,7 +43,6 @@ import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFac
 import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.spec.FreeStandingList;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -95,7 +95,6 @@ public class SpecificationLoader implements ApplicationScopedComponent {
     private final ProgrammingModel programmingModel;
     private final FacetProcessor facetProcessor;
 
-    private final IsisConfiguration configuration;
     private final ServicesInjector servicesInjector;
 
     private final MetaModelValidator metaModelValidator;
@@ -110,13 +109,10 @@ public class SpecificationLoader implements ApplicationScopedComponent {
 
 
     public SpecificationLoader(
-            final IsisConfiguration configuration,
             final ProgrammingModel programmingModel,
             final MetaModelValidator metaModelValidator,
             final ServicesInjector servicesInjector) {
 
-        this.configuration = configuration;
-
         this.servicesInjector = servicesInjector;
         this.programmingModel = programmingModel;
         this.metaModelValidator = metaModelValidator;
@@ -217,8 +213,8 @@ public class SpecificationLoader implements ApplicationScopedComponent {
             callables.add(callable);
         }
         ThreadPoolSupport threadPoolSupport = ThreadPoolSupport.getInstance();
-        final boolean parallelize =
-                configuration.getBoolean(INTROSPECTOR_PARALLELIZE_KEY, INTROSPECTOR_PARALLELIZE_DEFAULT);
+        final boolean parallelize = _Config.getConfiguration()
+                .getBoolean(INTROSPECTOR_PARALLELIZE_KEY, INTROSPECTOR_PARALLELIZE_DEFAULT);
         List<Future<Object>> futures;
         if(parallelize) {
             futures = threadPoolSupport.invokeAll(callables);
@@ -481,11 +477,10 @@ public class SpecificationLoader implements ApplicationScopedComponent {
         if (FreeStandingList.class.isAssignableFrom(cls)) {
             return new ObjectSpecificationOnStandaloneList(servicesInjector, facetProcessor);
         } else {
-            final ConfigurationServiceInternal configService = servicesInjector.lookupServiceElseFail(
-                    ConfigurationServiceInternal.class);
+
             final FacetedMethodsBuilderContext facetedMethodsBuilderContext =
                     new FacetedMethodsBuilderContext(
-                            this, facetProcessor, configService);
+                            this, facetProcessor);
 
             final NatureOfService natureOfServiceIfAny = natureOfServiceFrom(cls, fallback);
 
@@ -629,7 +624,7 @@ public class SpecificationLoader implements ApplicationScopedComponent {
 
     @Programmatic
     public IsisConfiguration getConfiguration() {
-        return configuration;
+        return _Config.getConfiguration();
     }
 
     @Programmatic
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index 3ab637e..fcc983a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.lang.ListExtensions;
 import org.apache.isis.core.commons.lang.MethodUtil;
@@ -160,8 +161,7 @@ public class FacetedMethodsBuilder {
         this.facetProcessor = facetedMethodsBuilderContext.facetProcessor;
         this.specificationLoader = facetedMethodsBuilderContext.specificationLoader;
 
-        this.explicitAnnotationsForActions = facetedMethodsBuilderContext.configService.getBoolean("isis.reflector.explicitAnnotations.action");
-
+        this.explicitAnnotationsForActions = _Config.getConfiguration().explicitAnnotationsForActions();
     }
 
     // ////////////////////////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilderContext.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilderContext.java
index 8326a88..e4681db 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilderContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilderContext.java
@@ -16,21 +16,17 @@
  */
 package org.apache.isis.core.metamodel.specloader.specimpl;
 
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
 
 public class FacetedMethodsBuilderContext {
     public final SpecificationLoader specificationLoader;
     public final FacetProcessor facetProcessor;
-    public final ConfigurationServiceInternal configService;
 
     public FacetedMethodsBuilderContext(
             final SpecificationLoader specificationLoader,
-            final FacetProcessor facetProcessor,
-            final ConfigurationServiceInternal configService) {
+            final FacetProcessor facetProcessor) {
         this.specificationLoader = specificationLoader;
         this.facetProcessor = facetProcessor;
-        this.configService = configService;
     }
 }
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAbstract.java
index bea3c86..938dad2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorForDeprecatedAbstract.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.core.metamodel.specloader.validator;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/EventUtil.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/EventUtil.java
index 9e9f73f..b7bd687 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/EventUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/EventUtil.java
@@ -19,7 +19,7 @@
 
 package org.apache.isis.core.metamodel.util;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 
 public final class EventUtil {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/fixture/LogonFixtureAuthenticator.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/fixture/LogonFixtureAuthenticator.java
index 57c7c9c..ba7bd6d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/fixture/LogonFixtureAuthenticator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/fixture/LogonFixtureAuthenticator.java
@@ -20,15 +20,14 @@
 package org.apache.isis.core.runtime.authentication.fixture;
 
 import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
 import org.apache.isis.core.runtime.authentication.standard.AuthenticatorAbstract;
 import org.apache.isis.core.runtime.fixtures.authentication.AuthenticationRequestLogonFixture;
 
 public class LogonFixtureAuthenticator extends AuthenticatorAbstract {
 
-    public LogonFixtureAuthenticator(final IsisConfiguration configuration) {
-        super(configuration);
+    public LogonFixtureAuthenticator() {
+        super();
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandard.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandard.java
index 86bb2ea..9dea929 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandard.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandard.java
@@ -28,8 +28,9 @@ import java.util.stream.Collectors;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.commons.util.ToString;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
@@ -45,11 +46,7 @@ public class AuthenticationManagerStandard implements AuthenticationManager {
     private final List<Authenticator> authenticators = _Lists.newArrayList();
 
     private RandomCodeGenerator randomCodeGenerator;
-    private final IsisConfiguration configuration;
-
-    public AuthenticationManagerStandard(final IsisConfiguration configuration) {
-        this.configuration = configuration;
-    }
+    
 
     // //////////////////////////////////////////////////////////
     // init
@@ -232,7 +229,7 @@ public class AuthenticationManagerStandard implements AuthenticationManager {
     // //////////////////////////////////////////////////////////
 
     protected IsisConfiguration getConfiguration() {
-        return configuration;
+        return _Config.getConfiguration();
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandardInstallerAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandardInstallerAbstract.java
index 34c16df..5650cf4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandardInstallerAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticationManagerStandardInstallerAbstract.java
@@ -22,16 +22,13 @@ package org.apache.isis.core.runtime.authentication.standard;
 import java.util.List;
 
 import org.apache.isis.core.commons.components.InstallerAbstract;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.runtime.authentication.AuthenticationManager;
 import org.apache.isis.core.runtime.authentication.AuthenticationManagerInstaller;
 
 public abstract class AuthenticationManagerStandardInstallerAbstract extends InstallerAbstract implements AuthenticationManagerInstaller {
 
-    public AuthenticationManagerStandardInstallerAbstract(
-            final String name,
-            final IsisConfiguration isisConfiguration) {
-        super(name, isisConfiguration);
+    public AuthenticationManagerStandardInstallerAbstract(final String name) {
+        super(name);
     }
 
     @Override
@@ -44,7 +41,7 @@ public abstract class AuthenticationManagerStandardInstallerAbstract extends Ins
     }
 
     protected AuthenticationManagerStandard createAuthenticationManagerStandard() {
-        return new AuthenticationManagerStandard(getConfiguration());
+        return new AuthenticationManagerStandard();
     }
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticatorAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticatorAbstract.java
index 0c7b02e..e1f6bde 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticatorAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticatorAbstract.java
@@ -20,18 +20,10 @@
 package org.apache.isis.core.runtime.authentication.standard;
 
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
 
 public abstract class AuthenticatorAbstract implements Authenticator {
 
-    // -- constructor, fields
-    private final IsisConfiguration configuration;
-
-    public AuthenticatorAbstract(final IsisConfiguration configuration) {
-        this.configuration = configuration;
-    }
-
     // -- init, shutdown
 
     @Override
@@ -71,12 +63,4 @@ public abstract class AuthenticatorAbstract implements Authenticator {
     }
 
 
-    // -- Injected (via constructor)
-
-    public IsisConfiguration getConfiguration() {
-        return configuration;
-    }
-
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticatorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticatorDefault.java
index 3804e7e..e71fdb9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticatorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/AuthenticatorDefault.java
@@ -19,13 +19,10 @@
 
 package org.apache.isis.core.runtime.authentication.standard;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
-
 public abstract class AuthenticatorDefault extends AuthenticatorAbstract {
 
-    public AuthenticatorDefault(final IsisConfiguration configuration) {
-        super(configuration);
+    public AuthenticatorDefault() {
+        super();
     }
 
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/PasswordRequestAuthenticatorAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/PasswordRequestAuthenticatorAbstract.java
index d6987dc..8b200a3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/PasswordRequestAuthenticatorAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authentication/standard/PasswordRequestAuthenticatorAbstract.java
@@ -19,14 +19,13 @@
 
 package org.apache.isis.core.runtime.authentication.standard;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.runtime.authentication.AuthenticationRequest;
 import org.apache.isis.core.runtime.authentication.AuthenticationRequestPassword;
 
 public abstract class PasswordRequestAuthenticatorAbstract extends AuthenticatorAbstract {
 
-    public PasswordRequestAuthenticatorAbstract(final IsisConfiguration configuration) {
-        super(configuration);
+    public PasswordRequestAuthenticatorAbstract() {
+        super();
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/AuthorizationManagerAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/AuthorizationManagerAbstract.java
index bc94643..bec08db 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/AuthorizationManagerAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/AuthorizationManagerAbstract.java
@@ -19,25 +19,9 @@
 
 package org.apache.isis.core.runtime.authorization;
 
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 
 public abstract class AuthorizationManagerAbstract implements AuthorizationManager, MetaModelRefiner {
 
-    private final IsisConfiguration configuration;
-
-    // /////////////////////////////////////////////////////////
-    // Constructor
-    // /////////////////////////////////////////////////////////
-
-    public AuthorizationManagerAbstract(final IsisConfiguration configuration) {
-        this.configuration = configuration;
-    }
-
-    @Programmatic
-    public IsisConfiguration getConfiguration() {
-        return configuration;
-    }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationConstants.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationConstants.java
index a499012..d7e14ef 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationConstants.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationConstants.java
@@ -19,7 +19,7 @@
 
 package org.apache.isis.core.runtime.authorization.standard;
 
-import org.apache.isis.core.commons.config.ConfigurationConstants;
+import org.apache.isis.config.ConfigurationConstants;
 
 public final class AuthorizationConstants {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandard.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandard.java
index c6444e6..7dbad8e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandard.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandard.java
@@ -24,7 +24,6 @@ import java.util.List;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.sudo.SudoService;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
@@ -38,39 +37,10 @@ public class AuthorizationManagerStandard extends AuthorizationManagerAbstract {
     // Constructor
     // /////////////////////////////////////////////////////////
 
-    public AuthorizationManagerStandard(final IsisConfiguration configuration) {
-        super(configuration);
+    public AuthorizationManagerStandard() {
+        super();
         // avoid null pointers
-        authorizor = new Authorizor() {
-
-            @Override
-            public void init() {
-            }
-
-            @Override
-            public void shutdown() {
-            }
-
-            @Override
-            public boolean isVisibleInRole(final String user, final Identifier identifier) {
-                return true;
-            }
-
-            @Override
-            public boolean isUsableInRole(final String role, final Identifier identifier) {
-                return true;
-            }
-
-            @Override
-            public boolean isVisibleInAnyRole(Identifier identifier) {
-                return true;
-            }
-
-            @Override
-            public boolean isUsableInAnyRole(Identifier identifier) {
-                return true;
-            }
-        };
+        authorizor = Authorizor.nop();
     }
 
     // /////////////////////////////////////////////////////////
@@ -150,12 +120,12 @@ public class AuthorizationManagerStandard extends AuthorizationManagerAbstract {
     // //////////////////////////////////////////////////
 
     @Override
-    public void refineMetaModelValidator(MetaModelValidatorComposite baseMetaModelValidator, IsisConfiguration configuration) {
+    public void refineMetaModelValidator(MetaModelValidatorComposite baseMetaModelValidator) {
         // no-op
     }
 
     @Override
-    public void refineProgrammingModel(ProgrammingModel baseProgrammingModel, IsisConfiguration configuration) {
+    public void refineProgrammingModel(ProgrammingModel baseProgrammingModel) {
         final AuthorizationFacetFactory facetFactory = new AuthorizationFacetFactory(this);
         baseProgrammingModel.addFactory(facetFactory);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandardInstallerAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandardInstallerAbstract.java
index 449e242..b4a2416 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandardInstallerAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/AuthorizationManagerStandardInstallerAbstract.java
@@ -22,7 +22,6 @@ package org.apache.isis.core.runtime.authorization.standard;
 import java.util.List;
 
 import org.apache.isis.core.commons.components.InstallerAbstract;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.runtime.authorization.AuthorizationManager;
 import org.apache.isis.core.runtime.authorization.AuthorizationManagerInstaller;
 
@@ -30,15 +29,13 @@ public abstract class AuthorizationManagerStandardInstallerAbstract
 extends InstallerAbstract
 implements AuthorizationManagerInstaller {
 
-    public AuthorizationManagerStandardInstallerAbstract(
-            final String name,
-            final IsisConfigurationDefault isisConfiguration) {
-        super(name, isisConfiguration);
+    public AuthorizationManagerStandardInstallerAbstract(final String name) {
+        super(name);
     }
 
     @Override
     public AuthorizationManager createAuthorizationManager() {
-        final AuthorizationManagerStandard authorizationManager = new AuthorizationManagerStandard(getConfiguration());
+        final AuthorizationManagerStandard authorizationManager = new AuthorizationManagerStandard();
         final Authorizor authorizor = createAuthorizor();
         authorizationManager.setAuthorizor(authorizor);
         return authorizationManager;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/Authorizor.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/Authorizor.java
index d78fb36..2d7f463 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/Authorizor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/authorization/standard/Authorizor.java
@@ -40,5 +40,41 @@ public interface Authorizor extends ApplicationScopedComponent {
      */
     boolean isUsableInRole(final String role, final Identifier identifier);
 
+    // -- NOP IMPLEMENTATIOn 
+    
+    final static Authorizor NOP = new Authorizor() {
+
+        @Override
+        public void init() {
+        }
+
+        @Override
+        public void shutdown() {
+        }
+
+        @Override
+        public boolean isVisibleInRole(final String user, final Identifier identifier) {
+            return true;
+        }
+
+        @Override
+        public boolean isUsableInRole(final String role, final Identifier identifier) {
+            return true;
+        }
+
+        @Override
+        public boolean isVisibleInAnyRole(Identifier identifier) {
+            return true;
+        }
+
+        @Override
+        public boolean isUsableInAnyRole(Identifier identifier) {
+            return true;
+        }
+    };
+    
+    public static Authorizor nop() {
+        return NOP;
+    }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/optionhandler/OptionHandler.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/optionhandler/OptionHandler.java
index 366af3c..ecdadfc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/optionhandler/OptionHandler.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/optionhandler/OptionHandler.java
@@ -22,7 +22,7 @@ package org.apache.isis.core.runtime.optionhandler;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 
-import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
+import org.apache.isis.config.builder.IsisConfigurationBuilder;
 
 public interface OptionHandler extends IsisConfigurationBuilder.Primer {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java
index 677d78d..6c1af55 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/query/JdoQueryAnnotationFacetFactory.java
@@ -24,7 +24,8 @@ import java.util.regex.Pattern;
 import javax.jdo.annotations.Queries;
 import javax.jdo.annotations.Query;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.JdoMetamodelUtil;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
@@ -76,9 +77,9 @@ public class JdoQueryAnnotationFacetFactory extends FacetFactoryAbstract impleme
 
     @Override
     public void refineMetaModelValidator(
-            final MetaModelValidatorComposite metaModelValidator,
-            final IsisConfiguration configuration) {
+            final MetaModelValidatorComposite metaModelValidator) {
 
+        final IsisConfiguration configuration = _Config.getConfiguration();
         final boolean validateFromClause = configuration.getBoolean(
                 ISIS_REFLECTOR_VALIDATOR_JDOQL_FROM_CLAUSE_KEY,
                 ISIS_REFLECTOR_VALIDATOR_JDOQL_FROM_CLAUSE_DEFAULT);
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java
index 30e66cc..8b0ba5a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/object/version/JdoVersionAnnotationFacetFactory.java
@@ -21,7 +21,7 @@ package org.apache.isis.objectstore.jdo.metamodel.facets.object.version;
 
 import javax.jdo.annotations.Version;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.JdoMetamodelUtil;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -59,7 +59,7 @@ public class JdoVersionAnnotationFacetFactory extends FacetFactoryAbstract imple
 
 
     @Override
-    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
+    public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(new MetaModelValidatorVisiting(newValidatorVisitor()));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
index dcedf5c..33cca16 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
@@ -25,7 +25,6 @@ import java.util.stream.Stream;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.IdentityType;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
@@ -105,7 +104,7 @@ public class BigDecimalDerivedFromJdoColumnAnnotationFacetFactory extends FacetF
 
 
     @Override
-    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
+    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(new MetaModelValidatorVisiting(newValidatorVisitor()));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
index ce28259..35dda83 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MandatoryFromJdoColumnAnnotationFacetFactory.java
@@ -25,7 +25,6 @@ import javax.jdo.annotations.Column;
 import javax.jdo.annotations.IdentityType;
 
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.JdoMetamodelUtil;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -114,7 +113,7 @@ public class MandatoryFromJdoColumnAnnotationFacetFactory extends FacetFactoryAb
     }
 
     @Override
-    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
+    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(new MetaModelValidatorVisiting(newValidatorVisitor()));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
index 879b571..9923018 100644
--- a/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/MaxLengthDerivedFromJdoColumnAnnotationFacetFactory.java
@@ -24,7 +24,6 @@ import java.util.stream.Stream;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.IdentityType;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.JdoMetamodelUtil;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -93,7 +92,7 @@ public class MaxLengthDerivedFromJdoColumnAnnotationFacetFactory extends FacetFa
      * @see org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner#refineMetaModelValidator(org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite, org.apache.isis.core.commons.config.IsisConfiguration)
      */
     @Override
-    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator, IsisConfiguration configuration) {
+    public void refineMetaModelValidator(MetaModelValidatorComposite metaModelValidator) {
         metaModelValidator.add(new MetaModelValidatorVisiting(newValidatorVisitor()));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
index 5f9a5e7..c60379f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/JavaReflectorHelper.java
@@ -21,10 +21,6 @@ package org.apache.isis.progmodels.dflt;
 
 import java.util.Collection;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
@@ -33,14 +29,12 @@ import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
 
 public final class JavaReflectorHelper  {
-
-    @SuppressWarnings("unused")
-    private static final Logger LOG = LoggerFactory.getLogger(JavaReflectorHelper.class);
+    
+    //private static final Logger LOG = LoggerFactory.getLogger(JavaReflectorHelper.class);
 
     private JavaReflectorHelper(){}
 
     public static SpecificationLoader createObjectReflector(
-            final IsisConfiguration configuration,
             final ProgrammingModel programmingModel,
             final Collection<MetaModelRefiner> metaModelRefiners,
             final MetaModelValidator mmv,
@@ -48,13 +42,13 @@ public final class JavaReflectorHelper  {
 
         MetaModelValidatorComposite metaModelValidator = MetaModelValidatorComposite.asComposite(mmv);
         for (MetaModelRefiner metaModelRefiner : metaModelRefiners) {
-            metaModelRefiner.refineProgrammingModel(programmingModel, configuration);
-            metaModelRefiner.refineMetaModelValidator(metaModelValidator, configuration);
+            metaModelRefiner.refineProgrammingModel(programmingModel);
+            metaModelRefiner.refineMetaModelValidator(metaModelValidator);
         }
 
-        programmingModel.refineMetaModelValidator(metaModelValidator, configuration);
+        programmingModel.refineMetaModelValidator(metaModelValidator);
 
-        return new SpecificationLoader(configuration, programmingModel, metaModelValidator, servicesInjector);
+        return new SpecificationLoader(programmingModel, metaModelValidator, servicesInjector);
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index ec1c49a..880396c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -22,7 +22,6 @@ import java.util.Set;
 
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.context._Plugin;
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.actions.action.ActionAnnotationFacetFactory;
 import org.apache.isis.core.metamodel.facets.actions.action.ActionChoicesForCollectionParameterFacetFactory;
 import org.apache.isis.core.metamodel.facets.actions.defaults.method.ActionDefaultsFacetViaMethodFactory;
@@ -158,10 +157,6 @@ import org.apache.isis.core.metamodel.progmodel.ProgrammingModelPlugin.FactoryCo
 
 public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract {
 
-    public ProgrammingModelFacetsJava5(final IsisConfiguration configuration) {
-        this(DeprecatedPolicy.parse(configuration));
-    }
-
     public ProgrammingModelFacetsJava5(final DeprecatedPolicy deprecatedPolicy) {
         super(deprecatedPolicy);
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
index 7325039..3616f64 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryJUnit4TestCase.java
@@ -30,9 +30,9 @@ import org.junit.Before;
 import org.junit.Rule;
 
 import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.services.eventbus.EventBusService;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
@@ -67,9 +67,6 @@ public abstract class AbstractFacetFactoryJUnit4TestCase {
     protected TranslationService mockTranslationService;
 
     @Mock
-    protected IsisConfigurationDefault mockConfiguration;
-
-    @Mock
     protected AuthenticationSessionProvider mockAuthenticationSessionProvider;
 
     protected IdentifiedHolder facetHolder;
@@ -84,7 +81,10 @@ public abstract class AbstractFacetFactoryJUnit4TestCase {
     protected OneToManyAssociation mockOneToManyAssociation;
     @Mock
     protected OneToOneActionParameter mockOneToOneActionParameter;
-
+    @Mock
+    protected EventBusService mockEventBusService;
+    
+    
     protected FacetedMethod facetedMethod;
     protected FacetedMethodParameter facetedMethodParameter;
 
@@ -105,12 +105,9 @@ public abstract class AbstractFacetFactoryJUnit4TestCase {
     public void setUpFacetedMethodAndParameter() throws Exception {
 
         // PRODUCTION
-
+        
         context.checking(new Expectations() {{
 
-            allowing(mockServicesInjector).getConfigurationServiceInternal();
-            will(returnValue(mockConfiguration));
-
             allowing(mockServicesInjector).getPersistenceSessionServiceInternal();
             will(returnValue(mockPersistenceSessionServiceInternal));
 
@@ -123,6 +120,9 @@ public abstract class AbstractFacetFactoryJUnit4TestCase {
             allowing(mockServicesInjector).lookupService(AuthenticationSessionProvider.class);
             will(returnValue(mockAuthenticationSessionProvider));
 
+            allowing(mockServicesInjector).lookupServiceElseFail(EventBusService.class);
+            will(returnValue(mockEventBusService));
+            
             allowing(mockServicesInjector).getSpecificationLoader();
             will(returnValue(mockSpecificationLoader));
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
index 4e4977f..8600798 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/AbstractFacetFactoryTest.java
@@ -30,8 +30,6 @@ import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -40,6 +38,7 @@ import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.plugins.environment.IsisSystemEnvironment;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 
 import junit.framework.TestCase;
@@ -69,15 +68,13 @@ public abstract class AbstractFacetFactoryTest extends TestCase {
 
     protected PersistenceSessionServiceInternal mockPersistenceSessionServiceInternal;
 
-    protected IsisConfigurationDefault stubConfiguration;
     protected SpecificationLoader mockSpecificationLoader;
-    protected IsisConfiguration mockConfiguration;
     protected ProgrammableMethodRemover methodRemover;
 
     protected FacetHolder facetHolder;
     protected FacetedMethod facetedMethod;
     protected FacetedMethodParameter facetedMethodParameter;
-
+    
     public static class IdentifiedHolderImpl extends FacetHolderImpl implements IdentifiedHolder {
 
         private Identifier identifier;
@@ -97,7 +94,7 @@ public abstract class AbstractFacetFactoryTest extends TestCase {
         super.setUp();
         
         // PRODUCTION
-
+        
         facetHolder = new IdentifiedHolderImpl(
                 Identifier.propertyOrCollectionIdentifier(Customer.class, "firstName"));
         facetedMethod = FacetedMethod.createForProperty(Customer.class, "firstName");
@@ -108,23 +105,22 @@ public abstract class AbstractFacetFactoryTest extends TestCase {
         methodRemover = new ProgrammableMethodRemover();
 
         mockAuthenticationSessionProvider = context.mock(AuthenticationSessionProvider.class);
-        mockConfiguration = context.mock(IsisConfiguration.class);
-        stubServicesInjector = context.mock(ServicesInjector.class);
+        
         mockTranslationService = context.mock(TranslationService.class);
-        stubConfiguration = new IsisConfigurationDefault();
         mockAuthenticationSession = context.mock(AuthenticationSession.class);
 
         mockPersistenceSessionServiceInternal = context.mock(PersistenceSessionServiceInternal.class);
 
         mockSpecificationLoader = context.mock(SpecificationLoader.class);
 
-        stubServicesInjector = new ServicesInjector(_Lists.of(
-                stubConfiguration,
+        stubServicesInjector = ServicesInjector.builderForTesting()
+                .addServices(_Lists.of(
                 mockAuthenticationSessionProvider,
                 mockSpecificationLoader,
                 mockPersistenceSessionServiceInternal,
                 mockTranslationService
-        ), stubConfiguration);
+                ))
+                .build();
 
         context.checking(new Expectations() {{
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
index 0ebf671..3901ec3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/ActionMethodsFacetFactoryTest.java
@@ -32,7 +32,6 @@ import org.apache.isis.applib.security.UserMemento;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.core.commons.authentication.AuthenticationSession;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
@@ -62,7 +61,6 @@ import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefau
 import org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod;
 import org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.testspec.ObjectSpecificationStub;
@@ -78,7 +76,6 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
 
     private ServicesInjector mockServicesInjector;
     private AuthenticationSessionProvider mockAuthenticationSessionProvider;
-    private ConfigurationServiceInternal stubConfigurationServiceInternal;
     private TranslationService mockTranslationService;
     private PersistenceSessionServiceInternal mockPersistenceSessionServiceInternal;
 
@@ -93,7 +90,6 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
         mockPersistenceSessionServiceInternal = context.mock(PersistenceSessionServiceInternal.class);
 
         mockAuthenticationSessionProvider = context.mock(AuthenticationSessionProvider.class);
-        stubConfigurationServiceInternal = new IsisConfigurationDefault(null);
 
         final AuthenticationSession mockAuthenticationSession = context.mock(AuthenticationSession.class);
 
@@ -111,9 +107,6 @@ public class ActionMethodsFacetFactoryTest extends AbstractFacetFactoryTest {
             allowing(mockServicesInjector).getAuthenticationSessionProvider();
             will(returnValue(mockAuthenticationSessionProvider));
 
-            allowing(mockServicesInjector).getConfigurationServiceInternal();
-            will(returnValue(stubConfigurationServiceInternal));
-
             allowing(mockServicesInjector).getSpecificationLoader();
             will(returnValue(mockSpecificationLoader));
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
index fdd281e..8831b55 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
@@ -38,6 +38,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.domain.ActionDomainEvent;
 import org.apache.isis.applib.services.HasUniqueId;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
@@ -107,15 +108,14 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
         
         // PRODUCTION
         
+        _Config.clear();
+        
         facetFactory = new ActionAnnotationFacetFactory();
 
         context.checking(new Expectations() {{
             allowing(mockServicesInjector).lookupServiceElseFail(AuthenticationSessionProvider.class);
             will(returnValue(mockAuthenticationSessionProvider));
-
-            allowing(mockServicesInjector).getConfigurationServiceInternal();
-            will(returnValue(mockConfiguration));
-
+            
             allowing(mockTypeSpec).getFacet(ActionDomainEventDefaultFacetForDomainObjectAnnotation.class);
             will(returnValue(null));
 
@@ -170,11 +170,7 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
             allowingLoadSpecificationRequestsFor(cls, actionMethod.getReturnType());
             expectRemoveMethod(actionMethod);
 
-            context.checking(new Expectations() {{
-                allowing(mockConfiguration).getBoolean("isis.reflector.facet.actionAnnotation.domainEvent.postForDefault", true);
-                will(returnValue(true));
-            }});
-
+            _Config.put("isis.reflector.facet.actionAnnotation.domainEvent.postForDefault", true);
 
             // when
             final ProcessMethodContext processMethodContext = new ProcessMethodContext(
@@ -294,11 +290,7 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
             allowingLoadSpecificationRequestsFor(cls, actionMethod.getReturnType());
             expectRemoveMethod(actionMethod);
 
-            context.checking(new Expectations() {{
-                allowing(mockConfiguration).getBoolean("isis.reflector.facet.actionAnnotation.domainEvent.postForDefault", true);
-                will(returnValue(true));
-            }});
-
+            _Config.put("isis.reflector.facet.actionAnnotation.domainEvent.postForDefault", true);
 
             // when
             final ProcessMethodContext processMethodContext = new ProcessMethodContext(
@@ -1170,20 +1162,11 @@ public class ActionAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4
     }
 
     void allowingCommandConfigurationToReturn(final String value) {
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.services.command.actions");
-                will(returnValue(value));
-            }
-        });
+        _Config.put("isis.services.command.actions", value);
     }
+
     void allowingPublishingConfigurationToReturn(final String value) {
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.services.publish.actions");
-                will(returnValue(value));
-            }
-        });
+        _Config.put("isis.services.publish.actions", value);
     }
 
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryJunit4Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryJunit4Test.java
index 77d8a00..b93617f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryJunit4Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutAnnotationFacetFactoryJunit4Test.java
@@ -20,10 +20,10 @@
 package org.apache.isis.core.metamodel.facets.actions.layout;
 
 import org.hamcrest.CoreMatchers;
-import org.hamcrest.Matchers;
 import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
+
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Contributed;
 import org.apache.isis.applib.annotation.DomainObject;
@@ -67,10 +67,8 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
                     return "Joe";
                 }
             }
-
+            
             context.checking(new Expectations() {{
-            	allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-            	will(returnValue(null));
             	
                 allowing(mockSpecificationLoader).loadSpecification(CustomerService.class);
                 will(returnValue(mockObjSpec));
@@ -107,9 +105,6 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
             }
 
             context.checking(new Expectations() {{
-            	allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-            	will(returnValue(null));
-            	
                 allowing(mockSpecificationLoader).loadSpecification(CustomerService.class);
                 will(returnValue(mockObjSpec));
 
@@ -146,8 +141,6 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
             }
 
             context.checking(new Expectations() {{
-            	allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-            	will(returnValue(null));
             	
                 allowing(mockSpecificationLoader).loadSpecification(CustomerService.class);
                 will(returnValue(mockObjSpec));
@@ -188,8 +181,6 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
             }
 
             context.checking(new Expectations() {{
-            	allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-            	will(returnValue(null));
             	
                 allowing(mockSpecificationLoader).loadSpecification(CustomerService.class);
                 will(returnValue(mockObjSpec));
@@ -228,9 +219,6 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
             }
 
             context.checking(new Expectations() {{
-            	allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-            	will(returnValue(null));
-            	
                 allowing(mockSpecificationLoader).loadSpecification(CustomerService.class);
                 will(returnValue(mockObjSpec));
 
@@ -270,9 +258,6 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
             }
 
             context.checking(new Expectations() {{
-            	allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-            	will(returnValue(null));            	
-            	
                 allowing(mockSpecificationLoader).loadSpecification(CustomerService.class);
                 will(returnValue(mockObjSpec));
 
@@ -312,10 +297,6 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
             }
 
             context.checking(new Expectations() {{
-            	
-            	allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-            	will(returnValue(null));
-            	
                 allowing(mockSpecificationLoader).loadSpecification(CustomerService.class);
                 will(returnValue(mockObjSpec));
 
@@ -356,8 +337,6 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
             }
 
             context.checking(new Expectations() {{
-            	allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-            	will(returnValue(null));
             	
                 allowing(mockSpecificationLoader).loadSpecification(CustomerService.class);
                 will(returnValue(mockObjSpec));
@@ -398,9 +377,7 @@ public class ActionLayoutAnnotationFacetFactoryJunit4Test extends AbstractFacetF
             }
 
             context.checking(new Expectations() {{
-            	allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-            	will(returnValue(null));
-            	
+           	
                 allowing(mockSpecificationLoader).loadSpecification(Customer.class);
                 will(returnValue(mockObjSpec));
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutXmlLayoutAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutXmlLayoutAnnotationFacetFactoryTest.java
index 155280e..ebee7a2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutXmlLayoutAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutXmlLayoutAnnotationFacetFactoryTest.java
@@ -61,6 +61,7 @@ public class ActionLayoutXmlLayoutAnnotationFacetFactoryTest extends AbstractFac
                 return null;
             }
         }
+        
         final Method method = findMethod(Customer.class, "foz");
 
         context.checking(new Expectations() {
@@ -73,10 +74,6 @@ public class ActionLayoutXmlLayoutAnnotationFacetFactoryTest extends AbstractFac
 
                 allowing(mockObjSpec).getFacet(DomainServiceFacet.class);
                 will(returnValue(null));
-
-                allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-                will(returnValue(null));
-
             }
         });
 
@@ -113,9 +110,6 @@ public class ActionLayoutXmlLayoutAnnotationFacetFactoryTest extends AbstractFac
                 allowing(mockObjSpec).getFacet(DomainServiceFacet.class);
                 will(returnValue(null));
 
-                allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-                will(returnValue(null));
-
             }
         });
 
@@ -142,9 +136,6 @@ public class ActionLayoutXmlLayoutAnnotationFacetFactoryTest extends AbstractFac
 
             context.checking(new Expectations() {
                 {
-                	allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-                	will(returnValue(null));
-                	
                     allowing(mockSpecificationLoader).loadSpecification(Customer.class);
                     will(returnValue(mockObjSpec));
 
@@ -180,9 +171,6 @@ public class ActionLayoutXmlLayoutAnnotationFacetFactoryTest extends AbstractFac
 
             context.checking(new Expectations() {
                 {
-                	allowing(mockConfiguration).getString("isis.viewer.wicket.promptStyle");
-                	will(returnValue(null));                	
-                	
                     allowing(mockSpecificationLoader).loadSpecification(Customer.class);
                     will(returnValue(mockObjSpec));
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
index d25589e..2757ff3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
@@ -108,7 +108,6 @@ public class CollectionAnnotationFacetFactoryTest extends AbstractFacetFactoryJU
 
         private void addGetterFacet(final FacetHolder holder) {
             FacetUtil.addFacet(new PropertyOrCollectionAccessorFacetAbstract(mockOnType, holder, 
-                    mockConfiguration,
                     mockSpecificationLoader, 
                     mockAuthenticationSessionProvider,
                     mockPersistenceSessionServiceInternal
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/layout/annotation/NamedFacetForCollectionLayoutAnnotationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/layout/annotation/NamedFacetForCollectionLayoutAnnotationFactoryTest.java
index e8aeb40..5eaf4e3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/layout/annotation/NamedFacetForCollectionLayoutAnnotationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/collections/layout/annotation/NamedFacetForCollectionLayoutAnnotationFactoryTest.java
@@ -22,9 +22,9 @@ package org.apache.isis.core.metamodel.facets.collections.layout.annotation;
 import java.lang.reflect.Method;
 import java.util.Set;
 import java.util.SortedSet;
-import org.apache.isis.commons.internal.collections._Sets;
+
 import org.apache.isis.applib.annotation.CollectionLayout;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
 import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
@@ -40,15 +40,9 @@ import static org.junit.Assert.assertThat;
 public class NamedFacetForCollectionLayoutAnnotationFactoryTest extends AbstractFacetFactoryTest {
 
     public void testCollectionLayoutAnnotationNamed() {
-        final CollectionLayoutFacetFactory facetFactory = new CollectionLayoutFacetFactory() {
-            @Override protected IsisConfiguration getConfiguration() {
-                return stubConfiguration;
-            }
-        };
-
+        final CollectionLayoutFacetFactory facetFactory = new CollectionLayoutFacetFactory();
 
         class Customer {
-            @SuppressWarnings("unused")
             @CollectionLayout(named = "1st names")
             public SortedSet<String> getFirstNames() {
                 return _Sets.newTreeSet();
@@ -66,14 +60,9 @@ public class NamedFacetForCollectionLayoutAnnotationFactoryTest extends Abstract
     }
 
     public void testCollectionLayoutAnnotationNamedEscapedFalse() {
-        final CollectionLayoutFacetFactory facetFactory = new CollectionLayoutFacetFactory() {
-            @Override protected IsisConfiguration getConfiguration() {
-                return stubConfiguration;
-            }
-        };
+        final CollectionLayoutFacetFactory facetFactory = new CollectionLayoutFacetFactory();
 
         class Customer {
-            @SuppressWarnings("unused")
             @CollectionLayout(named = "1st names", namedEscaped = false)
             public Set<String> getFirstNames() {
                 return _Sets.newTreeSet();
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
index f006ed1..6f20bf6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ViewModelSemanticCheckingFacetFactoryTest.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.core.metamodel.facets.object;
 
-import org.jmock.Expectations;
 import org.jmock.auto.Mock;
 import org.junit.Before;
 import org.junit.Rule;
@@ -26,7 +25,7 @@ import org.junit.Test;
 
 import org.apache.isis.applib.RecreatableDomainObject;
 import org.apache.isis.applib.annotation.Nature;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facets.FacetFactory;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
@@ -34,7 +33,6 @@ import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 
 import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
@@ -43,9 +41,6 @@ public class ViewModelSemanticCheckingFacetFactoryTest {
     @Rule
     public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(JUnitRuleMockery2.Mode.INTERFACES_AND_CLASSES);
 
-    @Mock
-    private IsisConfigurationDefault mockConfiguration;
-
 
     @Mock
     private ServicesInjector mockServicesInjector;
@@ -55,7 +50,7 @@ public class ViewModelSemanticCheckingFacetFactoryTest {
     private ValidationFailures processThenRefine(final Class<?> cls) {
         facetFactory.process(new FacetFactory.ProcessClassContext(cls, null, null));
         final MetaModelValidatorComposite metaModelValidator = new MetaModelValidatorComposite();
-        facetFactory.refineMetaModelValidator(metaModelValidator, null);
+        facetFactory.refineMetaModelValidator(metaModelValidator);
 
         final ValidationFailures validationFailures = new ValidationFailures();
         metaModelValidator.validate(validationFailures);
@@ -65,18 +60,11 @@ public class ViewModelSemanticCheckingFacetFactoryTest {
     @Before
     public void setUp() throws Exception {
 
-        context.checking(new Expectations() {{
-            allowing(mockConfiguration).getBoolean(with(equalTo("isis.reflector.facets.ViewModelSemanticCheckingFacetFactory.enable")), with(any(boolean.class)));
-            will(returnValue(true));
-
-        }});
+        _Config.clear();
+        _Config.put("isis.reflector.facets.ViewModelSemanticCheckingFacetFactory.enable", true);
+        
         facetFactory = new ViewModelSemanticCheckingFacetFactory();
 
-        context.checking(new Expectations() {{
-            allowing(mockServicesInjector).getConfigurationServiceInternal();
-            will(returnValue(mockConfiguration));
-        }});
-
         facetFactory.setServicesInjector(mockServicesInjector);
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
index 86f65b7..028726c 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/defaults/DefaultedFacetFactoryTest.java
@@ -19,15 +19,13 @@
 
 package org.apache.isis.core.metamodel.facets.object.defaults;
 
-import java.util.Collections;
-
 import org.apache.isis.applib.adapters.DefaultsProvider;
 import org.apache.isis.applib.annotation.Defaulted;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
 import org.apache.isis.core.metamodel.facets.object.defaults.annotcfg.DefaultedFacetAnnotationElseConfigurationFactory;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
 
 public class DefaultedFacetFactoryTest extends AbstractFacetFactoryTest {
 
@@ -39,8 +37,7 @@ public class DefaultedFacetFactoryTest extends AbstractFacetFactoryTest {
 
         facetFactory = new DefaultedFacetAnnotationElseConfigurationFactory();
 
-        ServicesInjector servicesInjector = new ServicesInjector(Collections.emptyList(), stubConfiguration);
-        servicesInjector.addFallbackIfRequired(ConfigurationServiceInternal.class,  stubConfiguration);
+        ServicesInjector servicesInjector = ServicesInjector.builderForTesting().build();
         facetFactory.setServicesInjector(servicesInjector);
     }
 
@@ -144,6 +141,8 @@ public class DefaultedFacetFactoryTest extends AbstractFacetFactoryTest {
     }
 
     public void testDefaultedMustHaveANoArgConstructor() {
+        _Config.clear();
+        
         facetFactory.process(new ProcessClassContext(MyDefaultedWithoutNoArgConstructor.class, methodRemover, facetedMethod));
         final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
         assertNull(facet);
@@ -188,8 +187,11 @@ public class DefaultedFacetFactoryTest extends AbstractFacetFactoryTest {
     }
 
     public void testDefaultedProviderNameCanBePickedUpFromConfiguration() {
+        
         final String className = "org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetFactoryTest$MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration";
-        stubConfiguration.add(DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX, className);
+        
+        _Config.clear();
+        _Config.put(DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX, className);
         facetFactory.process(new ProcessClassContext(MyDefaultedWithDefaultsProviderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
         final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
         assertNotNull(facet);
@@ -211,8 +213,11 @@ public class DefaultedFacetFactoryTest extends AbstractFacetFactoryTest {
     }
 
     public void testNonAnnotatedDefaultedCanBePickedUpFromConfiguration() {
+        
         final String className = "org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetFactoryTest$NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration";
-        stubConfiguration.add(DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX, className);
+        
+        _Config.clear();
+        _Config.put(DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + DefaultsProviderUtil.DEFAULTS_PROVIDER_NAME_KEY_SUFFIX, className);
         facetFactory.process(new ProcessClassContext(NonAnnotatedDefaultedDefaultsProviderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
         final DefaultedFacetAbstract facet = (DefaultedFacetAbstract) facetedMethod.getFacet(DefaultedFacet.class);
         assertNotNull(facet);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
index 9af5133..5fa2c67 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
@@ -19,15 +19,18 @@
 
 package org.apache.isis.core.metamodel.facets.object.domainobject;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.notNullValue;
-import static org.junit.Assert.assertThat;
-
 import java.util.UUID;
 
+import org.jmock.Expectations;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
 import org.apache.isis.applib.annotation.Bounding;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.services.HasUniqueId;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
@@ -51,11 +54,10 @@ import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObj
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.jmock.Expectations;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
 
 public class DomainObjectAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
 
@@ -63,10 +65,9 @@ public class DomainObjectAnnotationFacetFactoryTest extends AbstractFacetFactory
 
     @Before
     public void setUp() throws Exception {
+        _Config.clear();
         facetFactory = new DomainObjectAnnotationFacetFactory();
-
         facetFactory.setServicesInjector(mockServicesInjector);
-
     }
 
     @After
@@ -88,25 +89,12 @@ public class DomainObjectAnnotationFacetFactoryTest extends AbstractFacetFactory
     }
 
     protected void allowingConfigurationToReturn(final String name, final String value) {
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString(name);
-                will(returnValue(value));
-
-                // anything else
-                ignoring(mockConfiguration);
-            }
-        });
+        _Config.put(name, value);
     }
 
     protected void ignoringConfiguration() {
-        context.checking(new Expectations() {
-            {
-                ignoring(mockConfiguration);
-            }
-        });
-    }
 
+    }
 
     public static class Auditing extends DomainObjectAnnotationFacetFactoryTest {
 
@@ -443,7 +431,7 @@ public class DomainObjectAnnotationFacetFactoryTest extends AbstractFacetFactory
                     will(returnValue(true));
                     
                     // anything else
-                    ignoring(mockConfiguration);
+                    
                 }
             });
             
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
index aca65fd..60125cc 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFactoryTest.java
@@ -28,6 +28,7 @@ import org.junit.Test;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.ViewModelLayout;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
@@ -56,6 +57,7 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
     
     @Before
     public void setUp() throws Exception {
+        _Config.clear();
         facetFactory = new DomainObjectLayoutFacetFactory();
         facetFactory.setServicesInjector(mockServicesInjector);
     }
@@ -106,7 +108,7 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
 
             @Before
             public void setUp2() throws Exception {
-                context.ignoring(mockConfiguration);
+                _Config.clear();
             }
 
             @Test
@@ -143,6 +145,11 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
         }
 
         public static class ForViewModelLayout extends Bookmarking {
+            
+            @Before
+            public void setUp2() throws Exception {
+                _Config.clear();
+            }
 
             @Test
             public void whenSpecified() {
@@ -189,11 +196,12 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
 
             @Before
             public void setUp2() throws Exception {
-                context.ignoring(mockConfiguration);
+                _Config.clear();
             }
 
             @Before
             public void setUp() throws Exception {
+                _Config.clear();
                 super.setUp();
             }
 
@@ -222,7 +230,7 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
                 facetFactory.process(new FacetFactory.ProcessClassContext(cls, mockMethodRemover, facetHolder));
 
                 final Facet facet = facetHolder.getFacet(CssClassFacet.class);
-                assertNull(facet);
+                assertNotNull(facet);
 
                 expectNoMethodsRemoved();
             }
@@ -272,7 +280,7 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
 
             @Before
             public void setUp2() throws Exception {
-                context.ignoring(mockConfiguration);
+                _Config.clear();
             }
 
 
@@ -353,7 +361,7 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
 
             @Before
             public void setUp2() throws Exception {
-                context.ignoring(mockConfiguration);
+                _Config.clear();
             }
 
             @Test
@@ -431,7 +439,7 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
 
             @Before
             public void setUp2() throws Exception {
-                context.ignoring(mockConfiguration);
+                _Config.clear();
             }
 
             @Test
@@ -509,7 +517,7 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
 
             @Before
             public void setUp2() throws Exception {
-                context.ignoring(mockConfiguration);
+                _Config.clear();
             }
 
             @Test
@@ -587,7 +595,7 @@ public class DomainObjectLayoutFactoryTest extends AbstractFacetFactoryJUnit4Tes
 
             @Before
             public void setUp2() throws Exception {
-                context.ignoring(mockConfiguration);
+                _Config.clear();
             }
 
             @Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
index e094ec4..639116a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
@@ -24,6 +24,9 @@ import org.apache.isis.applib.adapters.DefaultsProvider;
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.annotation.Value;
+import org.apache.isis.commons.internal.context._Context;
+import org.apache.isis.config.builder.IsisConfigurationBuilder;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
 import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacet;
@@ -431,7 +434,8 @@ public class ValueFacetAnnotationOrConfigurationFactoryTest extends AbstractFace
         // given
         final String className = "org.apache.isis.core.metamodel.facets.object.value.ValueFacetAnnotationOrConfigurationFactoryTest$MyValueWithSemanticsProviderSpecifiedUsingConfiguration";
 
-        stubConfiguration.add(ValueSemanticsProviderUtil.SEMANTICS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + ValueSemanticsProviderUtil.SEMANTICS_PROVIDER_NAME_KEY_SUFFIX, className);
+        _Config.clear();
+        _Config.put(ValueSemanticsProviderUtil.SEMANTICS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + ValueSemanticsProviderUtil.SEMANTICS_PROVIDER_NAME_KEY_SUFFIX, className);
 
         // when
         facetFactory.process(new ProcessClassContext(MyValueWithSemanticsProviderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
@@ -483,9 +487,8 @@ public class ValueFacetAnnotationOrConfigurationFactoryTest extends AbstractFace
 
         // given
         final String className = "org.apache.isis.core.metamodel.facets.object.value.ValueFacetAnnotationOrConfigurationFactoryTest$NonAnnotatedValueSemanticsProviderSpecifiedUsingConfiguration";
-
-        stubConfiguration.add(ValueSemanticsProviderUtil.SEMANTICS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + ValueSemanticsProviderUtil.SEMANTICS_PROVIDER_NAME_KEY_SUFFIX, className);
-
+        _Config.clear();
+        _Config.put(ValueSemanticsProviderUtil.SEMANTICS_PROVIDER_NAME_KEY_PREFIX + canonical(className) + ValueSemanticsProviderUtil.SEMANTICS_PROVIDER_NAME_KEY_SUFFIX, className);
 
         // when
         facetFactory.process(new ProcessClassContext(NonAnnotatedValueSemanticsProviderSpecifiedUsingConfiguration.class, methodRemover, facetedMethod));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleConfiguration_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleConfiguration_Test.java
index b2d3ace..c5f3ebc 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleConfiguration_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleConfiguration_Test.java
@@ -23,7 +23,7 @@ import org.junit.Rule;
 import org.junit.Test;
 
 import org.apache.isis.applib.annotation.PromptStyle;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleConfiguration;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleFacetFromPropertyAnnotation_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleFacetFromPropertyAnnotation_Test.java
index 386988b..98cc1ea 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleFacetFromPropertyAnnotation_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/promptstyle/PromptStyleFacetFromPropertyAnnotation_Test.java
@@ -29,7 +29,7 @@ import org.junit.Test;
 
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.PropertyLayout;
-import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
index 26ab6c7..99d3a68 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
@@ -35,6 +35,7 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.domain.PropertyDomainEvent;
 import org.apache.isis.applib.spec.Specification;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -101,11 +102,16 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
 
             allowing(mockSpecificationLoader).loadSpecification(returnType);
             will(returnValue(mockReturnTypeSpec));
+            
+            allowing(mockTypeSpec).getFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class);
+            will(returnValue(null));
+            
         }});
     }
 
     @Before
     public void setUp() throws Exception {
+        _Config.clear();
         facetFactory = new PropertyAnnotationFacetFactory();
         facetFactory.setServicesInjector(mockServicesInjector);
     }
@@ -119,7 +125,6 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
 
         private void addGetterFacet(final FacetHolder holder) {
             FacetUtil.addFacet(new PropertyOrCollectionAccessorFacetAbstract(mockOnType, holder,
-                    mockConfiguration,
                     mockSpecificationLoader, 
                     mockAuthenticationSessionProvider,
                     mockPersistenceSessionServiceInternal
@@ -341,6 +346,8 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
             }
 
             // given
+            _Config.put("isis.reflector.facet.propertyAnnotation.domainEvent.postForDefault", true);
+            
             final Class<?> cls = Customer.class;
             propertyMethod = findMethod(Customer.class, "getName");
 
@@ -350,13 +357,6 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
 
             // expect
             allowingLoadSpecificationRequestsFor(cls, propertyMethod.getReturnType());
-            context.checking(new Expectations() {{
-                oneOf(mockConfiguration).getBoolean("isis.reflector.facet.propertyAnnotation.domainEvent.postForDefault", true);
-                will(returnValue(true));
-
-                allowing(mockTypeSpec).getFacet(PropertyDomainEventDefaultFacetForDomainObjectAnnotation.class);
-                will(returnValue(null));
-            }});
 
             // when
             final FacetFactory.ProcessMethodContext processMethodContext = new FacetFactory.ProcessMethodContext(cls, null,
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
index 942b22a..bb34ef8 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigDecimalValueSemanticsProviderTest.java
@@ -19,20 +19,20 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
 import java.math.BigDecimal;
 
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
 import org.apache.isis.core.metamodel.facets.value.bigdecimal.BigDecimalValueSemanticsProvider;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 public class BigDecimalValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
 
     private BigDecimalValueSemanticsProvider value;
@@ -42,12 +42,8 @@ public class BigDecimalValueSemanticsProviderTest extends ValueSemanticsProvider
     @Before
     public void setUp() throws Exception {
         super.setUp();
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.decimal");
-                will(returnValue(null));
-            }
-        });
+        
+        _Config.put("isis.value.format.decimal", null);
 
         bigDecimal = new BigDecimal("34132.199");
         allowMockAdapterToReturn(bigDecimal);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
index 3a12e4b..ab41cb3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/BigIntValueSemanticsProviderTest.java
@@ -19,20 +19,20 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
 import java.math.BigInteger;
 
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
 import org.apache.isis.core.metamodel.facets.value.biginteger.BigIntegerValueSemanticsProvider;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 public class BigIntValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
 
     private BigInteger bigInt;
@@ -44,12 +44,7 @@ public class BigIntValueSemanticsProviderTest extends ValueSemanticsProviderAbst
         bigInt = new BigInteger("132199");
         allowMockAdapterToReturn(bigInt);
 
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.int");
-                will(returnValue(null));
-            }
-        });
+        _Config.put("isis.value.format.int", null);
 
         holder = new FacetHolderImpl();
         setValue(new BigIntegerValueSemanticsProvider(holder, mockServicesInjector));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java
index c1c890f..4fa072d 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ByteValueSemanticsProviderTest.java
@@ -19,19 +19,19 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
 import org.apache.isis.core.metamodel.facets.value.bytes.ByteValueSemanticsProviderAbstract;
 import org.apache.isis.core.metamodel.facets.value.bytes.ByteWrapperValueSemanticsProvider;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 public class ByteValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
 
     private ByteValueSemanticsProviderAbstract value;
@@ -45,13 +45,8 @@ public class ByteValueSemanticsProviderTest extends ValueSemanticsProviderAbstra
         allowMockAdapterToReturn(byteObj);
         holder = new FacetHolderImpl();
 
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.byte");
-                will(returnValue(null));
-            }
-        });
-
+        _Config.put("isis.value.format.byte", null);
+        
         setValue(value = new ByteWrapperValueSemanticsProvider(holder, mockServicesInjector));
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java
index fc6378f..2b2cddd 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/DoubleValueSemanticsProviderTest.java
@@ -19,18 +19,18 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
 import org.apache.isis.core.metamodel.facets.value.doubles.DoubleWrapperValueSemanticsProvider;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 public class DoubleValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
 
     private Double doubleObj;
@@ -39,13 +39,8 @@ public class DoubleValueSemanticsProviderTest extends ValueSemanticsProviderAbst
 
     @Before
     public void setUpObjects() throws Exception {
-
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.double");
-                will(returnValue(null));
-            }
-        });
+        
+        _Config.put("isis.value.format.double", null);
 
         holder = new FacetHolderImpl();
         setValue(new DoubleWrapperValueSemanticsProvider(holder, mockServicesInjector));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java
index a3cd834..a75608f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/FloatValueSemanticsProviderTest.java
@@ -19,19 +19,19 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
 import org.apache.isis.core.metamodel.facets.value.floats.FloatValueSemanticsProviderAbstract;
 import org.apache.isis.core.metamodel.facets.value.floats.FloatWrapperValueSemanticsProvider;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 public class FloatValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
 
     private FloatValueSemanticsProviderAbstract value;
@@ -40,12 +40,8 @@ public class FloatValueSemanticsProviderTest extends ValueSemanticsProviderAbstr
 
     @Before
     public void setUpObjects() throws Exception {
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.float");
-                will(returnValue(null));
-            }
-        });
+        
+        _Config.put("isis.value.format.float", null);
 
         float1 = new Float(32.5f);
         allowMockAdapterToReturn(float1);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java
index d91b372..62c29aa 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java
@@ -19,24 +19,23 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.junit.Assert.assertEquals;
-
 import java.awt.Image;
 
-import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
-import org.jmock.Expectations;
 import org.jmock.auto.Mock;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.value.image.ImageValueSemanticsProviderAbstract;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 
+import static org.junit.Assert.assertEquals;
+
 public class ImageValueSemanticsProviderAbstractTest {
 
     @Rule
@@ -49,19 +48,13 @@ public class ImageValueSemanticsProviderAbstractTest {
     private ServicesInjector mockServicesInjector;
 
     @Mock
-    private ConfigurationServiceInternal mockConfiguration;
+    private IsisConfiguration mockConfiguration;
 
     private TestImageSemanticsProvider adapter;
 
     @Before
     public void setUp() throws Exception {
 
-        context.checking(new Expectations() {{
-            allowing(mockServicesInjector).getConfigurationServiceInternal();
-            will(returnValue(mockConfiguration));
-
-        }});
-
         adapter = new TestImageSemanticsProvider(mockFacetHolder, mockServicesInjector);
     }
     
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java
index b4e5519..01c83f6b 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/IntValueSemanticsProviderTest.java
@@ -19,19 +19,19 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
 import org.apache.isis.core.metamodel.facets.value.integer.IntValueSemanticsProviderAbstract;
 import org.apache.isis.core.metamodel.facets.value.integer.IntWrapperValueSemanticsProvider;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 public class IntValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
 
     private IntValueSemanticsProviderAbstract value;
@@ -43,13 +43,8 @@ public class IntValueSemanticsProviderTest extends ValueSemanticsProviderAbstrac
         integer = Integer.valueOf(32);
         allowMockAdapterToReturn(integer);
 
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.int");
-                will(returnValue(null));
-            }
-        });
-
+        _Config.put("isis.value.format.int", null);
+        
         holder = new FacetHolderImpl();
         setValue(value = new IntWrapperValueSemanticsProvider(holder, mockServicesInjector));
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java
index 70b620a..5b0ab84 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java
@@ -25,10 +25,10 @@ import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.TimeZone;
 
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
@@ -45,12 +45,8 @@ public class JavaSqlDateValueSemanticsProviderTest extends ValueSemanticsProvide
 
     @Before
     public void setUpObjects() throws Exception {
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.date");
-                will(returnValue(null));
-            }
-        });
+        
+        _Config.put("isis.value.format.date", null);
 
         TestClock.initialize();
         date = new Date(0);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlTimeValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlTimeValueSemanticsProviderTest.java
index 93d18ce..efc91cd 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlTimeValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaSqlTimeValueSemanticsProviderTest.java
@@ -23,11 +23,11 @@ import java.sql.Time;
 import java.util.Calendar;
 import java.util.TimeZone;
 
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.value.timesql.JavaSqlTimeValueSemanticsProvider;
@@ -42,12 +42,8 @@ public class JavaSqlTimeValueSemanticsProviderTest extends ValueSemanticsProvide
 
     @Before
     public void setUpObjects() throws Exception {
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.time");
-                will(returnValue(null));
-            }
-        });
+        
+        _Config.put("isis.value.format.time", null);
 
         final Calendar c = Calendar.getInstance();
         c.setTimeZone(TimeZone.getTimeZone("GMT"));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java
index 02ad91b..f2a69ba 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/JavaUtilDateValueSemanticsProviderTest.java
@@ -24,10 +24,10 @@ import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.TimeZone;
 
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
@@ -43,12 +43,8 @@ public class JavaUtilDateValueSemanticsProviderTest extends ValueSemanticsProvid
 
     @Before
     public void setUpObjects() throws Exception {
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.datetime");
-                will(returnValue(null));
-            }
-        });
+        
+        _Config.put("isis.value.format.datetime", null);
 
         TestClock.initialize();
         date = new java.util.Date(0);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java
index b397fa3..0f9d368 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/LongValueSemanticsProviderTest.java
@@ -19,19 +19,19 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
 import org.apache.isis.core.metamodel.facets.value.longs.LongValueSemanticsProviderAbstract;
 import org.apache.isis.core.metamodel.facets.value.longs.LongWrapperValueSemanticsProvider;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 public class LongValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
 
     private LongValueSemanticsProviderAbstract value;
@@ -45,12 +45,7 @@ public class LongValueSemanticsProviderTest extends ValueSemanticsProviderAbstra
         allowMockAdapterToReturn(longObj);
         holder = new FacetHolderImpl();
 
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.long");
-                will(returnValue(null));
-            }
-        });
+        _Config.put("isis.value.format.long", null);
 
         setValue(value = new LongWrapperValueSemanticsProvider(holder, mockServicesInjector));
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/PercentageValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/PercentageValueSemanticsProviderTest.java
index 6461fde..e1a4cd5 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/PercentageValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/PercentageValueSemanticsProviderTest.java
@@ -19,17 +19,17 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.junit.Assert.assertEquals;
-
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.isis.applib.value.Percentage;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.value.percentage.PercentageValueSemanticsProvider;
 
+import static org.junit.Assert.assertEquals;
+
 public class PercentageValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
     private PercentageValueSemanticsProvider adapter;
     private Percentage percentage;
@@ -37,12 +37,8 @@ public class PercentageValueSemanticsProviderTest extends ValueSemanticsProvider
 
     @Before
     public void setUpObjects() throws Exception {
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.percentage");
-                will(returnValue(null));
-            }
-        });
+        
+        _Config.put("isis.value.format.percentage", null);
 
         percentage = new Percentage(0.105f);
         allowMockAdapterToReturn(percentage);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java
index d4f30bf..c755569 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ShortValueSemanticsProviderTest.java
@@ -19,19 +19,19 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import org.jmock.Expectations;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
 import org.apache.isis.core.metamodel.facets.object.parseable.TextEntryParseException;
 import org.apache.isis.core.metamodel.facets.value.shortint.ShortValueSemanticsProviderAbstract;
 import org.apache.isis.core.metamodel.facets.value.shortint.ShortWrapperValueSemanticsProvider;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
 public class ShortValueSemanticsProviderTest extends ValueSemanticsProviderAbstractTestCase {
 
     private ShortValueSemanticsProviderAbstract value;
@@ -40,13 +40,9 @@ public class ShortValueSemanticsProviderTest extends ValueSemanticsProviderAbstr
 
     @Before
     public void setUpObjects() throws Exception {
-        context.checking(new Expectations() {
-            {
-                allowing(mockConfiguration).getString("isis.value.format.short");
-                will(returnValue(null));
-            }
-        });
 
+        _Config.put("isis.value.format.short", null);
+        
         short1 = Short.valueOf((short) 32);
         allowMockAdapterToReturn(short1);
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
index c2f682b..c498ba0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
@@ -19,14 +19,6 @@
 
 package org.apache.isis.core.metamodel.facets.value;
 
-import static org.apache.isis.core.unittestsupport.jmocking.JMockActions.returnArgument;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.CoreMatchers.not;
-import static org.hamcrest.CoreMatchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.fail;
-
 import java.util.Locale;
 
 import org.jmock.Expectations;
@@ -37,6 +29,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -46,12 +39,18 @@ import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.core.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
 import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
 public abstract class ValueSemanticsProviderAbstractTestCase {
 
     @Rule
@@ -64,8 +63,6 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
     @Mock
     protected FacetHolder mockFacetHolder;
     @Mock
-    protected ConfigurationServiceInternal mockConfiguration;
-    @Mock
     protected ServicesInjector mockServicesInjector;
     @Mock
     protected PersistenceSessionServiceInternal mockSessionServiceInternal;
@@ -75,24 +72,15 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
     protected AuthenticationSessionProvider mockAuthenticationSessionProvider;
     @Mock
     protected ObjectAdapter mockAdapter;
-
+    
     @Before
     public void setUp() throws Exception {
+        
+        _Config.clear();
         Locale.setDefault(Locale.UK);
-
+        
         context.checking(new Expectations() {
             {
-                allowing(mockConfiguration).getString(with(any(String.class)), with(any(String.class)));
-                will(returnArgument(1));
-
-                allowing(mockConfiguration).getBoolean(with(any(String.class)), with(any(Boolean.class)));
-                will(returnArgument(1));
-
-                allowing(mockConfiguration).getString("isis.locale");
-                will(returnValue(null));
-
-                allowing(mockServicesInjector).getConfigurationServiceInternal();
-                will(returnValue(mockConfiguration));
 
                 allowing(mockServicesInjector).getAuthenticationSessionProvider();
                 will(returnValue(mockAuthenticationSessionProvider));
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java
index 5086210..d294bae 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProviderTest.java
@@ -18,14 +18,13 @@
  */
 package org.apache.isis.core.metamodel.facets.value.datetimejodalocal;
 
-import org.jmock.Expectations;
 import org.jmock.auto.Mock;
 import org.joda.time.LocalDateTime;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
@@ -45,24 +44,15 @@ public class JodaLocalDateTimeValueSemanticsProviderTest {
     @Mock
     ServicesInjector mockServicesInjector;
 
-    @Mock
-    IsisConfigurationDefault mockConfiguration;
-
     JodaLocalDateTimeValueSemanticsProvider provider;
 
     @Before
     public void setUp() throws Exception {
-        context.checking(new Expectations() {{
-
-            ignoring(mockFacetHolder);
-
-            allowing(mockServicesInjector).getConfigurationServiceInternal();
-            will(returnValue(mockConfiguration));
-
-            allowing(mockConfiguration).getString("isis.value.format.datetime","medium");
-            will(returnValue("iso_encoding"));
-        }});
-
+        _Config.clear();
+        _Config.acceptBuilder(config->{
+            config.put("isis.value.format.datetime", "iso_encoding");
+        });
+        
         provider = new JodaLocalDateTimeValueSemanticsProvider(mockFacetHolder, mockServicesInjector);
 
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
index 24c1060..62208f5 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.core.metamodel.services;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -32,8 +31,7 @@ import org.junit.Rule;
 import org.junit.Test;
 
 import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
-import org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
+import org.apache.isis.config.builder.IsisConfigurationBuilder;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 
@@ -50,6 +48,8 @@ public class ServicesInjectorDefaultTest {
     private Service2 mockService2;
     @Mock
     private SomeDomainObject mockDomainObject;
+    
+    protected IsisConfigurationBuilder configurationBuilderForTesting;
 
     private ServicesInjector injector;
 
@@ -74,11 +74,12 @@ public class ServicesInjectorDefaultTest {
 
     @Before
     public void setUp() throws Exception {
-        final Object[] services = { mockRepository, mockService1, mockService2 };
 
-        IsisConfigurationDefault stubConfiguration = new IsisConfigurationDefault();
-        injector = ServicesInjector.forTesting(
-        		Arrays.asList(services), stubConfiguration, new InjectorMethodEvaluatorDefault());
+        injector = ServicesInjector.builderForTesting()
+                .addService(mockRepository)
+                .addService(mockService1)
+                .addService(mockService2)
+        		.build();
     }
 
     @After
@@ -103,7 +104,7 @@ public class ServicesInjectorDefaultTest {
     @Test
     public void shouldStreamRegisteredServices() {
         List<Class<?>> registeredServices = injector.streamServiceTypes().collect(Collectors.toList());
-        Assert.assertEquals(3, registeredServices.size());
+        Assert.assertTrue(registeredServices.size()>=3);
     }
 
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java
index 073ce1b..942a6ac 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_usingFields.java
@@ -19,19 +19,19 @@
 
 package org.apache.isis.core.metamodel.services;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-
 import java.util.Arrays;
 
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
 import org.apache.isis.applib.services.repository.RepositoryService;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.services.repository.RepositoryServiceInternalDefault;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
 public class ServicesInjectorDefaultTest_usingFields {
 
@@ -82,8 +82,9 @@ public class ServicesInjectorDefaultTest_usingFields {
         service1 = new SomeDomainService1();
         service3 = new SomeDomainService3();
         service2 = new SomeDomainService2();
-        final IsisConfigurationDefault stubConfiguration = new IsisConfigurationDefault();
-        injector = new ServicesInjector(Arrays.asList(container, service1, service3, service2), stubConfiguration);
+        injector = ServicesInjector.builderForTesting()
+                .addServices(Arrays.asList(container, service1, service3, service2))
+                .build();
     }
 
     @Test
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_validateServices.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_validateServices.java
index f8b4f69..0a4c13e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_validateServices.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/ServicesInjectorDefaultTest_validateServices.java
@@ -21,12 +21,10 @@ package org.apache.isis.core.metamodel.services;
 
 import java.util.List;
 
-import org.apache.isis.commons.internal.collections._Lists;
-
 import org.junit.Before;
 import org.junit.Test;
 
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
+import org.apache.isis.commons.internal.collections._Lists;
 
 public class ServicesInjectorDefaultTest_validateServices {
 
@@ -47,12 +45,10 @@ public class ServicesInjectorDefaultTest_validateServices {
     public static class ValidateServicesTestValidateServices extends ServicesInjectorDefaultTest_validateServices {
 
         List<Object> serviceList;
-        IsisConfigurationDefault stubConfiguration;
 
         @Before
         public void setUp() throws Exception {
             serviceList = _Lists.newArrayList();
-            stubConfiguration = new IsisConfigurationDefault();
         }
 
         @Test(expected=IllegalStateException.class)
@@ -62,7 +58,9 @@ public class ServicesInjectorDefaultTest_validateServices {
             serviceList.add(new DomainServiceWithSomeId());
             serviceList.add(new DomainServiceWithDuplicateId());
 
-            servicesInjector = ServicesInjector.forTesting(serviceList, stubConfiguration, null);
+            servicesInjector = ServicesInjector.builderForTesting()
+                    .addServices(serviceList)
+                    .build();
 
             // when
             servicesInjector.validateServices();
@@ -74,7 +72,9 @@ public class ServicesInjectorDefaultTest_validateServices {
             serviceList.add(new DomainServiceWithSomeId());
             serviceList.add(new DomainServiceWithDifferentId());
 
-            servicesInjector = ServicesInjector.forTesting(serviceList, stubConfiguration, null);
+            servicesInjector = ServicesInjector.builderForTesting()
+                    .addServices(serviceList)
+                    .build();
 
             // when
             servicesInjector.validateServices();
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
index 9333ea2..1864463 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/BS3GridTest.java
@@ -140,7 +140,7 @@ public class BS3GridTest {
         final String schemaLocations = gridServiceDefault.tnsAndSchemaLocation(bs3Grid);
         String xml = jaxbService.toXml(bs3Grid,
                 _Maps.unmodifiable(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations));
-        System.out.println(xml);
+        println(xml);
 
         BS3Grid bs3Pageroundtripped = jaxbService.fromXml(BS3Grid.class, xml);
         String xmlRoundtripped = jaxbService.toXml(bs3Pageroundtripped,
@@ -148,7 +148,7 @@ public class BS3GridTest {
         assertThat(xml, is(equalTo(xmlRoundtripped)));
 
 
-        System.out.println("==========");
+        println("==========");
 
         dumpXsd(bs3Grid);
     }
@@ -156,8 +156,13 @@ public class BS3GridTest {
     protected void dumpXsd(final BS3Grid bs3Page) {
         Map<String, String> schemas = jaxbService.toXsd(bs3Page, JaxbService.IsisSchemas.INCLUDE);
         for (Map.Entry<String, String> entry : schemas.entrySet()) {
-            System.out.println(entry.getKey() + ":");
-            System.out.println(entry.getValue());
+            println(entry.getKey() + ":");
+            println(entry.getValue());
         }
     }
+    
+    private void println(String string) {
+        //for test debugging only
+    }
+    
 }
\ No newline at end of file
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/menubars/BS3MenuBarsTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/menubars/BS3MenuBarsTest.java
index 0d0a508..a196127 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/menubars/BS3MenuBarsTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/menubars/BS3MenuBarsTest.java
@@ -50,9 +50,13 @@ public class BS3MenuBarsTest {
 
         Map<String, String> schemas = jaxbService.toXsd(menuBars, JaxbService.IsisSchemas.INCLUDE);
         for (Map.Entry<String, String> entry : schemas.entrySet()) {
-            System.out.println(entry.getKey() + ":");
-            System.out.println(entry.getValue());
+            println(entry.getKey() + ":");
+            println(entry.getValue());
         }
     }
+    
+    private void println(String string) {
+        //for test debugging only
+    }
 
 }
\ No newline at end of file
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java
index a54abe1..2d8e80f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefaultTest.java
@@ -43,7 +43,6 @@ import org.apache.isis.applib.services.metamodel.DomainMember;
 import org.apache.isis.applib.services.metamodel.DomainModel;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.FacetedMethod;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
@@ -58,7 +57,6 @@ import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 
 class MetaModelServiceDefaultTest {
 
-    IsisConfigurationDefault stubConfiguration;
     ServicesInjector stubServicesInjector;
     MetaModelServiceDefault mockMetaModelService;
     SpecificationLoader specificationLoader;
@@ -73,15 +71,15 @@ class MetaModelServiceDefaultTest {
         
         JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
         
-        stubConfiguration = new IsisConfigurationDefault();
-
         stubServicesInjector =
-                new ServicesInjector(_Lists.of(context.mock(
+                ServicesInjector.builderForTesting()
+                .addServices(_Lists.of(context.mock(
                         PersistenceSessionServiceInternal.class
-                        )), stubConfiguration);
+                        )))
+                .build();
         
         specificationLoader = 
-                new SpecificationLoader(stubConfiguration, null, null, stubServicesInjector);
+                new SpecificationLoader(null, null, stubServicesInjector);
         
         stubServicesInjector.addFallbackIfRequired(SpecificationLoader.class, specificationLoader);
         
@@ -150,7 +148,7 @@ class MetaModelServiceDefaultTest {
         Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
         jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
         
-        jaxbMarshaller.marshal(domainMembers, System.out);
+        jaxbMarshaller.marshal(domainMembers, noopOutput());
     }
     
     
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceDefaultTest_allMatches.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceDefaultTest_allMatches.java
index 863c23e..ce42ab3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceDefaultTest_allMatches.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/repository/RepositoryServiceDefaultTest_allMatches.java
@@ -19,9 +19,7 @@
 
 package org.apache.isis.core.metamodel.services.repository;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.jmock.Expectations;
 import org.jmock.auto.Mock;
@@ -31,6 +29,7 @@ import org.junit.Test;
 
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.xactn.TransactionService;
+import org.apache.isis.config.internal._Config;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 
@@ -46,6 +45,7 @@ public class RepositoryServiceDefaultTest_allMatches {
 
     @Before
     public void setUp() throws Exception {
+        _Config.clear();
         repositoryService = new RepositoryServiceInternalDefault() {
             @Override <T> List<T> submitQuery(final Query<T> query) {
                 return null;
@@ -57,8 +57,7 @@ public class RepositoryServiceDefaultTest_allMatches {
     @Test
     public void whenAutoflush() throws Exception {
         // given
-        Map map = new HashMap();
-        repositoryService.init(map);
+        repositoryService.init();
         // expect
         context.checking(new Expectations() {{
             oneOf(mockTransactionService).flushTransaction();
@@ -70,10 +69,8 @@ public class RepositoryServiceDefaultTest_allMatches {
     @Test
     public void whenDisableAutoflush() throws Exception {
         // given
-        Map map = new HashMap() {{
-            put("isis.services.container.disableAutoFlush", "true");
-        }};
-        repositoryService.init(map);
+        _Config.put("isis.services.container.disableAutoFlush", true);
+        repositoryService.init();
         // expect
         context.checking(new Expectations() {{
             never(mockTransactionService).flushTransaction();
@@ -85,10 +82,8 @@ public class RepositoryServiceDefaultTest_allMatches {
     @Test
     public void whenDisableAutoflushSetToFalse() throws Exception {
         // given
-        Map map = new HashMap() {{
-            put("isis.services.container.disableAutoFlush", "false");
-        }};
-        repositoryService.init(map);
+        _Config.put("isis.services.container.disableAutoFlush", false);
+        repositoryService.init();
         // expect
         context.checking(new Expectations() {{
             oneOf(mockTransactionService).flushTransaction();
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ServiceInitializerTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ServiceInitializerTest.java
index 91c88a3..712a3a9 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ServiceInitializerTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/ServiceInitializerTest.java
@@ -31,6 +31,7 @@ import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.config.IsisConfiguration;
 
 import org.jmock.Expectations;
 import org.jmock.auto.Mock;
@@ -40,7 +41,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
-import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
index 2f7aafc..9ccd327 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTestAbstract.java
@@ -31,10 +31,8 @@ import org.junit.rules.ExpectedException;
 import org.apache.isis.applib.AppManifest;
 import org.apache.isis.applib.services.grid.GridService;
 import org.apache.isis.applib.services.message.MessageService;
-import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.commons.config.IsisConfigurationDefault;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
@@ -42,6 +40,7 @@ import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.facets.object.plural.PluralFacet;
 import org.apache.isis.core.metamodel.metamodelvalidator.dflt.MetaModelValidatorDefault;
+import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract.DeprecatedPolicy;
 import org.apache.isis.core.metamodel.services.ServicesInjector;
 import org.apache.isis.core.metamodel.services.persistsession.PersistenceSessionServiceInternal;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -67,7 +66,6 @@ public abstract class SpecificationLoaderTestAbstract {
     private MessageService mockMessageService;
     
     ServicesInjector stubServicesInjector;
-    IsisConfigurationDefault stubConfiguration;
 
     // is loaded by subclasses
     protected ObjectSpecification specification;
@@ -89,20 +87,15 @@ public abstract class SpecificationLoaderTestAbstract {
 
         }});
 
-        stubConfiguration = new IsisConfigurationDefault(null);
-
-        stubServicesInjector =
-                new ServicesInjector(
-                    _Lists.of(
-                        mockAuthenticationSessionProvider,
-                        stubConfiguration,
-                        mockPersistenceSessionServiceInternal,
-                            mockMessageService,
-                        mockGridService),
-                    stubConfiguration);
+        stubServicesInjector = ServicesInjector.builderForTesting()
+                    .addService(mockAuthenticationSessionProvider)
+                    .addService(mockPersistenceSessionServiceInternal)
+                    .addService(mockMessageService)
+                    .addService(mockGridService)
+                    .build();
 
         specificationLoader = new SpecificationLoader(
-                stubConfiguration, new ProgrammingModelFacetsJava5(stubConfiguration),
+                new ProgrammingModelFacetsJava5(DeprecatedPolicy.HONOUR),
                 new MetaModelValidatorDefault(), stubServicesInjector);
 
         stubServicesInjector.addFallbackIfRequired(SpecificationLoader.class, specificationLoader);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index 0000da4..01331b9 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -26,7 +26,6 @@ import java.util.stream.Stream;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.commons.internal.collections._Lists;
... 6810 lines suppressed ...