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 2019/08/02 12:53:15 UTC

[isis] branch v2 updated: batch update source format:

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 fb7c44c  batch update source format:
fb7c44c is described below

commit fb7c44c7f4b7466fc4067c685c53aa9678a6c224
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Aug 2 14:53:00 2019 +0200

    batch update source format:
    
    - Add missing '@Override' annotations
    - Correct indentation
    - Add file header (JAutodoc)
---
 .../org/apache/isis/applib/IsisApplibModule.java   |    2 +-
 .../org/apache/isis/applib/PropertyResource.java   |    4 +-
 .../org/apache/isis/applib/adapters/Parser.java    |    2 +-
 .../isis/applib/annotation/DomainService.java      |   50 +-
 .../applib/annotation/DomainServiceLayout.java     |   48 +-
 .../isis/applib/annotation/NatureOfService.java    |   64 +-
 .../apache/isis/applib/annotation/Property.java    |   10 +-
 .../apache/isis/applib/annotation/Redirect.java    |    2 +-
 .../apache/isis/applib/annotation/SemanticsOf.java |   12 +-
 .../applib/client/ActionParameterListBuilder.java  |   30 +-
 .../apache/isis/applib/client/ResponseDigest.java  |   58 +-
 .../apache/isis/applib/client/RestfulClient.java   |   58 +-
 .../isis/applib/client/auth/BasicAuthFilter.java   |   10 +-
 .../applib/client/log/RestfulLoggingFilter.java    |   72 +-
 .../events/ActionArgumentUsabilityEvent.java       |    4 +-
 .../events/ActionArgumentVisibilityEvent.java      |    4 +-
 .../applib/events/domain/ActionDomainEvent.java    |   42 +-
 .../apache/isis/applib/events/sse/EventStream.java |   10 +-
 .../isis/applib/events/sse/EventStreamService.java |    2 +-
 .../isis/applib/events/sse/EventStreamSource.java  |   14 +-
 .../isis/applib/layout/menubars/MenuBars.java      |    4 +-
 .../applib/layout/menubars/MenuBarsAbstract.java   |   14 +-
 .../layout/menubars/bootstrap3/BS3MenuBars.java    |   28 +-
 .../apache/isis/applib/mixins/MixinConstants.java  |   10 +-
 .../isis/applib/mixins/dto/Dto_downloadXml.java    |   12 +-
 .../isis/applib/mixins/dto/Dto_downloadXsd.java    |   28 +-
 .../mixins/layout/Object_downloadLayoutXml.java    |   20 +-
 .../applib/mixins/layout/Object_openRestApi.java   |   10 +-
 .../metamodel/Object_downloadMetaModelXml.java     |   42 +-
 .../mixins/metamodel/Object_objectIdentifier.java  |    6 +-
 .../applib/mixins/metamodel/Object_objectType.java |    6 +-
 .../background/BackgroundCommandService.java       |    5 +-
 .../services/background/BackgroundService.java     |    2 +-
 .../isis/applib/services/command/Command.java      |   28 +-
 .../applib/services/command/CommandDefault.java    |    6 +-
 .../exceprecog/ExceptionRecognizerAbstract.java    |    8 +-
 .../exceprecog/ExceptionRecognizerComposite.java   |    2 +-
 .../applib/services/factory/FactoryService.java    |    8 +-
 .../applib/services/grid/GridLoaderService.java    |    2 +-
 .../isis/applib/services/grid/GridService.java     |    2 +-
 .../isis/applib/services/iactn/Interaction.java    |    2 +-
 .../applib/services/inject/ServiceInjector.java    |   16 +-
 .../isis/applib/services/layout/LayoutService.java |    2 +-
 .../isis/applib/services/menu/MenuBarsService.java |    6 +-
 .../applib/services/message/MessageService.java    |    6 +-
 .../applib/services/metamodel/DomainModel.java     |    4 +-
 .../services/metamodel/MetaModelServicesMenu.java  |   18 +-
 .../QueryResultsCacheInternal.java                 |    8 +-
 .../applib/services/registry/ServiceRegistry.java  |   10 +-
 .../applib/services/wrapper/WrapperFactory.java    |    4 +-
 .../isis/applib/services/xactn/Transaction.java    |    6 +-
 .../isis/applib/services/xactn/TransactionId.java  |   18 +-
 .../applib/services/xactn/TransactionService.java  |    8 +-
 .../org/apache/isis/applib/tree/LazyTreeNode.java  |    2 +-
 .../org/apache/isis/applib/util/JaxbAdapters.java  |   66 +-
 .../java/org/apache/isis/applib/util/JaxbUtil.java |    4 +-
 .../org/apache/isis/applib/util/ReasonBuffer2.java |    3 +-
 .../java/org/apache/isis/applib/util/ToString.java |    8 +-
 .../java/org/apache/isis/applib/value/Blob.java    |    2 +-
 .../apache/isis/applib/value/BlobClobFactory.java  |  232 +--
 .../QueryDefaultTest_withStart_or_withCount.java   |   14 +-
 .../ExceptionRecognizerCompositeTest.java          |    2 +-
 .../exceprecog/ExceptionRecognizerForTypeTest.java |    8 +-
 .../exceprecog/ExceptionRecognizerGeneralTest.java |    4 +-
 .../interaction/InteractionDefaultTest_next.java   |    2 +-
 .../urlencoding/UrlEncodingServiceTest.java        |   16 +-
 .../XmlSnapshotServiceAbstractTest.java            |   18 +-
 .../org/apache/isis/applib/tree/TreePathTest.java  |   36 +-
 .../java/org/apache/isis/applib/util/Invoice.java  |    4 +-
 .../org/apache/isis/applib/util/InvoiceItem.java   |    8 +-
 .../apache/isis/applib/util/NumberedEvaluator.java |    1 +
 .../applib/util/ObjectContractsTest_compareTo.java |   56 +-
 .../ObjectContractsTest_equals_and_hashCode.java   |   27 +-
 .../applib/util/ObjectContractsTest_toString.java  |   23 +-
 .../isis/applib/value/BlobTest_constructor.java    |    2 +-
 .../isis/applib/value/ClobTest_constructor.java    |    2 +-
 .../commons/internal/memento/MementosTest.java     |  162 +-
 .../org/apache/isis/schema/utils/Roundtrip.java    |   24 +-
 .../java/org/apache/isis/commons/ZipWriter.java    |  108 +-
 .../org/apache/isis/commons/collections/Bin.java   |  309 ++--
 .../apache/isis/commons/collections/Bin_Empty.java |   64 +-
 .../isis/commons/collections/Bin_Multiple.java     |   66 +-
 .../isis/commons/collections/Bin_Singleton.java    |   60 +-
 .../isis/commons/collections/Cardinality.java      |   36 +-
 .../isis/commons/internal/assertions/_Assert.java  |    4 +-
 .../isis/commons/internal/base/_Blackhole.java     |   14 +-
 .../apache/isis/commons/internal/base/_Casts.java  |   90 +-
 .../apache/isis/commons/internal/base/_Either.java |  102 +-
 .../apache/isis/commons/internal/base/_Lazy.java   |    8 +-
 .../isis/commons/internal/base/_NullSafe.java      |   10 +-
 .../isis/commons/internal/base/_Strings.java       |   76 +-
 .../commons/internal/base/_Strings_FastSplit.java  |   60 +-
 .../internal/base/_Strings_HtmlEscaper.java        |   10 +-
 .../internal/base/_Strings_KeyValuePair.java       |    8 +-
 .../internal/base/_Strings_SplitIterator.java      |    2 +-
 .../apache/isis/commons/internal/base/_Timing.java |   30 +-
 .../apache/isis/commons/internal/base/_Tuples.java |    8 +-
 .../apache/isis/commons/internal/base/_With.java   |    4 +-
 .../isis/commons/internal/collections/_Arrays.java |   10 +-
 .../commons/internal/collections/_Collections.java |    4 +-
 .../isis/commons/internal/collections/_Inbox.java  |  100 +-
 .../isis/commons/internal/collections/_Lists.java  |    4 +-
 .../isis/commons/internal/collections/_Maps.java   |   16 +-
 .../commons/internal/collections/_Multimaps.java   |   14 +-
 .../isis/commons/internal/collections/_Sets.java   |    4 +-
 .../isis/commons/internal/concurrent/_Tasks.java   |  188 +--
 .../isis/commons/internal/context/_Context.java    |  104 +-
 .../internal/context/_Context_ThreadLocal.java     |  162 +-
 .../context/_Context_ThreadLocal_Singleton.java    |   70 +-
 .../apache/isis/commons/internal/debug/_Probe.java |   78 +-
 .../commons/internal/exceptions/_Exceptions.java   |   52 +-
 .../commons/internal/functions/_Functions.java     |    6 +-
 .../commons/internal/functions/_Predicates.java    |    4 +-
 .../isis/commons/internal/ioc/BeanAdapter.java     |    2 +-
 .../apache/isis/commons/internal/ioc/BeanSort.java |   14 +-
 .../commons/internal/ioc/BeanSortClassifier.java   |    2 +-
 .../commons/internal/ioc/LifecycleContext.java     |   10 +-
 .../commons/internal/ioc/PriorityConstants.java    |    8 +-
 .../commons/internal/ioc/cdi/BeanAdapterCDI.java   |   14 +-
 .../isis/commons/internal/ioc/cdi/CdiPlugin.java   |    4 +-
 .../apache/isis/commons/internal/ioc/cdi/_CDI.java |  158 +-
 .../commons/internal/ioc/cdi/_CDI_Lifecycle.java   |    6 +-
 .../internal/ioc/spring/BeanAdapterSpring.java     |   14 +-
 .../commons/internal/ioc/spring/EventSpring.java   |   14 +-
 .../isis/commons/internal/ioc/spring/_Spring.java  |  108 +-
 .../isis/commons/internal/memento/_Mementos.java   |   58 +-
 .../beantyperegistry/BeanTypeRegistryPlugin.java   |    6 +-
 .../plugins/environment/DeploymentType.java        |    4 +-
 .../plugins/environment/IsisSystemEnvironment.java |   54 +-
 .../environment/IsisSystemEnvironmentPlugin.java   |    8 +-
 .../plugins/ioc/ConversationContextHandle.java     |   14 +-
 .../plugins/ioc/ConversationContextService.java    |    6 +-
 .../ioc/ConversationContextServiceDefault.java     |    8 +-
 .../isis/commons/internal/reflection/_Reflect.java |   46 +-
 .../isis/commons/internal/resources/_Json.java     |   60 +-
 .../commons/internal/resources/_Resources.java     |    6 +-
 .../FutureWithIndexIntoFutureOfList.java           |    2 +-
 .../threadpool/ThreadPoolExecutionMode.java        |   12 +-
 .../internal/threadpool/ThreadPoolSizeAdvisor.java |   10 +-
 .../internal/threadpool/ThreadPoolSupport.java     |   46 +-
 .../isis/commons/internal/base/BytesTest.java      |  326 ++--
 .../isis/commons/internal/base/NullSafeTest.java   |  160 +-
 .../isis/commons/internal/base/ReductionTest.java  |   82 +-
 .../isis/commons/internal/base/StringsTest.java    |  544 +++----
 .../apache/isis/commons/internal/cdi/CDITest.java  |   38 +-
 .../internal/cdi/ValidQualifierForTesting.java     |    2 +-
 .../commons/internal/compare/ComparatorsTest.java  |  238 +--
 .../isis/commons/internal/context/ContextTest.java |   88 +-
 .../commons/internal/resources/ResourcesTest.java  |   14 +-
 .../internal/threadpool/ThreadPoolSupportTest.java |   52 +-
 .../apache/isis/config/ConfigurationConstants.java |   30 +-
 .../org/apache/isis/config/IsisConfiguration.java  |   60 +-
 .../main/java/org/apache/isis/config/Presets.java  |   36 +-
 .../beans/IsisBeanScanInterceptorForSpring.java    |   46 +-
 .../apache/isis/config/beans/WebAppConfigBean.java |   16 +-
 .../org/apache/isis/config/internal/_Config.java   |   40 +-
 .../isis/config/internal/_Config_Instance.java     |   26 +-
 .../config/internal/_Config_LifecycleResource.java |   32 +-
 .../isis/config/internal/_Config_Parsers.java      |   26 +-
 .../apache/isis/config/internal/_Config_trim.java  |    8 +-
 .../config/property/ConfigPropertyAbstract.java    |    1 +
 .../config/property/ConfigPropertyBoolean.java     |   13 +-
 .../isis/config/property/ConfigPropertyEnum.java   |    3 +-
 .../isis/config/property/ConfigPropertyString.java |    1 +
 .../isis/config/registry/IsisBeanTypeRegistry.java |   66 +-
 .../apache/isis/config/registry/TypeMetaData.java  |   92 +-
 .../config/IsisConfiguration_createSubsetTest.java |   36 +-
 .../isis/config/IsisConfiguration_primingTest.java |   20 +-
 .../config/IsisConfiguration_specialCharTest.java  |    6 +-
 .../config/IsisConfiguration_whitespaceTest.java   |    4 +-
 .../commons/internal/reflection/ReflectTest.java   |   92 +-
 .../facets/param/name/ParameterNameFacetTest.java  |   65 +-
 .../ServiceInjectorTestUsingCodegenPlugin.java     |   44 +-
 .../files/FilesTest_deleteFiles.java               |    8 +-
 .../ImposteriserTestUsingCodegenPlugin.java        |   12 +-
 .../ExceptionRecognizerTranslate.java              |    2 +-
 .../IsisIntegrationTestAbstact.java                |    4 +-
 .../isis/integtestsupport/ThrowableMatchers.java   |    2 +-
 .../apache/isis/mavenplugin/IsisMojoAbstract.java  |  202 +--
 .../apache/isis/mavenplugin/IsisMojoSwagger.java   |  164 +-
 .../apache/isis/mavenplugin/IsisMojoValidate.java  |   68 +-
 .../org/apache/isis/mavenplugin/IsisMojoXsd.java   |  218 +--
 .../isis/mavenplugin/MetaModelProcessor.java       |   24 +-
 .../IsisMavenPlugin_SpringContextConfig.java       |    2 +-
 .../IsisMavenPlugin_SpringContextLauncher.java     |   86 +-
 .../org/apache/isis/mavenplugin/util/Log4j.java    |   28 +-
 .../apache/isis/metamodel/MetaModelContext.java    |   56 +-
 .../metamodel/MetaModelContext_forTesting.java     |  106 +-
 .../isis/metamodel/MetaModelContext_usingCDI.java  |  228 +--
 .../metamodel/MetaModelContext_usingSpring.java    |  230 +--
 .../apache/isis/metamodel/MetaModelContexts.java   |    4 +-
 .../isis/metamodel/ServiceInjector_forTesting.java |   18 +-
 .../isis/metamodel/ServiceRegistry_forTesting.java |   48 +-
 .../isis/metamodel/adapter/ObjectAdapter.java      |   16 +-
 .../adapter/ObjectAdapterByIdProvider.java         |   24 +-
 .../metamodel/adapter/ObjectAdapterProvider.java   |   75 +-
 .../adapter/concurrency/ConcurrencyChecking.java   |    4 +-
 .../org/apache/isis/metamodel/adapter/oid/Oid.java |   34 +-
 .../isis/metamodel/adapter/oid/Oid_Marshaller.java |   14 +-
 .../isis/metamodel/adapter/oid/Oid_Parented.java   |    2 +-
 .../isis/metamodel/adapter/oid/Oid_Root.java       |   22 +-
 .../isis/metamodel/adapter/oid/Oid_State.java      |    4 +-
 .../isis/metamodel/adapter/oid/Oid_Value.java      |   10 +-
 .../isis/metamodel/adapter/oid/ParentedOid.java    |    4 +-
 .../apache/isis/metamodel/adapter/oid/RootOid.java |    6 +-
 .../isis/metamodel/adapter/version/Version.java    |   40 +-
 .../standard/AuthorizationFacetAbstract.java       |    2 +-
 .../isis/metamodel/commons/ClassExtensions.java    |    2 +-
 .../apache/isis/metamodel/commons/ClassUtil.java   |   12 +-
 .../commons/MethodInvocationPreprocessor.java      |   10 +-
 .../isis/metamodel/commons/ResourceUtil.java       |    2 +-
 .../isis/metamodel/facetapi/FacetAbstract.java     |   10 +-
 .../isis/metamodel/facetapi/FacetHolder.java       |   14 +-
 .../isis/metamodel/facetapi/FacetHolderImpl.java   |   24 +-
 .../apache/isis/metamodel/facetapi/FacetUtil.java  |   16 +-
 .../isis/metamodel/facetapi/MetaModelRefiner.java  |    8 +-
 .../apache/isis/metamodel/facets/Annotations.java  |   42 +-
 .../isis/metamodel/facets/CollectionUtils.java     |    8 +-
 .../isis/metamodel/facets/DomainEventHelper.java   |   50 +-
 .../metamodel/facets/FacetFactoryAbstract.java     |    2 +-
 .../isis/metamodel/facets/FacetedMethod.java       |    2 +-
 .../isis/metamodel/facets/ImperativeFacet.java     |    4 +-
 .../MethodPrefixBasedFacetFactoryAbstract.java     |   16 +-
 .../facets/actcoll/typeof/TypeOfFacet.java         |    2 +-
 .../invocation/ActionDomainEventFacetAbstract.java |    4 +-
 ...ctionInvocationFacetForDomainEventAbstract.java |   24 +-
 ...ionFacetForDomainEventFromActionAnnotation.java |    2 +-
 .../PrototypeFacetForActionAnnotation.java         |    2 +-
 .../annotation/HomePageFacetAnnotationFactory.java |   14 +-
 .../actions/layout/ActionLayoutFacetFactory.java   |    2 +-
 ...uFacetDerivedFromDomainServiceFacetFactory.java |    2 +-
 .../facets/all/i18n/NamedFacetTranslated.java      |    4 +-
 .../collections/CollectionFacetAbstract.java       |    4 +-
 .../CollectionAccessorFacetViaAccessor.java        |    2 +-
 .../clear/CollectionClearFacetFactory.java         |    2 +-
 .../clear/CollectionClearFacetViaAccessor.java     |    2 +-
 ...ectionAddToFacetForDomainEventFromAbstract.java |    4 +-
 ...acetForDomainEventFromCollectionAnnotation.java |    2 +-
 .../modify/CollectionDomainEventFacetAbstract.java |    2 +-
 ...nRemoveFromFacetForDomainEventFromAbstract.java |    2 +-
 ...acetForDomainEventFromCollectionAnnotation.java |    4 +-
 .../javautilcollection/JavaArrayFacet.java         |   10 +-
 .../javautilcollection/JavaCollectionFacet.java    |   12 +-
 .../layout/SortedByFacetForCollectionXml.java      |    4 +-
 .../facets/collections/modify/CollectionFacet.java |    6 +-
 .../annotation/SortedByFacetAnnotationFactory.java |    4 +-
 .../facets/fallback/FallbackFacetFactory.java      |    2 +-
 .../metamodel/facets/jaxb/JaxbFacetFactory.java    |    4 +-
 .../disabled/DisabledFacetAbstractImpl.java        |    2 +-
 .../autocomplete/AutoCompleteFacetAbstract.java    |    2 +-
 .../BookmarkPolicyFacetFallbackFactory.java        |    4 +-
 .../object/callbacks/CallbackFacetAbstract.java    |    2 +-
 .../choices/ChoicesFacetFromBoundedAbstract.java   |   18 +-
 .../facets/object/choices/QueryFindAllChoices.java |   26 +-
 .../object/defaults/DefaultedFacetAbstract.java    |    2 +-
 .../object/defaults/DefaultsProviderUtil.java      |    4 +-
 .../annotcfg/DefaultedFacetAnnotation.java         |    2 +-
 .../DomainObjectAnnotationFacetFactory.java        |   20 +-
 ...EventDefaultFacetForDomainObjectAnnotation.java |    2 +-
 ...EventDefaultFacetForDomainObjectAnnotation.java |    2 +-
 ...EventDefaultFacetForDomainObjectAnnotation.java |    2 +-
 ...atableObjectFacetForDomainObjectAnnotation.java |    2 +-
 ...ObjectLayoutAnnotationUsingCssClassUiEvent.java |    8 +-
 ...wModelLayoutAnnotationUsingCssClassUiEvent.java |    6 +-
 .../DomainObjectLayoutFacetFactory.java            |    2 +-
 ...aViewModelLayoutAnnotationUsingIconUiEvent.java |    4 +-
 ...inObjectLayoutAnnotationUsingLayoutUiEvent.java |    4 +-
 ...iewModelLayoutAnnotationUsingLayoutUiEvent.java |    4 +-
 ...ainObjectLayoutAnnotationUsingTitleUiEvent.java |    2 +-
 ...ViewModelLayoutAnnotationUsingTitleUiEvent.java |    6 +-
 .../DomainServiceFacetAnnotationFactory.java       |   26 +-
 .../DomainServiceLayoutFacetAbstract.java          |    2 +-
 .../DomainServiceLayoutFacetFactory.java           |   10 +-
 .../object/encodeable/EncodableFacetAbstract.java  |    4 +-
 .../annotcfg/EncodableFacetFromConfiguration.java  |    2 +-
 .../facets/object/entity/EntityFacet.java          |    6 +-
 .../facets/object/entity/EntityFacetSimple.java    |    6 +-
 .../facets/object/grid/GridFacetDefault.java       |    9 +-
 .../RemoveAnnotatedMethodsFacetFactory.java        |   22 +-
 .../ignore/javalang/RemoveMethodsFacetFactory.java |   12 +-
 .../facets/object/mixin/MixinFacetAbstract.java    |    2 +-
 .../mixin/MixinFacetForDomainObjectAnnotation.java |    2 +-
 .../object/mixin/MixinFacetForMixinAnnotation.java |    2 +-
 .../NavigableParentAnnotationFacetFactory.java     |    2 +-
 .../ObjectSpecIdFacetDerivedFromClassName.java     |    2 +-
 ...jectSpecIdFacetDerivedFromClassNameFactory.java |   26 +-
 .../impl/ObjectValidPropertiesFacetImpl.java       |    2 +-
 .../object/parseable/ParseableFacetAbstract.java   |    2 +-
 .../facets/object/parseable/ParserUtil.java        |   12 +-
 .../annotcfg/ParseableFacetFromConfiguration.java  |    2 +-
 .../parser/ParseableFacetUsingParser.java          |    2 +-
 .../object/projection/ProjectionFacetAbstract.java |    4 +-
 .../ProjectionFacetFromProjectingProperty.java     |   10 +-
 .../RecreatableObjectFacetAbstract.java            |    2 +-
 ...ObjectFacetDeclarativeInitializingAbstract.java |  206 +--
 ...creatableObjectFacetForViewModelAnnotation.java |    2 +-
 ...ableObjectFacetForXmlRootElementAnnotation.java |    2 +-
 .../annotation/TitleFacetViaTitleAnnotation.java   |   90 +-
 .../facets/object/value/ValueFacetAbstract.java    |    6 +-
 .../value/annotcfg/ValueFacetAnnotation.java       |    4 +-
 .../annotcfg/ValueFacetFromConfiguration.java      |    2 +-
 .../vsp/ValueFacetUsingSemanticsProvider.java      |    2 +-
 .../ValueSemanticsProviderAndFacetAbstract.java    |    2 +-
 .../value/vsp/ValueSemanticsProviderUtil.java      |   16 +-
 .../facets/object/viewmodel/ViewModelFacet.java    |   32 +-
 .../objectvalue/observe/ObserveFacetAbstract.java  |    2 +-
 .../ActionParameterAutoCompleteFacetViaMethod.java |    2 +-
 .../method/ActionChoicesFacetViaMethod.java        |    2 +-
 .../ActionParameterDefaultsFacetViaMethod.java     |   18 +-
 .../ActionParameterDisabledFacetViaMethod.java     |    2 +-
 ...tionParameterDisabledFacetViaMethodFactory.java |    2 +-
 .../hide/ActionParameterHiddenFacetAbstract.java   |    2 +-
 .../ActionParameterHiddenFacetViaMethod.java       |    2 +-
 .../NamedFacetForParameterUsingReflection.java     |    8 +-
 .../ParameterNameFacetFactoryUsingReflection.java  |   10 +-
 .../PropertyOrCollectionAccessorFacetAbstract.java |    2 +-
 .../accessor/PropertyAccessorFacetViaAccessor.java |    2 +-
 .../method/PropertyChoicesFacetViaMethod.java      |    4 +-
 ...pertyDefaultFacetDerivedFromDefaultedFacet.java |    2 +-
 .../properties/projection/ProjectingFacet.java     |    1 +
 .../projection/ProjectingFacetAbstract.java        |    2 +-
 .../ProjectingFacetFromPropertyAnnotation.java     |   10 +-
 .../property/PropertyAnnotationFacetFactory.java   |    2 +-
 ...ropertyClearFacetForDomainEventFromDefault.java |    4 +-
 ...rFacetForDomainEventFromPropertyAnnotation.java |    4 +-
 .../modify/PropertyDomainEventFacetAbstract.java   |    6 +-
 .../modify/PropertyDomainEventFacetDefault.java    |    6 +-
 ...pertyDomainEventFacetForPropertyAnnotation.java |    4 +-
 ...opertySetterFacetForDomainEventFromDefault.java |    2 +-
 ...rFacetForDomainEventFromPropertyAnnotation.java |    2 +-
 ...tySetterOrClearFacetForDomainEventAbstract.java |    8 +-
 .../observe/ObserveFacetForPropertyAnnotation.java |    4 +-
 .../value/blobs/BlobValueSemanticsProvider.java    |    2 +-
 .../BooleanPrimitiveValueSemanticsProvider.java    |   32 +-
 .../facets/value/booleans/BooleanValueFacet.java   |   10 +-
 .../BooleanWrapperValueSemanticsProvider.java      |   42 +-
 .../datesql/JavaSqlDateValueSemanticsProvider.java |    2 +-
 .../metamodel/interactions/InteractionUtils.java   |    2 +-
 ...arameterChoicesFacetFromParentedCollection.java |    2 +-
 .../param/DeriveFacetsPostProcessor.java           |   22 +-
 .../isis/metamodel/progmodel/FacetFactorySet.java  |    2 +-
 .../progmodel/ProgrammingModelAbstract.java        |   12 +-
 .../progmodel/ProgrammingModelService.java         |    2 +-
 .../dflt/ProgrammingModelFacetsJava8.java          |    4 +-
 .../metamodel/services/ServiceInjectorDefault.java |   44 +-
 .../isis/metamodel/services/ServiceUtil.java       |  128 +-
 .../services/appfeat/ApplicationFeature.java       |    6 +-
 .../services/appfeat/ApplicationFeatureId.java     |   16 +-
 .../ApplicationFeatureRepositoryDefault.java       |   34 +-
 .../services/events/MetamodelEventService.java     |   78 +-
 .../events/MetamodelEventSupport_Spring.java       |   18 +-
 .../services/grid/GridLoaderServiceDefault.java    |    2 +-
 .../services/grid/GridReaderUsingJaxb.java         |    8 +-
 .../services/grid/GridServiceDefault.java          |   10 +-
 .../services/grid/GridSystemServiceAbstract.java   |    8 +-
 .../grid/bootstrap3/GridSystemServiceBS3.java      |   46 +-
 .../services/homepage/HomePageAction.java          |   10 +-
 .../services/layout/LayoutServiceDefault.java      |   30 +-
 .../services/message/MessageServiceNoop.java       |   12 +-
 .../services/metamodel/DomainMemberDefault.java    |   38 +-
 .../services/metamodel/DomainModelDefault.java     |   10 +-
 .../services/metamodel/MetaModelExportSupport.java |    4 +-
 .../services/metamodel/MetaModelExporter.java      |   44 +-
 .../metamodel/MetaModelServiceDefault.java         |   34 +-
 .../persistsession/ObjectAdapterService.java       |    2 +-
 .../PersistenceSessionServiceInternal.java         |    2 +-
 .../services/registry/ServiceRegistryDefault.java  |   40 +-
 .../services/swagger/SwaggerServiceDefault.java    |    6 +-
 .../services/swagger/internal/Generation.java      |   24 +-
 .../metamodel/services/swagger/internal/Util.java  |    8 +-
 .../services/title/TitleServiceDefault.java        |    2 +-
 .../spec/ElementSpecificationProvider.java         |    2 +-
 .../isis/metamodel/spec/FreeStandingList.java      |    8 +-
 .../apache/isis/metamodel/spec/ManagedObject.java  |   38 +-
 .../isis/metamodel/spec/ManagedObjectState.java    |   46 +-
 .../apache/isis/metamodel/spec/ObjectSpecId.java   |   40 +-
 .../isis/metamodel/spec/ObjectSpecification.java   |   34 +-
 .../isis/metamodel/spec/feature/ObjectAction.java  |  114 +-
 .../spec/feature/ObjectActionContainer.java        |    4 +-
 .../spec/feature/ObjectActionParameter.java        |    4 +-
 .../metamodel/spec/feature/ObjectAssociation.java  |   12 +-
 .../spec/feature/ObjectAssociationContainer.java   |    2 +-
 .../specloader/InjectorMethodEvaluatorDefault.java |   72 +-
 .../metamodel/specloader/IntrospectionMode.java    |   14 +-
 .../MetaModelValidatorServiceDefault.java          |   20 +-
 .../specloader/ProgrammingModelServiceDefault.java |   10 +-
 .../metamodel/specloader/SpecificationLoader.java  |  150 +-
 .../specloader/SpecificationLoaderDefault.java     |  888 +++++------
 .../specloader/postprocessor/PostProcessor.java    |   12 +-
 .../specloader/specimpl/ContributeeMember.java     |    8 +-
 .../specloader/specimpl/FacetedMethodsBuilder.java |   12 +-
 .../specloader/specimpl/IntrospectionState.java    |    4 +-
 .../specloader/specimpl/MixedInMember.java         |    2 +-
 .../specimpl/ObjectActionContributee.java          |    6 +-
 .../specloader/specimpl/ObjectActionDefault.java   |   36 +-
 .../specloader/specimpl/ObjectActionMixedIn.java   |    2 +-
 .../specimpl/ObjectActionParameterAbstract.java    |   22 +-
 .../ObjectActionParameterContributeeAbstract.java  |    2 +-
 .../specimpl/ObjectAssociationAbstract.java        |    2 +-
 .../specloader/specimpl/ObjectMemberAbstract.java  |    2 +-
 .../specimpl/ObjectSpecificationAbstract.java      |  172 +--
 .../OneToManyActionParameterContributee.java       |    2 +-
 .../specimpl/OneToManyAssociationContributee.java  |    2 +-
 .../specimpl/OneToManyAssociationDefault.java      |    6 +-
 .../specimpl/OneToManyAssociationMixedIn.java      |   42 +-
 .../OneToOneActionParameterContributee.java        |    2 +-
 .../specimpl/OneToOneAssociationContributee.java   |    2 +-
 .../specimpl/OneToOneAssociationDefault.java       |   22 +-
 .../specimpl/OneToOneAssociationMixedIn.java       |    2 +-
 .../specimpl/dflt/ObjectSpecificationDefault.java  |   55 +-
 .../CollectionFacetOnStandaloneList.java           |    6 +-
 .../ObjectSpecificationOnStandaloneList.java       |   12 +-
 .../validator/MetaModelDeficiencies.java           |    4 +-
 .../validator/MetaModelValidatorAbstract.java      |    4 +-
 .../MetaModelValidatorToCheckModuleExtent.java     |   64 +-
 .../isis/metamodel/util/snapshot/XmlSchema.java    |   10 +-
 .../isis/metamodel/util/snapshot/XmlSnapshot.java  | 1634 ++++++++++----------
 .../metamodel/MetaModelContext_configTest.java     |   24 +-
 .../adapter/oid/OidMarshallerTest_marshall.java    |    6 +-
 .../oid/OidMarshallerTest_roundtripping.java       |   10 +-
 .../adapter/oid/OidMarshallerTest_unmarshal.java   |   98 +-
 .../isis/metamodel/adapter/oid/OidVersionTest.java |   22 +-
 ...idDefaultTest_valueSemantics_whenTransient.java |    2 +-
 .../metamodel/adapter/oid/RootOidTest_create.java  |   14 +-
 .../adapter/oid/VersionTest_valueSemantics.java    |   10 +-
 .../metamodel/adapter/version/VersionTest.java     |   10 +-
 .../adapter/version/VersionTest_differs.java       |    4 +-
 .../metamodel/commons/ListUtilsTest_adjust.java    |   14 +-
 .../metamodel/commons/ListUtilsTest_insert.java    |   18 +-
 .../commons/ListUtilsTest_mutableCopy.java         |   32 +-
 .../commons/StringUtils_NormalizedTest.java        |   20 +-
 .../metamodel/commons/TypesTest_filteredList.java  |    2 +-
 .../facetapi/FeatureTypeTest_identifierFor.java    |   30 +-
 .../facets/AbstractFacetFactoryJUnit4TestCase.java |   30 +-
 .../metamodel/facets/AbstractFacetFactoryTest.java |   12 +-
 ...notations_getAnnotations_on_Parameter_Test.java |   20 +-
 .../isis/metamodel/facets/CollectionUtilsTest.java |    4 +-
 ...nEventHelperTest_newActionInteractionEvent.java |    8 +-
 ...HelperTest_newCollectionDomainEvent_forAdd.java |    8 +-
 ...perTest_newCollectionDomainEvent_forRemove.java |    6 +-
 ...HelperTest_newPropertyDomainEvent_forClear.java |   18 +-
 ...elperTest_newPropertyDomainEvent_forModify.java |   18 +-
 .../metamodel/facets/ObjectAdapterUtilsTest.java   |    2 +-
 .../org/apache/isis/metamodel/facets/Utils.java    |    8 +-
 .../actions/ActionMethodsFacetFactoryTest.java     |   86 +-
 .../action/ActionAnnotationFacetFactoryTest.java   |   10 +-
 ...nnotationFacetFactoryTest_ActionInvocation.java |    6 +-
 .../ActionAnnotationFacetFactoryTest_Command.java  |    4 +-
 .../ActionAnnotationFacetFactoryTest_Hidden.java   |    2 +-
 ...ctionAnnotationFacetFactoryTest_Invocation.java |   22 +-
 ...ctionAnnotationFacetFactoryTest_Publishing.java |   10 +-
 ...ctionAnnotationFacetFactoryTest_RestrictTo.java |    6 +-
 ...tionLayoutAnnotationFacetFactoryJunit4Test.java |  184 +--
 ...nLayoutXmlLayoutAnnotationFacetFactoryTest.java |    2 +-
 ...etDerivedFromDomainServiceFacetFactoryTest.java |  138 +-
 ...etDerivedFromDomainServiceFacetFactoryTest.java |   72 +-
 .../CollectionFieldMethodsFacetFactoryTest.java    |    4 +-
 .../CollectionAnnotationFacetFactoryTest.java      |   16 +-
 ...stedAnnotationOnCollectionFacetFactoryTest.java |    2 +-
 .../ViewModelSemanticCheckingFacetFactoryTest.java |    2 +-
 ...okmarkableAnnotationFacetFactoryTest_class.java |    2 +-
 .../object/defaults/DefaultedFacetFactoryTest.java |   10 +-
 .../ObjectDisabledMethodFacetFactoryTest.java      |    2 +-
 .../DomainObjectAnnotationFacetFactoryTest.java    |   54 +-
 .../DomainObjectLayoutFactoryTest.java             |   26 +-
 .../title/TitleFacetViaMethodsFactoryTest.java     |    2 +-
 .../TitleAnnotationFacetFactoryTest.java           |   16 +-
 .../TitleFacetViaTitleAnnotationTest.java          |    6 +-
 .../NavigableParentAnnotationFacetFactoryTest.java |   94 +-
 .../annotation/NavigableParentTestSamples.java     |   70 +-
 ...SpecIdFacetDerivedFromClassNameFactoryTest.java |    2 +-
 .../parseable/ParseableFacetUsingParserTest.java   |    6 +-
 .../ordering/memberorder/DeweyOrderSetTest.java    |    4 +-
 .../MemberOrderAnnotationFacetFactoryTest.java     |    2 +-
 .../memberorder/MemberOrderComparatorTest.java     |    2 +-
 .../ParameterAnnotationFacetFactoryTest.java       |   48 +-
 ...lableAnnotationOnParameterFacetFactoryTest.java |    2 +-
 ...RegExAnnotationOnParameterFacetFactoryTest.java |    2 +-
 .../PropertyMethodsFacetFactoryTest.java           |   38 +-
 ...romptStyleFacetFromPropertyAnnotation_Test.java |    2 +-
 ...sabledAnnotationOnPropertyFacetFactoryTest.java |    2 +-
 .../MandatoryAnnotationFacetFactoryTest.java       |    2 +-
 ...sistedAnnotationOnPropertyFacetFactoryTest.java |    2 +-
 .../PropertyAnnotationFacetFactoryTest.java        |   34 +-
 ...llableAnnotationOnPropertyFacetFactoryTest.java |    2 +-
 .../RegExAnnotationOnPropertyFacetFactoryTest.java |    2 +-
 ...SpecificationValidatingInteractionMoreTest.java |   16 +-
 ...isfySpecificationValidatingInteractionTest.java |   36 +-
 .../BigDecimalValueSemanticsProviderTest.java      |    4 +-
 .../value/BigIntValueSemanticsProviderTest.java    |    2 +-
 .../value/ByteValueSemanticsProviderTest.java      |    2 +-
 .../value/DoubleValueSemanticsProviderTest.java    |    2 +-
 .../value/FloatValueSemanticsProviderTest.java     |    2 +-
 .../ImageValueSemanticsProviderAbstractTest.java   |    2 +-
 .../value/IntValueSemanticsProviderTest.java       |    2 +-
 .../JavaSqlDateValueSemanticsProviderTest.java     |    2 +-
 .../JavaSqlTimeValueSemanticsProviderTest.java     |    2 +-
 .../JavaUtilDateValueSemanticsProviderTest.java    |    2 +-
 .../PercentageValueSemanticsProviderTest.java      |    2 +-
 .../value/ShortValueSemanticsProviderTest.java     |    2 +-
 .../ValueSemanticsProviderAbstractTestCase.java    |   18 +-
 ...odaLocalDateTimeValueSemanticsProviderTest.java |    4 +-
 ...jectAssociationPredicatesTest_visibleWhere.java |   70 +-
 .../services/ServiceInjectorDefaultTest.java       |   40 +-
 .../ServiceInjectorDefaultTest_usingFields.java    |   48 +-
 ...erviceInjectorDefaultTest_validateServices.java |    8 +-
 ...InjectorDefaultTest_validateServices_happy.java |   28 +-
 .../services/appfeat/ApplicationFeatureIdTest.java |   24 +-
 .../ApplicationFeatureRepositoryDefaultTest.java   |   11 +-
 ...eptionRecognizerDocDefault_recognizes_Test.java |    8 +-
 .../isis/metamodel/services/grid/BS3GridTest.java  |    4 +-
 .../services/menubars/BS3MenuBarsTest.java         |    2 +-
 .../metamodel/MetaModelServiceDefaultTest.java     |   72 +-
 .../specloader/ServiceInitializerTest.java         |   28 +-
 .../specloader/SpecificationCacheDefaultTest.java  |   16 +-
 .../SpecificationLoaderTestAbstract.java           |   38 +-
 .../specloader/SpecificationLoaderTest_array.java  |   14 +-
 .../ClassSubstitutorTest_getClass.java             |    6 +-
 ...ionParameterAbstractTest_getId_and_getName.java |    8 +-
 .../specimpl/ObjectAssociationAbstractTest.java    |   10 +-
 ...ObjectAssociationAbstractTest_alwaysHidden.java |   10 +-
 .../testspec/ObjectSpecificationStub.java          |   26 +-
 .../codegen/ClassLoadingStrategyAdvisor.java       |   18 +-
 .../codegen/ProxyFactoryPluginUsingByteBuddy.java  |    6 +-
 ...eContext_ensureCompatibleAcceptHeader_Test.java |    2 +-
 ...tfulObjectsApplicationExceptionMapper_Test.java |    2 +-
 .../datanucleus/metamodel/JdoPropertyUtils.java    |    8 +-
 .../isis/jdo/entities/JdoEntityTypeRegistry.java   |   10 +-
 ...eptionRecognizerCompositeForJdoObjectStore.java |    2 +-
 .../JdoDiscriminatorAnnotationFacetFactory.java    |   10 +-
 ...doPersistenceCapableAnnotationFacetFactory.java |    4 +-
 .../facets/object/query/JdoNamedQuery.java         |    8 +-
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |    4 +-
 ...ndatoryFromJdoColumnAnnotationFacetFactory.java |   22 +-
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |    4 +-
 .../IsisPlatformTransactionManagerForJdo.java      |  136 +-
 .../isis/jdo/persistence/IsisTransactionJdo.java   |    4 +-
 .../jdo/persistence/IsisTransactionManagerJdo.java |  100 +-
 .../jdo/persistence/PersistenceSessionBase.java    |    6 +-
 ...onRecognizerCompositeForJdoObjectStoreTest.java |    6 +-
 ...LIntegrityConstraintViolationExceptionTest.java |    2 +-
 ...AnnotationFacetFactoryTest_refineMetaModel.java |   78 +-
 .../org/apache/isis/jdo/IsisBootDataNucleus.java   |   22 +-
 .../PersistenceQueryFindAllInstancesProcessor.java |    6 +-
 ...sistenceQueryFindUsingApplibQueryProcessor.java |   14 +-
 .../queries/PersistenceQueryProcessorAbstract.java |    4 +-
 .../isis/jdo/jdosupport/IsisJdoSupportDN5.java     |   20 +-
 .../isis/jdo/jdosupport/IsisJdoSupport_v3_2.java   |    8 +-
 .../mixins/Persistable_datanucleusIdLong.java      |    2 +-
 .../mixins/Persistable_datanucleusVersionLong.java |    2 +-
 .../Persistable_datanucleusVersionTimestamp.java   |    2 +-
 .../mixins/Persistable_downloadJdoMetadata.java    |    2 +-
 .../isis/jdo/persistence/DNStoreManagerType.java   |   30 +-
 .../DataNucleusApplicationComponents5.java         |   12 +-
 .../jdo/persistence/IsisLifecycleListener.java     |   22 +-
 .../isis/jdo/persistence/PersistenceSession5.java  | 1622 +++++++++----------
 .../persistence/PersistenceSessionFactory5.java    |   36 +-
 .../org/apache/isis/jdo/persistence/Utils.java     |    2 +-
 ...atastoreIdentityAnnotationFacetFactoryTest.java |    2 +-
 ...JdoDiscriminatorAnnotationFacetFactoryTest.java |    6 +-
 ...rsistenceCapableAnnotationFacetFactoryTest.java |    6 +-
 ...vedFromJdoColumnAnnotationFacetFactoryTest.java |   10 +-
 ...vedFromJdoColumnAnnotationFacetFactoryTest.java |   28 +-
 ...impleObjectWithColumnAllowsNullAnnotations.java |   20 +-
 .../adapterfactory/pojo/PojoAdapterTest.java       |   78 +-
 .../transaction/PojoAdapterBuilder.java            |   26 +-
 .../runtime/system/ObjectMemberAbstractTest.java   |    4 +-
 .../WrapperFactoryDefaultTest_wrappedObject.java   |   70 +-
 ...FactoryDefaultTest_wrappedObject_transient.java |   28 +-
 .../isis/security/shiro/IsisBootSecurityShiro.java |    8 +-
 .../isis/security/shiro/ShiroSecurityContext.java  |    2 +-
 .../apache/isis/security/shiro/WebModuleShiro.java |   80 +-
 .../shiro/authentication/ShiroAuthenticator.java   |    8 +-
 .../shiro/authorization/ShiroAuthorizor.java       |    4 +-
 .../PermissionToRoleMapperFromIni.java             |    4 +-
 .../isis/security/shiro/permrolemapper/Util.java   |   20 +-
 .../shiro/IsisPermissionTest_setParts.java         |    4 +-
 .../shiro/IsisPermissionTest_typicalUsage.java     |   24 +-
 ...AuthenticatorOrAuthorizorTest_authenticate.java |    8 +-
 ...ticatorOrAuthorizorTest_isVisibleInAnyRole.java |   14 +-
 .../PermissionToRoleMapperFromIniTest.java         |    2 +-
 .../PermissionToRoleMapperFromStringTest.java      |    6 +-
 .../jee_support/IsisCDIBeanScanInterceptor.java    |   14 +-
 .../org/apache/isis/runtime/spring/IsisBoot.java   |   20 +-
 .../apache/isis/wrapper/WrapperFactoryDefault.java |    2 +
 .../DelegatingInvocationHandlerDefault.java        |    2 +-
 .../handlers/DomainObjectInvocationHandler.java    |   36 +-
 .../background/BackgroundCommandExecution.java     |    2 +-
 .../background/BackgroundServiceDefault.java       |   48 +-
 .../background/CommandExecutionAbstract.java       |    2 +-
 .../background/CommandExecutorServiceDefault.java  |   94 +-
 .../background/CommandInvocationHandler.java       |   18 +-
 .../background/ForkingInvocationHandler.java       |   22 +-
 .../background/InvocationHandlerFactory.java       |    5 +-
 .../InvocationHandlerFactoryFallback.java          |   18 +-
 ...andlerFactoryUsingBackgroundCommandService.java |    6 +-
 .../bookmarks/BookmarkServiceInternalDefault.java  |   48 +-
 .../confmenu/ConfigurationViewServiceDefault.java  |   16 +-
 .../services/email/EmailServiceDefault.java        |    4 +-
 .../services/eventbus/EventBusServiceSpring.java   |    2 +-
 .../factory/FactoryServiceInternalDefault.java     |   48 +-
 .../homepage/HomePageResolverServiceDefault.java   |  128 +-
 .../isis/runtime/services/i18n/po/PoReader.java    |    6 +-
 .../services/i18n/po/TranslationServicePo.java     |    6 +-
 .../services/i18n/po/TranslationServicePoMenu.java |   10 +-
 .../menubars/MenuBarsLoaderServiceDefault.java     |   34 +-
 .../menubars/bootstrap3/MenuBarsServiceBS3.java    |  116 +-
 .../persist/ObjectAdapterServiceDefault.java       |  122 +-
 .../services/publish/PublishedObjectsDefault.java  |    8 +-
 .../publish/PublishingServiceInternalDefault.java  |    6 +-
 .../services/sse/EventStreamServiceDefault.java    |   24 +-
 .../userreg/EmailNotificationServiceDefault.java   |    2 +-
 .../services/xactn/TransactionServiceSpring.java   |  156 +-
 .../runtime/services/ServiceInstantiatorTest.java  |    2 +-
 .../runtime/services/i18n/po/PoReaderTest.java     |    8 +-
 .../org/apache/isis/webapp/IsisBootWebApp.java     |    8 +-
 .../isis/webapp/IsisWebAppContextInitializer.java  |   10 +-
 .../isis/webapp/IsisWebAppContextListener.java     |  130 +-
 .../org/apache/isis/webapp/modules/WebModule.java  |   28 +-
 .../isis/webapp/modules/WebModuleContext.java      |  118 +-
 .../webapp/modules/h2console/H2ManagerMenu.java    |   20 +-
 .../modules/h2console/WebModuleH2Console.java      |   62 +-
 .../logonlog/WebModuleLogOnExceptionLogger.java    |    8 +-
 .../modules/resources/ResourceCachingFilter.java   |    6 +-
 .../webapp/modules/resources/ResourceServlet.java  |   46 +-
 .../ResourceServlet_HtmlTemplateVariables.java     |   12 +-
 .../resources/WebModuleStaticResources.java        |   18 +-
 .../modules/sse/ServerSentEventsServlet.java       |   12 +-
 .../modules/sse/WebModuleServerSentEvents.java     |    8 +-
 .../isis/runtime/memento/CollectionData.java       |   10 +-
 .../org/apache/isis/runtime/memento/Memento.java   |   18 +-
 .../isis/runtime/memento/ObjectAdapterMemento.java |   56 +-
 .../memento/ObjectAdapterMementoCollection.java    |   18 +-
 .../memento/ObjectAdapterMementoSupport.java       |    8 +-
 .../ObjectAdapterMementoSupport_usingLKG.java      |    8 +-
 .../memento/ObjectAdapterMementoUsingSupport.java  |    8 +-
 .../isis/runtime/memento/StandaloneData.java       |    2 +-
 .../persistence/FixturesInstalledState.java        |   60 +-
 .../persistence/FixturesInstalledStateHolder.java  |    2 +-
 .../persistence/adapter/ObjectAdapterForBean.java  |    8 +-
 .../runtime/persistence/adapter/PojoAdapter.java   |   36 +-
 .../isis/runtime/system/SystemConstants.java       |    8 +-
 .../isis/runtime/system/context/IsisContext.java   |   36 +-
 .../system/context/session/AppLifecycleEvent.java  |   16 +-
 .../system/context/session/RuntimeContext.java     |   32 +-
 .../system/context/session/RuntimeContextBase.java |   74 +-
 .../context/session/RuntimeEventService.java       |   72 +-
 .../session/RuntimeEventSupport_Spring.java        |    4 +-
 .../context/session/SessionLifecycleEvent.java     |   20 +-
 .../JdoPersistenceLifecycleService.java            |  220 +--
 .../runtime/system/persistence/ObjectFactory.java  |    2 +-
 .../persistence/PersistenceQueryFactory.java       |    6 +-
 .../system/persistence/PersistenceSession.java     |   53 +-
 .../adaptermanager/ObjectAdapterContext.java       |   16 +-
 .../ObjectAdapterContext_DependencyInjection.java  |    6 +-
 ...ObjectAdapterContext_LifecycleEventSupport.java |   12 +-
 .../ObjectAdapterContext_MementoSupport.java       |   44 +-
 .../ObjectAdapterContext_NewIdentifier.java        |   12 +-
 ...ctAdapterContext_ObjectAdapterByIdProvider.java |   76 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |   62 +-
 .../ObjectAdapterContext_ObjectCreation.java       |   28 +-
 .../ObjectAdapterContext_OidProviders.java         |   14 +-
 .../ObjectAdapterContext_ServiceLookup.java        |   32 +-
 .../adaptermanager/ObjectAdapterLegacy.java        |   10 +-
 .../adaptermanager/factories/OidFactory.java       |    8 +-
 .../factories/OidFactory_Builder.java              |   14 +-
 .../runtime/system/session/IsisRequestCycle.java   |    4 +-
 .../isis/runtime/system/session/IsisSession.java   |  146 +-
 .../runtime/system/session/IsisSessionFactory.java |    4 +-
 .../system/session/IsisSessionFactoryDefault.java  |   50 +-
 .../transaction/AuditingServiceInternal.java       |    2 +-
 .../transaction/ChangedObjectsServiceInternal.java |   54 +-
 .../transaction/IsisTransactionAspectSupport.java  |   56 +-
 .../system/transaction/IsisTransactionObject.java  |  114 +-
 .../transaction/IsisTransactionPlaceholder.java    |    4 +-
 .../PersistenceSessionServiceInternalDefault.java  |   26 +-
 .../system/transaction/PreAndPostValues.java       |    8 +-
 .../system/transaction/TransactionLatch.java       |   26 +-
 .../JavaObjectWithBasicProgramConventions.java     |    2 +-
 .../system/ObjectActionLayoutXmlDefaultTest.java   |    8 +-
 .../system/OneToManyAssociationDefaultTest.java    |    8 +-
 .../runtime/system/TestObjectWithCollection.java   |    2 +-
 .../isis/security/IsisBootSecurityBypass.java      |    4 +-
 .../authentication/AuthenticationRequest.java      |    4 +-
 .../AuthenticationRequestAbstract.java             |    2 +-
 .../authentication/AuthenticationSession.java      |    4 +-
 .../AuthenticationSessionAbstract.java             |    8 +-
 .../AuthenticationRequestLogonFixture.java         |    2 +-
 .../manager/AuthenticationManager.java             |   14 +-
 .../manager/AuthorizationManagerStandard.java      |   16 +-
 .../standard/AuthenticationManagerStandard.java    |   26 +-
 .../standard/RandomCodeGenerator10Chars.java       |    2 +-
 .../authentication/standard/Registrar.java         |    8 +-
 .../authentication/standard/SimpleSession.java     |    2 +-
 .../authorization/standard/Authorizor.java         |    4 +-
 .../standard/AuthenticatorDefaultTest.java         |    2 +-
 .../viewer/restfulobjects/applib/util/Parser.java  |   82 +-
 .../restfulobjects/applib/util/PathNode.java       |    4 +-
 .../viewer/restfulobjects/applib/JsonFixture.java  |    4 +-
 .../JsonRepresentationTest_asInputStream.java      |    4 +-
 .../JsonRepresentationTest_getBigDecimal.java      |    2 +-
 .../JsonRepresentationTest_getLink_isLink.java     |    2 +-
 ...JsonRepresentationTest_streamArrayElements.java |    8 +-
 .../JsonRepresentationTest_streamMapEntries.java   |    4 +-
 ...RepresentationTypeTest_lookup_ContractTest.java |   10 +-
 .../applib/RestfulHttpMethodTest_setUp.java        |    8 +-
 ...equestParameterTest_valueOf_xrofollowlinks.java |    4 +-
 .../client/RestfulResponse_HeaderTest_Warning.java |    2 +-
 .../restfulobjects/applib/util/Parser_Test.java    |   62 +-
 .../Parser_forJaxRsMediaType_ContractTest.java     |   10 +-
 .../applib/util/PathNodeTest_equalsHashcode.java   |    2 +-
 .../viewer/restfulobjects/rendering/OidUtils.java  |   28 +-
 .../restfulobjects/rendering/RendererContext.java  |   20 +-
 .../rendering/ReprRendererAbstract.java            |    2 +-
 .../RestfulObjectsApplicationException.java        |    4 +-
 .../domainobjects/ActionResultReprRenderer.java    |    4 +-
 .../domainobjects/DomainObjectReprRenderer.java    |    4 +-
 .../rendering/domainobjects/JsonValueEncoder.java  |   20 +-
 .../rendering/domainobjects/ListReprRenderer.java  |   10 +-
 .../ObjectCollectionReprRenderer.java              |    4 +-
 .../domaintypes/DomainTypeReprRenderer.java        |    8 +-
 .../rendering/service/RepresentationService.java   |    2 +-
 .../acceptheader/AcceptHeaderServiceForRest.java   |   10 +-
 .../conneg/ContentNegotiationServiceAbstract.java  |    4 +-
 .../ContentNegotiationServiceOrgApacheIsisV1.java  |   18 +-
 .../rendering/util/FollowSpecUtil.java             |    4 +-
 .../rendering/LinkFollowSpecsTest_follow.java      |    8 +-
 .../JsonValueEncoderTest_asAdapter.java            |    4 +-
 .../JsonValueEncoderTest_asObject.java             |   10 +-
 .../restfulobjects/IsisBootWebRestfulObjects.java  |    6 +-
 .../IsisRestfulObjectsSessionFilter.java           |   12 +-
 .../restfulobjects/WebModuleRestfulObjects.java    |   52 +-
 .../restfulobjects/server/ResourceContext.java     |    2 +-
 .../server/mappers/ExceptionMapperAbstract.java    |   20 +-
 .../ExceptionMapperForRuntimeException.java        |   34 +-
 .../resources/DomainObjectResourceServerside.java  |    8 +-
 .../server/resources/DomainResourceHelper.java     |  100 +-
 .../resources/DomainServiceResourceServerside.java |   20 +-
 .../server/resources/HealthResourceServerside.java |    6 +-
 .../server/resources/HomePageReprRenderer.java     |    2 +-
 .../resources/ObjectAdapterUpdateHelper.java       |   10 +-
 .../server/resources/ResourceAbstract.java         |   18 +-
 .../server/resources/SwaggerSpecResource.java      |    8 +-
 .../server/resources/UserReprRenderer.java         |    4 +-
 .../IsisTransactionFilterForRestfulObjects.java    |   12 +-
 .../server/ResourceContextTest_getArg.java         |   36 +-
 ..._ensureCompatibleAcceptHeader_ContractTest.java |   34 +-
 .../viewer/wicket/viewer/IsisBootWebWicket.java    |  180 +--
 .../wicket/viewer/IsisWicketApplication.java       |  438 +++---
 .../viewer/IsisWicketApplication_Experimental.java |   10 +-
 ...rgetRespondListenerToResetQueryResultCache.java |    2 +-
 .../isis/viewer/wicket/viewer/WebModuleWicket.java |   18 +-
 .../imagecache/ImageResourceCacheClassPath.java    |    2 +-
 .../wicket/AuthenticatedWebSessionForIsis.java     |    2 +-
 .../wicket/ConverterForObjectAdapterMemento.java   |    2 +-
 .../integration/wicket/WebRequestCycleForIsis.java |  528 +++----
 .../ObjectAdapterMementoSupportUsingSpring.java    |  108 +-
 .../viewer/services/DeepLinkServiceWicket.java     |    6 +-
 .../services/EmailNotificationServiceWicket.java   |    8 +-
 .../wicket/viewer/services/Object_clearHints.java  |    2 +-
 .../viewer/settings/IsisResourceSettings.java      |    4 +-
 .../viewer/IsisWicketApplication_Defaults.java     |    8 +-
 .../wicket/viewer/IsisWicketApplication_Pages.java |    8 +-
 ...uthenticatedWebSessionForIsis_Authenticate.java |    4 +-
 .../AuthenticatedWebSessionForIsis_SignIn.java     |    2 +-
 .../pages/PageClassListDefault_Instantiation.java  |    4 +-
 .../wicket/model/mementos/CollectionMemento.java   |    2 +-
 .../mementos/ObjectAdapterMemento_Legacy.java      | 1094 ++++++-------
 .../viewer/wicket/model/models/ActionModel.java    |   32 +-
 .../wicket/model/models/BookmarkTreeNode.java      |    4 +-
 .../wicket/model/models/EntityCollectionModel.java |    8 +-
 .../viewer/wicket/model/models/EntityModel.java    |   10 +-
 .../viewer/wicket/model/models/ModelAbstract.java  |    2 +-
 .../viewer/wicket/model/models/ScalarModel.java    |   17 +-
 .../model/models/ScalarModelWithMultiPending.java  |    4 +-
 .../wicket/model/models/ServiceActionsModel.java   |   10 +-
 .../models/LowestCommonSuperclassClosureTest.java  |    8 +-
 .../ActionResultResponseHandlingStrategy.java      |    2 +-
 .../actionresponse/ActionResultResponseType.java   |   12 +-
 .../entityactions/AdditionalLinksPanel.java        |   24 +-
 .../actionmenu/entityactions/LinkAndLabelUtil.java |    4 +-
 .../serviceactions/ServiceActionUtil.java          |   12 +-
 .../serviceactions/ServiceActionsPanel.java        |   32 +-
 .../serviceactions/ServiceActionsPanelFactory.java |    2 +-
 .../actionpromptsb/ActionPromptSidebar.java        |    4 +-
 .../collection/AssociatedWithActionsHelper.java    |    2 +-
 .../selector/CollectionSelectorHelper.java         |    2 +-
 .../CollectionContentsAsAjaxTablePanel.java        |  108 +-
 .../ajaxtable/IsisAjaxFallbackDataTable.java       |    2 +-
 .../ajaxtable/IsisAjaxNavigationToolbar.java       |   12 +-
 .../ajaxtable/IsisTotalRecordsToolbar.java         |   10 +-
 .../ajaxtable/PrototypingMessageProvider.java      |   12 +-
 .../columns/ObjectAdapterPropertyColumn.java       |    2 +-
 .../summary/CollectionContentsAsSummary.java       |    2 +-
 .../CollectionContentsAsSummaryFactory.java        |   78 +-
 .../components/entity/fieldset/PropertyGroup.java  |   36 +-
 .../entity/icontitle/EntityIconAndTitlePanel.java  |    8 +-
 .../wicket/ui/components/footer/CreditImage.java   |    2 +-
 .../wicket/ui/components/footer/FooterPanel.java   |   18 +-
 .../wicket/ui/components/layout/bs3/col/Col.java   |   26 +-
 .../property/PropertyFormExecutorStrategy.java     |    2 +-
 .../PropertyEditPromptHeaderPanel.java             |    8 +-
 .../ui/components/scalars/DateFormatSettings.java  |   22 +-
 .../ui/components/scalars/ScalarPanelAbstract.java |    6 +-
 .../components/scalars/ScalarPanelAbstract2.java   |   22 +-
 .../scalars/ScalarPanelSelect2Abstract.java        |    4 +-
 .../scalars/ScalarPanelTextFieldAbstract.java      |    6 +-
 .../ScalarPanelTextFieldDatePickerAbstract.java    |    2 +-
 .../datepicker/TextFieldWithDateTimePicker.java    |    4 +-
 .../isisapplib/IsisBlobOrClobPanelAbstract.java    |   68 +-
 .../scalars/isisapplib/IsisPasswordPanel.java      |    2 +-
 .../jdk8time/DateConverterForJdk8Abstract.java     |    2 +-
 .../jdkdates/DateConverterForJavaAbstract.java     |   14 +-
 .../scalars/jdkdates/JavaUtilDatePanel.java        |    2 +-
 .../components/scalars/markup/MarkupComponent.java |   12 +-
 .../scalars/markup/MarkupComponent_observing.java  |   14 +-
 .../scalars/markup/MarkupComponent_reloadJs.java   |    6 +-
 .../ui/components/scalars/markup/MarkupPanel.java  |   10 +-
 .../scalars/markup/MarkupPanelFactories.java       |   32 +-
 .../scalars/markup/StandaloneMarkupPanel.java      |    6 +-
 .../components/scalars/primitive/BooleanPanel.java |    4 +-
 .../scalars/reference/ReferencePanel.java          |    6 +-
 .../ui/components/scalars/uuid/UuidConverter.java  |    4 +-
 .../valuechoices/ValueChoicesSelect2Panel.java     |    2 +-
 .../components/tree/IsisToWicketTreeAdapter.java   |    6 +-
 .../ui/components/tree/StandaloneTreePanel.java    |    4 +-
 .../wicket/ui/components/tree/TreePanel.java       |    6 +-
 .../components/tree/themes/TreeThemeProvider.java  |    8 +-
 .../tree/themes/TreeThemeProviderDefault.java      |    2 +-
 .../wicket/ui/components/welcome/WelcomePanel.java |    4 +-
 .../ui/components/widgets/favicon/Favicon.java     |    2 +-
 .../linkandlabel/ActionLinkFactoryAbstract.java    |   10 +-
 .../ui/components/widgets/navbar/BrandLogo.java    |    2 +-
 .../ui/components/widgets/navbar/BrandName.java    |    8 +-
 ...tAdapterMementoProviderForReferenceChoices.java |   10 +-
 ...entoProviderForReferenceObjectAutoComplete.java |   14 +-
 ...derForReferenceParamOrPropertyAutoComplete.java |   10 +-
 .../themepicker/IsisWicketThemeSupport.java        |   34 +-
 .../themepicker/IsisWicketThemeSupportDefault.java |   58 +-
 .../widgets/themepicker/ThemeChooser.java          |    8 +-
 .../isis/viewer/wicket/ui/pages/PageAbstract.java  |   29 +-
 .../ui/pages/accmngt/EmailAvailableValidator.java  |   20 +-
 .../EmailVerificationUrlServiceDefault.java        |    6 +-
 .../pages/accmngt/UsernameAvailableValidator.java  |   20 +-
 .../password_reset/PasswordResetEmailPanel.java    |   22 +-
 .../accmngt/password_reset/PasswordResetPanel.java |    8 +-
 .../ui/pages/accmngt/register/RegisterPanel.java   |    6 +-
 .../accmngt/signup/RegistrationFormPanel.java      |   20 +-
 .../isis/viewer/wicket/ui/pages/home/HomePage.java |   10 +-
 .../wicket/ui/pages/login/IsisSignInPanel.java     |    8 +-
 .../wicket/ui/pages/mmverror/MmvErrorPage.java     |    2 +-
 .../isis/viewer/wicket/ui/panels/FormAbstract.java |    2 +-
 .../wicket/ui/panels/FormExecutorDefault.java      |   18 +-
 .../viewer/wicket/ui/panels/PanelAbstract.java     |    4 +-
 .../isis/viewer/wicket/ui/util/SSESupport.java     |    2 +-
 .../isis/viewer/wicket/ui/util/Tooltips.java       |   16 +-
 .../ui/ComponentFactoryAbstractTest_init.java      |   24 +-
 ...ollectionContentsSelectorDropdownPanelTest.java |    8 +-
 .../jdkdates/DateConverterForJavaSqlDateTest.java  |    8 +-
 .../jdkdates/DateConverterForJavaUtilDateTest.java |   14 +-
 ...BigDecimalConverterWithScaleTest_roundtrip.java |   48 +-
 .../jodatime/DateConverterForJodaDateTimeTest.java |   18 +-
 .../DateConverterForJodaLocalDateTest.java         |    8 +-
 .../DateConverterForJodaLocalDateTimeTest.java     |   16 +-
 .../DateConverterForJdk8LocalDateTest.java         |    8 +-
 .../DateConverterForJdk8LocalDateTimeTest.java     |   16 +-
 .../DateConverterForJdk8OffsetDateTimeTest.java    |   30 +-
 .../scalars/uuid/UuidConverterTest_roundtrip.java  |    6 +-
 ...tAdapterMementoProviderForValueChoicesTest.java |    2 +-
 .../viewer/wicket/ui/errors/JGrowlUtilTest.java    |    2 +-
 .../main/java/domainapp/application/DemoApp.java   |   26 +-
 .../domainapp/application/DemoAppManifest.java     |   52 +-
 .../dom/actions/assoc/AssociatedActionDemo.java    |    6 +-
 .../dom/actions/assoc/AssociatedActionMenu.java    |    4 +-
 .../java/domainapp/dom/actions/assoc/DemoItem.java |    6 +-
 .../dom/actions/async/AsyncActionDemo.java         |   16 +-
 .../dom/actions/async/AsyncActionMenu.java         |    4 +-
 .../java/domainapp/dom/actions/async/DemoTask.java |   18 +-
 .../domainapp/dom/actions/async/TaskProgress.java  |   22 +-
 .../domainapp/dom/actions/depargs/DemoItem.java    |    8 +-
 .../actions/depargs/DependentArgsActionDemo.java   |    8 +-
 .../DependentArgsActionDemo_useAutoComplete.java   |   28 +-
 .../DependentArgsActionDemo_useChoices.java        |   20 +-
 .../DependentArgsActionDemo_useDefault.java        |   20 +-
 .../DependentArgsActionDemo_useDisable.java        |   22 +-
 .../depargs/DependentArgsActionDemo_useHide.java   |   20 +-
 .../actions/depargs/DependentArgsActionMenu.java   |    4 +-
 .../java/domainapp/dom/actions/depargs/Parity.java |    4 +-
 .../main/java/domainapp/dom/error/ErrorDemo.java   |    7 +-
 .../main/java/domainapp/dom/error/ErrorMenu.java   |    4 +-
 .../error/service/DemoErrorReportingService.java   |   46 +-
 .../java/domainapp/dom/events/EventLogEntry.java   |   28 +-
 .../java/domainapp/dom/events/EventLogMenu.java    |   40 +-
 .../domainapp/dom/events/EventLogRepository.java   |   20 +-
 .../java/domainapp/dom/events/EventSubscriber.java |   74 +-
 .../java/domainapp/dom/homepage/DemoHomePage.java  |   11 +-
 .../src/main/java/domainapp/dom/jee/JeeDemo.java   |   13 +-
 .../java/domainapp/dom/jee/JeeDemoService.java     |    2 +-
 .../src/main/java/domainapp/dom/jee/JeeMenu.java   |    4 +-
 .../src/main/java/domainapp/dom/tabs/TabDemo.java  |   21 +-
 .../src/main/java/domainapp/dom/tabs/TabMenu.java  |    4 +-
 .../java/domainapp/dom/tooltip/TooltipDemo.java    |   59 +-
 .../java/domainapp/dom/tooltip/TooltipMenu.java    |    4 +-
 .../src/main/java/domainapp/dom/tree/FileNode.java |  102 +-
 .../java/domainapp/dom/tree/FileNodeFactory.java   |   20 +-
 .../domainapp/dom/tree/FileSystemTreeAdapter.java  |   68 +-
 .../src/main/java/domainapp/dom/tree/TreeDemo.java |   56 +-
 .../main/java/domainapp/dom/tree/TreeDemoMenu.java |   14 +-
 .../domainapp/dom/types/FeaturedTypesMenu.java     |    8 +-
 .../java/domainapp/dom/types/blob/BlobDemo.java    |   34 +-
 .../dom/types/blob/BlobDemo_downloadLogo.java      |    6 +-
 .../domainapp/dom/types/blob/DemoBlobStore.java    |   82 +-
 .../java/domainapp/dom/types/text/TextDemo.java    |   16 +-
 .../domainapp/dom/types/time/TemporalDemo.java     |   31 +-
 .../src/main/java/domainapp/utils/DemoStub.java    |  126 +-
 .../main/java/domainapp/webapp/Notification.java   |   20 +-
 .../domainapp/webapp/NotificationsResource.java    |    8 +-
 .../java/domainapp/application/HelloWorldApp.java  |   20 +-
 .../application/HelloWorldAppManifest.java         |   26 +-
 .../main/java/domainapp/dom/HelloWorldModule.java  |    2 +-
 .../java/domainapp/dom/impl/HelloWorldObject.java  |    4 +-
 .../java/domainapp/dom/impl/HelloWorldObjects.java |    6 +-
 .../src/main/java/domainapp/dom/types/Name.java    |   18 +
 .../src/main/java/domainapp/dom/types/Notes.java   |   18 +
 ...mainAppFixtureScriptsSpecificationProvider.java |    3 +-
 .../fixture/scenarios/DomainAppDemo.java           |    8 +-
 .../application/manifest/SimpleAppManifest.java    |   28 +-
 .../services/health/HealthCheckServiceImpl.java    |   18 +
 .../services/homepage/HomePageViewModel.java       |    2 +-
 .../application/bdd/specs/RunIntegBddSpecs.java    |    2 +-
 .../bdd/specs/SimpleObjectsStepDef.java            |   86 +-
 .../integtests/SpringIntegrationTest.java          |    8 +-
 .../integtests/mml/MetaModelService_IntegTest.java |   24 +-
 .../integtests/smoke/Smoke_IntegTest.java          |    4 +-
 .../domainapp/modules/simple/SimpleModule.java     |   26 +-
 .../modules/simple/SimpleModuleManifest.java       |   18 +-
 .../modules/simple/dom/impl/SimpleObject.java      |    4 +-
 .../modules/simple/dom/impl/SimpleObjects.java     |   16 +-
 .../domainapp/modules/simple/dom/types/Name.java   |   20 +-
 .../domainapp/modules/simple/dom/types/Notes.java  |   18 +
 .../simple/fixture/SimpleObject_persona.java       |    6 +-
 .../simple/dom/impl/SimpleObjects_Test.java        |    1 +
 .../integtests/SimpleModuleIntegTestAbstract.java  |    8 +-
 .../integtests/SimpleModuleManifestForTesting.java |   18 +-
 .../integtests/tests/SimpleObject_IntegTest.java   |   32 +-
 .../integtests/tests/SimpleObjects_IntegTest.java  |   16 +-
 .../main/java/domainapp/application/SimpleApp.java |   22 +-
 .../java/org/apache/isis/testdomain/jdo/Book.java  |   17 +-
 .../org/apache/isis/testdomain/jdo/Inventory.java  |    6 +-
 .../isis/testdomain/jdo/InventoryManager.java      |   22 +-
 .../isis/testdomain/jdo/InventoryRepository.java   |   56 +-
 .../isis/testdomain/jdo/JdoTestApplication.java    |    2 +-
 .../isis/testdomain/jdo/JdoTestDomainModule.java   |   28 +-
 .../jdo/JdoTestDomainModule_withShiro.java         |   54 +-
 .../isis/testdomain/jdo/JdoTestDomainPersona.java  |   36 +-
 .../org/apache/isis/testdomain/jdo/Product.java    |    8 +-
 .../apache/isis/testdomain/ldap/LdapConstants.java |   26 +-
 .../apache/isis/testdomain/rest/RestService.java   |  118 +-
 .../org/apache/isis/testdomain/Util_H2Console.java |    6 +-
 .../testdomain/auditing/AuditerServiceTest.java    |    4 +-
 .../bootstrapping/JdoBootstrappingTest.java        |  164 +-
 .../JdoBootstrappingTest_usingFixtures.java        |   50 +-
 .../SpringServiceProvisioningTest.java             |   56 +-
 .../commandexecution/BackgroundExecutionTest.java  |   68 +-
 .../eventhandling/SpringEventPublishingTest.java   |   84 +-
 .../isis/testdomain/ldap/LdapEmbeddedServer.java   |   88 +-
 .../testdomain/ldap/LdapEmbeddedServerTest.java    |   36 +-
 .../isis/testdomain/ldap/LdapServerService.java    |   34 +-
 .../publishing/PublisherServiceTest.java           |    4 +-
 .../isis/testdomain/rest/RestServiceTest.java      |   62 +-
 .../isis/testdomain/shiro/AbstractShiroTest.java   |   36 +-
 .../isis/testdomain/shiro/ShiroLdapTest.java       |  186 +--
 .../isis/testdomain/shiro/ShiroSecmanLdapTest.java |  278 ++--
 .../shiro/ShiroSecmanLdap_restfulStressTest.java   |  134 +-
 .../isis/testdomain/shiro/ShiroSecmanTest.java     |  180 +--
 .../isis/testdomain/shiro/ShiroSimpleTest.java     |   26 +-
 .../apache/isis/extensions/asciidoc/AsciiDoc.java  |   10 +-
 .../extensions/asciidoc/AsciiDocComponent.java     |    8 +-
 .../extensions/asciidoc/AsciiDocConverter.java     |   56 +-
 .../extensions/fixtures/FixturesEventService.java  |   30 +-
 .../fixtures/FixturesLifecyleService.java          |   36 +-
 .../isis/extensions/fixtures/IsisBootFixtures.java |   10 +-
 .../IsisIntegrationTestAbstactWithFixtures.java    |    2 +-
 .../fixturescripts/BuilderScriptAbstract.java      |    2 +-
 .../fixtures/fixturescripts/FixtureScript.java     |    2 +-
 .../fixtures/fixturescripts/FixtureScripts.java    |   58 +-
 .../fixturescripts/SimpleFixtureScript.java        |    4 +-
 .../fixturespec/FixtureScriptsDefault.java         |    8 +-
 .../QueryResultsCacheControlInternal.java          |    2 +-
 .../legacy/setup/PersonaEnumPersistAll.java        |    4 +-
 .../fixturescripts/ExecutionParameters_Test.java   |   12 +-
 .../apache/isis/extensions/markdown/Markdown.java  |   10 +-
 .../extensions/markdown/MarkdownComponent.java     |   12 +-
 .../extensions/markdown/MarkdownConverter.java     |  102 +-
 .../isis/extensions/secman/api/SecurityModule.java |    6 +-
 .../secman/api/SecurityModuleConfig.java           |   34 +-
 .../isis/extensions/secman/api/SecurityRealm.java  |    4 +-
 .../secman/api/SecurityRealmCharacteristic.java    |    2 +-
 .../secman/api/SecurityRealmService.java           |    4 +-
 .../api/permission/ApplicationPermission.java      |    4 +-
 .../ApplicationPermissionRepository.java           |   10 +-
 .../api/permission/ApplicationPermissionValue.java |  294 ++--
 .../permission/ApplicationPermissionValueSet.java  |   32 +-
 .../PermissionsEvaluationServiceAbstract.java      |   12 +-
 ...PermissionsEvaluationServiceAllowBeatsVeto.java |    6 +-
 ...PermissionsEvaluationServiceVetoBeatsAllow.java |    8 +-
 .../secman/api/role/ApplicationRole.java           |    8 +-
 .../secman/api/role/ApplicationRoleRepository.java |   10 +-
 .../secman/api/tenancy/ApplicationTenancy.java     |    4 +-
 .../api/tenancy/ApplicationTenancyRepository.java  |    6 +-
 .../secman/api/user/ApplicationUser.java           |   17 +-
 .../secman/api/user/ApplicationUserRepository.java |   18 +-
 .../secman/api/user/ApplicationUserStatus.java     |    6 +-
 .../jbcrypt/IsisBootSecmanEncryptionJbcrypt.java   |    2 +-
 .../secman/model/IsisBootSecmanModel.java          |    2 +-
 .../secman/model/app/feature/ApplicationClass.java |   30 +-
 .../model/app/feature/ApplicationClassAction.java  |   28 +-
 .../app/feature/ApplicationClassCollection.java    |   26 +-
 .../model/app/feature/ApplicationClassMember.java  |   21 +-
 .../app/feature/ApplicationClassProperty.java      |   36 +-
 .../app/feature/ApplicationFeatureViewModel.java   |  594 +++----
 .../app/feature/ApplicationFeatureViewModels.java  |   60 +-
 .../model/app/feature/ApplicationPackage.java      |   20 +-
 .../app/feature/ApplicationPermission_feature.java |   10 +-
 .../user/ApplicationUser_filterPermissions.java    |   26 +-
 .../app/user/ApplicationUser_permissions.java      |   16 +-
 .../secman/model/app/user/MeService.java           |   18 +-
 .../model/app/user/UserPermissionViewModel.java    |  152 +-
 .../dom/permission/ApplicationPermissionMenu.java  |   90 +-
 .../secman/model/dom/role/ApplicationRoleMenu.java |   32 +-
 .../model/dom/tenancy/ApplicationTenancyMenu.java  |   36 +-
 .../secman/model/dom/user/ApplicationUserMenu.java |   24 +-
 .../secman/model/dom/user/HasUsername_open.java    |    6 +-
 .../facets/TenantedAuthorizationFacetFactory.java  |   10 +-
 .../secman/jdo/IsisBootSecmanPersistenceJdo.java   |    2 +-
 .../jdo/dom/permission/ApplicationPermission.java  |  222 +--
 .../permission/ApplicationPermissionFactory.java   |    2 +-
 .../ApplicationPermissionRepository.java           |   98 +-
 .../secman/jdo/dom/role/ApplicationRole.java       |  190 +--
 .../jdo/dom/role/ApplicationRoleFactory.java       |    2 +-
 .../jdo/dom/role/ApplicationRoleRepository.java    |   14 +-
 .../secman/jdo/dom/tenancy/ApplicationTenancy.java |  150 +-
 .../jdo/dom/tenancy/ApplicationTenancyFactory.java |    2 +-
 .../dom/tenancy/ApplicationTenancyRepository.java  |   16 +-
 .../secman/jdo/dom/user/ApplicationUser.java       |  216 +--
 .../jdo/dom/user/ApplicationUserFactory.java       |    2 +-
 .../jdo/dom/user/ApplicationUserRepository.java    |   16 +-
 .../secman/jdo/seed/SeedSecurityModuleService.java |   18 +-
 .../jdo/seed/SeedUsersAndRolesFixtureScript.java   |   10 +-
 .../AbstractRoleAndPermissionsFixtureScript.java   |   26 +-
 .../scripts/AbstractUserAndRolesFixtureScript.java |   24 +-
 .../IsisModuleSecurityAdminRoleAndPermissions.java |    8 +-
 .../seed/scripts/IsisModuleSecurityAdminUser.java  |    6 +-
 ...oduleSecurityRegularUserRoleAndPermissions.java |   22 +-
 ...tyModuleAppUserRegistrationServiceAbstract.java |    2 +-
 .../secman/shiro/AuthInfoForApplicationUser.java   |    4 +-
 ...ticationStrategyForIsisModuleSecurityRealm.java |    6 +-
 .../secman/shiro/IsisBootSecmanRealmShiro.java     |    2 +-
 .../secman/shiro/IsisModuleSecurityRealm.java      |  104 +-
 .../secman/shiro/PrincipalForApplicationUser.java  |   10 +-
 .../shiro/SecurityRealmServiceUsingShiro.java      |    8 +-
 .../isis/extensions/secman/shiro/ShiroUtils.java   |    2 +-
 .../specsupport/ObjectFactoryForIntegration.java   |    2 +-
 .../java/org/apache/isis/specsupport/specs/V.java  |    4 +-
 .../wicket/excel/CollectionContentsAsExcel.java    |    6 +-
 .../viewer/wicket/excel/ExcelFileDownloadLink.java |   40 +-
 .../viewer/wicket/excel/ExcelFileModel.java        |  400 ++---
 .../viewer/wicket/excel/Util_TimeConversion.java   |   40 +-
 1068 files changed, 16894 insertions(+), 16703 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/IsisApplibModule.java b/core/applib/src/main/java/org/apache/isis/applib/IsisApplibModule.java
index 8fd07eb..ac8ec24 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/IsisApplibModule.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/IsisApplibModule.java
@@ -40,7 +40,7 @@ public class IsisApplibModule {
         private static final long serialVersionUID = 1L;
     }
     public abstract static class LayoutUiEvent<S>
-            extends org.apache.isis.applib.events.ui.LayoutUiEvent<S> {
+    extends org.apache.isis.applib.events.ui.LayoutUiEvent<S> {
         private static final long serialVersionUID = 1L;
     }
 
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 0ca81be..84af182 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
@@ -32,7 +32,7 @@ public final class PropertyResource {
     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;
@@ -53,7 +53,7 @@ public final class PropertyResource {
     }
 
     void loadPropsInto(final Map<String, String> props) {
-        
+
         final Properties properties = new Properties();
         try {
             try (final InputStream stream = resourceContext.getResourceAsStream(resourceName)) {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java b/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
index fa5f772..703441f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/adapters/Parser.java
@@ -113,7 +113,7 @@ public interface Parser<T> {
      * <tt>May 2, 2007</tt>, but its editable form might be <tt>20070502</tt>.
      */
     String parseableTitleOf(T existing);
-    
+
     /**
      * The max length of objects that can be parsed (if any).
      * A return type of -1 corresponds to unlimited.
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 8fdc833..4023001 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
@@ -55,31 +55,31 @@ public @interface DomainService {
      * The nature of this service, eg for menus, contributed actions, repository.
      */
     NatureOfService nature() default NatureOfService.VIEW;
-    
-//TODO[2140] deprecated, remove?
-//    /**
-//     * Number in Dewey Decimal format representing the order.
-//     *
-//     * <p>
-//     * Same convention as {@link MemberOrder#sequence()}.  If not specified, placed after any named.
-//     * </p>
-//     *
-//     * <p>
-//     *     Either this attribute or {@link DomainServiceLayout#menuOrder()} can be used; they are equivalent.
-//     *     Typically this attribute is used for services with a {@link #nature() nature} of
-//     *     {@link NatureOfService#DOMAIN domain} (these are not visible in the UI) whereas
-//     *     {@link DomainServiceLayout#menuOrder()} is used for services with a nature of
-//     *     {@link NatureOfService#VIEW_MENU_ONLY} (which do appear in the UI)
-//     * </p>
-//     *
-//     * <p>
-//     *     The default value is set to "Integer.MAX_VALUE - 100" so that any domain services intended to override the
-//     *     default implementations provided by the framework itself will do so without having to specify the
-//     *     menuOrder (with the exception of <tt>EventBusServiceJdo</tt>, all framework implementations have a
-//     *     default order greater than Integer.MAX_VALUE - 50).
-//     * </p>
-//     */
-//    String menuOrder() default Constants.MENU_ORDER_DEFAULT  ;
+
+    //TODO[2140] deprecated, remove?
+    //    /**
+    //     * Number in Dewey Decimal format representing the order.
+    //     *
+    //     * <p>
+    //     * Same convention as {@link MemberOrder#sequence()}.  If not specified, placed after any named.
+    //     * </p>
+    //     *
+    //     * <p>
+    //     *     Either this attribute or {@link DomainServiceLayout#menuOrder()} can be used; they are equivalent.
+    //     *     Typically this attribute is used for services with a {@link #nature() nature} of
+    //     *     {@link NatureOfService#DOMAIN domain} (these are not visible in the UI) whereas
+    //     *     {@link DomainServiceLayout#menuOrder()} is used for services with a nature of
+    //     *     {@link NatureOfService#VIEW_MENU_ONLY} (which do appear in the UI)
+    //     * </p>
+    //     *
+    //     * <p>
+    //     *     The default value is set to "Integer.MAX_VALUE - 100" so that any domain services intended to override the
+    //     *     default implementations provided by the framework itself will do so without having to specify the
+    //     *     menuOrder (with the exception of <tt>EventBusServiceJdo</tt>, all framework implementations have a
+    //     *     default order greater than Integer.MAX_VALUE - 50).
+    //     * </p>
+    //     */
+    //    String menuOrder() default Constants.MENU_ORDER_DEFAULT  ;
 
 
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java
index aff1a8a..abc7fc1 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/DomainServiceLayout.java
@@ -54,28 +54,28 @@ public @interface DomainServiceLayout {
      */
     MenuBar menuBar() default MenuBar.NOT_SPECIFIED;
 
-//TODO[2140] DomainServiceLayout 
-//    /**
-//     * Number in Dewey Decimal format representing the order.
-//     *
-//     * <p>
-//     * Same convention as {@link org.apache.isis.applib.annotation.MemberOrder#sequence()}.  If not specified, placed after any named.
-//     * </p>
-//     *
-//     * <p>
-//     *     Either this attribute or {@link DomainService#menuOrder()} can be used; they are equivalent.
-//     *     Typically this attribute is used for services with a {@link DomainService#nature() nature} of
-//     *     {@link NatureOfService#VIEW_MENU_ONLY} (these are visible in the UI) whereas
-//     *     {@link DomainService#menuOrder()} is used for services with a nature of
-//     *     {@link NatureOfService#DOMAIN domain} (which do not appear in the UI).
-//     * </p>
-//     *
-//     * <p>
-//     *     The default value is set to "Integer.MAX_VALUE - 100" so that any domain services intended to override the
-//     *     default implementations provided by the framework itself will do so without having to specify the
-//     *     menuOrder (with the exception of <tt>EventBusServiceJdo</tt>, all framework implementations have a
-//     *     default order greater than Integer.MAX_VALUE - 50).
-//     * </p>
-//     */
-//    String menuOrder() default Constants.MENU_ORDER_DEFAULT;
+    //TODO[2140] DomainServiceLayout 
+    //    /**
+    //     * Number in Dewey Decimal format representing the order.
+    //     *
+    //     * <p>
+    //     * Same convention as {@link org.apache.isis.applib.annotation.MemberOrder#sequence()}.  If not specified, placed after any named.
+    //     * </p>
+    //     *
+    //     * <p>
+    //     *     Either this attribute or {@link DomainService#menuOrder()} can be used; they are equivalent.
+    //     *     Typically this attribute is used for services with a {@link DomainService#nature() nature} of
+    //     *     {@link NatureOfService#VIEW_MENU_ONLY} (these are visible in the UI) whereas
+    //     *     {@link DomainService#menuOrder()} is used for services with a nature of
+    //     *     {@link NatureOfService#DOMAIN domain} (which do not appear in the UI).
+    //     * </p>
+    //     *
+    //     * <p>
+    //     *     The default value is set to "Integer.MAX_VALUE - 100" so that any domain services intended to override the
+    //     *     default implementations provided by the framework itself will do so without having to specify the
+    //     *     menuOrder (with the exception of <tt>EventBusServiceJdo</tt>, all framework implementations have a
+    //     *     default order greater than Integer.MAX_VALUE - 50).
+    //     * </p>
+    //     */
+    //    String menuOrder() default Constants.MENU_ORDER_DEFAULT;
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/NatureOfService.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/NatureOfService.java
index 183b957..5d9794a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/NatureOfService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/NatureOfService.java
@@ -31,46 +31,46 @@ package org.apache.isis.applib.annotation;
  */
 public enum NatureOfService {
 
-	/**
-	 * The service's actions appear in the viewer, for example in the menu bar.
-	 */
-	VIEW,
+    /**
+     * The service's actions appear in the viewer, for example in the menu bar.
+     */
+    VIEW,
 
-	/**
-	 * The services actions should only be visible in the REST API exposed by the Restful Objects viewer.
-	 */
-	VIEW_REST_ONLY,
+    /**
+     * The services actions should only be visible in the REST API exposed by the Restful Objects viewer.
+     */
+    VIEW_REST_ONLY,
 
-	/**
-	 * The service's actions do not appear on menus and are not contributed.
-	 */
-	DOMAIN,
+    /**
+     * The service's actions do not appear on menus and are not contributed.
+     */
+    DOMAIN,
 
-	;
+    ;
 
-	// -- BASIC PREDICATES
+    // -- BASIC PREDICATES
 
-	public boolean isViewRestOnly() {
-		return this == VIEW_REST_ONLY;
-	}
+    public boolean isViewRestOnly() {
+        return this == VIEW_REST_ONLY;
+    }
 
-	public boolean isView() {
-		return this == VIEW;
-	}
+    public boolean isView() {
+        return this == VIEW;
+    }
 
-	public boolean isDomain() {
-		return this == DOMAIN;
-	}
+    public boolean isDomain() {
+        return this == DOMAIN;
+    }
 
-	// -- ADVANCED PREDICATES
+    // -- ADVANCED PREDICATES
 
-	/**
-	 * @implNote introduced as a refactoring step, should be removed if no longer required
-	 */
-	public boolean isContributingToViewer() {
-		return
-			//this != NatureOfService.VIEW_MENU_ONLY &&
-	        this != NatureOfService.DOMAIN;
-	}
+    /**
+     * @implNote introduced as a refactoring step, should be removed if no longer required
+     */
+    public boolean isContributingToViewer() {
+        return
+                //this != NatureOfService.VIEW_MENU_ONLY &&
+                this != NatureOfService.DOMAIN;
+    }
 
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
index 69972dd..e66d2b2 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Property.java
@@ -254,11 +254,11 @@ public @interface Property {
      * @see <a href="http://www.w3schools.com/tags/att_input_accept.asp">http://www.w3schools.com</a>
      */
     String fileAccept() default "";
-    
-    
-    
-    
-    
+
+
+
+
+
     /**
      * TODO
      *
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Redirect.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Redirect.java
index da75e16..fe999c8 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Redirect.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Redirect.java
@@ -26,7 +26,7 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlType(
         namespace = "http://isis.apache.org/applib/layout/component"
-)
+        )
 public enum Redirect {
     /**
      * As defined by configuration property <code>isis.viewer.wicket.redirectEvenIfSameObject</code>
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
index e20d33b..553f2c7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
@@ -35,7 +35,7 @@ public enum SemanticsOf {
      * </ul>
      */
     SAFE_AND_REQUEST_CACHEABLE,
-    
+
     /**
      * Safe, with no side-effects. In other words, a query-only action.
      * <ul>
@@ -46,7 +46,7 @@ public enum SemanticsOf {
      * </ul>
      */
     SAFE,
-    
+
     /**
      * Post-conditions are always the same, irrespective as to how many times called.
      * <ul>
@@ -57,7 +57,7 @@ public enum SemanticsOf {
      * </ul>
      */
     IDEMPOTENT,
-    
+
     /**
      * Neither safe nor idempotent; every invocation is likely to change the state of the object.
      * <ul>
@@ -69,7 +69,7 @@ public enum SemanticsOf {
      * </ul>
      */
     NON_IDEMPOTENT,
-    
+
     /**
      * Post-conditions are always the same, irrespective as to how many times called.
      * <p>
@@ -82,7 +82,7 @@ public enum SemanticsOf {
      * </ul>
      */
     IDEMPOTENT_ARE_YOU_SURE,
-    
+
     /**
      * Neither safe nor idempotent; every invocation is likely to change the state of the object.
      * <p>
@@ -95,7 +95,7 @@ public enum SemanticsOf {
      * <li>Example: Increasing the quantity of a line item in an Order by 1.</li>
      */
     NON_IDEMPOTENT_ARE_YOU_SURE,
-    
+
     /**
      * Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta
      * annotations or superclasses/interfaces).
diff --git a/core/applib/src/main/java/org/apache/isis/applib/client/ActionParameterListBuilder.java b/core/applib/src/main/java/org/apache/isis/applib/client/ActionParameterListBuilder.java
index 6fe0eee..7bc74ed 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/client/ActionParameterListBuilder.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/client/ActionParameterListBuilder.java
@@ -31,14 +31,14 @@ import javax.ws.rs.client.Entity;
 public class ActionParameterListBuilder {
 
     private final Map<String, String> actionParameters = new LinkedHashMap<>();
-    
+
     public ActionParameterListBuilder addActionParameter(String parameterName, String parameterValue) {
         actionParameters.put(parameterName, parameterValue != null 
                 ? value("\"" + parameterValue + "\"") 
                         : value(JSON_NULL_LITERAL));
         return this;
     }
-    
+
     public ActionParameterListBuilder addActionParameter(String parameterName, int parameterValue) {
         actionParameters.put(parameterName, value(""+parameterValue));
         return this;
@@ -48,55 +48,55 @@ public class ActionParameterListBuilder {
         actionParameters.put(parameterName, value(""+parameterValue));
         return this;
     }
-    
+
     public ActionParameterListBuilder addActionParameter(String parameterName, byte parameterValue) {
         actionParameters.put(parameterName, value(""+parameterValue));
         return this;
     }
-    
+
     public ActionParameterListBuilder addActionParameter(String parameterName, short parameterValue) {
         actionParameters.put(parameterName, value(""+parameterValue));
         return this;
     }
-    
+
     public ActionParameterListBuilder addActionParameter(String parameterName, double parameterValue) {
         actionParameters.put(parameterName, value(""+parameterValue));
         return this;
     }
-    
+
     public ActionParameterListBuilder addActionParameter(String parameterName, float parameterValue) {
         actionParameters.put(parameterName, value(""+parameterValue));
         return this;
     }
-    
+
     public ActionParameterListBuilder addActionParameter(String parameterName, boolean parameterValue) {
         actionParameters.put(parameterName, value(""+parameterValue));
         return this;
     }
-    
+
     public Entity<String> build() {
-        
+
         final StringBuilder sb = new StringBuilder();
         sb.append("{\n")
         .append(actionParameters.entrySet().stream()
                 .map(this::toJson)
                 .collect(Collectors.joining(",\n")))
         .append("\n}");
-        
+
         return Entity.json(sb.toString());
     }
-    
+
     // -- HELPER
-    
+
     private final static String JSON_NULL_LITERAL = "null";
 
     private String value(String valueLiteral) {
         return "{\"value\" : " + valueLiteral + "}";
     }
-    
+
     private String toJson(Map.Entry<String, String> entry) {
         return "   \""+entry.getKey()+"\": "+entry.getValue();
     }
-   
-    
+
+
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/client/ResponseDigest.java b/core/applib/src/main/java/org/apache/isis/applib/client/ResponseDigest.java
index e65de5f..24099d2 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/client/ResponseDigest.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/client/ResponseDigest.java
@@ -39,7 +39,7 @@ public class ResponseDigest<T> {
     public static <T> ResponseDigest<T> of(Response response, Class<T> entityType) {
         return new ResponseDigest<>(response, entityType).digest();
     }
-    
+
     /** a-synchronous response failure processing */
     public static <T> ResponseDigest<T> ofAsyncFailure(
             Future<Response> asyncResponse, 
@@ -52,110 +52,110 @@ public class ResponseDigest<T> {
         } catch (Exception e) {
             response = null;
         }
-        
+
         final ResponseDigest<T> failureDigest = new ResponseDigest<>(response, entityType);
         return failureDigest.digestAsyncFailure(asyncResponse.isCancelled(), failure);
     }
-    
+
     private final Response response;
     private final Class<T> entityType;
-    
+
     private T entity;
     private Exception failureCause;
-    
-    
+
+
     protected ResponseDigest(Response response, Class<T> entityType) {
         this.response = response;
         this.entityType = entityType;
     }
-    
+
     public boolean isSuccess() {
         return !isFailure();
     }
-    
+
     public boolean isFailure() {
         return failureCause!=null;
     }
-    
+
     public T get(){
         return entity;
     }
-    
+
     public Exception getFailureCause(){
         return failureCause;
     }
-    
+
     public T ifSuccessGetOrElseMap(Function<Exception, T> failureMapper) {
         return isSuccess() 
                 ? get()
                         : failureMapper.apply(getFailureCause());
     }
-    
+
     public <X> X ifSuccessMapOrElseMap(Function<T, X> successMapper, Function<Exception, X> failureMapper) {
         return isSuccess() 
                 ? successMapper.apply(get())
                         : failureMapper.apply(getFailureCause());
     }
-    
+
     // -- HELPER
-    
+
     private ResponseDigest<T> digest() {
-        
+
         if(response==null) {
             entity = null;
             failureCause = new NoSuchElementException();
             return this;
         }
-        
+
         if(!response.hasEntity()) {
             entity = null;
             failureCause = new NoSuchElementException(defaultFailureMessage(response));
             return this;
         }
-        
+
         if(response.getStatusInfo().getFamily() != Family.SUCCESSFUL) {
             entity = null;
             failureCause = new RestfulClientException(defaultFailureMessage(response));
             return this;
         }
-        
+
         try {
             entity = response.readEntity(entityType);
         } catch (Exception e) {
             entity = null;
             failureCause = new RestfulClientException("failed to read JAX-RS response content", e);
         }
-        
+
         return this;
     }
-    
+
     private ResponseDigest<T> digestAsyncFailure(boolean isCancelled, Exception failure) {
 
         entity = null;
 
-        
+
         if(isCancelled) {
             failureCause = new RestfulClientException("Async JAX-RS request was canceled", failure);
             return this;
         }
-        
+
         if(response==null) {
             failureCause = new RestfulClientException("Async JAX-RS request failed", failure);
             return this;
         }
-        
+
         failureCause = new RestfulClientException("Async JAX-RS request failed " 
                 + defaultFailureMessage(response), failure);
         return this;
-        
+
     }
-    
+
     private String defaultFailureMessage(Response response) {
         String failureMessage = "non-successful JAX-RS response: " + 
                 String.format("%s (Http-Status-Code: %d)", 
                         response.getStatusInfo().getReasonPhrase(),
                         response.getStatus());
-        
+
         if(response.hasEntity()) {
             try {
                 String jsonContent = _Strings.read((InputStream) response.getEntity(), StandardCharsets.UTF_8);
@@ -164,11 +164,11 @@ public class ResponseDigest<T> {
                 // ignore
             }
         }
-        
+
         return failureMessage;
     }
 
 
-    
-    
+
+
 }
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 87ed68b..1019e94 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
@@ -91,7 +91,7 @@ Future<Response> asyncResponse = request
 
 CompletableFuture<ResponseDigest<MyObject>> digestFuture = 
                 client.digest(asyncResponse, MyObject.class);
-        
+
 ResponseDigest<MyObject> digest = digestFuture.get(); // blocking
 }
 
@@ -130,22 +130,22 @@ if(digest.isSuccess()) {
  */
 @Log4j2
 public class RestfulClient {
-    
+
     public static String DEFAULT_RESPONSE_CONTENT_TYPE = "application/json;profile=\"urn:org.apache.isis/v1\"";
 
     private RestfulClientConfig clientConfig;
     private Client client;
-    
+
     public static RestfulClient ofConfig(RestfulClientConfig clientConfig) {
         RestfulClient restClient = new RestfulClient();
         restClient.init(clientConfig);
         return restClient;
     }
-    
+
     public void init(RestfulClientConfig clientConfig) {
         this.clientConfig = clientConfig;
         client = ClientBuilder.newClient();
-        
+
         registerDefaultJsonProvider();
         registerBasicAuthFilter();
         registerRequestDebugLoggingFilter();
@@ -154,17 +154,17 @@ public class RestfulClient {
     public RestfulClientConfig getConfig() {
         return clientConfig;
     }
-    
+
     public Client getJaxRsClient() {
         return client;
     }
-    
+
     // -- REQUEST BUILDER
-    
+
     public Builder request(String path, SuppressionType ... suppressionTypes) {
         return request(path, SuppressionType.setOf(suppressionTypes));
     }
-    
+
     public Builder request(String path, EnumSet<SuppressionType> suppressionTypes) {
         final String responseContentType = DEFAULT_RESPONSE_CONTENT_TYPE
                 + toSuppressionLiteral(suppressionTypes);
@@ -173,40 +173,40 @@ public class RestfulClient {
     }
 
     // -- ARGUMENT BUILDER
-    
+
     public ActionParameterListBuilder arguments() {
         return new ActionParameterListBuilder();
     }
-    
+
     // -- RESPONSE PROCESSING (SYNC)
-    
+
     public <T> ResponseDigest<T> digest(Response response, Class<T> entityType) {
         return ResponseDigest.of(response, entityType);
     }
-    
+
     // -- RESPONSE PROCESSING (ASYNC)
-    
+
     public <T> CompletableFuture<ResponseDigest<T>> digest(
             final Future<Response> asyncResponse, 
             final Class<T> entityType) {
-        
+
         final CompletableFuture<ResponseDigest<T>> completableFuture = CompletableFuture.supplyAsync(()->{
             try {
                 Response response = asyncResponse.get();
                 ResponseDigest<T> digest = digest(response, entityType);
-                
+
                 return digest;
-                
+
             } catch (Exception e) {
                 return ResponseDigest.ofAsyncFailure(asyncResponse, entityType, e);
             }
         });
-        
+
         return completableFuture;
     }
-    
+
     // -- FILTER
-    
+
     private void registerDefaultJsonProvider() {
         try {
             Class<?> MOXyJsonProvider = _Context.loadClass("org.eclipse.persistence.jaxb.rs.MOXyJsonProvider");
@@ -217,7 +217,7 @@ public class RestfulClient {
                     + " Are you missing a maven dependency?");
         }
     }
-    
+
     private void registerBasicAuthFilter() {
         if(clientConfig.isUseBasicAuth()){
             final Credentials credentials = Credentials.of(
@@ -226,15 +226,15 @@ public class RestfulClient {
             client.register(BasicAuthFilter.of(credentials));
         }
     }
-    
+
     private void registerRequestDebugLoggingFilter() {
         if(clientConfig.isUseRequestDebugLogging()){
             client.register(new RestfulLoggingFilter());
         }
     }
-    
+
     // -- HELPER
-    
+
     private String relativePathToUri(String path) {
         final String baseUri = _Strings.suffix(clientConfig.getRestfulBase(), "/");
         while(path.startsWith("/")) {
@@ -242,20 +242,20 @@ public class RestfulClient {
         }
         return baseUri + path;
     }
-    
+
     private String toSuppressionLiteral(EnumSet<SuppressionType> suppressionTypes) {
         final String suppressionSetLiteral = stream(suppressionTypes)
                 .map(SuppressionType::name)
                 .collect(Collectors.joining(","));
-        
+
         if(_Strings.isNotEmpty(suppressionSetLiteral)) {
             return ";suppress=" + suppressionSetLiteral;
         }
-        
+
         return "";
     }
 
 
-    
-    
+
+
 }
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 f0af247..2e5932b 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
@@ -62,15 +62,15 @@ public class BasicAuthFilter implements ClientRequestFilter {
             return "" + user + ":" + pass;
         }
     }
-    
+
     public static BasicAuthFilter of(Credentials credentials) {
         BasicAuthFilter filter = new BasicAuthFilter();
         filter.setCredentials(credentials);
         return filter;
     }
-    
+
     private Credentials credentials = Credentials.empty();
-    
+
     public Credentials getCredentials() {
         return credentials;
     }
@@ -85,7 +85,7 @@ public class BasicAuthFilter implements ClientRequestFilter {
     }
 
     // -- HELPER
-    
+
     private String getAuthorizationValue() {
         try {
             return "Basic " + DatatypeConverter.printBase64Binary(credentials.toString().getBytes("UTF-8"));
@@ -93,5 +93,5 @@ public class BasicAuthFilter implements ClientRequestFilter {
             throw new IllegalStateException("Cannot encode with UTF-8", ex);
         }
     }
-    
+
 }
\ No newline at end of file
diff --git a/core/applib/src/main/java/org/apache/isis/applib/client/log/RestfulLoggingFilter.java b/core/applib/src/main/java/org/apache/isis/applib/client/log/RestfulLoggingFilter.java
index 062cabe..6213592 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/client/log/RestfulLoggingFilter.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/client/log/RestfulLoggingFilter.java
@@ -45,7 +45,7 @@ public class RestfulLoggingFilter implements ClientRequestFilter, ClientResponse
     public void filter(ClientRequestContext requestContext) throws IOException {
         final String endpoint = requestContext.getUri().toString();
         final String method = requestContext.getMethod();
-        
+
         Exception acceptableMediaTypeParsingFailure;
         try {
             @SuppressWarnings("unused")
@@ -56,32 +56,32 @@ public class RestfulLoggingFilter implements ClientRequestFilter, ClientResponse
         }
         final String acceptHeaderParsing = acceptableMediaTypeParsingFailure != null
                 ? "Failed to parse accept header, cause: " + acceptableMediaTypeParsingFailure.getMessage()
-                    : "OK";
-        
-        final String headers = requestContext.getStringHeaders().entrySet().stream()
-                .map(entry->entry.toString())
-                .map(this::obscureAuthHeader)
-                .collect(Collectors.joining(",\n\t"));
-        
-        final String requestBody = requestContext.getEntity().toString();
-        
-        final StringBuilder sb = new StringBuilder();
-        sb.append("\n")
-        .append("---------- JAX-RS REQUEST -------------\n")
-        .append("uri: ").append(endpoint).append("\n")
-        .append("method: ").append(method).append("\n")
-        .append("accept-header-parsing: ").append(acceptHeaderParsing).append("\n")
-        .append("headers: \n\t").append(headers).append("\n")
-        .append("request-body: ").append(requestBody).append("\n")
-        .append("----------------------------------------\n")
-        ;
-        
-        log.info(sb.toString());
+                : "OK";
+
+                final String headers = requestContext.getStringHeaders().entrySet().stream()
+                        .map(entry->entry.toString())
+                        .map(this::obscureAuthHeader)
+                        .collect(Collectors.joining(",\n\t"));
+
+                final String requestBody = requestContext.getEntity().toString();
+
+                final StringBuilder sb = new StringBuilder();
+                sb.append("\n")
+                .append("---------- JAX-RS REQUEST -------------\n")
+                .append("uri: ").append(endpoint).append("\n")
+                .append("method: ").append(method).append("\n")
+                .append("accept-header-parsing: ").append(acceptHeaderParsing).append("\n")
+                .append("headers: \n\t").append(headers).append("\n")
+                .append("request-body: ").append(requestBody).append("\n")
+                .append("----------------------------------------\n")
+                ;
+
+                log.info(sb.toString());
     }
-    
+
     @Override
     public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {
-        
+
         final InputStream inputStream = responseContext.getEntityStream();
         final String responseBody;
         if(inputStream!=null) {
@@ -90,38 +90,38 @@ public class RestfulLoggingFilter implements ClientRequestFilter, ClientResponse
         } else {
             responseBody = "null";
         }
-        
+
         final StringBuilder sb = new StringBuilder();
         sb.append("\n")
         .append("---------- JAX-RS RESPONSE -------------\n")
         .append("response-body: ").append(responseBody).append("\n")
         .append("----------------------------------------\n")
         ;
-        
+
         log.info(sb.toString());
-        
+
     }
-       
+
     // -- HELPER
-    
+
     private final String basicAuthMagic = "Authorization=[Basic "; 
-    
+
     String obscureAuthHeader(String keyValueLiteral) {
         if(_Strings.isEmpty(keyValueLiteral)) {
             return keyValueLiteral;
         }
         if(keyValueLiteral.startsWith(basicAuthMagic)) {
-            
+
             final String obscured = _Strings.padEnd(basicAuthMagic, keyValueLiteral.length() - 1, '*') + "]";
             return obscured;
-            
+
         }
         return keyValueLiteral;
     }
 
 
-    
-    
-    
-    
+
+
+
+
 }
\ No newline at end of file
diff --git a/core/applib/src/main/java/org/apache/isis/applib/events/ActionArgumentUsabilityEvent.java b/core/applib/src/main/java/org/apache/isis/applib/events/ActionArgumentUsabilityEvent.java
index ecd0b6f..4fa08c3 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/events/ActionArgumentUsabilityEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/events/ActionArgumentUsabilityEvent.java
@@ -63,7 +63,7 @@ public class ActionArgumentUsabilityEvent extends UsabilityEvent {
 
     @Override
     public String getReasonMessage() {
-    	return String.format("Invalid action argument. Position: %s. Reason: %s", this.getPosition(), super.getReasonMessage());
+        return String.format("Invalid action argument. Position: %s. Reason: %s", this.getPosition(), super.getReasonMessage());
     }
-    
+
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/events/ActionArgumentVisibilityEvent.java b/core/applib/src/main/java/org/apache/isis/applib/events/ActionArgumentVisibilityEvent.java
index 9bd35b2..2fe8584 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/events/ActionArgumentVisibilityEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/events/ActionArgumentVisibilityEvent.java
@@ -63,7 +63,7 @@ public class ActionArgumentVisibilityEvent extends VisibilityEvent {
 
     @Override
     public String getReasonMessage() {
-    	return String.format("Invalid action argument. Position: %s. Reason: %s", this.getPosition(), super.getReasonMessage());
+        return String.format("Invalid action argument. Position: %s. Reason: %s", this.getPosition(), super.getReasonMessage());
     }
-    
+
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/events/domain/ActionDomainEvent.java b/core/applib/src/main/java/org/apache/isis/applib/events/domain/ActionDomainEvent.java
index bf31b84..b60be05 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/events/domain/ActionDomainEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/events/domain/ActionDomainEvent.java
@@ -73,26 +73,26 @@ public abstract class ActionDomainEvent<S> extends AbstractDomainEvent<S> {
     public ActionDomainEvent() {
     }
 
-//    // -- command
-//    private Command command;
-//
-//    /**
-//     * @deprecated - use {@link CommandContext#getCommand()} to obtain the current {@link Command}.
-//     */
-//    @Deprecated
-//    public Command getCommand() {
-//        return command;
-//    }
-//
-//    /**
-//     * Not API - set by the framework.
-//     *
-//     * @deprecated - the corresponding {@link #getCommand()} should not be called, instead use {@link CommandContext#getCommand()} to obtain the current {@link Command}.
-//     */
-//    @Deprecated
-//    public void setCommand(Command command) {
-//        this.command = command;
-//    }
+    //    // -- command
+    //    private Command command;
+    //
+    //    /**
+    //     * @deprecated - use {@link CommandContext#getCommand()} to obtain the current {@link Command}.
+    //     */
+    //    @Deprecated
+    //    public Command getCommand() {
+    //        return command;
+    //    }
+    //
+    //    /**
+    //     * Not API - set by the framework.
+    //     *
+    //     * @deprecated - the corresponding {@link #getCommand()} should not be called, instead use {@link CommandContext#getCommand()} to obtain the current {@link Command}.
+    //     */
+    //    @Deprecated
+    //    public void setCommand(Command command) {
+    //        this.command = command;
+    //    }
 
 
     // -- actionSemantics
@@ -147,12 +147,14 @@ public abstract class ActionDomainEvent<S> extends AbstractDomainEvent<S> {
     /**
      * Populated only for mixins; holds the underlying domain object that the mixin contributes to.
      */
+    @Override
     public Object getMixedIn() {
         return mixedIn;
     }
     /**
      * Not API - set by the framework.
      */
+    @Override
     public void setMixedIn(final Object mixedIn) {
         this.mixedIn = mixedIn;
     }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStream.java b/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStream.java
index 1f8b3ff..0115330 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStream.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStream.java
@@ -36,12 +36,12 @@ public interface EventStream {
     Class<?> getSourceType();
 
     void listenWhile(Predicate<EventStreamSource> listener);
-    
+
     void fire(EventStreamSource source);
-    
+
     void close();
-    
+
     void awaitClose() throws InterruptedException;
-    
-    
+
+
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStreamService.java b/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStreamService.java
index 3db4cbd..37630df 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStreamService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStreamService.java
@@ -34,7 +34,7 @@ public interface EventStreamService {
         SIMPLE,
         REQUIRES_NEW_SESSION
     }
-    
+
     Optional<EventStream> lookupByType(Class<?> sourceType);
 
     void submit(EventStreamSource task, ExecutionBehavior executionBehavior);
diff --git a/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStreamSource.java b/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStreamSource.java
index f28316d..8d67184 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStreamSource.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/events/sse/EventStreamSource.java
@@ -32,11 +32,11 @@ import org.apache.isis.applib.value.Markup;
 public interface EventStreamSource {
 
     void run(EventStream eventStream);
-    
+
     Markup getPayload();
-    
+
     // -- PROPERTY ANNOTATION DEFAULT
-    
+
     /**
      * This class is the default for the
      * {@link org.apache.isis.applib.annotation.Property#observe()} annotation attribute.  
@@ -52,11 +52,11 @@ public interface EventStreamSource {
         public Markup getPayload() {
             return new Markup();
         }
-        
+
     }
-    
+
     // -- BASIC PREDICATES
-    
+
     public static boolean isObservable(Class<?> type) {
         if(type==null) {
             return false;
@@ -66,5 +66,5 @@ public interface EventStreamSource {
         }
         return !type.equals(Noop.class);
     }
-    
+
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBars.java b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBars.java
index c99b6b6..1be7b9e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBars.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBars.java
@@ -25,11 +25,11 @@ import org.apache.isis.applib.layout.component.ServiceActionLayoutData;
 
 public interface MenuBars {
 
-	@FunctionalInterface
+    @FunctionalInterface
     interface Visitor {
         void visit(final ServiceActionLayoutData serviceActionLayoutData);
     }
-	
+
     String getTnsAndSchemaLocation();
 
     void setTnsAndSchemaLocation(final String tnsAndSchemaLocation);
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java
index 171bd93..a99eb21 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java
@@ -53,15 +53,15 @@ public abstract class MenuBarsAbstract implements MenuBars, Serializable {
     @Programmatic
     @XmlTransient
     public LinkedHashMap<String, ServiceActionLayoutData> getAllServiceActionsByObjectTypeAndId() {
-        
-    	val serviceActionsByObjectTypeAndId = 
-        		_Maps.<String, ServiceActionLayoutData>newLinkedHashMap();
-        
+
+        val serviceActionsByObjectTypeAndId = 
+                _Maps.<String, ServiceActionLayoutData>newLinkedHashMap();
+
         visit(serviceActionLayoutData -> {
-                serviceActionsByObjectTypeAndId
-                .put(serviceActionLayoutData.getObjectTypeAndId(), serviceActionLayoutData);
+            serviceActionsByObjectTypeAndId
+            .put(serviceActionLayoutData.getObjectTypeAndId(), serviceActionLayoutData);
         });
-        
+
         return serviceActionsByObjectTypeAndId;
     }
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java
index 02421b9..d52e577 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java
@@ -127,25 +127,25 @@ public class BS3MenuBars extends org.apache.isis.applib.layout.menubars.MenuBars
         @Override public void postVisit(final BS3MenuSection menuSection) { }
 
         @Override public void visit(final ServiceActionLayoutData serviceActionLayoutData) { }
-        
+
         // -- PREDEFINED SHORTCUTS
-        
+
         public static VisitorAdapter visitingMenuSections(Consumer<BS3MenuSection> onVisit) {
-        	return new VisitorAdapter() {
-        		@Override public void visit(final BS3MenuSection section) { 
-        			onVisit.accept(section);
-        		}
-        	};
+            return new VisitorAdapter() {
+                @Override public void visit(final BS3MenuSection section) { 
+                    onVisit.accept(section);
+                }
+            };
         }
-        
+
         public static VisitorAdapter visitingMenus(Consumer<BS3Menu> onVisit) {
-        	return new VisitorAdapter() {
-        		@Override public void visit(final BS3Menu menu) { 
-        			onVisit.accept(menu);
-        		}
-        	};
+            return new VisitorAdapter() {
+                @Override public void visit(final BS3Menu menu) { 
+                    onVisit.accept(menu);
+                }
+            };
         }
-        
+
     }
 
     @Override
diff --git a/core/applib/src/main/java/org/apache/isis/applib/mixins/MixinConstants.java b/core/applib/src/main/java/org/apache/isis/applib/mixins/MixinConstants.java
index e1911e3..8f7046a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/mixins/MixinConstants.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/mixins/MixinConstants.java
@@ -24,9 +24,9 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class MixinConstants {
 
-	public static final String METADATA_LAYOUT_GROUPNAME = "metadata";
-	public static final String FILENAME_PROPERTY_NAME = "File name";
-	public static final String FILENAME_PROPERTY_DESCRIPTION = "File name extension can be omitted.";
-	
-	
+    public static final String METADATA_LAYOUT_GROUPNAME = "metadata";
+    public static final String FILENAME_PROPERTY_NAME = "File name";
+    public static final String FILENAME_PROPERTY_DESCRIPTION = "File name extension can be omitted.";
+
+
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java b/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java
index e1879c0..009d13f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXml.java
@@ -57,11 +57,11 @@ public class Dto_downloadXml {
             )
     @MemberOrder(sequence = "500.1")
     public Object act(
-    		
-    		// PARAM 0
-    		@ParameterLayout(
-            		named = MixinConstants.FILENAME_PROPERTY_NAME,
-            		describedAs = MixinConstants.FILENAME_PROPERTY_DESCRIPTION)
+
+            // PARAM 0
+            @ParameterLayout(
+                    named = MixinConstants.FILENAME_PROPERTY_NAME,
+                    describedAs = MixinConstants.FILENAME_PROPERTY_DESCRIPTION)
             final String fileName) {
 
         val xmlString = jaxbService.toXml(holder);
@@ -69,7 +69,7 @@ public class Dto_downloadXml {
     }
 
     // -- PARAM 0
-    
+
     public String default0Act() {
         return holder.getClass().getName();
     }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java b/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
index 71e7b5c..974b93c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
@@ -61,20 +61,20 @@ public class Dto_downloadXsd {
             )
     @MemberOrder(sequence = "500.2")
     public Object act(
-    		
-    		// PARAM 0
-    		@ParameterLayout(
-            		named = MixinConstants.FILENAME_PROPERTY_NAME,
-            		describedAs = MixinConstants.FILENAME_PROPERTY_DESCRIPTION)
+
+            // PARAM 0
+            @ParameterLayout(
+                    named = MixinConstants.FILENAME_PROPERTY_NAME,
+                    describedAs = MixinConstants.FILENAME_PROPERTY_DESCRIPTION)
             final String fileName,
-            
+
             // PARAM 1
             final JaxbService.IsisSchemas isisSchemas) {
 
         val schemaMap = jaxbService.toXsd(holder, isisSchemas);
 
         if(schemaMap.isEmpty()) {
-        	val msg = String.format(
+            val msg = String.format(
                     "No schemas were generated for %s; programming error?", 
                     holder.getClass().getName());
             messageService.warnUser(msg);
@@ -87,39 +87,39 @@ public class Dto_downloadXsd {
         }
 
         val zipWriter = ZipWriter.newInstance();
-        
+
         for (Map.Entry<String, String> entry : schemaMap.entrySet()) {
             val namespaceUri = entry.getKey();
             val schemaText = entry.getValue();
             zipWriter.nextEntry(zipEntryNameFor(namespaceUri), writer->{
-            	writer.write(schemaText);
+                writer.write(schemaText);
             });
         }
-            
+
         return BlobClobFactory.blobZip(fileName, zipWriter.toBytes());
 
     }
 
     // -- PARAM 0
-    
+
     public String default0Act() {
         return holder.getClass().getName();
     }
 
     // -- PARAM 1
-    
+
     public JaxbService.IsisSchemas default1Act() {
         return JaxbService.IsisSchemas.IGNORE;
     }
 
     // -- HELPER
-    
+
     private static String zipEntryNameFor(final String namespaceUri) {
         return namespaceUri + ".xsd";
     }
 
     // -- DEPENDENCIES
-    
+
     @Inject MessageService messageService;
     @Inject JaxbService jaxbService;
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java b/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java
index c500d6b..877316d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_downloadLayoutXml.java
@@ -58,13 +58,13 @@ public class Object_downloadLayoutXml {
             )
     @MemberOrder(name = MixinConstants.METADATA_LAYOUT_GROUPNAME, sequence = "700.1")
     public Object act(
-    		
-    		// PARAM 0
-    		@ParameterLayout(
-            		named = MixinConstants.FILENAME_PROPERTY_NAME,
-            		describedAs = MixinConstants.FILENAME_PROPERTY_DESCRIPTION)
+
+            // PARAM 0
+            @ParameterLayout(
+                    named = MixinConstants.FILENAME_PROPERTY_NAME,
+                    describedAs = MixinConstants.FILENAME_PROPERTY_DESCRIPTION)
             final String fileName,
-            
+
             // PARAM 1
             final LayoutService.Style style) {
 
@@ -73,17 +73,17 @@ public class Object_downloadLayoutXml {
     }
 
     // -- PARAM 0 (fileName)
-    
+
     public String default0Act() {
         return holder.getClass().getSimpleName() + ".layout";
     }
-    
+
     // -- PARAM 1 (style)
-    
+
     public LayoutService.Style default1Act() {
         return LayoutService.Style.NORMALIZED;
     }
-    
+
     // -- DEPENDENCIES
 
     @Inject LayoutService layoutService;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java b/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java
index e220df0..524b4d6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/mixins/layout/Object_openRestApi.java
@@ -63,12 +63,12 @@ public class Object_openRestApi {
         val objType = bookmark.getObjectType();
         val objId = bookmark.getIdentifier();
         val restfulPathIfAny = _Resources.getRestfulPathIfAny();
-        
+
         return restfulPathIfAny!=null
-        		? new LocalResourcePath(String.format(
-        				"/%s/objects/%s/%s", restfulPathIfAny, objType, objId))
-        				: new LocalResourcePath(String.format(
-                				"/objects/%s/%s", objType, objId));
+                ? new LocalResourcePath(String.format(
+                        "/%s/objects/%s/%s", restfulPathIfAny, objType, objId))
+                        : new LocalResourcePath(String.format(
+                                "/objects/%s/%s", objType, objId));
     }
 
     @Inject BookmarkService bookmarkService;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetaModelXml.java b/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetaModelXml.java
index cee515f..1f1bc9b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetaModelXml.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_downloadMetaModelXml.java
@@ -52,44 +52,44 @@ public class Object_downloadMetaModelXml {
             domainEvent = ActionDomainEvent.class,
             semantics = SemanticsOf.SAFE,
             restrictTo = RestrictTo.PROTOTYPING
-    )
+            )
     @ActionLayout(
             contributed = Contributed.AS_ACTION,
             cssClassFa = "fa-download",
             position = ActionLayout.Position.PANEL_DROPDOWN
-    )
+            )
     @MemberOrder(name = MixinConstants.METADATA_LAYOUT_GROUPNAME, sequence = "700.2")
     public Object act(
-    		
-    		// PARAM 0
-    		@ParameterLayout(
-            		named = MixinConstants.FILENAME_PROPERTY_NAME,
-            		describedAs = MixinConstants.FILENAME_PROPERTY_DESCRIPTION)
+
+            // PARAM 0
+            @ParameterLayout(
+                    named = MixinConstants.FILENAME_PROPERTY_NAME,
+                    describedAs = MixinConstants.FILENAME_PROPERTY_DESCRIPTION)
             final String fileName) {
 
-    	val pkg = holder.getClass().getPackage().getName();
-    	
+        val pkg = holder.getClass().getPackage().getName();
+
         val config =
                 new MetaModelService.Config()
-                        .withIgnoreNoop()
-                        .withIgnoreAbstractClasses()
-                        .withIgnoreInterfaces()
-                        .withIgnoreBuiltInValueTypes()
-                        .withPackagePrefix(pkg);
-        
+                .withIgnoreNoop()
+                .withIgnoreAbstractClasses()
+                .withIgnoreInterfaces()
+                .withIgnoreBuiltInValueTypes()
+                .withPackagePrefix(pkg);
+
         val metamodelDto = metaModelService.exportMetaModel(config);
 
         val className = holder.getClass().getName();
-        
+
         val domainClassDtos = metamodelDto.getDomainClassDto();
         domainClassDtos.removeIf(classDto->!Objects.equals(classDto.getId(), className));
-        
+
         val xmlString = jaxbService.toXml(metamodelDto);
 
         return BlobClobFactory.clobXml(fileName, xmlString);
-        		
+
     }
-    
+
     // -- PARAM 0
 
     public String default0Act() {
@@ -97,11 +97,11 @@ public class Object_downloadMetaModelXml {
     }
 
     // -- DEPENDENCIES
-    
+
     @Inject MetaModelService metaModelService;
     @Inject JaxbService jaxbService;
     @Inject MetaModelServicesMenu metaModelServicesMenu;
 
-    
+
 
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java b/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
index c8bf105..c5573ca 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectIdentifier.java
@@ -48,10 +48,10 @@ public class Object_objectIdentifier {
     @Action(
             domainEvent = ActionDomainEvent.class,
             semantics = SemanticsOf.SAFE
-    )
+            )
     @ActionLayout(
-    		contributed = Contributed.AS_ASSOCIATION,
-    		hidden = Where.ALL_TABLES)
+            contributed = Contributed.AS_ASSOCIATION,
+            hidden = Where.ALL_TABLES)
     @Property()
     @MemberOrder(name = MixinConstants.METADATA_LAYOUT_GROUPNAME, sequence = "700.2")
     public String prop() {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectType.java b/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectType.java
index c86135c..44fe4fe 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectType.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/mixins/metamodel/Object_objectType.java
@@ -48,10 +48,10 @@ public class Object_objectType {
     @Action(
             domainEvent = ActionDomainEvent.class,
             semantics = SemanticsOf.SAFE
-    )
+            )
     @ActionLayout(
-    		contributed = Contributed.AS_ASSOCIATION,
-    		hidden = Where.ALL_TABLES)
+            contributed = Contributed.AS_ASSOCIATION,
+            hidden = Where.ALL_TABLES)
     @Property()
     @MemberOrder(name = MixinConstants.METADATA_LAYOUT_GROUPNAME, sequence = "700.1")
     public String prop() {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService.java b/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService.java
index a148f20..a41b0dc 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundCommandService.java
@@ -46,13 +46,14 @@ public interface BackgroundCommandService extends AutoCloseable {
             final String targetClassName,
             final String targetActionName,
             final String targetArgs);
-    
+
     /**
      * @since 2.0
      */
     // refined from AutoCloseable to not throw catched exceptions
+    @Override
     default void close() { 
-        
+
     }
 
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundService.java b/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundService.java
index 2e6de33..ef23918 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/background/BackgroundService.java
@@ -51,6 +51,6 @@ public interface BackgroundService {
      * signature of the action to be invoked in the background.
      */
     <T> T executeMixin(Class<T> mixinClass, Object mixedIn);
-    
+
 
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java b/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
index b9ee9de..ce84f41 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
@@ -114,7 +114,7 @@ public interface Command extends HasUniqueId {
      * </p>
      */
     String getTargetAction();
-    
+
     // -- arguments (property)
 
     /**
@@ -293,7 +293,7 @@ public interface Command extends HasUniqueId {
      * <b>NOT API</b>: intended to be called only by the framework.
      */
     public static interface Internal {
-        
+
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          *
@@ -336,7 +336,7 @@ public interface Command extends HasUniqueId {
          */
         void setTargetAction(String targetAction);
 
-        
+
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          *
@@ -344,27 +344,27 @@ public interface Command extends HasUniqueId {
          * Implementation notes: set when the action is invoked (in the <tt>ActionInvocationFacet</tt>).
          */
         void setArguments(final String arguments);
-        
+
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          */
         void setExecutor(final Executor executor);   
-        
+
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          */
         void setResult(Bookmark resultBookmark);
-        
+
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          */
         void setException(String stackTrace);
-        
+
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          */
         void setParent(final Command parent);
-        
+
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          *
@@ -378,7 +378,7 @@ public interface Command extends HasUniqueId {
          * {@link Interaction.Execution#setCompletedAt(Timestamp)}.
          */
         void setCompletedAt(Timestamp completedAt);
-        
+
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          *
@@ -409,12 +409,12 @@ public interface Command extends HasUniqueId {
          * Implementation notes: set when the action is invoked (in the <tt>ActionInvocationFacet</t>).
          */
         void setTargetClass(String targetClass);
-        
+
         /**
          * <b>NOT API</b>: intended to be called only by the framework.
          */
         void setPersistence(final CommandPersistence persistence);
-        
+
         /**
          * Hint that this {@link Command} should be persisted, if possible.
          *
@@ -424,13 +424,13 @@ public interface Command extends HasUniqueId {
          * @see #getPersistence()
          */
         void setPersistHint(boolean persistHint);
-        
+
     }
-    
+
     /**
      * <b>NOT API</b>: intended to be called only by the framework.
      */
     @Programmatic @Deprecated // bad API design
     Internal internal();
-    
+
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java b/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java
index f13b5a8..d8b97be 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java
@@ -204,9 +204,9 @@ public class CommandDefault implements Command {
         return toString.toString(this);
     }
 
-    
+
     // -- FRAMEWORK INTERNATA
-    
+
     private final Command.Internal INTERNAL = new Command.Internal() {
         @Override
         public void setMemberIdentifier(String actionIdentifier) {
@@ -273,7 +273,7 @@ public class CommandDefault implements Command {
             CommandDefault.this.executor = executor;
         }
     };
-    
+
     @Override
     public Command.Internal internal() {
         return INTERNAL;
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 bd1535d..8fcdfe2 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
@@ -119,9 +119,9 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
     @Override
     @PostConstruct
     public void init() {
-      //FIXME[2039]        
-//        final String prop = properties.get(KEY_LOG_RECOGNIZED_EXCEPTIONS);
-//        this.logRecognizedExceptions = Boolean.parseBoolean(prop);
+        //FIXME[2039]        
+        //        final String prop = properties.get(KEY_LOG_RECOGNIZED_EXCEPTIONS);
+        //        this.logRecognizedExceptions = Boolean.parseBoolean(prop);
     }
 
     @Override
@@ -167,5 +167,5 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
     }
 
     @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 575b73e..4e0e7ed 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
@@ -59,7 +59,7 @@ public class ExceptionRecognizerComposite implements ExceptionRecognizer {
             add(er);
         }
     }
-    
+
     public ExceptionRecognizerComposite(final Stream<? extends ExceptionRecognizer> exceptionRecognizers) {
         exceptionRecognizers.forEach(this::add);
     }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/factory/FactoryService.java b/core/applib/src/main/java/org/apache/isis/applib/services/factory/FactoryService.java
index 7320cff..07a904f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/factory/FactoryService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/factory/FactoryService.java
@@ -72,7 +72,7 @@ public interface FactoryService {
      * @apiNote EXPERIMENTAL
      */
     <T> T viewModel(Class<T> viewModelClass, @Nullable String mementoStr);
-    
+
     /**
      * Creates a new ViewModel instance 
      * @param viewModelClass
@@ -80,8 +80,8 @@ public interface FactoryService {
      * @apiNote EXPERIMENTAL
      */
     default <T> T viewModel(Class<T> viewModelClass) {
-    	return viewModel(viewModelClass, /*mementoStr*/null);
+        return viewModel(viewModelClass, /*mementoStr*/null);
     }
-    
-    
+
+
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java b/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java
index 532d216..8e24948 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridLoaderService.java
@@ -46,7 +46,7 @@ public interface GridLoaderService {
      */
     @Programmatic
     Grid load(final Class<?> domainClass);
-    
+
     /**
      * Returns a new instance of a {@link Grid} for the specified domain class, eg from a
      * <code>layout.xml</code> file, else <code>null</code>.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java b/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
index 0f7ca43..a057ffc 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/grid/GridService.java
@@ -103,7 +103,7 @@ public interface GridService {
      */
     @Programmatic
     Grid minimal(Grid grid);
-    
+
     /**
      * Returns a new instance of a {@link Grid} for the specified domain class, eg from a
      * <code>[domainClass].layout.[layout].xml</code> file, else <code>null</code>.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java b/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
index e804461..73dda2c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
@@ -318,7 +318,7 @@ public class Interaction implements HasUniqueId {
         adder.increment();
         return adder.intValue();
     }
-    
+
     private LongAdder newAdder(String ignore) {
         final LongAdder adder = new LongAdder();
         adder.decrement();
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/inject/ServiceInjector.java b/core/applib/src/main/java/org/apache/isis/applib/services/inject/ServiceInjector.java
index dd3ee79..4353622 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/inject/ServiceInjector.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/inject/ServiceInjector.java
@@ -36,21 +36,21 @@ import lombok.val;
 public interface ServiceInjector {
 
     <T> T injectServicesInto(final T domainObject, Consumer<InjectionPoint> onNotResolvable);
-    
+
     default <T> T injectServicesInto(final T domainObject) {
         return injectServicesInto(domainObject, injectionPoint->{
-            
+
             val injectionPointName = injectionPoint.toString();
             val requiredType = injectionPoint.getDeclaredType();
             val msg = String
                     .format("Could not resolve injection point [%s] in target '%s' of required type '%s'",
-                    injectionPointName,        
-                    domainObject.getClass().getName(),
-                    requiredType);
+                            injectionPointName,        
+                            domainObject.getClass().getName(),
+                            requiredType);
             throw new NoSuchElementException(msg);
         });
-            
+
     }
-   
-    
+
+
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutService.java b/core/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutService.java
index 66a48ff..ce40087 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutService.java
@@ -76,7 +76,7 @@ public interface LayoutService {
      * Obtains a zip file of the serialized XML of the layouts (grids) of all domain entities and view models.
      */
     byte[] toZip(final Style style);
-    
+
     /**
      * Obtains the serialized XML form of the menu bars layout ({@link MenuBarsService}).
      * @param type - either the current menubars (could be loaded from a file) or the fallback (obtained from metamodel facets)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java b/core/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
index b8232b1..a9d24a9 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
@@ -23,14 +23,14 @@ import org.apache.isis.applib.layout.menubars.MenuBars;
 public interface MenuBarsService {
 
     enum Type {
-        
-    	/**
+
+        /**
          * Either derived from annotations or as obtained elsewhere 
          * (eg using the {@link MenuBarsLoaderService} if the
          * default implementation of this service is in use).
          */
         DEFAULT,
-        
+
         /**
          * As derived from annotations.
          */
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/message/MessageService.java b/core/applib/src/main/java/org/apache/isis/applib/services/message/MessageService.java
index 97d88c1..83b668d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/message/MessageService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/message/MessageService.java
@@ -52,13 +52,13 @@ public interface MessageService {
     @Programmatic
     String informUser(TranslatableString message, final Class<?> contextClass, final String contextMethod);
 
-    
+
     /**
      * Override of {@link MessageService#informUser(TranslatableString, Class, String)}, but with last two parameters combined into a context string.
      */
     @Programmatic
     String informUser(TranslatableString message, final String translationContext);
-    
+
     /**
      * Warn the user about a situation with the specified message. The container
      * should guarantee to display this warning to the user, and will typically
@@ -86,7 +86,7 @@ public interface MessageService {
      */
     @Programmatic
     String warnUser(TranslatableString message, final Class<?> contextClass, final String contextMethod);
-    
+
     /**
      * Override of {@link MessageService#warnUser(TranslatableString, Class, String)}, but with last two parameters combined into a context string.
      */
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/DomainModel.java b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/DomainModel.java
index 5861459..6449a35 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/DomainModel.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/DomainModel.java
@@ -21,7 +21,7 @@ package org.apache.isis.applib.services.metamodel;
 import java.util.List;
 
 public interface DomainModel {
-    
+
     public List<DomainMember> getDomainMembers();
-    
+
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
index 1c6530b..38ad62f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
@@ -112,36 +112,36 @@ public class MetaModelServicesMenu {
 
 
     public static class DownloadMetaModelXmlEvent extends ActionDomainEvent {
-		private static final long serialVersionUID = 1L;
+        private static final long serialVersionUID = 1L;
     }
 
     @Action(
             domainEvent = DownloadMetaModelXmlEvent.class,
             semantics = SemanticsOf.SAFE,
             restrictTo = RestrictTo.PROTOTYPING
-    )
+            )
     @ActionLayout(
             cssClassFa = "fa-download",
             named = "Download Meta Model (XML)"
-    )
+            )
     @MemberOrder(sequence="500.500.2")
     public Clob downloadMetaModelXml(
             @ParameterLayout(named = ".xml file name")
             final String fileName,
             @ParameterLayout(named = "Packages",
-                    describedAs="Subset of the complete meta model, only including packages starting with given prefix.")
+            describedAs="Subset of the complete meta model, only including packages starting with given prefix.")
             final List<String> packages,
             @ParameterLayout(named = "Ignore Interfaces")
             @Parameter(optionality=Optionality.MANDATORY)
             final boolean ignoreInterfaces
-    ) {
+            ) {
 
         MetaModelService.Config config =
                 new MetaModelService.Config()
-                        .withIgnoreNoop()
-                        .withIgnoreAbstractClasses()
-                        .withIgnoreInterfaces()
-                        .withIgnoreBuiltInValueTypes();
+                .withIgnoreNoop()
+                .withIgnoreAbstractClasses()
+                .withIgnoreInterfaces()
+                .withIgnoreBuiltInValueTypes();
         for (final String pkg : packages) {
             config = config.withPackagePrefix(pkg);
         }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheInternal.java b/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheInternal.java
index 438d946..91e9c4f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheInternal.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCacheInternal.java
@@ -140,13 +140,13 @@ public class QueryResultsCacheInternal implements QueryResultsCache, WithTransac
     }
 
     // -- HELPER
-    
+
     @Autowired(required = false)
     protected List<QueryResultCacheControl> cacheControl;
-    
+
     private boolean isIgnoreCache() {
-    	return _NullSafe.stream(cacheControl)
-    	.anyMatch(c->c.isIgnoreCache());
+        return _NullSafe.stream(cacheControl)
+                .anyMatch(c->c.isIgnoreCache());
     }
 
 }
\ No newline at end of file
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java b/core/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
index 3b837f6..2749ab3 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/registry/ServiceRegistry.java
@@ -84,23 +84,23 @@ public interface ServiceRegistry {
      * Streams all bean adapters of given BeanSort.
      */
     default Stream<BeanAdapter> streamRegisteredBeansOfSort(BeanSort sort) {
-    	return streamRegisteredBeans()
-    			.filter(beanAdapter->beanAdapter.getManagedObjectSort()==sort);
+        return streamRegisteredBeans()
+                .filter(beanAdapter->beanAdapter.getManagedObjectSort()==sort);
     }
 
     /**
      * Returns all bean adapters that have been registered.
      */
     public Stream<BeanAdapter> streamRegisteredBeans();
-    
+
     /**
      * Returns a registered bean of given {@code name}.
      *   
      * @param id - corresponds to the ObjectSpecificationId of the bean's type
      */
     public Optional<BeanAdapter> lookupRegisteredBeanById(String id);
-    
-    
+
+
     public default BeanAdapter lookupRegisteredBeanByNameElseFail(String id) {
         return lookupRegisteredBeanById(id).orElseThrow(
                 ()->_Exceptions.unrecoverable(
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
index 32d5354..b7240b9 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/wrapper/WrapperFactory.java
@@ -92,7 +92,7 @@ public interface WrapperFactory {
          * Validate all business rules but do not execute.
          */
         NO_EXECUTE(true, false, true);
-        
+
         private final boolean enforceRules;
         private final boolean execute;
         private final boolean failFast;
@@ -222,7 +222,7 @@ public interface WrapperFactory {
      */
     @Programmatic
     <T> T wrapTry(T domainObject);
-    
+
     /**
      * Convenience method for {@link #wrap(Object, ExecutionMode)} with {@link ExecutionMode#NO_EXECUTE},
      * to make this feature more discoverable.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/xactn/Transaction.java b/core/applib/src/main/java/org/apache/isis/applib/services/xactn/Transaction.java
index 319c349..c7c7fac 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/xactn/Transaction.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/xactn/Transaction.java
@@ -25,9 +25,9 @@ import org.apache.isis.applib.annotation.Programmatic;
  * Representation of the current transaction, which conceptually wraps the underlying transaction context's transaction.
  */
 public interface Transaction {
-    
-	@Programmatic
-	TransactionId getId();
+
+    @Programmatic
+    TransactionId getId();
 
     /**
      * Flush all changes to the object store.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionId.java b/core/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionId.java
index 3cbe227..b884fdb 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionId.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionId.java
@@ -27,19 +27,19 @@ import lombok.Data;
 @Data(staticConstructor = "of")
 public final class TransactionId implements HasUniqueId {
 
-	private final UUID uniqueId;
-	
-	/**
+    private final UUID uniqueId;
+
+    /**
      * The {@link HasUniqueId#getUniqueId()} is (as of 1.13.0) actually an identifier for the request/
      * interaction, and there can actually be multiple transactions within such a request/interaction.  
      * The sequence (0-based) is used to distinguish such.
      */
-	private final int sequence;
+    private final int sequence;
+
+    private final static TransactionId EMPTY = TransactionId.of(UUID.fromString("0000-00-00-00-000000"), 0); 
 
-	private final static TransactionId EMPTY = TransactionId.of(UUID.fromString("0000-00-00-00-000000"), 0); 
-	
-	public static TransactionId empty() {
-		return EMPTY;
-	}
+    public static TransactionId empty() {
+        return EMPTY;
+    }
 
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionService.java b/core/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionService.java
index 0e02c3b..65c9b56 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/xactn/TransactionService.java
@@ -23,13 +23,13 @@ import java.util.function.Supplier;
 
 public interface TransactionService {
 
-	public enum Policy {
+    public enum Policy {
         UNLESS_MARKED_FOR_ABORT,
         ALWAYS
     }
-	
-	TransactionId currentTransactionId();
-	
+
+    TransactionId currentTransactionId();
+
     /**
      * Flush all changes to the object store.
      *
diff --git a/core/applib/src/main/java/org/apache/isis/applib/tree/LazyTreeNode.java b/core/applib/src/main/java/org/apache/isis/applib/tree/LazyTreeNode.java
index 6315b65..f34b28f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/tree/LazyTreeNode.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/tree/LazyTreeNode.java
@@ -129,7 +129,7 @@ public class LazyTreeNode<T> implements TreeNode<T> {
 
         return indexOneBased.intValue()-1;
     }
-    
+
     private boolean isEqualTo(TreeNode<T> other) {
         if(other==null) {
             return false;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/JaxbAdapters.java b/core/applib/src/main/java/org/apache/isis/applib/util/JaxbAdapters.java
index 2bcb3f6..b0f2f10 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/JaxbAdapters.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/JaxbAdapters.java
@@ -49,9 +49,9 @@ import org.apache.isis.commons.internal.base._Strings;
 public final class JaxbAdapters {
 
     // -- MARKUP
-    
+
     public static final class MarkupAdapter extends XmlAdapter<String, Markup> {
-        
+
         private final static Base64.Encoder encoder = Base64.getEncoder(); 
         private final static Base64.Decoder decoder = Base64.getDecoder();
 
@@ -74,18 +74,18 @@ public final class JaxbAdapters {
         }
 
     }
-    
+
     // -- BLOB
-    
+
     public static final class BlobAdapter extends XmlAdapter<String, Blob> {
         // copy pasted code from BlobValueSemanticsProvider
-    	
-		@Override
-		public Blob unmarshal(String data) throws Exception {
-		    if(data==null) {
+
+        @Override
+        public Blob unmarshal(String data) throws Exception {
+            if(data==null) {
                 return null;
             }
-		    final int colonIdx = data.indexOf(':');
+            final int colonIdx = data.indexOf(':');
             final String name  = data.substring(0, colonIdx);
             final int colon2Idx  = data.indexOf(":", colonIdx+1);
             final String mimeTypeBase = data.substring(colonIdx+1, colon2Idx);
@@ -96,66 +96,74 @@ public final class JaxbAdapters {
             } catch (MimeTypeParseException e) {
                 throw new RuntimeException(e);
             }
-		}
-		
-		@Override
-		public String marshal(Blob blob) throws Exception {
-			if(blob==null) {
+        }
+
+        @Override
+        public String marshal(Blob blob) throws Exception {
+            if(blob==null) {
                 return null;
             }
-			return blob.getName() + ":" + 
-            	blob.getMimeType().getBaseType() + ":" + 
-            	_Strings.ofBytes(_Bytes.encodeToBase64(Base64.getEncoder(), blob.getBytes()), 
-            			StandardCharsets.UTF_8);
-		}
-    	
+            return blob.getName() + ":" + 
+            blob.getMimeType().getBaseType() + ":" + 
+            _Strings.ofBytes(_Bytes.encodeToBase64(Base64.getEncoder(), blob.getBytes()), 
+                    StandardCharsets.UTF_8);
+        }
+
     }
-    
-    
+
+
     // -- TEMPORAL VALUE TYPES
-    
+
     public static final class DateAdapter extends XmlAdapter<String, java.util.Date> {
 
+        @Override
         public java.util.Date unmarshal(String v) throws Exception {
             return new java.util.Date(Long.parseLong(v));
         }
 
+        @Override
         public String marshal(java.util.Date v) throws Exception {
             return Long.toString(v.getTime());
         }
 
     }
-    
+
     public static final class SqlDateAdapter extends XmlAdapter<String, java.sql.Date> {
 
+        @Override
         public java.sql.Date unmarshal(String v) throws Exception {
             return java.sql.Date.valueOf(v);
         }
 
+        @Override
         public String marshal(java.sql.Date v) throws Exception {
             return v.toString();
         }
 
     }
-    
+
     public static final class SqlTimestampAdapter extends XmlAdapter<String, java.sql.Timestamp> {
 
+        @Override
         public java.sql.Timestamp unmarshal(String v) throws Exception {
             return new java.sql.Timestamp(Long.parseLong(v));
         }
 
+        @Override
         public String marshal(java.sql.Timestamp v) throws Exception {
             return Long.toString(v.getTime());
         }
 
     }
-    
+
     public static final class LocalDateAdapter extends XmlAdapter<String, LocalDate> {
 
+        @Override
         public LocalDate unmarshal(String v) throws Exception {
             return LocalDate.parse(v);
         }
 
+        @Override
         public String marshal(LocalDate v) throws Exception {
             return v.toString();
         }
@@ -164,10 +172,12 @@ public final class JaxbAdapters {
 
     public static final class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {
 
+        @Override
         public LocalDateTime unmarshal(String v) throws Exception {
             return LocalDateTime.parse(v);
         }
 
+        @Override
         public String marshal(LocalDateTime v) throws Exception {
             return v.toString();
         }
@@ -176,14 +186,16 @@ public final class JaxbAdapters {
 
     public static final class OffsetDateTimeAdapter extends XmlAdapter<String, OffsetDateTime> {
 
+        @Override
         public OffsetDateTime unmarshal(String v) throws Exception {
             return OffsetDateTime.parse(v);
         }
 
+        @Override
         public String marshal(OffsetDateTime v) throws Exception {
             return v.toString();
         }
 
     }
-    
+
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java b/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
index b072838..db7b1a3 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
@@ -49,7 +49,7 @@ import lombok.val;
 public class JaxbUtil {
 
     private JaxbUtil(){}
-    
+
     // -- READ
 
     public static <T> T fromXml(
@@ -72,7 +72,7 @@ public class JaxbUtil {
         val s = _Resources.loadAsStringUtf8(contextClass, resourceName);
         return fromXml(new StringReader(s), dtoClass);
     }
-    
+
     // -- WRITE
 
     public static <T> String toXml(final T dto) {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer2.java b/core/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer2.java
index f9abc70..c10f0ba 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer2.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/ReasonBuffer2.java
@@ -50,7 +50,7 @@ public class ReasonBuffer2 {
         public static ConditionAndReason create(final Condition condition, final String reason) {
             return reason != null
                     ? new ConditionAndReason(condition, reason)
-                    : null;
+                            : null;
         }
 
         private ConditionAndReason(final Condition condition, final String reason) {
@@ -219,6 +219,7 @@ public class ReasonBuffer2 {
             return new ReasonBuffer2(mode, prefix);
         }
 
+        @Override
         public String toString() {
             return "ReasonBuffer2.ReasonBuffer2Builder(mode=" + this.mode + ", prefix=" + this.prefix + ")";
         }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/ToString.java b/core/applib/src/main/java/org/apache/isis/applib/util/ToString.java
index 58e8775..129c52d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/ToString.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/ToString.java
@@ -40,7 +40,7 @@ public class ToString<T> {
         Objects.requireNonNull(getter);
         return new ToString<>(name, getter, false);
     }
-    
+
     public static <T> ToString<T> toStringOmmitIfAbsent(String name, Function<? super T, ?> getter) {
         Objects.requireNonNull(name);
         Objects.requireNonNull(getter);
@@ -65,7 +65,7 @@ public class ToString<T> {
         getters.add(getter);
         return this;
     }
-    
+
     public ToString<T> thenToStringOmmitIfAbsent(String name, Function<? super T, ?> getter){
         Objects.requireNonNull(name);
         Objects.requireNonNull(getter);
@@ -108,9 +108,9 @@ public class ToString<T> {
 
                 );
     }
-    
+
     // -- HELPER
-    
+
     private void addBit(boolean bit) {
         final int index = names.size();
         if(bit) {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java b/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java
index 14a0c26..79f0b48 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java
@@ -38,7 +38,7 @@ public final class Blob implements NamedWithMimeType {
      * </pre>
      */
     private static final long serialVersionUID = 5659679806709601263L;
-    
+
     private final MimeType mimeType;
     private final byte[] bytes;
     private final String name;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/value/BlobClobFactory.java b/core/applib/src/main/java/org/apache/isis/applib/value/BlobClobFactory.java
index 289142e..2930be7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/value/BlobClobFactory.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/value/BlobClobFactory.java
@@ -32,120 +32,120 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class BlobClobFactory {
 
-	/**
-	 * see https://stackoverflow.com/questions/4212861/what-is-a-correct-mime-type-for-docx-pptx-etc
-	 */
-	public static enum Type {
-		txt("text/plain"),
-		xml("xml/plain"),
-		zip("application/zip"),
-		json("application/json"), 
-		xlsx("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
-		;
-		final String base;
-		final MimeType mimeType;
-		
-		private Type(String baseType) {
-			this.base = baseType;
-			try {
-				this.mimeType = new MimeType(baseType);
-	        } catch (MimeTypeParseException e) {
-	            throw new IllegalArgumentException(e);
-	        }
-		}
-		
-		public String getFileNameWithExtension(String fileName) {
-			return asFileNameWithExtension(fileName, name());
-		}
-	}
-
-	/**
-	 * Returns a new {@link Blob} of given {@code type}, {@code fileName} and {@code content}.
-	 * <p>
-	 * {@code fileName} may or may not include the desired filename extension, anyway it 
-	 * is guaranteed, that the resulting Blob has the appropriate extension as dictated by 
-	 * the given {@code Type}'s name.
-	 * <p>
-	 * For more fine-grained control use one of the {@link Blob} constructors directly. 
-	 * @param type
-	 * @param fileName - may or may not include the desired filename extension
-	 * @param content
-	 * @return new {@link Blob}
-	 */
-	public static Blob blob(Type type, String fileName, byte[] content){
-		return blob(type, fileName, type.name(), content);
-	}
-	
-	/** To explicitly specify the fileNameExtension, otherwise use {@link #blob(Type, String, byte[])} */
-	public static Blob blob(Type type, String fileName, String fileNameExtension, byte[] content){
-		return new Blob(asFileNameWithExtension(fileName, fileNameExtension), type.mimeType, content);
-	}
-	
-	/**
-	 * Returns a new {@link Clob} of given {@code type}, {@code fileName} and {@code content}.
-	 * <p>
-	 * {@code fileName} may or may not include the desired filename extension, anyway it 
-	 * is guaranteed, that the resulting Blob has the appropriate extension as dictated by 
-	 * the given {@code Type}'s name.
-	 * <p>
-	 * For more fine-grained control use one of the {@link Clob} constructors directly. 
-	 * @param type
-	 * @param fileName - may or may not include the desired filename extension
-	 * @param content
-	 * @return new {@link Clob}
-	 */
-	public static Clob clob(Type type, String fileName, CharSequence content){
-		return clob(type, fileName, type.name(), content);
-	}
-	
-	/** To explicitly specify the fileNameExtension, otherwise use {@link #clob(Type, String, String)} */
-	public static Clob clob(Type type, String fileName, String fileNameExtension, CharSequence content){
-		return new Clob(asFileNameWithExtension(fileName, fileNameExtension), type.mimeType, content);
-	}
-
-	// -- SHORTCUTS - BLOB
-
-	/** A shortcut, see {@link #blob(Type, String, byte[])} */
-	public static Blob blobTxt(String fileName, byte[] content) {
-		return blob(Type.txt, fileName, content);
-	}
-
-	/** A shortcut, see {@link #blob(Type, String, byte[])} */
-	public static Blob blobXml(String fileName, byte[] content) {
-		return blob(Type.xml, fileName, content);
-	}
-	
-	/** A shortcut, see {@link #blob(Type, String, byte[])} */
-	public static Blob blobZip(String fileName, byte[] content) {
-		return blob(Type.zip, fileName, content);
-	}
-	
-	/** A shortcut, see {@link #blob(Type, String, byte[])} */
-	public static Blob blobJson(String fileName, byte[] content) {
-		return blob(Type.json, fileName, content);
-	}
-	
-	/** A shortcut, see {@link #blob(Type, String, byte[])} */
-	public static Blob blobXlsx(String fileName, byte[] content) {
-		return blob(Type.xlsx, fileName, content);
-	}
-	
-	// -- SHORTCUTS - CLOB
-	
-	/** A shortcut, see {@link #clob(Type, String, String)} */
-	public static Clob clobTxt(String fileName, CharSequence content) {
-		return clob(Type.txt, fileName, content);
-	}
-	
-	/** A shortcut, see {@link #clob(Type, String, String)} */
-	public static Clob clobXml(String fileName, CharSequence content) {
-		return clob(Type.xml, fileName, content);
-	}
-	
-	/** A shortcut, see {@link #clob(Type, String, String)} */
-	public static Clob clobJson(String fileName, CharSequence content) {
-		return clob(Type.json, fileName, content);
-	}
-	
-	
+    /**
+     * see https://stackoverflow.com/questions/4212861/what-is-a-correct-mime-type-for-docx-pptx-etc
+     */
+    public static enum Type {
+        txt("text/plain"),
+        xml("xml/plain"),
+        zip("application/zip"),
+        json("application/json"), 
+        xlsx("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
+        ;
+        final String base;
+        final MimeType mimeType;
+
+        private Type(String baseType) {
+            this.base = baseType;
+            try {
+                this.mimeType = new MimeType(baseType);
+            } catch (MimeTypeParseException e) {
+                throw new IllegalArgumentException(e);
+            }
+        }
+
+        public String getFileNameWithExtension(String fileName) {
+            return asFileNameWithExtension(fileName, name());
+        }
+    }
+
+    /**
+     * Returns a new {@link Blob} of given {@code type}, {@code fileName} and {@code content}.
+     * <p>
+     * {@code fileName} may or may not include the desired filename extension, anyway it 
+     * is guaranteed, that the resulting Blob has the appropriate extension as dictated by 
+     * the given {@code Type}'s name.
+     * <p>
+     * For more fine-grained control use one of the {@link Blob} constructors directly. 
+     * @param type
+     * @param fileName - may or may not include the desired filename extension
+     * @param content
+     * @return new {@link Blob}
+     */
+    public static Blob blob(Type type, String fileName, byte[] content){
+        return blob(type, fileName, type.name(), content);
+    }
+
+    /** To explicitly specify the fileNameExtension, otherwise use {@link #blob(Type, String, byte[])} */
+    public static Blob blob(Type type, String fileName, String fileNameExtension, byte[] content){
+        return new Blob(asFileNameWithExtension(fileName, fileNameExtension), type.mimeType, content);
+    }
+
+    /**
+     * Returns a new {@link Clob} of given {@code type}, {@code fileName} and {@code content}.
+     * <p>
+     * {@code fileName} may or may not include the desired filename extension, anyway it 
+     * is guaranteed, that the resulting Blob has the appropriate extension as dictated by 
+     * the given {@code Type}'s name.
+     * <p>
+     * For more fine-grained control use one of the {@link Clob} constructors directly. 
+     * @param type
+     * @param fileName - may or may not include the desired filename extension
+     * @param content
+     * @return new {@link Clob}
+     */
+    public static Clob clob(Type type, String fileName, CharSequence content){
+        return clob(type, fileName, type.name(), content);
+    }
+
+    /** To explicitly specify the fileNameExtension, otherwise use {@link #clob(Type, String, String)} */
+    public static Clob clob(Type type, String fileName, String fileNameExtension, CharSequence content){
+        return new Clob(asFileNameWithExtension(fileName, fileNameExtension), type.mimeType, content);
+    }
+
+    // -- SHORTCUTS - BLOB
+
+    /** A shortcut, see {@link #blob(Type, String, byte[])} */
+    public static Blob blobTxt(String fileName, byte[] content) {
+        return blob(Type.txt, fileName, content);
+    }
+
+    /** A shortcut, see {@link #blob(Type, String, byte[])} */
+    public static Blob blobXml(String fileName, byte[] content) {
+        return blob(Type.xml, fileName, content);
+    }
+
+    /** A shortcut, see {@link #blob(Type, String, byte[])} */
+    public static Blob blobZip(String fileName, byte[] content) {
+        return blob(Type.zip, fileName, content);
+    }
+
+    /** A shortcut, see {@link #blob(Type, String, byte[])} */
+    public static Blob blobJson(String fileName, byte[] content) {
+        return blob(Type.json, fileName, content);
+    }
+
+    /** A shortcut, see {@link #blob(Type, String, byte[])} */
+    public static Blob blobXlsx(String fileName, byte[] content) {
+        return blob(Type.xlsx, fileName, content);
+    }
+
+    // -- SHORTCUTS - CLOB
+
+    /** A shortcut, see {@link #clob(Type, String, String)} */
+    public static Clob clobTxt(String fileName, CharSequence content) {
+        return clob(Type.txt, fileName, content);
+    }
+
+    /** A shortcut, see {@link #clob(Type, String, String)} */
+    public static Clob clobXml(String fileName, CharSequence content) {
+        return clob(Type.xml, fileName, content);
+    }
+
+    /** A shortcut, see {@link #clob(Type, String, String)} */
+    public static Clob clobJson(String fileName, CharSequence content) {
+        return clob(Type.json, fileName, content);
+    }
+
+
 }
diff --git a/core/applib/src/test/java/org/apache/isis/applib/query/QueryDefaultTest_withStart_or_withCount.java b/core/applib/src/test/java/org/apache/isis/applib/query/QueryDefaultTest_withStart_or_withCount.java
index 00c0c0b..56a129c 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/query/QueryDefaultTest_withStart_or_withCount.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/query/QueryDefaultTest_withStart_or_withCount.java
@@ -25,14 +25,14 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
 public class QueryDefaultTest_withStart_or_withCount {
-    
+
     private QueryDefault<Customer> queryDefault;
 
     @Rule
     public ExpectedException thrown= ExpectedException.none();
-    
+
     static class Customer {}
-    
+
     @Before
     public void setUp() throws Exception {
         queryDefault = new QueryDefault<Customer>(Customer.class, "findByLastName", "lastName", "Smith");
@@ -48,7 +48,7 @@ public class QueryDefaultTest_withStart_or_withCount {
     @Test
     public void typicalHappyCase() throws Exception {
         final QueryDefault<Customer> q = queryDefault.withStart(10L).withCount(5L);
-        
+
         assertThat(q, is(queryDefault));
         assertThat(q.getStart(), is(10L));
         assertThat(q.getCount(), is(5L));
@@ -57,7 +57,7 @@ public class QueryDefaultTest_withStart_or_withCount {
     @Test
     public void happyCase_startOnly() throws Exception {
         final QueryDefault<Customer> q = queryDefault.withStart(10L);
-        
+
         assertThat(q, is(queryDefault));
         assertThat(q.getStart(), is(10L));
         assertThat(q.getCount(), is(0L));
@@ -66,7 +66,7 @@ public class QueryDefaultTest_withStart_or_withCount {
     @Test
     public void happyCase_startZero() throws Exception {
         final QueryDefault<Customer> q = queryDefault.withStart(0);
-        
+
         assertThat(q, is(queryDefault));
         assertThat(q.getStart(), is(0L));
     }
@@ -80,7 +80,7 @@ public class QueryDefaultTest_withStart_or_withCount {
     @Test
     public void happyCase_countOnly() throws Exception {
         final QueryDefault<Customer> q = queryDefault.withCount(20L);
-        
+
         assertThat(q, is(queryDefault));
         assertThat(q.getStart(), is(0L));
         assertThat(q.getCount(), is(20L));
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 e933dd4..23ffa90 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
@@ -76,7 +76,7 @@ public class ExceptionRecognizerCompositeTest {
         context.ignoring(mockServiceRegistry);
         context.ignoring(mockTranslationService);
     }
-    
+
     @Test
     public void whenEmpty() {
         assertThat(composite.recognize(new RuntimeException()), is(nullValue()));
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForTypeTest.java b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForTypeTest.java
index 65c8d4c..12dd7c3 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForTypeTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForTypeTest.java
@@ -36,7 +36,7 @@ public class ExceptionRecognizerForTypeTest {
         public FooException() {
             super("foo");
         }
-        
+
     }
     static class BarException extends Exception {
         private static final long serialVersionUID = 1L;
@@ -44,14 +44,14 @@ public class ExceptionRecognizerForTypeTest {
             super("bar");
         }
     }
-    
+
     private Function<String,String> prepend = new Function<String, String>() {
         @Override
         public String apply(String input) {
             return "pre: " + input;
         }
     };
-    
+
     @Test
     public void whenRecognized() {
         ersForType = new ExceptionRecognizerForType(FooException.class);
@@ -70,5 +70,5 @@ public class ExceptionRecognizerForTypeTest {
         assertThat(ersForType.recognize(new FooException()), is("pre: foo"));
     }
 
-    
+
 }
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralTest.java b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralTest.java
index d5775b3..ed1453ab 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerGeneralTest.java
@@ -37,10 +37,10 @@ public class ExceptionRecognizerGeneralTest {
             super("foo");
         }
     }
-    
+
     private final static Predicate<Throwable> ALWAYS_TRUE = __->true;
     private final static Predicate<Throwable> ALWAYS_FALSE = __->false;
-    
+
     @Test
     public void whenRecognized() {
         ersGeneral = new ExceptionRecognizerAbstract(ALWAYS_TRUE){};
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/interaction/InteractionDefaultTest_next.java b/core/applib/src/test/java/org/apache/isis/applib/services/interaction/InteractionDefaultTest_next.java
index 9ce7b14..be130aa 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/interaction/InteractionDefaultTest_next.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/interaction/InteractionDefaultTest_next.java
@@ -31,7 +31,7 @@ public class InteractionDefaultTest_next {
     @Test
     public void test() {
         final Interaction interaction = new Interaction();
-        
+
         assertThat(interaction.next("foo"), is(0));
         assertThat(interaction.next("foo"), is(1));
         assertThat(interaction.next("bar"), is(0));
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/urlencoding/UrlEncodingServiceTest.java b/core/applib/src/test/java/org/apache/isis/applib/services/urlencoding/UrlEncodingServiceTest.java
index eb8db5f..5aa90f2 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/urlencoding/UrlEncodingServiceTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/urlencoding/UrlEncodingServiceTest.java
@@ -31,20 +31,20 @@ public class UrlEncodingServiceTest {
 
     @Before
     public void setUp() throws Exception {
-    	serviceWithCompression = new UrlEncodingServiceWithCompression();
-    	serviceBaseEncoding = new UrlEncodingServiceUsingBaseEncodingAbstract(){};
+        serviceWithCompression = new UrlEncodingServiceWithCompression();
+        serviceBaseEncoding = new UrlEncodingServiceUsingBaseEncodingAbstract(){};
     }
 
     @Test
     public void roundtrip() throws Exception {
-    	roundtrip(serviceBaseEncoding, false);
+        roundtrip(serviceBaseEncoding, false);
     }
-    
+
     @Test
     public void roundtrip_with_compression() throws Exception {
-    	roundtrip(serviceWithCompression, true);
+        roundtrip(serviceWithCompression, true);
     }
-    
+
     private void roundtrip(UrlEncodingService service, boolean testIsCompressing) throws Exception {
 
         final String original = "0-theme-entityPageContainer-entity-rows-2-rowContents-1-col-tabGroups-1-panel-tabPanel-rows-1-rowContents-1-col-fieldSets-1-memberGroup-properties-1-property-scalarTypeContainer-scalarIfRegular-associatedActionLinksBelow-additionalLinkList-additionalLinkItem-0-additionalLink";
@@ -55,9 +55,9 @@ public class UrlEncodingServiceTest {
         Assert.assertThat(decoded, is(equalTo(original)));
 
         if(testIsCompressing) {
-        	Assert.assertThat(original.length(), is(greaterThan(encoded.length())));	
+            Assert.assertThat(original.length(), is(greaterThan(encoded.length())));	
         }
-        
+
     }
 
 
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java b/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
index afa2c58..07caa0e 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
@@ -36,23 +36,23 @@ public class XmlSnapshotServiceAbstractTest {
 
     private XmlSnapshotServiceAbstract xmlSnapshotService;
     private String xmlStr;
-    
+
     @Before
     public void setUp() throws Exception {
         xmlStr = _Resources.loadAsString(
-        		XmlSnapshotServiceAbstractTest.class, 
-        		"XmlSnapshotServiceAbstractTest.xml", 
-        		Charset.forName("UTF-8"));
+                XmlSnapshotServiceAbstractTest.class, 
+                "XmlSnapshotServiceAbstractTest.xml", 
+                Charset.forName("UTF-8"));
         xmlSnapshotService = new XmlSnapshotServiceForUnitTesting();
-        
+
     }
 
-    
+
     @Test
     public void test() {
 
         Locale locale = Locale.getDefault();
-        
+
         Locale[] locales = new Locale[]{Locale.getDefault(), lookupLocale("en", "US"), lookupLocale("en", "GB"), lookupLocale("es", "ES")};
         for (Locale eachLocal : locales) {
             try {
@@ -61,7 +61,7 @@ public class XmlSnapshotServiceAbstractTest {
 
                 Document xmlDoc = xmlSnapshotService.asDocument(xmlStr);
                 Element rootEl = xmlDoc.getDocumentElement();
-                
+
                 assertThat(
                         xmlSnapshotService.getChildElementValue(rootEl, "app:someString", String.class), is("OXF"));
                 assertThat(
@@ -98,7 +98,7 @@ public class XmlSnapshotServiceAbstractTest {
         throw new IllegalArgumentException("no such locale:" + language + "_" + country);
     }
 
-    
+
     static class XmlSnapshotServiceForUnitTesting extends XmlSnapshotServiceAbstract {
 
         @Override
diff --git a/core/applib/src/test/java/org/apache/isis/applib/tree/TreePathTest.java b/core/applib/src/test/java/org/apache/isis/applib/tree/TreePathTest.java
index da88947..bd1becc 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/tree/TreePathTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/tree/TreePathTest.java
@@ -26,23 +26,23 @@ import static org.junit.Assert.assertThat;
 
 public class TreePathTest {
 
-	@Test
-	public void rootConstructor() {
-		final TreePath treePath = TreePath.root(); 
-		assertThat(treePath.isRoot(), Matchers.is(true));
-		assertThat(treePath.toString(), Matchers.is("/0"));
-	}
+    @Test
+    public void rootConstructor() {
+        final TreePath treePath = TreePath.root(); 
+        assertThat(treePath.isRoot(), Matchers.is(true));
+        assertThat(treePath.toString(), Matchers.is("/0"));
+    }
+
+    @Test
+    public void samePathsShouldBeEqual() {
+        final TreePath treePath1 = TreePath.of(0, 1, 2, 3);
+        final TreePath treePath2 = TreePath.of(0, 1, 2, 3);
+        assertEquals(treePath1, treePath2);
+        assertEquals(treePath1.hashCode(), treePath2.hashCode());
+        assertEquals(treePath1.isRoot(), treePath2.isRoot());
+        assertEquals(treePath1.toString(), treePath2.toString());
+
+        assertThat(treePath1.toString(), Matchers.is("/0/1/2/3"));
+    }
 
-	@Test
-	public void samePathsShouldBeEqual() {
-		final TreePath treePath1 = TreePath.of(0, 1, 2, 3);
-		final TreePath treePath2 = TreePath.of(0, 1, 2, 3);
-		assertEquals(treePath1, treePath2);
-		assertEquals(treePath1.hashCode(), treePath2.hashCode());
-		assertEquals(treePath1.isRoot(), treePath2.isRoot());
-		assertEquals(treePath1.toString(), treePath2.toString());
-		
-		assertThat(treePath1.toString(), Matchers.is("/0/1/2/3"));
-	}
-	
 }
diff --git a/core/applib/src/test/java/org/apache/isis/applib/util/Invoice.java b/core/applib/src/test/java/org/apache/isis/applib/util/Invoice.java
index 96139f8..dfd7900 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/util/Invoice.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/util/Invoice.java
@@ -19,7 +19,7 @@ package org.apache.isis.applib.util;
 @SuppressWarnings("deprecation")
 class Invoice implements Comparable<Invoice>{
     private static final String KEY_PROPERTIES = "number";
-    
+
     private String number;
     public String getNumber() {
         return number;
@@ -27,7 +27,7 @@ class Invoice implements Comparable<Invoice>{
     public void setNumber(String number) {
         this.number = number;
     }
-	@Override
+    @Override
     public String toString() {
         return ObjectContracts.toString(this, KEY_PROPERTIES);
     }
diff --git a/core/applib/src/test/java/org/apache/isis/applib/util/InvoiceItem.java b/core/applib/src/test/java/org/apache/isis/applib/util/InvoiceItem.java
index 372bef9..8c79a0e 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/util/InvoiceItem.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/util/InvoiceItem.java
@@ -43,7 +43,7 @@ class InvoiceItem implements Comparable<InvoiceItem> {
     public void setProductCode(String productCode) {
         this.productCode = productCode;
     }
-    
+
     private Integer quantity;
     public Integer getQuantity() {
         return quantity;
@@ -51,7 +51,7 @@ class InvoiceItem implements Comparable<InvoiceItem> {
     public void setQuantity(Integer quantity) {
         this.quantity = quantity;
     }
- 
+
     private Boolean rush;
     public Boolean isRush() {
         return rush;
@@ -59,9 +59,9 @@ class InvoiceItem implements Comparable<InvoiceItem> {
     public void setRush(Boolean rush) {
         this.rush = rush;
     }
-    
+
     private static final String KEY_PROPERTIES = "invoice desc, productCode asc, quantity asc nullsLast, rush desc nullsLast";
-    
+
     @Override
     public String toString() {
         return ObjectContracts.toString(this, KEY_PROPERTIES);
diff --git a/core/applib/src/test/java/org/apache/isis/applib/util/NumberedEvaluator.java b/core/applib/src/test/java/org/apache/isis/applib/util/NumberedEvaluator.java
index aa2e6cd..51a550c 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/util/NumberedEvaluator.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/util/NumberedEvaluator.java
@@ -20,6 +20,7 @@ import org.apache.isis.applib.util.ObjectContracts.ToStringEvaluator;
 
 public class NumberedEvaluator implements ToStringEvaluator {
 
+    @Override
     public boolean canEvaluate(Object o) {
         return o instanceof Numbered;
     }
diff --git a/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_compareTo.java b/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_compareTo.java
index 21bed94..f31bafd 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_compareTo.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_compareTo.java
@@ -42,34 +42,34 @@ public class ObjectContractsTest_compareTo extends ComparableContractTest_compar
     @Override
     protected List<List<org.apache.isis.applib.util.InvoiceItem>> orderedTuples() {
         return listOf(
-                   listOf(
-                           // invoice desc, ...
-                           InvoiceItem.newInvoiceItem(null, null, null, null)
-                          ,InvoiceItem.newInvoiceItem(inv456, null, null, null)
-                          ,InvoiceItem.newInvoiceItem(inv456, null, null, null)
-                          ,InvoiceItem.newInvoiceItem(inv123, null, null, null)
-                           )
-                   ,listOf(
-                           // ..., productCode asc, ...
-                           InvoiceItem.newInvoiceItem(inv123, null, null, null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", null, null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", null, null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "B", null, null)
-                           )
-                   ,listOf(
-                           // ..., quantity asc nullsLast,...
-                           InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(2), null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(2), null)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", null, null)
-                           )
-                   ,listOf(
-                           // ..., rush desc nullsLast
-                           InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), true)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), false)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), false)
-                           ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), null)
-                           )
+                listOf(
+                        // invoice desc, ...
+                        InvoiceItem.newInvoiceItem(null, null, null, null)
+                        ,InvoiceItem.newInvoiceItem(inv456, null, null, null)
+                        ,InvoiceItem.newInvoiceItem(inv456, null, null, null)
+                        ,InvoiceItem.newInvoiceItem(inv123, null, null, null)
+                        )
+                ,listOf(
+                        // ..., productCode asc, ...
+                        InvoiceItem.newInvoiceItem(inv123, null, null, null)
+                        ,InvoiceItem.newInvoiceItem(inv123, "A", null, null)
+                        ,InvoiceItem.newInvoiceItem(inv123, "A", null, null)
+                        ,InvoiceItem.newInvoiceItem(inv123, "B", null, null)
+                        )
+                ,listOf(
+                        // ..., quantity asc nullsLast,...
+                        InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), null)
+                        ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(2), null)
+                        ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(2), null)
+                        ,InvoiceItem.newInvoiceItem(inv123, "A", null, null)
+                        )
+                ,listOf(
+                        // ..., rush desc nullsLast
+                        InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), true)
+                        ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), false)
+                        ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), false)
+                        ,InvoiceItem.newInvoiceItem(inv123, "A", new Integer(1), null)
+                        )
                 );
     }
 }
diff --git a/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_equals_and_hashCode.java b/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_equals_and_hashCode.java
index 78f8a94..f553f03 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_equals_and_hashCode.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_equals_and_hashCode.java
@@ -28,6 +28,7 @@ public class ObjectContractsTest_equals_and_hashCode extends ValueTypeContractTe
     private Invoice3 inv123;
     private Invoice3 inv456;
 
+    @Override
     @Before
     public void setUp() throws Exception {
         inv123 = new Invoice3();
@@ -39,20 +40,20 @@ public class ObjectContractsTest_equals_and_hashCode extends ValueTypeContractTe
     @Override
     protected List<InvoiceItem3> getObjectsWithSameValue() {
         return _Lists.of(
-                    InvoiceItem3.newInvoiceItem(inv123, "A", new Integer(1)),
-                    InvoiceItem3.newInvoiceItem(inv123, "A", new Integer(1))
+                InvoiceItem3.newInvoiceItem(inv123, "A", new Integer(1)),
+                InvoiceItem3.newInvoiceItem(inv123, "A", new Integer(1))
                 );
     }
 
     @Override
     protected List<InvoiceItem3> getObjectsWithDifferentValue() {
         return _Lists.of(
-                    InvoiceItem3.newInvoiceItem(null, "A", new Integer(2)),
-                    InvoiceItem3.newInvoiceItem(inv456, "A", new Integer(2)),
-                    InvoiceItem3.newInvoiceItem(inv123, null, new Integer(1)),
-                    InvoiceItem3.newInvoiceItem(inv123, "A", new Integer(2)),
-                    InvoiceItem3.newInvoiceItem(inv123, "B", new Integer(1)),
-                    InvoiceItem3.newInvoiceItem(inv123, "A", null)
+                InvoiceItem3.newInvoiceItem(null, "A", new Integer(2)),
+                InvoiceItem3.newInvoiceItem(inv456, "A", new Integer(2)),
+                InvoiceItem3.newInvoiceItem(inv123, null, new Integer(1)),
+                InvoiceItem3.newInvoiceItem(inv123, "A", new Integer(2)),
+                InvoiceItem3.newInvoiceItem(inv123, "B", new Integer(1)),
+                InvoiceItem3.newInvoiceItem(inv123, "A", null)
                 );
     }
 }
@@ -60,7 +61,7 @@ public class ObjectContractsTest_equals_and_hashCode extends ValueTypeContractTe
 @SuppressWarnings("deprecation")
 class Invoice3 {
     private static final String KEY_PROPERTIES = "number";
-    
+
     private String number;
     public String getNumber() {
         return number;
@@ -76,7 +77,7 @@ class Invoice3 {
     public boolean equals(Object obj) {
         return ObjectContracts.equals(this, obj, KEY_PROPERTIES);
     }
-    
+
 }
 
 @SuppressWarnings("deprecation")
@@ -105,7 +106,7 @@ class InvoiceItem3 {
     public void setProductCode(String productCode) {
         this.productCode = productCode;
     }
-    
+
     private Integer quantity;
     public Integer getQuantity() {
         return quantity;
@@ -113,8 +114,8 @@ class InvoiceItem3 {
     public void setQuantity(Integer quantity) {
         this.quantity = quantity;
     }
- 
-    
+
+
     private static final String KEY_PROPERTIES = "invoice desc, productCode, quantity";
     @Override
     public int hashCode() {
diff --git a/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_toString.java b/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_toString.java
index 0c0e8bc..0821815 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_toString.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_toString.java
@@ -34,7 +34,7 @@ public class ObjectContractsTest_toString {
     public void setUp() throws Exception {
         inv = new Invoice();
         inv2 = new Invoice2();
-        
+
         inv.setNumber("123");
         inv2.setNumber("123");
     }
@@ -62,8 +62,9 @@ public class ObjectContractsTest_toString {
 @SuppressWarnings("deprecation")
 class Invoice2 implements Comparable<Invoice2>, Numbered {
     private static final String KEY_PROPERTIES = "number";
-    
+
     private String number;
+    @Override
     public String getNumber() {
         return number;
     }
@@ -107,7 +108,7 @@ class InvoiceItem2 implements Comparable<InvoiceItem2> {
     public void setProductCode(String productCode) {
         this.productCode = productCode;
     }
-    
+
     private Integer quantity;
     public Integer getQuantity() {
         return quantity;
@@ -115,7 +116,7 @@ class InvoiceItem2 implements Comparable<InvoiceItem2> {
     public void setQuantity(Integer quantity) {
         this.quantity = quantity;
     }
- 
+
     private Boolean rush;
     public Boolean isRush() {
         return rush;
@@ -123,17 +124,17 @@ class InvoiceItem2 implements Comparable<InvoiceItem2> {
     public void setRush(Boolean rush) {
         this.rush = rush;
     }
-    
+
     private static final String KEY_PROPERTIES = "invoice desc, productCode, quantity, rush desc";
-    
+
     private static final ObjectContract<InvoiceItem2> contract = 
-    		ObjectContracts.parse(InvoiceItem2.class, KEY_PROPERTIES)
-    		.withValueToStringFunction(ToStringEvaluator.combineToFunction(new NumberedEvaluator()));
-    
+            ObjectContracts.parse(InvoiceItem2.class, KEY_PROPERTIES)
+            .withValueToStringFunction(ToStringEvaluator.combineToFunction(new NumberedEvaluator()));
+
     @Override
     public String toString() {
-    	return contract.toString(this);
-    	//legacy of ...
+        return contract.toString(this);
+        //legacy of ...
         //return new ObjectContracts().with(new NumberedEvaluator()).toStringOf(this, KEY_PROPERTIES);
     }
     @Override
diff --git a/core/applib/src/test/java/org/apache/isis/applib/value/BlobTest_constructor.java b/core/applib/src/test/java/org/apache/isis/applib/value/BlobTest_constructor.java
index bc70e26..f319560 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/value/BlobTest_constructor.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/value/BlobTest_constructor.java
@@ -22,7 +22,7 @@ package org.apache.isis.applib.value;
 import org.junit.Test;
 
 public class BlobTest_constructor {
-    
+
     @Test
     public void happyCase() throws Exception {
         new Blob("validName", "application", "xml", new byte[]{0,1});
diff --git a/core/applib/src/test/java/org/apache/isis/applib/value/ClobTest_constructor.java b/core/applib/src/test/java/org/apache/isis/applib/value/ClobTest_constructor.java
index 8716964..b05bb55 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/value/ClobTest_constructor.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/value/ClobTest_constructor.java
@@ -22,7 +22,7 @@ package org.apache.isis.applib.value;
 import org.junit.Test;
 
 public class ClobTest_constructor {
-    
+
     @Test
     public void happyCase() throws Exception {
         new Clob("validName", "application", "xml", "abc");
diff --git a/core/applib/src/test/java/org/apache/isis/commons/internal/memento/MementosTest.java b/core/applib/src/test/java/org/apache/isis/commons/internal/memento/MementosTest.java
index 4b16d82..537336a 100644
--- a/core/applib/src/test/java/org/apache/isis/commons/internal/memento/MementosTest.java
+++ b/core/applib/src/test/java/org/apache/isis/commons/internal/memento/MementosTest.java
@@ -42,9 +42,9 @@ import static org.junit.Assert.assertThat;
 
 public class MementosTest {
 
-	static enum DOW {
-		Mon,Tue,Wed,Thu,Fri
-	}
+    static enum DOW {
+        Mon,Tue,Wed,Thu,Fri
+    }
 
     UrlEncodingServiceWithCompression serviceWithCompression;
     UrlEncodingServiceUsingBaseEncodingAbstract serviceBaseEncoding;
@@ -52,85 +52,85 @@ public class MementosTest {
 
     @Before
     public void setUp() throws Exception {
-    	serviceWithCompression = new UrlEncodingServiceWithCompression();
-    	serviceBaseEncoding = new UrlEncodingServiceUsingBaseEncodingAbstract(){};
-    	
-    	serializingAdapter = new SerializingAdapter() {
-
-			@Override
-			public Serializable write(Object value) {
-				return (Serializable) value;
-			}
-
-			@Override
-			public <T> T read(Class<T> cls, Serializable value) {
-				return _Casts.castToOrElseGet(value, cls, ()->null);
-			}
-    	};
-    	
+        serviceWithCompression = new UrlEncodingServiceWithCompression();
+        serviceBaseEncoding = new UrlEncodingServiceUsingBaseEncodingAbstract(){};
+
+        serializingAdapter = new SerializingAdapter() {
+
+            @Override
+            public Serializable write(Object value) {
+                return (Serializable) value;
+            }
+
+            @Override
+            public <T> T read(Class<T> cls, Serializable value) {
+                return _Casts.castToOrElseGet(value, cls, ()->null);
+            }
+        };
+
+    }
+
+    @Test
+    public void roundtrip() {
+        roundtrip(serviceBaseEncoding);
+    }
+
+    @Test
+    public void roundtrip_with_compression() {
+        roundtrip(serviceWithCompression);
+    }
+
+    private void roundtrip(UrlEncodingService codec) {
+        final Memento memento = _Mementos.create(codec, serializingAdapter);
+
+        memento.put("someString", "a string");
+        memento.put("someStringWithDoubleSpaces", "a  string");
+        memento.put("someByte", (byte)123);
+        memento.put("someShort", (short)12345);
+        memento.put("someInt", 123456789);
+        memento.put("someLong", 1234567890123456789L);
+        memento.put("someFloat", 123.45F);
+        memento.put("someDouble", 1234567890.123456);
+        memento.put("someBooleanTrue", Boolean.TRUE);
+        memento.put("someBooleanFalse", Boolean.FALSE);
+        memento.put("someBigInteger", new BigInteger("123456789012345678901234567890"));
+        memento.put("someBigDecimal", new BigDecimal("123456789012345678901234567890.123456789"));
+        memento.put("someLocalDate", new LocalDate(2013,9,3));
+        memento.put("someJavaUtilDate", new Date(300_000_000));
+
+        memento.put("someBookmark", new Bookmark("CUS", "12345"));
+        memento.put("someNullValue", null);
+
+        memento.put("someEnum", DOW.Wed);
+
+        final String str = memento.asString();
+
+        final Memento memento2 = _Mementos.parse(codec, serializingAdapter, str);
+
+        assertThat(memento2.get("someString", String.class), is("a string"));
+        assertThat(memento2.get("someStringWithDoubleSpaces", String.class), is("a  string"));
+        assertThat(memento2.get("someByte", Byte.class), is((byte)123));
+        assertThat(memento2.get("someShort", Short.class), is((short)12345));
+        assertThat(memento2.get("someInt", Integer.class), is(123456789));
+        assertThat(memento2.get("someLong", Long.class), is(1234567890123456789L));
+        assertThat(memento2.get("someFloat", Float.class), is(123.45F));
+        assertThat(memento2.get("someDouble", Double.class), is(1234567890.123456));
+        assertThat(memento2.get("someBooleanTrue", Boolean.class), is(Boolean.TRUE));
+        assertThat(memento2.get("someBooleanFalse", Boolean.class), is(Boolean.FALSE));
+        assertThat(memento2.get("someBigInteger", BigInteger.class), is(new BigInteger("123456789012345678901234567890")));
+        assertThat(memento2.get("someBigDecimal", BigDecimal.class), is(new BigDecimal("123456789012345678901234567890.123456789")));
+        assertThat(memento2.get("someLocalDate", LocalDate.class), is(new LocalDate(2013,9,3)));
+        assertThat(memento2.get("someJavaUtilDate", Date.class), is(new Date(300_000_000)));
+        assertThat(memento2.get("someBookmark", Bookmark.class), is(new Bookmark("CUS", "12345")));
+
+        // a nullValue can be grabbed as any type, will always succeed
+        assertThat(memento2.get("someNullValue", Integer.class), is(nullValue()));
+        assertThat(memento2.get("someNullValue", Bookmark.class), is(nullValue()));
+        assertThat(memento2.get("someNullValue", LocalDate.class), is(nullValue()));
+
+        assertThat(memento2.get("someEnum", DOW.class), is(DOW.Wed));
+
     }
-	
-	@Test
-	public void roundtrip() {
-		roundtrip(serviceBaseEncoding);
-	}
-	
-	@Test
-	public void roundtrip_with_compression() {
-		roundtrip(serviceWithCompression);
-	}
-	
-	private void roundtrip(UrlEncodingService codec) {
-		final Memento memento = _Mementos.create(codec, serializingAdapter);
-
-		memento.put("someString", "a string");
-		memento.put("someStringWithDoubleSpaces", "a  string");
-		memento.put("someByte", (byte)123);
-		memento.put("someShort", (short)12345);
-		memento.put("someInt", 123456789);
-		memento.put("someLong", 1234567890123456789L);
-		memento.put("someFloat", 123.45F);
-		memento.put("someDouble", 1234567890.123456);
-		memento.put("someBooleanTrue", Boolean.TRUE);
-		memento.put("someBooleanFalse", Boolean.FALSE);
-		memento.put("someBigInteger", new BigInteger("123456789012345678901234567890"));
-		memento.put("someBigDecimal", new BigDecimal("123456789012345678901234567890.123456789"));
-		memento.put("someLocalDate", new LocalDate(2013,9,3));
-		memento.put("someJavaUtilDate", new Date(300_000_000));
-
-		memento.put("someBookmark", new Bookmark("CUS", "12345"));
-		memento.put("someNullValue", null);
-
-		memento.put("someEnum", DOW.Wed);
-
-		final String str = memento.asString();
-
-		final Memento memento2 = _Mementos.parse(codec, serializingAdapter, str);
-
-		assertThat(memento2.get("someString", String.class), is("a string"));
-		assertThat(memento2.get("someStringWithDoubleSpaces", String.class), is("a  string"));
-		assertThat(memento2.get("someByte", Byte.class), is((byte)123));
-		assertThat(memento2.get("someShort", Short.class), is((short)12345));
-		assertThat(memento2.get("someInt", Integer.class), is(123456789));
-		assertThat(memento2.get("someLong", Long.class), is(1234567890123456789L));
-		assertThat(memento2.get("someFloat", Float.class), is(123.45F));
-		assertThat(memento2.get("someDouble", Double.class), is(1234567890.123456));
-		assertThat(memento2.get("someBooleanTrue", Boolean.class), is(Boolean.TRUE));
-		assertThat(memento2.get("someBooleanFalse", Boolean.class), is(Boolean.FALSE));
-		assertThat(memento2.get("someBigInteger", BigInteger.class), is(new BigInteger("123456789012345678901234567890")));
-		assertThat(memento2.get("someBigDecimal", BigDecimal.class), is(new BigDecimal("123456789012345678901234567890.123456789")));
-		assertThat(memento2.get("someLocalDate", LocalDate.class), is(new LocalDate(2013,9,3)));
-		assertThat(memento2.get("someJavaUtilDate", Date.class), is(new Date(300_000_000)));
-		assertThat(memento2.get("someBookmark", Bookmark.class), is(new Bookmark("CUS", "12345")));
-
-		// a nullValue can be grabbed as any type, will always succeed
-		assertThat(memento2.get("someNullValue", Integer.class), is(nullValue()));
-		assertThat(memento2.get("someNullValue", Bookmark.class), is(nullValue()));
-		assertThat(memento2.get("someNullValue", LocalDate.class), is(nullValue()));
-
-		assertThat(memento2.get("someEnum", DOW.class), is(DOW.Wed));
-
-	}
 
 
 }
diff --git a/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java b/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
index 2cfde93..3caeeed 100644
--- a/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
+++ b/core/applib/src/test/java/org/apache/isis/schema/utils/Roundtrip.java
@@ -84,7 +84,7 @@ public class Roundtrip {
 
         final Timestamp startedAt = new Timestamp(new Date().getTime());
         @SuppressWarnings("unused")
-		final Timestamp completedAt = new Timestamp(startedAt.getTime() + 1000);
+        final Timestamp completedAt = new Timestamp(startedAt.getTime() + 1000);
 
         final ValueWithTypeDto returnDto = new ValueWithTypeDto();
         returnDto.setType(ValueType.BOOLEAN);
@@ -95,7 +95,7 @@ public class Roundtrip {
                 1,
                 new Bookmark("CUS", "12345"), "John Customer", "com.mycompany.Customer#placeOrder", Arrays.<ParamDto>asList(),
                 "freddyUser"
-        );
+                );
 
         InteractionDtoUtils.addParamArg(interactionDto, "aString", String.class, "Fred", null);
         InteractionDtoUtils.addParamArg(interactionDto, "nullString", String.class, (String) null, null);
@@ -126,26 +126,26 @@ public class Roundtrip {
 
         InteractionDtoUtils.addParamArg(interactionDto, "aBigInteger", java.math.BigInteger.class, new java.math.BigInteger("12345678901234567890"), null);
         InteractionDtoUtils
-                .addParamArg(interactionDto, "nullBigInteger", java.math.BigInteger.class, (java.math.BigInteger) null, null);
+        .addParamArg(interactionDto, "nullBigInteger", java.math.BigInteger.class, (java.math.BigInteger) null, null);
 
         InteractionDtoUtils.addParamArg(interactionDto, "aBigDecimal", java.math.BigDecimal.class, new java.math.BigDecimal("12345678901234567890"), null);
         InteractionDtoUtils
-                .addParamArg(interactionDto, "nullBigDecimal", java.math.BigDecimal.class, (java.math.BigDecimal) null, null);
+        .addParamArg(interactionDto, "nullBigDecimal", java.math.BigDecimal.class, (java.math.BigDecimal) null, null);
 
         InteractionDtoUtils
-                .addParamArg(interactionDto, "aJodaDateTime", org.joda.time.DateTime.class, new org.joda.time.DateTime(2015, 5, 23, 9, 54, 1), null);
+        .addParamArg(interactionDto, "aJodaDateTime", org.joda.time.DateTime.class, new org.joda.time.DateTime(2015, 5, 23, 9, 54, 1), null);
         InteractionDtoUtils
-                .addParamArg(interactionDto, "nullJodaDateTime", org.joda.time.DateTime.class, (org.joda.time.DateTime) null, null);
+        .addParamArg(interactionDto, "nullJodaDateTime", org.joda.time.DateTime.class, (org.joda.time.DateTime) null, null);
 
         InteractionDtoUtils
-                .addParamArg(interactionDto, "aJodaLocalDate", org.joda.time.LocalDate.class, new org.joda.time.LocalDate(2015, 5, 23), null);
+        .addParamArg(interactionDto, "aJodaLocalDate", org.joda.time.LocalDate.class, new org.joda.time.LocalDate(2015, 5, 23), null);
         InteractionDtoUtils.addParamArg(interactionDto, "nullJodaLocalDate", org.joda.time.LocalDate.class, (org.joda.time.LocalDate) null, null);
 
         InteractionDtoUtils.addParamArg(interactionDto, "aJodaLocalDateTime", org.joda.time.LocalDateTime.class, new org.joda.time.LocalDateTime(2015, 5, 23, 9, 54, 1), null);
         InteractionDtoUtils.addParamArg(interactionDto, "nullJodaLocalDateTime", org.joda.time.LocalDateTime.class, (org.joda.time.LocalDateTime) null, null);
 
         InteractionDtoUtils
-                .addParamArg(interactionDto, "aJodaLocalTime", org.joda.time.LocalTime.class, new org.joda.time.LocalTime(9, 54, 1), null);
+        .addParamArg(interactionDto, "aJodaLocalTime", org.joda.time.LocalTime.class, new org.joda.time.LocalTime(9, 54, 1), null);
         InteractionDtoUtils.addParamArg(interactionDto, "nullJodaLocalTime", org.joda.time.LocalTime.class, (org.joda.time.LocalTime) null, null);
 
         InteractionDtoUtils.addParamArg(interactionDto, "aReference", null, new Bookmark("ORD", "12345"), null);
@@ -353,10 +353,10 @@ public class Roundtrip {
         assertThat(InteractionDtoUtils.isNull(invocationDto, param), is(true));
 
         param++;
-//        final int expected = param;
-//        assertThat(recreated.getParameters().getNum(), is(expected);
-//        assertThat(recreated.getParameters().getParam().size(), is(expected);
-//        assertThat(ActionInvocationMementoDtoUtils.getNumberOfParameters(recreated), is(expected);
+        //        final int expected = param;
+        //        assertThat(recreated.getParameters().getNum(), is(expected);
+        //        assertThat(recreated.getParameters().getParam().size(), is(expected);
+        //        assertThat(ActionInvocationMementoDtoUtils.getNumberOfParameters(recreated), is(expected);
 
     }
 
diff --git a/core/commons/src/main/java/org/apache/isis/commons/ZipWriter.java b/core/commons/src/main/java/org/apache/isis/commons/ZipWriter.java
index a02adca..13a3d34 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/ZipWriter.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/ZipWriter.java
@@ -54,65 +54,65 @@ import lombok.val;
 @RequiredArgsConstructor(staticName = "of", access = AccessLevel.PRIVATE)
 public class ZipWriter {
 
-	@FunctionalInterface
-	public interface OnZipEntry {
-		public void accept(OutputStreamWriter writer) throws IOException;
-	}
+    @FunctionalInterface
+    public interface OnZipEntry {
+        public void accept(OutputStreamWriter writer) throws IOException;
+    }
 
-	public static ZipWriter newInstance() {
-		return ofFailureMessage("Unable to create zip");
-	}
+    public static ZipWriter newInstance() {
+        return ofFailureMessage("Unable to create zip");
+    }
 
-	public static ZipWriter ofFailureMessage(String failureMessage) {
-		val baos = new ByteArrayOutputStream();
-		val zos = new ZipOutputStream(baos);
-		val writer = new OutputStreamWriter(zos);
-		return new ZipWriter(baos, zos, writer, failureMessage);
-	}
+    public static ZipWriter ofFailureMessage(String failureMessage) {
+        val baos = new ByteArrayOutputStream();
+        val zos = new ZipOutputStream(baos);
+        val writer = new OutputStreamWriter(zos);
+        return new ZipWriter(baos, zos, writer, failureMessage);
+    }
 
-	private final ByteArrayOutputStream baos;
-	private final ZipOutputStream zos;
-	private final OutputStreamWriter writer;
-	private final String failureMessage;
-	private byte[] content;
+    private final ByteArrayOutputStream baos;
+    private final ZipOutputStream zos;
+    private final OutputStreamWriter writer;
+    private final String failureMessage;
+    private byte[] content;
 
-	/**
-	 * Adds a new zipEntry with given {@code zipEntryName}, and provides the
-	 * {@link OutputStreamWriter} via {@link OnZipEntry} for the consumer to 
-	 * write the actual (uncompressed) zip-entry content. 
-	 * @param zipEntryName
-	 * @param onZipEntry
-	 */
-	public void nextEntry(String zipEntryName, OnZipEntry onZipEntry) {
-		if(content!=null) {
-			throw new IllegalStateException("Cannot create a new ZipEntry an a closed ZipWriter");
-		}
-		try {
-			zos.putNextEntry(new ZipEntry(zipEntryName));
-			onZipEntry.accept(writer);
-			writer.flush();
-			zos.closeEntry();
-		} catch (final IOException e) {
-			throw _Exceptions.unrecoverable(failureMessage, e);
-		}
-	}
+    /**
+     * Adds a new zipEntry with given {@code zipEntryName}, and provides the
+     * {@link OutputStreamWriter} via {@link OnZipEntry} for the consumer to 
+     * write the actual (uncompressed) zip-entry content. 
+     * @param zipEntryName
+     * @param onZipEntry
+     */
+    public void nextEntry(String zipEntryName, OnZipEntry onZipEntry) {
+        if(content!=null) {
+            throw new IllegalStateException("Cannot create a new ZipEntry an a closed ZipWriter");
+        }
+        try {
+            zos.putNextEntry(new ZipEntry(zipEntryName));
+            onZipEntry.accept(writer);
+            writer.flush();
+            zos.closeEntry();
+        } catch (final IOException e) {
+            throw _Exceptions.unrecoverable(failureMessage, e);
+        }
+    }
 
-	/**
-	 * Terminal operation, closes the writer. 
-	 * Calling this operation multiple times, will return the same array instance object. 
-	 * @return the byte array created by the underlying ZipOutputStream
-	 */
-	public byte[] toBytes() {
-		if(content==null) {
-			try {
-				writer.close();
-			} catch (IOException e) {
-				throw _Exceptions.unrecoverable(failureMessage, e);
-			}
-			content = baos.toByteArray();
-		}
-		return content;
-	}
+    /**
+     * Terminal operation, closes the writer. 
+     * Calling this operation multiple times, will return the same array instance object. 
+     * @return the byte array created by the underlying ZipOutputStream
+     */
+    public byte[] toBytes() {
+        if(content==null) {
+            try {
+                writer.close();
+            } catch (IOException e) {
+                throw _Exceptions.unrecoverable(failureMessage, e);
+            }
+            content = baos.toByteArray();
+        }
+        return content;
+    }
 
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/collections/Bin.java b/core/commons/src/main/java/org/apache/isis/commons/collections/Bin.java
index e3e1abc..e19280a 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/collections/Bin.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/collections/Bin.java
@@ -48,187 +48,188 @@ import lombok.val;
  */
 public interface Bin<T> extends Iterable<T> {
 
-	Cardinality getCardinality();
-	int size();
-	
-	Stream<T> stream();
-	
-	Optional<T> getFirst();
-	Optional<T> getSingleton();
-	
-	// -- FACTORIES
-	
-	@SuppressWarnings("unchecked") // this is how the JDK does it for eg. empty lists
-	public static <T> Bin<T> empty() {
-		return (Bin<T>) Bin_Empty.INSTANCE;
-	}
-	
-	public static <T> Bin<T> ofNullable(@Nullable T element) {
-		if(element==null) {
-			return empty();
-		}
-		return Bin_Singleton.of(element);
-	}
-	
-	public static <T> Bin<T> ofSingleton(T element) {
-		requires(element, "element");
-		return Bin_Singleton.of(element);
-	}
-	
-	public static <T> Bin<T> ofCollection(@Nullable Collection<T> collection) {
-		
-		if(_NullSafe.size(collection)==0) {
-			return empty();
-		}
-		
-		val maxSize = collection.size();
-		
-		val nonNullElements = collection.stream()
-				.filter(_NullSafe::isPresent)
-				.collect(Collectors.toCollection(()->new ArrayList<>(maxSize)));
-		
-		nonNullElements.trimToSize(); // in case we have a 'sparse' collection as input to this method
-		
-		val size = nonNullElements.size();
-		
-		if(size==0) {
-			return empty();
-		}
-		
-		if(size==1) {
-			return ofSingleton(((List<T>)nonNullElements).get(0));
-		}
-		
-		nonNullElements.sort(AnnotationAwareOrderComparator.INSTANCE);
-		
-		return Bin_Multiple.of(nonNullElements);
-	}
-	
-	public static <T> Bin<T> ofStream(@Nullable Stream<T> stream) {
-        
+    Cardinality getCardinality();
+    int size();
+
+    Stream<T> stream();
+
+    Optional<T> getFirst();
+    Optional<T> getSingleton();
+
+    // -- FACTORIES
+
+    @SuppressWarnings("unchecked") // this is how the JDK does it for eg. empty lists
+    public static <T> Bin<T> empty() {
+        return (Bin<T>) Bin_Empty.INSTANCE;
+    }
+
+    public static <T> Bin<T> ofNullable(@Nullable T element) {
+        if(element==null) {
+            return empty();
+        }
+        return Bin_Singleton.of(element);
+    }
+
+    public static <T> Bin<T> ofSingleton(T element) {
+        requires(element, "element");
+        return Bin_Singleton.of(element);
+    }
+
+    public static <T> Bin<T> ofCollection(@Nullable Collection<T> collection) {
+
+        if(_NullSafe.size(collection)==0) {
+            return empty();
+        }
+
+        val maxSize = collection.size();
+
+        val nonNullElements = collection.stream()
+                .filter(_NullSafe::isPresent)
+                .collect(Collectors.toCollection(()->new ArrayList<>(maxSize)));
+
+        nonNullElements.trimToSize(); // in case we have a 'sparse' collection as input to this method
+
+        val size = nonNullElements.size();
+
+        if(size==0) {
+            return empty();
+        }
+
+        if(size==1) {
+            return ofSingleton(((List<T>)nonNullElements).get(0));
+        }
+
+        nonNullElements.sort(AnnotationAwareOrderComparator.INSTANCE);
+
+        return Bin_Multiple.of(nonNullElements);
+    }
+
+    public static <T> Bin<T> ofStream(@Nullable Stream<T> stream) {
+
         if(stream==null) {
             return empty();
         }
-        
+
         val nonNullElements = stream
                 .filter(_NullSafe::isPresent)
                 .collect(Collectors.toCollection(()->new ArrayList<>()));        
-        
+
         val size = nonNullElements.size();
-        
+
         if(size==0) {
             return empty();
         }
-        
+
         if(size==1) {
             return ofSingleton(((List<T>)nonNullElements).get(0));
         }
-        
+
         nonNullElements.sort(AnnotationAwareOrderComparator.INSTANCE);
-        
+
         return Bin_Multiple.of(nonNullElements);
     }
-	
-	public static <T> Bin<T> ofInstance(@Nullable Instance<T> instance) {
-		if(instance==null || instance.isUnsatisfied()) {
-			return empty();
-		}
-		if(instance.isResolvable()) { 
-			return Bin_Singleton.of(instance.get());
-		}
-		val nonNullElements = instance.stream()
-				.collect(Collectors.toCollection(()->new ArrayList<>()));
-		
-		nonNullElements.sort(AnnotationAwareOrderComparator.INSTANCE);
-		
-		return Bin_Multiple.of(nonNullElements);
-		
-	}
-	
-	
-	// -- OPERATORS
-	
-	public default Bin<T> filter(@Nullable Predicate<? super T> predicate) {
-		if(predicate==null || isEmpty()) {
-			return this;
-		}
-		
-		// optimization for the singleton case
-		if(isCardinalityOne()) {
-			val singleton = getSingleton().get();
-			return predicate.test(singleton)
-					? this
-							: empty();
-		}
-		
-		val filteredElements = 
-		stream()
-		.filter(predicate)
-		.collect(Collectors.toCollection(ArrayList::new));
-		
-		// optimization for the case when the filter accepted all
-		if(filteredElements.size()==size()) {
-			return this;
-		}
-		
-		return ofCollection(filteredElements);
-	}
-	
-	public static <T> Bin<T> concat(@Nullable Bin<T> bin, @Nullable T variant) {
-		if(bin==null || bin.isEmpty()) {
-			return ofNullable(variant);
-		}
-		if(variant==null) {
-			return bin;
-		}
-		// at this point: bin is not empty and variant is not null
-		val newSize = bin.size() + 1;
-    	val union = bin.stream().collect(Collectors.toCollection(()->new ArrayList<>(newSize)));
-    	union.add(variant);
-    	return Bin_Multiple.of(union);
+
+    public static <T> Bin<T> ofInstance(@Nullable Instance<T> instance) {
+        if(instance==null || instance.isUnsatisfied()) {
+            return empty();
+        }
+        if(instance.isResolvable()) { 
+            return Bin_Singleton.of(instance.get());
+        }
+        val nonNullElements = instance.stream()
+                .collect(Collectors.toCollection(()->new ArrayList<>()));
+
+        nonNullElements.sort(AnnotationAwareOrderComparator.INSTANCE);
+
+        return Bin_Multiple.of(nonNullElements);
+
+    }
+
+
+    // -- OPERATORS
+
+    public default Bin<T> filter(@Nullable Predicate<? super T> predicate) {
+        if(predicate==null || isEmpty()) {
+            return this;
+        }
+
+        // optimization for the singleton case
+        if(isCardinalityOne()) {
+            val singleton = getSingleton().get();
+            return predicate.test(singleton)
+                    ? this
+                            : empty();
+        }
+
+        val filteredElements = 
+                stream()
+                .filter(predicate)
+                .collect(Collectors.toCollection(ArrayList::new));
+
+        // optimization for the case when the filter accepted all
+        if(filteredElements.size()==size()) {
+            return this;
+        }
+
+        return ofCollection(filteredElements);
+    }
+
+    public static <T> Bin<T> concat(@Nullable Bin<T> bin, @Nullable T variant) {
+        if(bin==null || bin.isEmpty()) {
+            return ofNullable(variant);
+        }
+        if(variant==null) {
+            return bin;
+        }
+        // at this point: bin is not empty and variant is not null
+        val newSize = bin.size() + 1;
+        val union = bin.stream().collect(Collectors.toCollection(()->new ArrayList<>(newSize)));
+        union.add(variant);
+        return Bin_Multiple.of(union);
     }
-	
+
     default <R> Bin<R> map(Function<? super T, R> mapper) {
-    	
+
         if(isEmpty()) {
             return empty();
         }
-        
+
         requires(mapper, "mapper");
-        
+
         val mappedElements = 
-        		stream()
-        		.map(mapper)
-        		.filter(_NullSafe::isPresent)
-        		.collect(Collectors.toCollection(ArrayList::new));
-        
+                stream()
+                .map(mapper)
+                .filter(_NullSafe::isPresent)
+                .collect(Collectors.toCollection(ArrayList::new));
+
         return ofCollection(mappedElements);
     }
-	
-	// -- TRAVERSAL
-	
+
+    // -- TRAVERSAL
+
+    @Override
     default void forEach(Consumer<? super T> action) {
         requires(action, "action");
         stream().forEach(action);
     }
-	
-	// -- SHORTCUTS FOR PREDICATES
-	
-	default boolean isEmpty() {
-		return getCardinality().isZero();
-	}
-	
-	default boolean isNotEmpty() {
-		return !getCardinality().isZero();
-	}
-	
-	default boolean isCardinalityOne() {
-		return getCardinality().isOne();
-	}
-	
-	default boolean isCardinalityMultiple() {
-		return getCardinality().isMultiple();
-	}
-	
-	
+
+    // -- SHORTCUTS FOR PREDICATES
+
+    default boolean isEmpty() {
+        return getCardinality().isZero();
+    }
+
+    default boolean isNotEmpty() {
+        return !getCardinality().isZero();
+    }
+
+    default boolean isCardinalityOne() {
+        return getCardinality().isOne();
+    }
+
+    default boolean isCardinalityMultiple() {
+        return getCardinality().isMultiple();
+    }
+
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Empty.java b/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Empty.java
index 6e43c72..bf57f45 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Empty.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Empty.java
@@ -27,37 +27,37 @@ import lombok.Value;
 
 @Value(staticConstructor="of")
 final class Bin_Empty<T> implements Bin<T> {
-	
-	static final Bin_Empty<?> INSTANCE = new Bin_Empty<>(); 
-	
-	@Override
-	public Cardinality getCardinality() {
-		return Cardinality.ZERO;
-	}
-
-	@Override
-	public Stream<T> stream() {
-		return Stream.empty();
-	}
-
-	@Override
-	public Optional<T> getSingleton() {
-		return Optional.empty();
-	}
-
-	@Override
-	public Optional<T> getFirst() {
-		return Optional.empty();
-	}
-
-	@Override
-	public int size() {
-		return 0;
-	}
-
-	@Override
-	public Iterator<T> iterator() {
-		return Collections.<T>emptyList().iterator();
-	}
+
+    static final Bin_Empty<?> INSTANCE = new Bin_Empty<>(); 
+
+    @Override
+    public Cardinality getCardinality() {
+        return Cardinality.ZERO;
+    }
+
+    @Override
+    public Stream<T> stream() {
+        return Stream.empty();
+    }
+
+    @Override
+    public Optional<T> getSingleton() {
+        return Optional.empty();
+    }
+
+    @Override
+    public Optional<T> getFirst() {
+        return Optional.empty();
+    }
+
+    @Override
+    public int size() {
+        return 0;
+    }
+
+    @Override
+    public Iterator<T> iterator() {
+        return Collections.<T>emptyList().iterator();
+    }
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Multiple.java b/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Multiple.java
index c37720a..2492689 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Multiple.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Multiple.java
@@ -31,43 +31,43 @@ import lombok.val;
 
 @RequiredArgsConstructor(staticName="of")
 final class Bin_Multiple<T> implements Bin<T> {
-	
-	private final List<T> elements;
-	
-	@Getter(lazy=true, onMethod=@__({@Override})) 
-	private final Optional<T> first = Optional.of(elements.get(0));
 
-	@Override
-	public Cardinality getCardinality() {
-		return Cardinality.MULTIPLE;
-	}
+    private final List<T> elements;
 
-	@Override
-	public Stream<T> stream() {
-		return elements.stream();
-	}
+    @Getter(lazy=true, onMethod=@__({@Override})) 
+    private final Optional<T> first = Optional.of(elements.get(0));
 
-	@Override
-	public Optional<T> getSingleton() {
-		return Optional.empty();
-	}
+    @Override
+    public Cardinality getCardinality() {
+        return Cardinality.MULTIPLE;
+    }
 
-	@Override
-	public int size() {
-		return elements.size();
-	}
+    @Override
+    public Stream<T> stream() {
+        return elements.stream();
+    }
 
-	@Override
-	public Iterator<T> iterator() {
-		return Collections.unmodifiableList(elements).iterator();
-	}
-	
-	@Override
-	public String toString() {
-		val literal = stream()
-				.map(s->""+s)
-				.collect(Collectors.joining(", "));
-		return "Bin["+literal+"]";
-	}
+    @Override
+    public Optional<T> getSingleton() {
+        return Optional.empty();
+    }
+
+    @Override
+    public int size() {
+        return elements.size();
+    }
+
+    @Override
+    public Iterator<T> iterator() {
+        return Collections.unmodifiableList(elements).iterator();
+    }
+
+    @Override
+    public String toString() {
+        val literal = stream()
+                .map(s->""+s)
+                .collect(Collectors.joining(", "));
+        return "Bin["+literal+"]";
+    }
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Singleton.java b/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Singleton.java
index 938ab0a..a0b196a 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Singleton.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/collections/Bin_Singleton.java
@@ -28,40 +28,40 @@ import lombok.RequiredArgsConstructor;
 
 @RequiredArgsConstructor(staticName="of")
 final class Bin_Singleton<T> implements Bin<T> {
-	
-	private final T element;
-	
-	@Getter(lazy=true, onMethod=@__({@Override})) 
-	private final Optional<T> singleton = Optional.of(element);
 
-	@Override
-	public Cardinality getCardinality() {
-		return Cardinality.ONE;
-	}
+    private final T element;
 
-	@Override
-	public Stream<T> stream() {
-		return Stream.of(element);
-	}
+    @Getter(lazy=true, onMethod=@__({@Override})) 
+    private final Optional<T> singleton = Optional.of(element);
 
-	@Override
-	public Optional<T> getFirst() {
-		return getSingleton();
-	}
+    @Override
+    public Cardinality getCardinality() {
+        return Cardinality.ONE;
+    }
 
-	@Override
-	public int size() {
-		return 1;
-	}
+    @Override
+    public Stream<T> stream() {
+        return Stream.of(element);
+    }
 
-	@Override
-	public Iterator<T> iterator() {
-		return Collections.singletonList(element).iterator();
-	}
-	
-	@Override
-	public String toString() {
-		return "Bin["+element+"]";
-	}
+    @Override
+    public Optional<T> getFirst() {
+        return getSingleton();
+    }
+
+    @Override
+    public int size() {
+        return 1;
+    }
+
+    @Override
+    public Iterator<T> iterator() {
+        return Collections.singletonList(element).iterator();
+    }
+
+    @Override
+    public String toString() {
+        return "Bin["+element+"]";
+    }
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/collections/Cardinality.java b/core/commons/src/main/java/org/apache/isis/commons/collections/Cardinality.java
index 0f7eecd..1253acb 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/collections/Cardinality.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/collections/Cardinality.java
@@ -22,22 +22,22 @@ package org.apache.isis.commons.collections;
  * @since 2.0
  */
 public enum Cardinality {
-	
-	ZERO,
-	ONE,
-	MULTIPLE
-	;
-	
-	public boolean isZero() {
-		return this == ZERO;
-	}
-	
-	public boolean isOne() {
-		return this == ONE;
-	}
-	
-	public boolean isMultiple() {
-		return this == MULTIPLE;
-	}
-	
+
+    ZERO,
+    ONE,
+    MULTIPLE
+    ;
+
+    public boolean isZero() {
+        return this == ZERO;
+    }
+
+    public boolean isOne() {
+        return this == ONE;
+    }
+
+    public boolean isMultiple() {
+        return this == MULTIPLE;
+    }
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/assertions/_Assert.java b/core/commons/src/main/java/org/apache/isis/commons/internal/assertions/_Assert.java
index 56207be..9c6c3c5 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/assertions/_Assert.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/assertions/_Assert.java
@@ -48,11 +48,11 @@ public final class _Assert {
             throw new IsisAssertException(message + (target == null ? "" : (": " + target)));
         }
     }
-    
+
     public static void assertEquals(final String message, Object left, Object right) {
         if (!Objects.equals(left, right)) {
             throw new IsisAssertException(message + String.format(": '%s' != '%s' ", ""+left, ""+right));
         }
     }
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Blackhole.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Blackhole.java
index 14306f4..73dd263 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Blackhole.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Blackhole.java
@@ -39,7 +39,7 @@ import java.util.Random;
  * @since 2.0
  */
 public final class _Blackhole {
-    
+
     /**
      * Consume object. This call provides a side effect preventing JIT to eliminate dependent computations.
      *
@@ -57,24 +57,24 @@ public final class _Blackhole {
         }
 
     }
-    
+
     // -- HELPER
-    
+
     public final static class _Blackhole_Internal {
-        
+
         public int tlr;
         public volatile int tlrMask;
         public volatile Object obj1;
-        
+
         public _Blackhole_Internal() {
             Random r = new Random(System.nanoTime());
             tlr = r.nextInt();
             tlrMask = 1;
             obj1 = new Object();
         }
-        
+
     }
-    
+
     private final static _Blackhole_Internal internal = new _Blackhole_Internal();
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Casts.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Casts.java
index a346a80..2631251 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Casts.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Casts.java
@@ -77,50 +77,50 @@ public final class _Casts {
      * @return
      */
     public static <T, R, U, V> R castThenApply(
-    		@Nullable U left, 
-    		@Nullable V right,
-    		Class<T> cls, 
-    		BiFunction<T, T, R> onBothCast,
-    		BiFunction<T, V, R> onLeftCast,
-    		BiFunction<U, T, R> onRightCast,
-    		BiFunction<U, V, R> onNonCast) {
-
-    	requires(cls, "cls");
-    	
-    	T left_casted=null, right_casted=null;
-    	boolean left_not_casted=false, right_not_casted=false;
-    	
-    	if(left==null) {
-    		left_casted = null;
-    	} else if(cls.isAssignableFrom(left.getClass())) {
-    		left_casted = cls.cast(left);
-    	} else {
-    		left_not_casted = true;
-    	}
-    	
-    	if(right==null) {
-    		right_casted = null;
-    	} else if(cls.isAssignableFrom(right.getClass())) {
-    		right_casted = cls.cast(right);
-    	} else {
-    		right_not_casted = true;
-    	}
-    	
-    	if(left_not_casted && right_not_casted) {
-    		return onNonCast.apply(left, right);
-    	}
-
-    	if(!left_not_casted && !right_not_casted) {
-    		return onBothCast.apply(left_casted, right_casted);
-    	}
-    	
-    	if(left_not_casted) {
-    		return onRightCast.apply(left, right_casted);
-    	}
-    	
-    	return onLeftCast.apply(left_casted, right);
-    	
+            @Nullable U left, 
+            @Nullable V right,
+            Class<T> cls, 
+            BiFunction<T, T, R> onBothCast,
+            BiFunction<T, V, R> onLeftCast,
+            BiFunction<U, T, R> onRightCast,
+            BiFunction<U, V, R> onNonCast) {
+
+        requires(cls, "cls");
+
+        T left_casted=null, right_casted=null;
+        boolean left_not_casted=false, right_not_casted=false;
+
+        if(left==null) {
+            left_casted = null;
+        } else if(cls.isAssignableFrom(left.getClass())) {
+            left_casted = cls.cast(left);
+        } else {
+            left_not_casted = true;
+        }
+
+        if(right==null) {
+            right_casted = null;
+        } else if(cls.isAssignableFrom(right.getClass())) {
+            right_casted = cls.cast(right);
+        } else {
+            right_not_casted = true;
+        }
+
+        if(left_not_casted && right_not_casted) {
+            return onNonCast.apply(left, right);
+        }
+
+        if(!left_not_casted && !right_not_casted) {
+            return onBothCast.apply(left_casted, right_casted);
+        }
+
+        if(left_not_casted) {
+            return onRightCast.apply(left, right_casted);
+        }
+
+        return onLeftCast.apply(left_casted, right);
+
     }
-    
-    
+
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Either.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Either.java
index 60292fe..0fb04a4 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Either.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Either.java
@@ -52,98 +52,98 @@ public final class _Either<L, R> {
     private final L left;
     private final R right;
     private final boolean isLeft;
-    
+
     // -- FACTORIES
-    
+
     public static <L, R> _Either<L, R> left(L left) {
-    	requires(left, "left");
+        requires(left, "left");
         return of(left, null, true);
     }
-    
+
     public static <L, R> _Either<L, R> right(R right) {
-    	requires(right, "right");
+        requires(right, "right");
         return of(null, right, false);
     }
-    
+
     public static <L, R> _Either<L, R> leftNullable(@Nullable L left) {
         return of(left, null, true);
     }
-    
+
     public static <L, R> _Either<L, R> rightNullable(@Nullable R right) {
         return of(null, right, false);
     }
-    
+
     // -- ACCESSORS
-    
+
     public Optional<L> left() {
-    	return Optional.ofNullable(left); 
+        return Optional.ofNullable(left); 
     }
-    
+
     public Optional<R> right() {
-    	return Optional.ofNullable(right); 
+        return Optional.ofNullable(right); 
     }
-    
+
     public L leftIfAny() {
-    	return left; 
+        return left; 
     }
-    
+
     public R rightIfAny() {
-    	return right; 
+        return right; 
     }
-    
+
     // -- PREDICATES
-    
+
     public boolean isLeft() {
-    	return isLeft;
+        return isLeft;
     }
-    
+
     public boolean isRight() {
-    	return !isLeft;
+        return !isLeft;
     }
-    
+
     public boolean isPresentLeft() {
-    	return left!=null;
+        return left!=null;
     }
-    
+
     public boolean isPresentRight() {
-    	return right!=null;
+        return right!=null;
     }
-    
+
     // -- COMPOSITION
-    
+
     public <X, Y> _Either<X, Y> map(Function<L, X> leftMapper, Function<R, Y> rightMapper){
-    	return isLeft()
-    			? left(leftMapper.apply(left))
-    					: right(rightMapper.apply(right));
+        return isLeft()
+                ? left(leftMapper.apply(left))
+                        : right(rightMapper.apply(right));
     }
-    
+
     public <X, Y> _Either<X, Y> mapNullable(Function<L, X> leftMapper, Function<R, Y> rightMapper){
-    	return isLeft()
-    			? leftNullable(leftMapper.apply(left))
-    					: rightNullable(rightMapper.apply(right));
+        return isLeft()
+                ? leftNullable(leftMapper.apply(left))
+                        : rightNullable(rightMapper.apply(right));
     }
-    
+
     // -- REDUCTION
-    
+
     public <X> X get(BiFunction<L, R, X> reduction){
-    	return reduction.apply(left, right);
+        return reduction.apply(left, right);
     }
-    
+
     public <X> X get(Function<L, X> leftMapper, Function<R, X> rightMapper){
-    	return isLeft()
-    			? leftMapper.apply(left)
-    					: rightMapper.apply(right);
+        return isLeft()
+                ? leftMapper.apply(left)
+                        : rightMapper.apply(right);
     }
 
-	// -- TERMINALS
-    
+    // -- TERMINALS
+
     public void accept(Consumer<L> leftConsumer, Consumer<R> rightConsumer) {
-    	if(isLeft()) {
-    		leftConsumer.accept(left);
-    	} else {
-    		rightConsumer.accept(right);
-    	}
-	}
-    
-    
+        if(isLeft()) {
+            leftConsumer.accept(left);
+        } else {
+            rightConsumer.accept(right);
+        }
+    }
+
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java
index 186a67b..f29d690 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Lazy.java
@@ -34,9 +34,9 @@ import java.util.function.Supplier;
  * @since 2.0
  */
 public interface _Lazy<T> extends Supplier<T> {
-    
+
     // -- INTERFACE
-    
+
     /**
      * @return whether this lazy got initialized and holds a memoized value
      */
@@ -57,7 +57,7 @@ public interface _Lazy<T> extends Supplier<T> {
      */
     @Override
     public T get();
-    
+
     // -- FACTORIES
 
     /**
@@ -69,7 +69,7 @@ public interface _Lazy<T> extends Supplier<T> {
     public static <T> _Lazy<T> of(Supplier<? extends T> supplier) {
         return new _Lazy_Simple<T>(supplier);
     }
-    
+
     /**
      * Thread-safe variant to {@link _Lazy#of(Supplier)}.
      * Concurrent calls to this lazy's get() method will never result in concurrent calls to the 
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
index 6933027..25e2646 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_NullSafe.java
@@ -106,7 +106,7 @@ public final class _NullSafe {
                         false) //not parallel
                         : Stream.empty();
     }
-    
+
     /**
      * If {@code stream} is {@code null} returns the empty stream,
      * otherwise returns the stream argument.
@@ -116,7 +116,7 @@ public final class _NullSafe {
     public static <T> Stream<T> stream(@Nullable final Stream<T> stream) {
         return stream!=null ? stream : Stream.empty();
     }
-    
+
     /**
      * If {@code enumeration} is {@code null} returns the empty stream,
      * otherwise returns a stream of the enumeration's elements.
@@ -128,13 +128,15 @@ public final class _NullSafe {
                 ? stream(toIterator(enumeration))
                         : Stream.empty();
     }
-    
+
     // [ahuber] not public, since one time use of enumeration only!
     private static <T> Iterator<T> toIterator(final Enumeration<T> e){
         return new Iterator<T>() {
+            @Override
             public T next() {
                 return e.nextElement();
             }
+            @Override
             public boolean hasNext() {
                 return e.hasMoreElements();
             }
@@ -209,7 +211,7 @@ public final class _NullSafe {
     public static boolean isEmpty(long[] array){ return array==null || array.length == 0;}
     public static boolean isEmpty(short[] array){ return array==null || array.length == 0;}
     public static <T> boolean isEmpty(T[] array){ return array==null || array.length == 0;}
-    
+
     // -- SIZE/LENGTH CHECKS
 
     public static int size(String x){ return x!=null ? x.length() : 0; }
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 673fc5f..618cd86 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
@@ -71,15 +71,15 @@ public final class _Strings {
      * (a duplicate of in {@link _Constants.emptyStringArray} )
      */
     public final static String[] emptyArray = new String[0];
-    
+
     // -- PAIR OF STRINGS
-    
+
     public static interface KeyValuePair extends Map.Entry<String, String> { }
-    
+
     public static KeyValuePair pair(final String key, final String value){
         return _Strings_KeyValuePair.of(key, value);
     }
-    
+
     /**
      * Parses a string assumed to be of the form <kbd>key=value</kbd> into its parts.
      *
@@ -88,9 +88,9 @@ public final class _Strings {
     public static Optional<KeyValuePair> parseKeyValuePair(@Nullable String keyValueLiteral) {
         return _Strings_KeyValuePair.parse(keyValueLiteral);
     }
-    
+
     // -- FILLING
-    
+
     public static String of(int length, char c) {
         if(length<=0) {
             return "";
@@ -141,7 +141,7 @@ public final class _Strings {
         }
         return input;
     }
-    
+
     /**
      * @param input
      * @return the empty string if the {@code input} is null, the {@code input} otherwise 
@@ -152,8 +152,8 @@ public final class _Strings {
         }
         return input;
     }
-    
-    
+
+
     /**
      * Trims the input.
      * @param input
@@ -198,9 +198,9 @@ public final class _Strings {
         }
         return Character.toUpperCase(input.charAt(0)) + input.substring(1);
     }
-    
+
     // -- SPECIAL UNARY OPERATORS
-    
+
     public static String htmlEscape(String source) {
         return _Strings_HtmlEscaper.htmlEscape(source);
     }
@@ -240,9 +240,9 @@ 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
@@ -256,9 +256,9 @@ public final class _Strings {
      */
     public static String combineWithDelimiter(
             @Nullable String left, @Nullable String right, String delimiter) {
-        
+
         requiresNotEmpty(delimiter, "pathDelimiter");
-        
+
         if (isNullOrEmpty(left) && isNullOrEmpty(right)) {
             return "";
         }
@@ -273,7 +273,7 @@ public final class _Strings {
         }
         return left + delimiter + right;
     }
-    
+
 
     // -- PADDING
 
@@ -353,7 +353,7 @@ public final class _Strings {
                 Spliterators.spliteratorUnknownSize(splitIterator(input, separator), Spliterator.ORDERED),
                 false); // not parallel
     }
-    
+
     /**
      * Creates a stream from the given input sequence around matches of {@code delimiterPattern}. 
      * @param input
@@ -367,29 +367,29 @@ public final class _Strings {
         }
         return delimiterPattern.splitAsStream(input);
     }
-    
+
 
     public static void splitThenAccept(
-    		@Nullable final String input, 
-    		final String separator, 
-    		final BiConsumer<String, String> onNonEmptySplit,
-    		final Consumer<String> onNonEmptyLhs,
-    		final Consumer<String> onNonEmptyRhs) {
-    	
-    	_Strings_FastSplit.splitThenAccept(input, separator, onNonEmptySplit, onNonEmptyLhs, onNonEmptyRhs);
+            @Nullable final String input, 
+            final String separator, 
+            final BiConsumer<String, String> onNonEmptySplit,
+            final Consumer<String> onNonEmptyLhs,
+            final Consumer<String> onNonEmptyRhs) {
+
+        _Strings_FastSplit.splitThenAccept(input, separator, onNonEmptySplit, onNonEmptyLhs, onNonEmptyRhs);
     }
-    
+
     public static void splitThenAcceptEmptyAsNull(
-    		@Nullable final String input, 
-    		final String separator, 
-    		final BiConsumer<String, String> onSplit) {
-    	
-    	_Strings_FastSplit.splitThenAccept(input, separator, onSplit, 
-    			lhs->onSplit.accept(lhs, null), 
-    			rhs->onSplit.accept(null, rhs));
+            @Nullable final String input, 
+            final String separator, 
+            final BiConsumer<String, String> onSplit) {
+
+        _Strings_FastSplit.splitThenAccept(input, separator, onSplit, 
+                lhs->onSplit.accept(lhs, null), 
+                rhs->onSplit.accept(null, rhs));
     }
-    
-    
+
+
 
     // -- REPLACEMENT OPERATORS
 
@@ -404,9 +404,9 @@ public final class _Strings {
         requires(replacement, "replacement");
         return mapIfPresentElse(input, __->input.replaceAll("\\s+", replacement), null);
     }
-    
+
     // -- READ FROM INPUT STREAM
-    
+
     public static String read(@Nullable final InputStream input, Charset charset) {
         requires(charset, "charset");
         if(input==null) {
@@ -510,7 +510,7 @@ public final class _Strings {
         return suffix(fileName, prefix(fileExtension, "."));
     }
 
-    
+
 
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_FastSplit.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_FastSplit.java
index e532a7d..7e6a529 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_FastSplit.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_FastSplit.java
@@ -25,42 +25,42 @@ import javax.annotation.Nullable;
 
 class _Strings_FastSplit {
 
-	public static void splitThenAccept(
-    		@Nullable final String input, 
-    		final String separator, 
-    		BiConsumer<String, String> onNonEmptySplit,
-    		Consumer<String> onNonEmptyLhs,
-    		Consumer<String> onNonEmptyRhs) {
-    	
+    public static void splitThenAccept(
+            @Nullable final String input, 
+            final String separator, 
+            BiConsumer<String, String> onNonEmptySplit,
+            Consumer<String> onNonEmptyLhs,
+            Consumer<String> onNonEmptyRhs) {
+
         if(_Strings.isEmpty(input)) {
-        	// skip
+            // skip
             return;
         }
-        
+
         // we have a non-empty string
-        
+
         final int p = input.indexOf(separator);
         if(p<1){
-			if(p==-1) {
-				// separator not found
-				onNonEmptyLhs.accept(input);
-				return;
-			}
-			if(p==0) {
-				// empty lhs in string
-				if(input.length()>separator.length()) {
-					onNonEmptyRhs.accept(input);
-				}
-				return;
-			}
-		}
+            if(p==-1) {
+                // separator not found
+                onNonEmptyLhs.accept(input);
+                return;
+            }
+            if(p==0) {
+                // empty lhs in string
+                if(input.length()>separator.length()) {
+                    onNonEmptyRhs.accept(input);
+                }
+                return;
+            }
+        }
         final int q = p + separator.length();
-		if(q==input.length()) {
-			// empty rhs
-			onNonEmptyLhs.accept(input.substring(0, p));
-			return;
-		}
-		onNonEmptySplit.accept(input.substring(0, p), input.substring(q));
+        if(q==input.length()) {
+            // empty rhs
+            onNonEmptyLhs.accept(input.substring(0, p));
+            return;
+        }
+        onNonEmptySplit.accept(input.substring(0, p), input.substring(q));
     }
-	
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_HtmlEscaper.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_HtmlEscaper.java
index 2ca9ae2..0fc181f 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_HtmlEscaper.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_HtmlEscaper.java
@@ -36,20 +36,20 @@ final class _Strings_HtmlEscaper {
             _Strings.pair("&", "&amp;"),
             _Strings.pair("<", "&lt;"),
             _Strings.pair(">", "&gt;"),
-            
+
     }; 
-    
+
     static String htmlEscape(String input) {
         if(_Strings.isEmpty(input)) {
             return input;
         }
-        
+
         String output = input;
-        
+
         for(KeyValuePair replacement : replacements) {
             output = output.replace(replacement.getKey(), replacement.getValue());
         }
-        
+
         return output;
     }
 
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_KeyValuePair.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_KeyValuePair.java
index dd5f71a..5a1bb07 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_KeyValuePair.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_KeyValuePair.java
@@ -35,7 +35,7 @@ final class _Strings_KeyValuePair implements _Strings.KeyValuePair {
     static KeyValuePair of(String key, String value) {
         return new _Strings_KeyValuePair(key, value);
     }
-    
+
     private final String key;
     private final String value;
 
@@ -58,18 +58,18 @@ final class _Strings_KeyValuePair implements _Strings.KeyValuePair {
     public String setValue(String value) {
         throw notImplemented();
     }
-    
+
     /**
      * Parses a string assumed to be of the form <kbd>key=value</kbd> into its parts.
      *
      * @return a non-empty Optional, if (and only if) the {@code keyValueLiteral} does contain at least one '='
      */
     public static Optional<KeyValuePair> parse(String keyValueLiteral) {
-        
+
         if(_Strings.isNullOrEmpty(keyValueLiteral)) {
             return Optional.empty();
         }
-        
+
         final int equalsIndex = keyValueLiteral.indexOf('=');
         if (equalsIndex == -1) {
             return Optional.empty();
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_SplitIterator.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_SplitIterator.java
index 64d1dd7..4613043 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_SplitIterator.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Strings_SplitIterator.java
@@ -71,6 +71,6 @@ final class _Strings_SplitIterator {
             }
         };
     }
- 
+
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Timing.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Timing.java
index 4a0e99a..1ed5f3d 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Timing.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Timing.java
@@ -53,54 +53,54 @@ public final class _Timing {
     public static StopWatch atSystemNanos(long startedAtSystemNanos) {
         return new StopWatch(startedAtSystemNanos);
     }
-    
-    
+
+
     /**
      * Non thread safe start/stop watch utilizing the currently running
      * JVM's high-resolution time source.
      */
     public static final class StopWatch {
-        
+
         private long t0 = 0;
         private long t1 = 0;
         private boolean stopped;
-        
+
         private StopWatch(long startedAtSystemNanos) {
             t0 = startedAtSystemNanos;
         }
-        
+
         private StopWatch() {
             start();
         }
-        
+
         public StopWatch start() {
             t0 = System.nanoTime();
             stopped = false;
             return this;
         }
-        
+
         public StopWatch stop() {
             t1 = System.nanoTime();
             stopped  = true;
             return this;
         }
-        
+
         public double getSeconds() {
             return 0.000_000_001 * getNanos();
         }
-        
+
         public double getMillis() {
             return 0.000_001 * getNanos();
         }
-        
+
         public double getMicros() {
             return 0.001 * getNanos();
         }
-        
+
         public long getNanos() {
             return stopped ? t1 - t0 : System.nanoTime() - t0 ;
         }
-        
+
     }
 
     public static StopWatch run(Runnable runnable) {
@@ -108,12 +108,12 @@ public final class _Timing {
         runnable.run();
         return watch.stop();
     }
-    
+
     public static void runVerbose(String label, Runnable runnable) {
         final StopWatch watch = run(runnable);
         info(String.format(Locale.US, "Running '%s' took %.2f ms", label, watch.getMillis()));
     }
-    
+
     public static <T> T callVerbose(String label, Supplier<T> callable) {
         final StopWatch watch = now();
         T result = callable.get();
@@ -123,7 +123,7 @@ public final class _Timing {
     }
 
     // -- HELPER
-    
+
     private static void info(String msg) {
         System.out.println(msg);
     }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Tuples.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Tuples.java
index a39a328..753d562 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Tuples.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_Tuples.java
@@ -34,16 +34,16 @@ package org.apache.isis.commons.internal.base;
 public final class _Tuples {
 
     private _Tuples(){}
-    
+
     public static class Tuple2<T1, T2>{
         private final T1 _1;
         private final T2 _2;
-        
+
         private Tuple2(T1 _1, T2 _2) {
             this._1 = _1;
             this._2 = _2;
         }
-        
+
         /**
          * @return first element of this tuple
          */
@@ -53,7 +53,7 @@ public final class _Tuples {
          */
         public T2 get_2() { return _2; }
     }
-    
+
     public static <T1, T2> Tuple2<T1, T2> pair(T1 _1, T2 _2) {
         return new Tuple2<T1, T2>(_1, _2);
     }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
index 639b4ae..569a5e1 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/base/_With.java
@@ -218,7 +218,7 @@ public final class _With<T> {
         }
         return obj;
     }
-    
+
     // -- PARAMETER NON-EMPTY CHECK(S)
 
     /**
@@ -250,7 +250,7 @@ public final class _With<T> {
     public static <T> T create(Supplier<T> factory, Consumer<T> initializer) {
         return accept(factory.get(), initializer);
     }
-    
+
     /**
      * Allows for single line instantiation and initialization of an ArrayList.
      * @param initializer
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Arrays.java b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Arrays.java
index bed5638..8cd1eda 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Arrays.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Arrays.java
@@ -49,7 +49,7 @@ public final class _Arrays {
     private _Arrays(){}
 
     // -- PREDICATES
-    
+
     /**
      * Whether given {@code test} predicate evaluates 'true' for any given pair of elements 
      * {@code array1[index]} and {@code array2[index]}, with {@code index=[0..n-1]} and {@code n} 
@@ -65,7 +65,7 @@ public final class _Arrays {
             @Nullable final T[] array1, 
             @Nullable final T[] array2, 
             final BiPredicate<T, T> test) {
-        
+
         final int s1 = _NullSafe.size(array1);
         final int s2 = _NullSafe.size(array2);
         if(s1!=s2) {
@@ -75,7 +75,7 @@ public final class _Arrays {
             return false;
         }
         requires(test, "test");
-        
+
         for(int i=0; i<s1; ++i) {
             if(test.test(array1[i], array2[i])) {
                 return true;
@@ -83,7 +83,7 @@ public final class _Arrays {
         }
         return false;
     }
-    
+
 
     /**
      * Whether given {@code test} predicate evaluates 'true' for all given pairs of elements 
@@ -103,7 +103,7 @@ public final class _Arrays {
         requires(test, "test");
         return !testAnyMatch(array1, array2, test.negate());
     }
-            
+
 
     /**
      * @param cls
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java
index 14321e1..bd55052 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Collections.java
@@ -309,14 +309,14 @@ public final class _Collections {
     }
 
     // -- TO STRING
-    
+
     public static String toStringJoining(@Nullable Collection<?> collecion, String delimiter) {
         requires(delimiter, "delimiter");
         return _NullSafe.stream(collecion)
                 .map(x->""+x)
                 .collect(Collectors.joining(delimiter));
     }
-    
+
     public static String toStringJoiningNewLine(@Nullable Collection<?> collecion) {
         return toStringJoining(collecion, "\n");
     }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Inbox.java b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Inbox.java
index 838f42d..243475a 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Inbox.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Inbox.java
@@ -30,55 +30,55 @@ import lombok.val;
  * @param <T>
  */
 public class _Inbox<T> implements Serializable {
-	
-	private static final long serialVersionUID = 1L;
-	private final Object $lock = new Object[0]; // serializable lock
-	
-	final List<T> list = _Lists.newArrayList();
 
-	public void add(T element) {
-		synchronized($lock) {
-			list.add(element);
-		}
-	}
-	
-	public void remove(T element) {
-		synchronized($lock) {
-			list.remove(element);
-		}
-	}
-	
-	public List<T> snapshot() {
-		synchronized($lock) {
-			val defensiveCopy = _Lists.newArrayList(list);
-			return defensiveCopy;
-		}
-	}
-	
-	public List<T> snapshotThenClear() {
-		synchronized($lock) {
-			val defensiveCopy = _Lists.newArrayList(list);
-			list.clear();
-			return defensiveCopy;
-		}
-	}
-	
-	public boolean isEmpty() {
-		synchronized($lock) {
-			return list.isEmpty();
-		} 
-	}
-	
-	public void clear() {
-		synchronized($lock) {
-			list.clear();
-		} 
-	}
-	
-	public int size() {
-		synchronized($lock) {
-			return list.size();
-		} 
-	}
-	
+    private static final long serialVersionUID = 1L;
+    private final Object $lock = new Object[0]; // serializable lock
+
+    final List<T> list = _Lists.newArrayList();
+
+    public void add(T element) {
+        synchronized($lock) {
+            list.add(element);
+        }
+    }
+
+    public void remove(T element) {
+        synchronized($lock) {
+            list.remove(element);
+        }
+    }
+
+    public List<T> snapshot() {
+        synchronized($lock) {
+            val defensiveCopy = _Lists.newArrayList(list);
+            return defensiveCopy;
+        }
+    }
+
+    public List<T> snapshotThenClear() {
+        synchronized($lock) {
+            val defensiveCopy = _Lists.newArrayList(list);
+            list.clear();
+            return defensiveCopy;
+        }
+    }
+
+    public boolean isEmpty() {
+        synchronized($lock) {
+            return list.isEmpty();
+        } 
+    }
+
+    public void clear() {
+        synchronized($lock) {
+            list.clear();
+        } 
+    }
+
+    public int size() {
+        synchronized($lock) {
+            return list.size();
+        } 
+    }
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Lists.java b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Lists.java
index de4f711..7e1f99f 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Lists.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Lists.java
@@ -166,9 +166,9 @@ public final class _Lists {
                 ()->Collectors.<T, CopyOnWriteArrayList<T>>toCollection(CopyOnWriteArrayList::new) );
     }
 
-    
+
     // -- TRANSFORMATIONS
-    
+
     public static <T, R> List<R> transform(@Nullable Collection<T> input, Function<Stream<T>, Stream<R>> transformation) {
         if(input==null) {
             return Collections.emptyList();
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Maps.java b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Maps.java
index 65aa10a..f18fc78 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Maps.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Maps.java
@@ -103,32 +103,32 @@ public final class _Maps {
     public static <K, V> Map.Entry<K, V> entry(K k, V v){
         return new AbstractMap.SimpleEntry<K, V>(k, v);
     }
-    
+
     // -- TRANSFORMATIONS
-    
+
     public static <K, V> Map<K, V> filterKeys(
             @Nullable Map<K, V> input,
             Predicate<K> keyFilter, 
             Supplier<Map<K, V>> factory) {
-        
+
         requires(factory, "factory");
         final Map<K, V> result = factory.get();
-        
+
         if(input==null) {
             return result;
         }
-        
+
         requires(keyFilter, "keyFilter");
-        
+
         input.forEach((k, v)->{
             if(keyFilter.test(k)) {
                 result.put(k, v);
             }
         });
-        
+
         return result;
     }
-    
+
     public static <K, V> ListMultimap<V, K> invertToListMultimap(Map<K, V> input) {
         final ListMultimap<V, K> result = _Multimaps.newListMultimap();        
         if(input==null) {
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java
index 564c203..464df9a 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java
@@ -144,7 +144,7 @@ public class _Multimaps {
 
     public static <K, V, S extends Set<V>> SetMultimap<K, V> newSetMultimap(
             final Supplier<? extends Map<K, S>> mapFactory,
-            final Supplier<S> elementCollectionFactory){
+                    final Supplier<S> elementCollectionFactory){
         requires(mapFactory, "mapFactory");
         requires(elementCollectionFactory, "elementCollectionFactory");
 
@@ -234,21 +234,21 @@ public class _Multimaps {
      * @return TreeMap of TreeSets
      */
     public static <K, V> SetMultimap<K, V> newSortedSetMultimap(
-    		@Nullable Comparator<K> keyComparator, 
-    		@Nullable Comparator<V> elementComparator){
-    	
+            @Nullable Comparator<K> keyComparator, 
+            @Nullable Comparator<V> elementComparator){
+
         final Supplier<SortedMap<K, SortedSet<V>>> mapFactory = ()->new TreeMap<K, SortedSet<V>>(keyComparator);
         final Supplier<SortedSet<V>> elementSetFactory = ()->new TreeSet<V>(elementComparator);
-		return newSetMultimap(mapFactory, elementSetFactory);
+        return newSetMultimap(mapFactory, elementSetFactory);
     }
-    
+
     /**
      * @return HashMap of HashMaps
      */
     public static <K1, K2, V> MapMultimap<K1, K2, V> newMapMultimap(){
         return newMapMultimap(HashMap<K1, Map<K2, V>>::new, HashMap::new);
     }
-    
+
     /**
      * @return ConcurrentHashMap of HashMaps
      */
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Sets.java b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Sets.java
index 8f367f9..23b0c67 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Sets.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Sets.java
@@ -185,7 +185,7 @@ public final class _Sets {
         return _Collections.collectFromIterable(iterable, _Sets::newConcurrentHashSet,
                 ()->Collectors.<T, KeySetView<T, Boolean>>toCollection(ConcurrentHashMap::newKeySet) );
     }
-    
+
     // -- COPY ON WRITE ARRAY SET
 
     public static <T> CopyOnWriteArraySet<T> newCopyOnWriteArraySet() {
@@ -225,7 +225,7 @@ public final class _Sets {
                 .filter(b::contains)
                 .collect(Collectors.toSet()) );
     }
-    
+
     /**
      * Returns the intersection (set theory) of two given sets, retaining order.
      * @param a
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_Tasks.java b/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_Tasks.java
index 6daa9c0..841ece8 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_Tasks.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_Tasks.java
@@ -51,7 +51,7 @@ import lombok.extern.log4j.Log4j2;
  */
 @Log4j2
 public final class _Tasks {
-    
+
     public static _Tasks create() {
         return new _Tasks();
     }
@@ -60,7 +60,7 @@ public final class _Tasks {
         requires(runnable, "runnable");
         addRunnable(runnable, null);
     }
-    
+
     public void addRunnable(Runnable runnable, @Nullable Supplier<String> name) {
         requires(runnable, "runnable");
         callables.add(new NamedCallable<Object>(name) {
@@ -70,121 +70,121 @@ public final class _Tasks {
                 runnable.run();
                 return null;
             }
-            
+
         });
     }
-    
+
     public void addRunnable(String name, Runnable runnable) {
         requires(runnable, "runnable");
         addRunnable(runnable, ()->name);
     }
-    
+
     public List<Callable<Object>> getCallables() {
         return Collections.unmodifiableList(callables);
     }
-    
+
     public void invokeAndWait(boolean concurrent) {
-    	
-    	val t0 = System.nanoTime();
-    	val tasksExecuted = new LongAdder();
-    	
-    	try {
-    	
-			if(concurrent) {
-				
-//				val forkJoinPool = new ForkJoinPool();
-//				val anyErrorRef = new AtomicReference<RuntimeException>();
-//				
-//				forkJoinPool.submit(()->{
-					val anyError = callables.parallelStream()
-							.map(_Tasks::call)
-							.peek(__->tasksExecuted.increment())
-							.filter(_Either::isRight)
-							.findAny()
-							.map(_Either::rightIfAny)
-							.orElse(null);
-					
-//					anyErrorRef.set(anyError);
-//				});
-//				
-//				forkJoinPool.shutdown();
-//				
-//				try {
-//					System.err.println("wait for ForkJoinPool " + forkJoinPool);
-//					forkJoinPool.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
-//					System.err.println("done waiting for ForkJoinPool " + forkJoinPool);
-//				} catch (InterruptedException e) {
-//					throw _Exceptions.unrecoverable("exception while waiting on the ForkJoinPool to terminate", e);
-//				}
-//				
-//				val anyError = anyErrorRef.get();
-				if(anyError!=null) {
-					throw anyError;
-				}
-				
-			} else {
-				
-				for(Callable<?> callable : getCallables()) {
-					val eitherResultOrError = call(callable);
-					tasksExecuted.increment();
-					
-					if(eitherResultOrError.isRight()) {
-						throw eitherResultOrError.rightIfAny();	
-					}
-				}
-				
-			}
-			
-    	} finally {
-    		
-    		if(log.isDebugEnabled()) {
-    			val t1 = System.nanoTime();
-    			log.printf(Level.DEBUG, 
-    					"running %d/%d tasks %s, took %.3f milliseconds ",
-    					tasksExecuted.longValue(),
-                		callables.size(),
-                		concurrent ? "concurrent" : "sequential",
-                		0.000_001 * (t1-t0));	
-    		}
-            
-    		callables.clear();
-		}
-    	
+
+        val t0 = System.nanoTime();
+        val tasksExecuted = new LongAdder();
+
+        try {
+
+            if(concurrent) {
+
+                //				val forkJoinPool = new ForkJoinPool();
+                //				val anyErrorRef = new AtomicReference<RuntimeException>();
+                //				
+                //				forkJoinPool.submit(()->{
+                val anyError = callables.parallelStream()
+                        .map(_Tasks::call)
+                        .peek(__->tasksExecuted.increment())
+                        .filter(_Either::isRight)
+                        .findAny()
+                        .map(_Either::rightIfAny)
+                        .orElse(null);
+
+                //					anyErrorRef.set(anyError);
+                //				});
+                //				
+                //				forkJoinPool.shutdown();
+                //				
+                //				try {
+                //					System.err.println("wait for ForkJoinPool " + forkJoinPool);
+                //					forkJoinPool.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
+                //					System.err.println("done waiting for ForkJoinPool " + forkJoinPool);
+                //				} catch (InterruptedException e) {
+                //					throw _Exceptions.unrecoverable("exception while waiting on the ForkJoinPool to terminate", e);
+                //				}
+                //				
+                //				val anyError = anyErrorRef.get();
+                if(anyError!=null) {
+                    throw anyError;
+                }
+
+            } else {
+
+                for(Callable<?> callable : getCallables()) {
+                    val eitherResultOrError = call(callable);
+                    tasksExecuted.increment();
+
+                    if(eitherResultOrError.isRight()) {
+                        throw eitherResultOrError.rightIfAny();	
+                    }
+                }
+
+            }
+
+        } finally {
+
+            if(log.isDebugEnabled()) {
+                val t1 = System.nanoTime();
+                log.printf(Level.DEBUG, 
+                        "running %d/%d tasks %s, took %.3f milliseconds ",
+                        tasksExecuted.longValue(),
+                        callables.size(),
+                        concurrent ? "concurrent" : "sequential",
+                                0.000_001 * (t1-t0));	
+            }
+
+            callables.clear();
+        }
+
     }
-    
+
     // -- IMPLEMENTATION DETAILS
 
     private static <T> _Either<T, RuntimeException> call(Callable<T> callable) {
-    	
-		try {
-			val result = callable.call();
-			return _Either.leftNullable(result);
-		} catch (Throwable cause) {
-			
-			val name = callable instanceof NamedCallable
-					? callable.toString()
-							: "unnamend";
-			
-			val msg = String.format("failure while executing callable '%s'", name);
-			log.error(msg, cause);
-			return _Either.right(_Exceptions.unrecoverable(msg, cause));
-		}
-			
+
+        try {
+            val result = callable.call();
+            return _Either.leftNullable(result);
+        } catch (Throwable cause) {
+
+            val name = callable instanceof NamedCallable
+                    ? callable.toString()
+                            : "unnamend";
+
+                    val msg = String.format("failure while executing callable '%s'", name);
+                    log.error(msg, cause);
+                    return _Either.right(_Exceptions.unrecoverable(msg, cause));
+        }
+
     }
-    
+
     private final List<Callable<Object>> callables = _Lists.newArrayList();
-    
+
     @RequiredArgsConstructor
     private abstract static class NamedCallable<T> implements Callable<T> {
-        
+
         private final Supplier<String> name;
-                
+
         @Override
         public String toString() {
             return mapIfPresentElse(name, Supplier::get, super.toString());
         }
-        
+
     }
-    
+
 
 }
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 0aa301d..978835f 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
@@ -61,9 +61,9 @@ public final class _Context {
      * If synchronization is required it should happen elsewhere, not here!<br/>
      */
     private final static Map<Class<?>, Object> singletonMap = new ConcurrentHashMap<>();
-    
+
     private final static Object $LOCK = new Object[0];
-    
+
 
     /**
      * Puts a singleton instance onto the current context.
@@ -133,34 +133,34 @@ public final class _Context {
         if(existingIfAny!=null) {
             return existingIfAny;
         }
-        
+
         // Note: we don't want to do this inside the synchronized block
         final T t = factory.apply(type);
-        
+
         // we don't store null to the map
         if(t==null) {
-        	return null;
-//        	throw _Exceptions.unrecoverable(String.format("factory to compute new value for type '%s' "
-//        			+ "returned 'null', which is not allowed", type));
+            return null;
+            //        	throw _Exceptions.unrecoverable(String.format("factory to compute new value for type '%s' "
+            //        			+ "returned 'null', which is not allowed", type));
         }
-        
+
         // let writes to the map be atomic
         synchronized ($LOCK) {
-            
+
             // 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
-        	// Also we do need a second check for existing key, since it might have been changed by another
-        	// thread since.
-        	final T existingIfAny2 = _Casts.uncheckedCast(singletonMap.get(type));
+            // Also we do need a second check for existing key, since it might have been changed by another
+            // thread since.
+            final T existingIfAny2 = _Casts.uncheckedCast(singletonMap.get(type));
             if(existingIfAny2!=null) {
                 return existingIfAny2;
             }        	
-            
+
             singletonMap.put(type, t);
             return t;
         }
     }
-    
+
     /**
      * If the specified key is not already associated with a value (or is mapped to null),
      * attempts to compute its value using the given factory supplier and enters it into this map unless null.
@@ -173,8 +173,8 @@ public final class _Context {
         requires(factory, "factory");
         return computeIfAbsent(type, __->factory.get());
     }
-    
-    
+
+
 
     /**
      * Gets a singleton instance of {@code type} if there is any,
@@ -201,8 +201,8 @@ public final class _Context {
             Class<? super T> type,
             Supplier<E> onNotFound)
                     throws E {
-    	
-    	requires(type, "type");
+
+        requires(type, "type");
         requires(onNotFound, "onNotFound");
         return ifPresentElseThrow(getIfAny(type), onNotFound);
     }
@@ -217,10 +217,10 @@ public final class _Context {
         return ifPresentElseThrow(getIfAny(type), ()-> 
         new NoSuchElementException(String.format("Could not resolve an instance of type '%s'", type.getName())));
     }
-    
-    
+
+
     // -- REMOVAL
-    
+
     public static void remove(Class<?> type) {
         // let writes to the map be atomic
         synchronized ($LOCK) {
@@ -228,9 +228,9 @@ public final class _Context {
         }
         tryClose(type);
     }
-    
+
     // -- CLEARING
-    
+
     /**
      * Removes any singleton references from the current context. <br/>
      * Any singletons that implement the AutoClosable interface are being closed.
@@ -251,38 +251,38 @@ public final class _Context {
         stream(objects)
         .forEach(_Context::tryClose);
     }
-    
+
     // -- THREAD LOCAL SUPPORT
 
     /**
      * Clear key {@code type} from current thread's map.
      * @param type - the key into the thread-local store
      */
-	public static void threadLocalClear(Class<?> type) {
-		_Context_ThreadLocal.clear(type);
-	}
-    
+    public static void threadLocalClear(Class<?> type) {
+        _Context_ThreadLocal.clear(type);
+    }
+
     /**
      * Puts {@code payload} onto the current thread's map.
      * @param type - the key into the thread-local store
      * @param payload
      * @return a Runnable which, when run, removes any references to payload
      */
-	public static <T> Runnable threadLocalPut(Class<? super T> type, T payload) {
-		return _Context_ThreadLocal.put(type, payload);
-	}
+    public static <T> Runnable threadLocalPut(Class<? super T> type, T payload) {
+        return _Context_ThreadLocal.put(type, payload);
+    }
+
 
-    
     /**
      * Looks up current thread's values for any instances that match the given type, as previously stored 
      * with {@link _Context#threadLocalPut(Class, Object)}.
      * @param type - the key into the thread-local store
      * @return
      */
-	public static <T> Bin<T> threadLocalGet(Class<? super T> type) {
-		return _Context_ThreadLocal.get(type);
-	}
-	
+    public static <T> Bin<T> threadLocalGet(Class<? super T> type) {
+        return _Context_ThreadLocal.get(type);
+    }
+
     /**
      * Looks up current thread's values for any instances that match the given type, as previously stored 
      * with {@link _Context#threadLocalPut(Class, Object)}.
@@ -290,17 +290,17 @@ public final class _Context {
      * @param requiredType - the required type of the elements in the returned bin
      * @return
      */
-	public static <T> Bin<T> threadLocalSelect(Class<? super T> type, Class<? super T> requiredType) {
-		return _Context_ThreadLocal.select(type, requiredType);
-	}
-
-	/**
-	 * Removes any of current thread's values as stored with {@link _Context#threadLocalPut(Class, Object)}.
-	 */
-	public static <T> void threadLocalCleanup() {
-		_Context_ThreadLocal.cleanupThread();
-	}
-    
+    public static <T> Bin<T> threadLocalSelect(Class<? super T> type, Class<? super T> requiredType) {
+        return _Context_ThreadLocal.select(type, requiredType);
+    }
+
+    /**
+     * Removes any of current thread's values as stored with {@link _Context#threadLocalPut(Class, Object)}.
+     */
+    public static <T> void threadLocalCleanup() {
+        _Context_ThreadLocal.cleanupThread();
+    }
+
 
     // -- DEFAULT CLASSLOADER
 
@@ -355,25 +355,25 @@ public final class _Context {
     }
 
     // -- ENVIRONMENT
-    
+
     /** framework internal, exposed by IsisContext */
     public static IsisSystemEnvironment getEnvironment() {
         return getOrElse(IsisSystemEnvironment.class, 
                 IsisSystemEnvironmentPlugin.get()::getIsisSystemEnvironment);
     }
-    
+
     /** framework internal, shortcut for convenience */
     public static boolean isPrototyping() {
         return getEnvironment().getDeploymentType().isPrototyping();
     }
-    
+
     /** framework internal, shortcut for convenience */
     public static boolean isUnitTesting() {
         return getEnvironment().isUnitTesting();
     }
 
     // -- HELPER
-    
+
     private static void tryClose(Object singleton) {
         if(singleton==null) {
             return;
@@ -389,7 +389,7 @@ public final class _Context {
 
 
 
-	
+
 
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context_ThreadLocal.java b/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context_ThreadLocal.java
index 05d25b1..04267de 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context_ThreadLocal.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context_ThreadLocal.java
@@ -48,105 +48,105 @@ import lombok.val;
 final class _Context_ThreadLocal {
 
     // -- MIXINS
-    
-	@Value(staticConstructor = "of")
-	private final static class ThreadKey {
-		long threadId;
-		int threadHashCode;
-		static ThreadKey of(Thread thread) {
-			return of(thread.getId(), thread.hashCode());
-		}
-	}
-	
-	static <T> Runnable put(Class<? super T> type, T variant) {
-		requires(type, "type");
-    	requires(variant, "variant");
-    	
-    	val threadLocalMap = getOrCreateThreadLocalMap();
-    	threadLocalMap
-    	.compute(type, (k, v) -> v == null 
-    		? Bin.<T>ofSingleton(variant)
-    				: Bin.<T>concat(_Casts.uncheckedCast(v), variant));
-    	
-    	val key = THREAD_LOCAL_MAP_KEY.get();
-    	    	
-		return ()->{MAPS_BY_KEY.remove(key);};
+
+    @Value(staticConstructor = "of")
+    private final static class ThreadKey {
+        long threadId;
+        int threadHashCode;
+        static ThreadKey of(Thread thread) {
+            return of(thread.getId(), thread.hashCode());
+        }
+    }
+
+    static <T> Runnable put(Class<? super T> type, T variant) {
+        requires(type, "type");
+        requires(variant, "variant");
+
+        val threadLocalMap = getOrCreateThreadLocalMap();
+        threadLocalMap
+        .compute(type, (k, v) -> v == null 
+        ? Bin.<T>ofSingleton(variant)
+                : Bin.<T>concat(_Casts.uncheckedCast(v), variant));
+
+        val key = THREAD_LOCAL_MAP_KEY.get();
+
+        return ()->{MAPS_BY_KEY.remove(key);};
+    }
+
+    static <T> Bin<T> select(Class<? super T> type, Class<? super T> instanceOf) {
+        val bin = _Context_ThreadLocal.<T>get(type);
+        return bin.filter(t -> isInstanceOf(t, instanceOf));
+    }
+
+    private static boolean isInstanceOf(Object obj, Class<?> type) {
+        return type.isAssignableFrom(obj.getClass());
     }
-	
-	static <T> Bin<T> select(Class<? super T> type, Class<? super T> instanceOf) {
-		val bin = _Context_ThreadLocal.<T>get(type);
-		return bin.filter(t -> isInstanceOf(t, instanceOf));
-	}
-	
-	private static boolean isInstanceOf(Object obj, Class<?> type) {
-		return type.isAssignableFrom(obj.getClass());
-	}
-    
+
     static <T> Bin<T> get(Class<? super T> type) {
-    	val threadLocalMap = getThreadLocalMap();
-    	if(threadLocalMap==null) {
-    		return Bin.empty();
-    	}
-    	val bin = threadLocalMap.get(type);
-    	if(bin==null) {
-    		return Bin.empty();	
-    	}
-    	return _Casts.uncheckedCast(bin);
+        val threadLocalMap = getThreadLocalMap();
+        if(threadLocalMap==null) {
+            return Bin.empty();
+        }
+        val bin = threadLocalMap.get(type);
+        if(bin==null) {
+            return Bin.empty();	
+        }
+        return _Casts.uncheckedCast(bin);
     }
-    
+
     static void clear(Class<?> type) {
-    	val threadLocalMap = getThreadLocalMap();
-    	if(threadLocalMap==null) {
-    		return;
-    	}
-    	threadLocalMap.remove(type);
+        val threadLocalMap = getThreadLocalMap();
+        if(threadLocalMap==null) {
+            return;
+        }
+        threadLocalMap.remove(type);
     }
-    
+
     static void cleanupThread() {
-    	val key = THREAD_LOCAL_MAP_KEY.get();
-    	THREAD_LOCAL_MAP_KEY.remove();
-    	MAPS_BY_KEY.remove(key);
+        val key = THREAD_LOCAL_MAP_KEY.get();
+        THREAD_LOCAL_MAP_KEY.remove();
+        MAPS_BY_KEY.remove(key);
     }
-    
+
     // -- HELPER
-    
+
     private _Context_ThreadLocal(){}
-    
+
     static void clear() {
-    	MAPS_BY_KEY.clear();
+        MAPS_BY_KEY.clear();
     }
 
-//	/**
-//	 * Inheritable... allows to have concurrent computations utilizing the ForkJoinPool.
-//	 */
-//    private final static ThreadLocal<Map<Class<?>, Bin<?>>> THREAD_LOCAL_MAP = 
-//    		InheritableThreadLocal.withInitial(HashMap::new);
+    //	/**
+    //	 * Inheritable... allows to have concurrent computations utilizing the ForkJoinPool.
+    //	 */
+    //    private final static ThreadLocal<Map<Class<?>, Bin<?>>> THREAD_LOCAL_MAP = 
+    //    		InheritableThreadLocal.withInitial(HashMap::new);
 
-	/**
-	 * Inheritable... allows to have concurrent computations utilizing the ForkJoinPool.
-	 */
+    /**
+     * Inheritable... allows to have concurrent computations utilizing the ForkJoinPool.
+     */
     private final static ThreadLocal<ThreadKey> THREAD_LOCAL_MAP_KEY = 
-    		InheritableThreadLocal.withInitial(()->ThreadKey.of(Thread.currentThread()));
+            InheritableThreadLocal.withInitial(()->ThreadKey.of(Thread.currentThread()));
+
 
-    
     private final static _Multimaps.MapMultimap<ThreadKey, Class<?>, Bin<?>> MAPS_BY_KEY = 
-    		_Multimaps.newConcurrentMapMultimap(); 
-    
+            _Multimaps.newConcurrentMapMultimap(); 
+
     private static Map<Class<?>, Bin<?>> getThreadLocalMap() {
-    	val key = THREAD_LOCAL_MAP_KEY.get(); // non-null
-    	val threadLocalMap = MAPS_BY_KEY.get(key); // might be null
-    	return threadLocalMap;
+        val key = THREAD_LOCAL_MAP_KEY.get(); // non-null
+        val threadLocalMap = MAPS_BY_KEY.get(key); // might be null
+        return threadLocalMap;
     }
-    
+
     private static Map<Class<?>, Bin<?>> getOrCreateThreadLocalMap() {
-    	val key = THREAD_LOCAL_MAP_KEY.get(); // non-null
-    	val threadLocalMap = MAPS_BY_KEY.get(key); // might be null
-    	if(threadLocalMap!=null) {
-        	return threadLocalMap;
-    	}
-		val map = _Maps.<Class<?>, Bin<?>>newHashMap();
-		MAPS_BY_KEY.put(key, map);
-		return map;
+        val key = THREAD_LOCAL_MAP_KEY.get(); // non-null
+        val threadLocalMap = MAPS_BY_KEY.get(key); // might be null
+        if(threadLocalMap!=null) {
+            return threadLocalMap;
+        }
+        val map = _Maps.<Class<?>, Bin<?>>newHashMap();
+        MAPS_BY_KEY.put(key, map);
+        return map;
     }
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context_ThreadLocal_Singleton.java b/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context_ThreadLocal_Singleton.java
index bf5beeb..da0d98e 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context_ThreadLocal_Singleton.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/context/_Context_ThreadLocal_Singleton.java
@@ -45,55 +45,55 @@ import lombok.val;
 final class _Context_ThreadLocal_Singleton {
 
     // -- MIXINS
-    
-	static <T> void put(Class<? super T> type, T payload) {
-		requires(type, "type");
-    	requires(payload, "payload");
-    	THREAD_LOCAL_MAP.get().put(type, Payload.of(payload, null));
+
+    static <T> void put(Class<? super T> type, T payload) {
+        requires(type, "type");
+        requires(payload, "payload");
+        THREAD_LOCAL_MAP.get().put(type, Payload.of(payload, null));
     }
-	
+
     static <T> void put(Class<? super T> type, Object payload, Runnable onCleanup) {
-    	requires(type, "type");
-    	requires(payload, "payload");
-    	requires(onCleanup, "onCleanup");
-    	THREAD_LOCAL_MAP.get().put(type, Payload.of(payload, onCleanup));
+        requires(type, "type");
+        requires(payload, "payload");
+        requires(onCleanup, "onCleanup");
+        THREAD_LOCAL_MAP.get().put(type, Payload.of(payload, onCleanup));
     }
-    
+
     static <T> T get(Class<? super T> type) {
-    	val payload = THREAD_LOCAL_MAP.get().get(type);
-    	if(payload!=null) {
-    		return _Casts.uncheckedCast(payload.pojo);
-    	}
-    	return null;
+        val payload = THREAD_LOCAL_MAP.get().get(type);
+        if(payload!=null) {
+            return _Casts.uncheckedCast(payload.pojo);
+        }
+        return null;
     }
-    
+
     static void cleanupThread() {
-    	THREAD_LOCAL_MAP.get().forEach((key, payload)->payload.cleanUp());
-    	THREAD_LOCAL_MAP.remove();
+        THREAD_LOCAL_MAP.get().forEach((key, payload)->payload.cleanUp());
+        THREAD_LOCAL_MAP.remove();
     }
-    
+
     // -- HELPER
-    
+
     private _Context_ThreadLocal_Singleton(){}
-    
+
     @Value(staticConstructor="of")
     private final static class Payload {
-		final Object pojo;
-    	final Runnable onCleanup;
-    	void cleanUp() {
-			if(onCleanup!=null) {
-				onCleanup.run();
-			}
-		}
+        final Object pojo;
+        final Runnable onCleanup;
+        void cleanUp() {
+            if(onCleanup!=null) {
+                onCleanup.run();
+            }
+        }
     }
 
-	/**
-	 * Inheritable... allows to have concurrent computations utilizing the ForkJoinPool.
-	 */
+    /**
+     * Inheritable... allows to have concurrent computations utilizing the ForkJoinPool.
+     */
     private final static ThreadLocal<Map<Class<?>, Payload>> THREAD_LOCAL_MAP = 
-    		InheritableThreadLocal.withInitial(HashMap::new);
+            InheritableThreadLocal.withInitial(HashMap::new);
+
+
 
 
-    
-    
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/debug/_Probe.java b/core/commons/src/main/java/org/apache/isis/commons/internal/debug/_Probe.java
index 848f74d..985d2e1 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/debug/_Probe.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/debug/_Probe.java
@@ -50,7 +50,7 @@ import lombok.val;
  * @since 2.0
  */
 public class _Probe {
-    
+
     public static enum MaxCallsReachedAction {
         IGNORE,
         SYSTEM_EXIT,
@@ -64,16 +64,16 @@ public class _Probe {
     private String indentLiteral = "  ";
     private String emphasisFormat = "__PROBE__ %s";
     private boolean silenced = false;
-    
+
     private final LongAdder counter = new LongAdder();
-    
+
     private _Probe(long maxCalls, MaxCallsReachedAction maxAction) {
         this.maxCalls = maxCalls;
         this.maxAction = maxAction;
     }
 
     // -- FACTORIES
-    
+
     public static _Probe maxCallsThenIgnore(long max) {
         return of(max, MaxCallsReachedAction.IGNORE);
     }
@@ -89,18 +89,18 @@ public class _Probe {
     public static _Probe unlimited() {
         return of(Long.MAX_VALUE-1, MaxCallsReachedAction.IGNORE);
     }
-    
+
     private static _Probe of(long maxCalls, MaxCallsReachedAction maxAction) {
         return new _Probe(maxCalls, maxAction);
     }
-    
+
     // -- WITHERS
-    
+
     public _Probe out(PrintStream out) {
         this.out = out;
         return this;
     }
-    
+
     public _Probe label(String label) {
         this.label = label;
         return this;
@@ -110,32 +110,32 @@ public class _Probe {
         this.indentLiteral = indentLiteral;
         return this;
     }
-    
+
     public _Probe emphasisFormat(String emphasisFormat) {
         this.emphasisFormat = emphasisFormat;
         return this;
     }
-    
+
     public _Probe silence() {
-    	this.silenced = true;
-		return this;
-	}
-    
+        this.silenced = true;
+        return this;
+    }
+
     // -- INDENTING
-    
+
     public int currentIndent = 0;
-    
+
     // -- PRINTING
 
     public void println(int indent, CharSequence chars) {
         if(counter.longValue()<maxCalls) {
             counter.increment();
             if(!silenced) {
-            	print_line(indent, chars);
+                print_line(indent, chars);
             }
             return;
         }
-        
+
         switch (maxAction) {
         case IGNORE:
             return;
@@ -165,17 +165,17 @@ public class _Probe {
     public void println(String format, Object...args) {
         println(currentIndent, format, args);
     }
-    
+
     public void warnNotImplementedYet(String format, Object... args) {
-    	val warnMsg = String.format(format, args);
-    	val restore_out = out;
-    	out=System.err;
-    	println("WARN NotImplementedYet %s", warnMsg);
-    	errOut("-------------------------------------");
-    	_Exceptions.dumpStackTrace(System.err, 1, 12);
-    	errOut("-------------------------------------");
-    	out=restore_out;
-	}
+        val warnMsg = String.format(format, args);
+        val restore_out = out;
+        out=System.err;
+        println("WARN NotImplementedYet %s", warnMsg);
+        errOut("-------------------------------------");
+        _Exceptions.dumpStackTrace(System.err, 1, 12);
+        errOut("-------------------------------------");
+        out=restore_out;
+    }
 
     // -- CONVENIENT DEBUG TOOLS (STATIC)
 
@@ -187,16 +187,16 @@ public class _Probe {
         System.err.println(String.format(format, args));
     }
 
-    
+
     private final static Map<String, String> abbreviations = 
             _Maps.unmodifiableEntries(
-                _Maps.entry("org.apache.isis", "~"),
-                _Maps.entry("core", "c"),
-                _Maps.entry("applib", "alib"),
-                _Maps.entry("metamodel", "mm"),
-                _Maps.entry("runtime", "rt"),
-                _Maps.entry("viewer", "vw")
-            );
+                    _Maps.entry("org.apache.isis", "~"),
+                    _Maps.entry("core", "c"),
+                    _Maps.entry("applib", "alib"),
+                    _Maps.entry("metamodel", "mm"),
+                    _Maps.entry("runtime", "rt"),
+                    _Maps.entry("viewer", "vw")
+                    );
     public static String compact(Class<?> cls) {
         String[] name = {cls.getName()};
         // pre-process for isis
@@ -206,12 +206,12 @@ public class _Probe {
             }
         });
         return _Strings.splitThenStream(name[0], ".")
-        .map(part->_With.mapIfPresentElse(abbreviations.get(part), value->value, part))
-        .collect(Collectors.joining("."));
+                .map(part->_With.mapIfPresentElse(abbreviations.get(part), value->value, part))
+                .collect(Collectors.joining("."));
     }
 
     // -- HELPER
-    
+
     private void print_line(int indent, CharSequence chars) {
         final long counterValue = counter.longValue();
         for(int i=0; i<indent; ++i) {
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
index 03968ed..814308a 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
@@ -74,7 +74,7 @@ public final class _Exceptions {
         requires(format, "format");
         return new IllegalArgumentException(String.format(format, _case));
     }
-    
+
     public static final NoSuchElementException noSuchElement(String msg) {
         return new NoSuchElementException(msg);
     }
@@ -83,7 +83,7 @@ public final class _Exceptions {
         requires(format, "format");
         return noSuchElement(String.format(format, args));
     }
-    
+
     public static final IllegalStateException unexpectedCodeReach() {
         return new IllegalStateException("internal error: code was reached, that is expected unreachable");
     }
@@ -91,35 +91,35 @@ public final class _Exceptions {
     public static IllegalStateException notImplemented() {
         return new IllegalStateException("internal error: code was reached, that is not implemented yet");
     }
-    
+
     public static RuntimeException unrecoverable(Throwable cause) {
         return new RuntimeException("unrecoverable error: with cause ...", cause);
     }
-    
+
     public static RuntimeException unrecoverable(String msg) {
         return new RuntimeException(String.format("unrecoverable error: '%s'", msg));
     }
-    
+
     public static RuntimeException unrecoverable(String msg, Throwable cause) {
         return new RuntimeException(String.format("unrecoverable error: '%s' with cause ...", msg), cause);
     }
-    
+
     /**
-    * Used to hide from the compiler the fact, that this call always throws.
-    *
-    * <pre>{
-    *    throw unexpectedCodeReach();
-    *    return 0; // won't compile: unreachable code
-    *}</pre>
-    *
-    * hence ...
-    *
-    * <pre>{
-    *    throwUnexpectedCodeReach();
-    *    return 0;
-    *}</pre>
-    *
-    */
+     * Used to hide from the compiler the fact, that this call always throws.
+     *
+     * <pre>{
+     *    throw unexpectedCodeReach();
+     *    return 0; // won't compile: unreachable code
+     *}</pre>
+     *
+     * hence ...
+     *
+     * <pre>{
+     *    throwUnexpectedCodeReach();
+     *    return 0;
+     *}</pre>
+     *
+     */
     public static void throwUnexpectedCodeReach() {
         throw unexpectedCodeReach();
     }
@@ -200,10 +200,10 @@ public final class _Exceptions {
         .limit(maxLines)
         .forEach(writer::println);
     }
-    
-	public static void dumpStackTrace() {
-		dumpStackTrace(System.out, 0, 1000); 
-	}
+
+    public static void dumpStackTrace() {
+        dumpStackTrace(System.out, 0, 1000); 
+    }
 
     // -- CAUSAL CHAIN
 
@@ -339,5 +339,5 @@ public final class _Exceptions {
         }
     }
 
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Functions.java b/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Functions.java
index f2d988b..c548c5e 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Functions.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Functions.java
@@ -124,7 +124,7 @@ public final class _Functions {
             }
         };
     }
-    
+
     // -- CHECKED EXCEPTION ADAPTERS (CONSUMER)
 
     /**
@@ -186,14 +186,14 @@ public final class _Functions {
             }
         };
     }
-    
+
     public static <T, U extends RuntimeException> Supplier<T> uncheckedSupplier(
             CheckedSupplier<T> checkedSupplier) {
         return ()->{
             try {
                 return checkedSupplier.get();
             } catch (Exception e) {
-            	throw new RuntimeException(e);
+                throw new RuntimeException(e);
             }
         };
     }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java b/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
index 26f14f0..e1ede0a 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/functions/_Predicates.java
@@ -75,7 +75,7 @@ public final class _Predicates {
     public static <T> Predicate<T> not(Predicate<T> predicate) {
         return null;
     }
-    
+
     /**
      * @param superClass
      * @return a Predicate that tests for the operand to be an instance of {@code superClass}
@@ -83,5 +83,5 @@ public final class _Predicates {
     public static Predicate<Object> instanceOf(Class<?> superClass) {
         return obj->superClass.isAssignableFrom(obj.getClass());
     }
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanAdapter.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanAdapter.java
index 3def727..6ad7695 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanAdapter.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanAdapter.java
@@ -28,5 +28,5 @@ public interface BeanAdapter {
     BeanSort getManagedObjectSort();
 
     boolean isCandidateFor(Class<?> requiredType);
-    
+
 }
\ No newline at end of file
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanSort.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanSort.java
index c91c7d6..45817f2 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanSort.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanSort.java
@@ -23,7 +23,7 @@ package org.apache.isis.commons.internal.ioc;
  *
  */
 public enum BeanSort {
-    
+
     /**
      * Stateful object, with a state that can be marshaled and unmarshaled.
      * <p> 
@@ -31,7 +31,7 @@ public enum BeanSort {
      * with a persistence layer. <p>  see also {@link #ENTITY}
      */
     VIEW_MODEL,
-    
+
     /**
      * Persistable object, associated with a persistence layer/context.
      * <p>
@@ -40,29 +40,29 @@ public enum BeanSort {
      *  
      */
     ENTITY,
-    
+
     /**
      * Injectable object, associated with a lifecycle context 
      * (application-scoped, request-scoped, ...).
      */
     MANAGED_BEAN, 
-    
+
     /**
      * Object associated with an 'entity' or 'bean' to act as contributer of 
      * domain actions or properties. Might also be stateful similar to VIEW_MODEL.
      */
     MIXIN,
-    
+
     /**
      * Immutable, serializable object.
      */
     VALUE,
-    
+
     /**
      * Container of objects.
      */
     COLLECTION,
-    
+
     UNKNOWN;
 
     public boolean isManagedBean() {
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanSortClassifier.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanSortClassifier.java
index fb21326..7a9dfd7 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanSortClassifier.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/BeanSortClassifier.java
@@ -25,5 +25,5 @@ public interface BeanSortClassifier {
     default boolean isManagedBean(Class<?> type) {
         return quickClassify(type) == BeanSort.MANAGED_BEAN;
     }
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/LifecycleContext.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/LifecycleContext.java
index 0697233..95277a8 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/LifecycleContext.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/LifecycleContext.java
@@ -36,27 +36,27 @@ public enum LifecycleContext {
     public boolean isApplicationScoped() {
         return this == ApplicationScoped;
     }
-    
+
     public boolean isSingleton() {
         return this == Singleton;
     }
-    
+
     public boolean isRequestScoped() {
         return this == RequestScoped;
     }
 
     public static LifecycleContext parse(String scope) {
-        
+
         if(_Strings.isNullOrEmpty(scope)) {
             return LifecycleContext.NotSpecified;
         }
-        
+
         for(LifecycleContext candidate : LifecycleContext.values()) {
             if(candidate.name().equalsIgnoreCase(scope)) {
                 return candidate;
             }
         }
-        
+
         log.warn("unrecogniced scope '{}'", scope);
         return LifecycleContext.NotSpecified;
 
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/PriorityConstants.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/PriorityConstants.java
index 53c5a25..93b9ed6 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/PriorityConstants.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/PriorityConstants.java
@@ -34,20 +34,20 @@ public class PriorityConstants {
      * To use with the {@link Priority} annotation.
      */
     public static final int PRIORITY_ABOVE_DEFAULT = -100;
-    
+
     /**
      * To use with the {@link Priority} annotation.
      */
     public static final int PRIORITY_DEFAULT = 0;
-    
+
     /**
      * To use with the {@link Priority} annotation.
      */
     public static final int PRIORITY_BELOW_DEFAULT = 100;
-    
+
     /**
      * To use with the {@link Priority} annotation.
      */
     public static final int PRIORITY_LOWEST = Integer.MAX_VALUE;
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/BeanAdapterCDI.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/BeanAdapterCDI.java
index e149d04..006cc1a 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/BeanAdapterCDI.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/BeanAdapterCDI.java
@@ -35,22 +35,24 @@ final class BeanAdapterCDI implements BeanAdapter {
     private final LifecycleContext lifecycleContext;
     private final Bean<?> bean;
     private final BeanSort managedObjectSort;
-    
+
+    @Override
     public Bin<?> getInstance() {
         val type = bean.getBeanClass();
         return _CDI.select(type, bean.getQualifiers());
     }
-    
+
+    @Override
     public boolean isCandidateFor(Class<?> requiredType) {
         return bean.getTypes().stream()
-        .filter(type -> type instanceof Class)
-        .map(type->(Class<?>)type)
-        .anyMatch(type->requiredType.isAssignableFrom(type));
+                .filter(type -> type instanceof Class)
+                .map(type->(Class<?>)type)
+                .anyMatch(type->requiredType.isAssignableFrom(type));
     }
 
     @Override
     public Class<?> getBeanClass() {
         return bean.getBeanClass(); //TODO[2033] does not work for 'produced' beans
     }
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/CdiPlugin.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/CdiPlugin.java
index cf3fb6e..815e92f 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/CdiPlugin.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/CdiPlugin.java
@@ -38,7 +38,7 @@ interface CdiPlugin {
     // -- LOOKUP
 
     public static CdiPlugin get() {
-        
+
         return _Plugin.getOrElse(CdiPlugin.class,
                 ambiguousPlugins->{
                     return _Plugin.pickAnyAndWarn(CdiPlugin.class, ambiguousPlugins);
@@ -47,6 +47,6 @@ interface CdiPlugin {
                     throw _Plugin.absenceNonRecoverable(CdiPlugin.class);
                 });
     }
-    
+
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI.java
index b66cab3..c55aded 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI.java
@@ -63,20 +63,20 @@ import lombok.val;
  * @since 2.0
  */
 public final class _CDI {
-    
+
     /**
      * Bootstrap CDI if not already present.
      * @param onDiscover - Packages of the specified (stream of) classes will be scanned and found classes 
      * will be added to the set of bean classes for the synthetic bean archive. 
      */
     public static void init(Supplier<Stream<Class<?>>> onDiscover) {
-        
+
         if(cdi().isPresent()) {
             return;
         }
-        
+
         requires(onDiscover, "onDiscover");
-        
+
         // plug in the provider
         final CDIProvider standaloneCDIProvider = CdiPlugin.get().getCDIProvider(onDiscover.get());
         CDI.setCDIProvider(standaloneCDIProvider);
@@ -85,15 +85,15 @@ public final class _CDI {
         if(!cdi().isPresent()) {
             throw _Exceptions.unrecoverable("Could not resolve an instance of CDI.");
         }
-        
+
         // proper CDI lifecycle support utilizing the fact that WELD provides a WeldContainer that 
         // implements AutoCloseable, which we can put on the _Context, such that when _Context.clear()
         // is called, gets properly closed
         final CheckedRunnable onClose = () -> ((AutoCloseable)CDI.current()).close();
         _Context.putSingleton(_CDI_Lifecycle.class, _CDI_Lifecycle.of(onClose));
-        
+
     }
-    
+
     /**
      * Get the CDI BeanManager for the current context.
      * @return non-null
@@ -103,7 +103,7 @@ public final class _CDI {
         return cdi().map(CDI::getBeanManager)
                 .orElseThrow(()->_Exceptions.unrecoverable("Could not resolve a BeanManager."));
     }
-    
+
     /**
      * Obtains a child Instance for the given required type and additional required qualifiers. 
      * @param subType
@@ -114,15 +114,15 @@ public final class _CDI {
         if(isEmpty(qualifiers)) {
             return select(subType);
         }
-        
+
         final Annotation[] _qualifiers = qualifiers.toArray(new Annotation[] {});
-        
+
         return cdi()
                 .map(cdi->tryGet(()->cdi.select(subType, _qualifiers)))
                 .map(instance->Bin.ofInstance(instance))
                 .orElse(Bin.empty());
     }
-    
+
     /**
      * Obtains a child Instance for the given required type and additional required qualifiers. 
      * @param subType
@@ -134,8 +134,8 @@ public final class _CDI {
                 .map(instance->Bin.ofInstance(instance))
                 .orElse(Bin.empty());
     }
-    
-    
+
+
     /**
      * Filters the input array into a collection, such that only annotations are retained, 
      * that are valid qualifiers for CDI.
@@ -144,10 +144,10 @@ public final class _CDI {
      */
     public static List<Annotation> filterQualifiers(final Annotation[] annotations) {
         return stream(annotations)
-        .filter(_CDI::isQualifier)
-        .collect(Collectors.toList());
+                .filter(_CDI::isQualifier)
+                .collect(Collectors.toList());
     }
-    
+
     /**
      * @param annotation
      * @return whether or not the annotation is a valid qualifier for CDI
@@ -158,9 +158,9 @@ public final class _CDI {
         }
         return annotation.annotationType().getAnnotationsByType(Qualifier.class).length>0;
     }
-    
+
     // -- GENERIC SINGLETON RESOLVING
-    
+
     /**
      * @return CDI managed singleton wrapped in an Optional
      */
@@ -170,7 +170,7 @@ public final class _CDI {
         }
         return _CDI.select(type).getSingleton();
     }
-    
+
     /**
      * @return CDI managed singleton
      * @throws NoSuchElementException - if the singleton is not resolvable
@@ -178,75 +178,75 @@ public final class _CDI {
     public static <T> T getSingletonElseFail(@Nullable Class<T> type) {
         return getSingleton(type)
                 .orElseThrow(()->_Exceptions.noSuchElement("Cannot resolve singleton '%s'", type));
-                        
+
     }
-    
+
     // -- ENUMERATE BEANS
-    
+
     public final static AnnotationLiteral<Any> QUALIFIER_ANY = 
             new AnnotationLiteral<Any>() {
         private static final long serialVersionUID = 1L;};
-    
-    private static Stream<Bean<?>> streamAllCDIBeans() {
-        BeanManager beanManager = _CDI.getBeanManager();
-        Set<Bean<?>> beans = beanManager.getBeans(Object.class, _CDI.QUALIFIER_ANY);
-        return beans.stream();
-    }
-    
-    /**
-     * 
-     * @param classifier
-     * @param beanNameProvider - usually ServiceUtil::idOfBean
-     */
-    public static Stream<BeanAdapter> streamAllBeans(
-            Function<Class<?>, BeanSort> classifier, 
-            Function<Bean<?>, String> beanNameProvider) {
-        
-        return streamAllCDIBeans()
-        .map(bean->{
-
-            val scope = bean.getScope().getSimpleName(); // also works for produced beans
-            val lifecycleContext = LifecycleContext.valueOf(scope);
-
-            // getBeanClass() does not work for produced beans as intended here! 
-            // (we do get the producer's class instead)
-            val type = bean.getBeanClass(); 
-            val sort = classifier.apply(type);
-
-            val id = beanNameProvider.apply(bean);
-            val beanAdapter = BeanAdapterCDI.of(id, lifecycleContext, bean, sort);
-            return beanAdapter;
-        });
-        
-    }
-        
-    // -- HELPER
-    
-    private _CDI() {}
-    
-    /**
-     * Get the CDI instance that provides access to the current container. 
-     * @return an optional
-     */
-    private static Optional<CDI<Object>> cdi() {
-        try {
-            CDI<Object> cdi = CDI.current();
-            return Optional.ofNullable(cdi);
-        } catch (Exception e) {
-            return Optional.empty();
+
+        private static Stream<Bean<?>> streamAllCDIBeans() {
+            BeanManager beanManager = _CDI.getBeanManager();
+            Set<Bean<?>> beans = beanManager.getBeans(Object.class, _CDI.QUALIFIER_ANY);
+            return beans.stream();
         }
-    }
-    
-    private static <T> T tryGet(final Supplier<T> supplier) {
-        try { 
-            return supplier.get();  
-        } catch (Exception e) {
-            return null;
+
+        /**
+         * 
+         * @param classifier
+         * @param beanNameProvider - usually ServiceUtil::idOfBean
+         */
+        public static Stream<BeanAdapter> streamAllBeans(
+                Function<Class<?>, BeanSort> classifier, 
+                Function<Bean<?>, String> beanNameProvider) {
+
+            return streamAllCDIBeans()
+                    .map(bean->{
+
+                        val scope = bean.getScope().getSimpleName(); // also works for produced beans
+                        val lifecycleContext = LifecycleContext.valueOf(scope);
+
+                        // getBeanClass() does not work for produced beans as intended here! 
+                        // (we do get the producer's class instead)
+                        val type = bean.getBeanClass(); 
+                        val sort = classifier.apply(type);
+
+                        val id = beanNameProvider.apply(bean);
+                        val beanAdapter = BeanAdapterCDI.of(id, lifecycleContext, bean, sort);
+                        return beanAdapter;
+                    });
+
         }
-    }
+
+        // -- HELPER
+
+        private _CDI() {}
+
+        /**
+         * Get the CDI instance that provides access to the current container. 
+         * @return an optional
+         */
+        private static Optional<CDI<Object>> cdi() {
+            try {
+                CDI<Object> cdi = CDI.current();
+                return Optional.ofNullable(cdi);
+            } catch (Exception e) {
+                return Optional.empty();
+            }
+        }
+
+        private static <T> T tryGet(final Supplier<T> supplier) {
+            try { 
+                return supplier.get();  
+            } catch (Exception e) {
+                return null;
+            }
+        }
+
 
 
-    
 
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI_Lifecycle.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI_Lifecycle.java
index 4c614ff..8f5c49a 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI_Lifecycle.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/cdi/_CDI_Lifecycle.java
@@ -28,7 +28,7 @@ import lombok.extern.log4j.Log4j2;
 final class _CDI_Lifecycle implements AutoCloseable {
 
     private final CheckedRunnable onClose;
-    
+
     @Override
     public void close() {
         try {
@@ -36,9 +36,9 @@ final class _CDI_Lifecycle implements AutoCloseable {
         } catch (Exception e) {
             val note = "This implementation expects the IocPlugin to provide a CDIProvider "
                     + "that creates CDI instances that implement AutoClosable";
-            
+
             log.warn("Failed to properly close the CDI container. Note: {}", note, e);
         }
     }
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/BeanAdapterSpring.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/BeanAdapterSpring.java
index 177ecb6..fc7879b 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/BeanAdapterSpring.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/BeanAdapterSpring.java
@@ -36,20 +36,20 @@ final class BeanAdapterSpring implements BeanAdapter {
     private final Class<?> beanClass;
     private final ObjectProvider<?> beanProvider;
     private final BeanSort managedObjectSort;
-    
+
     @Override
     public Bin<?> getInstance() {
         val allMatchingBeans = beanProvider.stream(); 
         return Bin.ofStream(allMatchingBeans);
     }
-    
+
     @Override
     public boolean isCandidateFor(Class<?> requiredType) {
         return beanProvider.stream()
-        .map(Object::getClass)
-        .anyMatch(type->requiredType.isAssignableFrom(type));
+                .map(Object::getClass)
+                .anyMatch(type->requiredType.isAssignableFrom(type));
     }
-    
-    
-    
+
+
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/EventSpring.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/EventSpring.java
index 81dfe6b..a7733c1 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/EventSpring.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/EventSpring.java
@@ -37,17 +37,17 @@ import lombok.extern.log4j.Log4j2;
 class EventSpring<T> implements Event<T> {
 
     private final ApplicationEventPublisher publisher;
-    
+
     @Override
     public void fire(T event) {
-        
+
         if(log.isDebugEnabled()) {
             log.debug("{} fire({} ... {})",
-                Thread.currentThread().getName(),
-                event.getClass().getSimpleName(), 
-                event.toString());
+                    Thread.currentThread().getName(),
+                    event.getClass().getSimpleName(), 
+                    event.toString());
         }
-        
+
         publisher.publishEvent(event);
     }
 
@@ -71,5 +71,5 @@ class EventSpring<T> implements Event<T> {
     @Override
     public <U extends T> Event<U> select(TypeLiteral<U> subtype, Annotation... qualifiers) {
         throw _Exceptions.notImplemented();    }
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/_Spring.java b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/_Spring.java
index 8945840..c5b1055 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/_Spring.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/ioc/spring/_Spring.java
@@ -75,73 +75,73 @@ public class _Spring {
     public static boolean isContextAvailable() {
         return _Context.getIfAny(ApplicationContext.class)!=null;
     }
-    
+
     public static void init(ApplicationContext context) {
         _Context.putSingleton(ApplicationContext.class, context);
     }
-    
+
     public static ApplicationContext context() {
         return _Context.getElseFail(ApplicationContext.class);
     }
-    
+
     public static <T> Bin<T> select(final Class<T> requiredType) {
         requires(requiredType, "requiredType");
-        
+
         val allMatchingBeans = context().getBeanProvider(requiredType).orderedStream();
         return Bin.ofStream(allMatchingBeans);
     }
-    
+
     public static <T> Bin<T> select(
             final Class<T> requiredType, 
             @Nullable Set<Annotation> qualifiersRequired) {
-        
+
         requires(requiredType, "requiredType");
-        
+
         val allMatchingBeans = context().getBeanProvider(requiredType)
                 .orderedStream();
-        
+
         if(_NullSafe.isEmpty(qualifiersRequired)) {
             return Bin.ofStream(allMatchingBeans);
         }
-        
+
         final Predicate<T> hasAllQualifiers = t -> {
             val qualifiersPresent = _Sets.of(t.getClass().getAnnotations());
             return qualifiersPresent.containsAll(qualifiersRequired);
         };
-        
+
         return Bin.ofStream(allMatchingBeans
                 .filter(hasAllQualifiers));
     }
-    
+
     /**
      * 
      * @param classifier
      * @return
      */
     public static Stream<BeanAdapter> streamAllBeans(BeanSortClassifier classifier) {
-        
+
         val context = context();
         val beanFactory = ((ConfigurableApplicationContext)context).getBeanFactory();
-        
+
         return Stream.of(context.getBeanDefinitionNames())
-        .map(name->{
-            
-            val type = context.getType(name);
-            val managedObjectSort = classifier.quickClassify(type);
-            val id = name; // just reuse the bean's name
-            
-            val scope = beanFactory.getBeanDefinition(name).getScope();
-            val lifecycleContext = LifecycleContext.parse(scope);
-            
-            val resolvableType = ResolvableType.forClass(type);
-            val bean = context.getBeanProvider(resolvableType);
-            
-            val beanAdapter = BeanAdapterSpring.of(id, lifecycleContext, type, bean, managedObjectSort);
-            
-            return beanAdapter;
-        });
-
-        
+                .map(name->{
+
+                    val type = context.getType(name);
+                    val managedObjectSort = classifier.quickClassify(type);
+                    val id = name; // just reuse the bean's name
+
+                    val scope = beanFactory.getBeanDefinition(name).getScope();
+                    val lifecycleContext = LifecycleContext.parse(scope);
+
+                    val resolvableType = ResolvableType.forClass(type);
+                    val bean = context.getBeanProvider(resolvableType);
+
+                    val beanAdapter = BeanAdapterSpring.of(id, lifecycleContext, type, bean, managedObjectSort);
+
+                    return beanAdapter;
+                });
+
+
     }
 
     /**
@@ -153,7 +153,7 @@ public class _Spring {
         }
         return select(type).getSingleton();
     }
-    
+
     /**
      * @return Spring managed singleton
      * @throws NoSuchElementException - if the singleton is not resolvable
@@ -161,13 +161,13 @@ public class _Spring {
     public static <T> T getSingletonElseFail(@Nullable Class<T> type) {
         return getSingleton(type)
                 .orElseThrow(()->_Exceptions.noSuchElement("Cannot resolve singleton '%s'", type));
-                        
+
     }
 
     public static <T> Event<T> event(ApplicationEventPublisher publisher) {
         return new EventSpring<T>(publisher);
     }
-    
+
     // -- QUALIFIER PROCESSING
 
     /**
@@ -181,10 +181,10 @@ public class _Spring {
             return Collections.emptySet();
         }
         return stream(annotations)
-        .filter(_CDI::isQualifier)
-        .collect(Collectors.toSet());
+                .filter(_CDI::isQualifier)
+                .collect(Collectors.toSet());
     }
-    
+
     /**
      * @param annotation
      * @return whether or not the annotation is a valid qualifier for CDI
@@ -203,47 +203,47 @@ public class _Spring {
      */
     public static Map<String, String> copySpringEnvironmentToMap(
             ConfigurableEnvironment configurableEnvironment) {
-        
+
         val map = _Maps.<String, String> newHashMap();
-        
+
         for(Iterator<PropertySource<?>> it = configurableEnvironment.getPropertySources().iterator(); it.hasNext(); ) {
             val propertySource = it.next();
             if (propertySource instanceof MapPropertySource) {
-                
+
                 val mapPropertySource = (MapPropertySource) propertySource;
-                
+
                 mapPropertySource.getSource().forEach((key, value) ->
-                    putIfNewValuePresent_warnIfKeyAlreadyExists(key, value, map));
-                
+                putIfNewValuePresent_warnIfKeyAlreadyExists(key, value, map));
+
             } else if(propertySource instanceof EnumerablePropertySource) {
-                
+
                 val enumPropertySource = (EnumerablePropertySource<?>) propertySource;
-                
+
                 for (String key : enumPropertySource.getPropertyNames()) {
                     val value = enumPropertySource.getProperty(key);
-                    
+
                     putIfNewValuePresent_warnIfKeyAlreadyExists(key, value, map);
                 }
-                
+
             } else {
-            
+
                 log.warn("Ignoring PropertySource type '{}', "
                         + "because we don't know how to iterate over its key/value pairs.",
                         propertySource);
             }
 
         }
-        
+
         return map;
     }
-    
+
     // -- HELPER
-    
+
     private static void putIfNewValuePresent_warnIfKeyAlreadyExists (
             String key,
             Object newValue,
             Map<String, String> dest) {
-        
+
         if(newValue==null) {
             return;
         }
@@ -251,7 +251,7 @@ public class _Spring {
         if(oldValue!=null) {
             log.warn("overriding exising config key {} with value {} -> {}", key, oldValue, newValue);    
         }
-        
+
     }
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/memento/_Mementos.java b/core/commons/src/main/java/org/apache/isis/commons/internal/memento/_Mementos.java
index 604cc6c..ef9ea84 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/memento/_Mementos.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/memento/_Mementos.java
@@ -153,43 +153,43 @@ public final class _Mementos {
             final EncoderDecoder codec,
             final SerializingAdapter serializer,
             final String input) {
-    	
-    	if(_Strings.isNullOrEmpty(input)) {
-    		return empty();
-    	}
+
+        if(_Strings.isNullOrEmpty(input)) {
+            return empty();
+        }
         return _Mementos_MementoDefault.parse(codec, serializer, input);
     }
-    
+
     // -- EMPTY MEMENTO
-    
+
     private static final class EmptyMemento implements Memento {
 
-		@Override
-		public <T> T get(String name, Class<T> cls) {
-			return null;
-		}
-
-		@Override
-		public Memento put(String name, Object value) {
-			throw _Exceptions.notImplemented();
-		}
-
-		@Override
-		public Set<String> keySet() {
-			return Collections.emptySet();
-		}
-
-		@Override
-		public String asString() {
-			return "EmptyMemento";
-		}
-    	
+        @Override
+        public <T> T get(String name, Class<T> cls) {
+            return null;
+        }
+
+        @Override
+        public Memento put(String name, Object value) {
+            throw _Exceptions.notImplemented();
+        }
+
+        @Override
+        public Set<String> keySet() {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public String asString() {
+            return "EmptyMemento";
+        }
+
     }
-    
+
     private final static Memento EMPTY_MEMENTO = new EmptyMemento();
-    
+
     public static Memento empty() {
-    	return EMPTY_MEMENTO;
+        return EMPTY_MEMENTO;
     }
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/beantyperegistry/BeanTypeRegistryPlugin.java b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/beantyperegistry/BeanTypeRegistryPlugin.java
index afd2753..eae5601 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/beantyperegistry/BeanTypeRegistryPlugin.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/beantyperegistry/BeanTypeRegistryPlugin.java
@@ -25,11 +25,11 @@ import org.apache.isis.commons.internal.context._Plugin;
 public interface BeanTypeRegistryPlugin {
 
     // -- INTERFACE
-    
+
     Set<Class<?>> getEntityTypes();
-    
+
     // -- LOOKUP
-    
+
     public static BeanTypeRegistryPlugin get() {
         return _Plugin.getOrElse(BeanTypeRegistryPlugin.class,
                 ambiguousPlugins->{
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/DeploymentType.java b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/DeploymentType.java
index 8de2f9b..7e7e911 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/DeploymentType.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/DeploymentType.java
@@ -31,9 +31,9 @@ public enum DeploymentType {
     public boolean isPrototyping() {
         return this == PROTOTYPING;
     }
-    
+
     public boolean isProduction() {
         return this == PRODUCTION;
     }
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironment.java b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironment.java
index 788efaf..8aa26d3 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironment.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironment.java
@@ -29,16 +29,16 @@ import org.apache.isis.commons.internal.base._Lazy;
 public interface IsisSystemEnvironment {
 
     // -- INTERFACE
-    
+
     public DeploymentType getDeploymentType();
     public boolean isUnitTesting();
-    
+
     // -- FACTORIES
-    
+
     public static IsisSystemEnvironment getDefault() {
         return DEFAULT;
     }
-    
+
     // -- INIT
 
     /**
@@ -50,7 +50,7 @@ public interface IsisSystemEnvironment {
     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.
@@ -59,11 +59,11 @@ public interface IsisSystemEnvironment {
     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();
@@ -73,50 +73,50 @@ public interface IsisSystemEnvironment {
         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;
-            
+
             // system environment priming (lowest prio)
-            
+
             anyVoteForPrototyping|=
                     "true".equalsIgnoreCase(System.getenv("PROTOTYPING"));
-            
+
             // system property priming (medium prio)
-            
+
             anyVoteForPrototyping|=
                     "true".equalsIgnoreCase(System.getProperty("PROTOTYPING"));
-            
+
             anyVoteForPrototyping|=
                     "PROTOTYPING".equalsIgnoreCase(System.getProperty("isis.deploymentType"));
-            
+
             // system property override (highest prio)
-            
+
             anyVoteForProduction|=
                     "false".equalsIgnoreCase(System.getProperty("PROTOTYPING"));
-            
+
             anyVoteForProduction|=
                     "PRODUCTION".equalsIgnoreCase(System.getProperty("isis.deploymentType"));
-            
+
             final boolean isPrototyping = anyVoteForPrototyping && !anyVoteForProduction;
-            
+
             final DeploymentType deploymentType =
                     isPrototyping
-                        ? DeploymentType.PROTOTYPING
-                                : DeploymentType.PRODUCTION;
-            
+                    ? DeploymentType.PROTOTYPING
+                            : DeploymentType.PRODUCTION;
+
             return deploymentType;
         }
 
-        
+
     };
-        
-    
+
+
 }
 
 
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironmentPlugin.java b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironmentPlugin.java
index 9ab8179..b83018f 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironmentPlugin.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironmentPlugin.java
@@ -21,11 +21,11 @@ package org.apache.isis.commons.internal.plugins.environment;
 import org.apache.isis.commons.internal.context._Plugin;
 
 public interface IsisSystemEnvironmentPlugin {
-    
+
     // -- INTERFACE
-    
+
     public IsisSystemEnvironment getIsisSystemEnvironment();
-    
+
 
     // -- PLUGIN LOOKUP
 
@@ -38,5 +38,5 @@ public interface IsisSystemEnvironmentPlugin {
                     return IsisSystemEnvironment::getDefault;
                 });
     }
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextHandle.java b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextHandle.java
index bae3212..8fbc9bd 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextHandle.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextHandle.java
@@ -20,11 +20,11 @@ package org.apache.isis.commons.internal.plugins.ioc;
 
 public interface ConversationContextHandle extends AutoCloseable {
 
-	void resume(String cid);
-	
-	/**
-	 * Refined to not throw a catched exception
-	 */
-	@Override void close();
-	
+    void resume(String cid);
+
+    /**
+     * Refined to not throw a catched exception
+     */
+    @Override void close();
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextService.java b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextService.java
index 3f1560d..78eea53 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextService.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextService.java
@@ -20,13 +20,13 @@ package org.apache.isis.commons.internal.plugins.ioc;
 
 public interface ConversationContextService {
 
-	ConversationContextHandle startTransientConversation();
-	
+    ConversationContextHandle startTransientConversation();
+
     static void closeHandle(ConversationContextHandle conversationContextHandle) {
         if(conversationContextHandle!=null) {
             conversationContextHandle.close();
         }
     }
-	
+
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextServiceDefault.java b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextServiceDefault.java
index a6d8011..a61ca95 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextServiceDefault.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/plugins/ioc/ConversationContextServiceDefault.java
@@ -30,9 +30,9 @@ package org.apache.isis.commons.internal.plugins.ioc;
 //@Singleton @Alternative @Priority(PriorityConstants.PRIORITY_BELOW_DEFAULT)
 public class ConversationContextServiceDefault implements ConversationContextService {
 
-	@Override
-	public ConversationContextHandle startTransientConversation() {
-		return null; // don't return a handle
-	}
+    @Override
+    public ConversationContextHandle startTransientConversation() {
+        return null; // don't return a handle
+    }
 
 }
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 e7ab582..3a7e543 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
@@ -73,7 +73,7 @@ public final class _Reflect {
         return _Arrays.testAllMatch(method.getParameters(), superMethod.getParameters(), 
                 (p1, p2)->p1.getType().equals(p2.getType()));
     }
-    
+
     /**
      * Returns whether a {@link Member} is accessible.
      * @param m Member to check
@@ -82,7 +82,7 @@ public final class _Reflect {
     public static boolean isAccessible(final Member m) {
         return m != null && Modifier.isPublic(m.getModifiers()) && !m.isSynthetic();
     }
-    
+
     /**
      * Whether member name equals given {@code memberName}
      * @param memberName
@@ -133,7 +133,7 @@ public final class _Reflect {
     public static Stream<Field> streamFields(
             @Nullable Class<?> type,
             final boolean ignoreAccess) {
-        
+
         if(type==null) {
             return Stream.empty();
         }
@@ -152,7 +152,7 @@ public final class _Reflect {
     public static Stream<Field> streamAllFields(
             @Nullable Class<?> type,
             final boolean ignoreAccess) {
-        
+
         return streamTypeHierarchy(type, /*includeInterfaces*/ false) // interfaces don't have fields
                 .filter(Object.class::equals) // do not process Object class.
                 .flatMap(t->streamFields(t, ignoreAccess));
@@ -168,7 +168,7 @@ public final class _Reflect {
     public static Stream<Method> streamMethods(
             @Nullable Class<?> type,
             final boolean ignoreAccess) {
-        
+
         if(type==null) {
             return Stream.empty();
         }
@@ -188,7 +188,7 @@ public final class _Reflect {
             @Nullable Class<?> type,
             final boolean ignoreAccess
             ) {
-        
+
         return streamTypeHierarchy(type, /*includeInterfaces*/ true)
                 .filter(t->!t.equals(Object.class)) // do not process Object class.
                 .flatMap(t->streamMethods(t, ignoreAccess));
@@ -224,17 +224,17 @@ public final class _Reflect {
                         current = current.getSuperclass();
                         return true;
                     }
-                    
+
                     private void recur(Class<?> iface, Consumer<? super Class<?>> action) {
                         action.accept(iface);
                         for(Class<?> subIface : iface.getInterfaces()) {
                             recur(subIface, action);
                         }
                     }
-                    
+
                 }, false);
     }
-    
+
     // -- ANNOTATIONS
 
     /**
@@ -248,7 +248,7 @@ public final class _Reflect {
     public static <T extends Annotation> T getAnnotation(
             final Class<?> cls, 
             final Class<T> annotationClass) {
-        
+
         if (cls == null) {
             return null;
         }
@@ -280,7 +280,7 @@ public final class _Reflect {
         }
         return null;
     }
-    
+
     /**
      * <p>Gets the annotation object with the given annotation type that is present on the given method
      * or optionally on any equivalent method in super classes and interfaces. Returns null if the annotation
@@ -314,22 +314,22 @@ public final class _Reflect {
         if (!ignoreAccess && !isAccessible(method)) {
             return null;
         }
-        
+
         final Stream<Method> methods;
-        
+
         if(searchSupers) {
             methods = streamAllMethods(method.getDeclaringClass(), ignoreAccess);    
         } else {
             methods = streamMethods(method.getDeclaringClass(), ignoreAccess);
         }
-        
+
         return methods
-        .filter(m->same(method, m))
-        .map(m->m.getAnnotation(annotationCls))
-        .filter(_NullSafe::isPresent)
-        .findFirst()
-        .orElse(null);
-        
+                .filter(m->same(method, m))
+                .map(m->m.getAnnotation(annotationCls))
+                .filter(_NullSafe::isPresent)
+                .findFirst()
+                .orElse(null);
+
     }
 
     /**
@@ -349,7 +349,7 @@ public final class _Reflect {
         }
         return false;
     }
-    
+
     // -- METHOD/FIELD HANDLES
 
     public static MethodHandle handleOf(Method method) throws IllegalAccessException {
@@ -371,9 +371,9 @@ public final class _Reflect {
         }
         return MethodHandles.lookup().unreflectGetter(field);
     }
-    
+
     // -- FIND GETTER
-    
+
     public static Method getGetter(Class<?> cls, String propertyName) throws IntrospectionException {
         final BeanInfo beanInfo = Introspector.getBeanInfo(cls);
         for(PropertyDescriptor pd:beanInfo.getPropertyDescriptors()){
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Json.java b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Json.java
index d372963..ef8daf1 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Json.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/resources/_Json.java
@@ -43,9 +43,9 @@ import lombok.val;
  * @since 2.0
  */
 public class _Json {
-    
+
     // -- STREAM CONTENT
-    
+
     /**
      * Deserialize JSON content from given JSON content InputStream into an instance of 
      * given {@code clazz} type.
@@ -59,10 +59,10 @@ public class _Json {
      */
     public static <T> T readJson(final Class<T> clazz, InputStream content) 
             throws JsonParseException, JsonMappingException, IOException {
-        
+
         return (T) new ObjectMapper().readValue(content, clazz);
     }
-    
+
     /**
      * Either deserialize JSON content from given JSON content InputStream into an instance of 
      * given {@code clazz} type, or any exception that occurred during parsing.
@@ -78,7 +78,7 @@ public class _Json {
             return _Either.right(e);
         }
     }
-    
+
     /**
      * Deserialize JSON content from given JSON content InputStream into an instance of List 
      * with given {@code elementType}.
@@ -92,12 +92,12 @@ public class _Json {
      */
     public static <T> List<T> readJsonList(final Class<T> elementType, InputStream content) 
             throws JsonParseException, JsonMappingException, IOException {
-        
+
         val mapper = new ObjectMapper();
         val listFactory = mapper.getTypeFactory().constructCollectionType(List.class, elementType);
         return mapper.readValue(content, listFactory);    
     }
-    
+
     /**
      * Either deserialize JSON content from given JSON content InputStream into an instance of List
      * with given {@code elementType}, or any exception that occurred during parsing.
@@ -114,9 +114,9 @@ public class _Json {
         }
     }
 
-    
+
     // -- STRING CONTENT
-    
+
     /**
      * Deserialize JSON content from given JSON content String into an instance of 
      * given {@code clazz} type.
@@ -130,10 +130,10 @@ public class _Json {
      */
     public static <T> T readJson(final Class<T> clazz, String content) 
             throws JsonParseException, JsonMappingException, IOException {
-        
+
         return (T) new ObjectMapper().readValue(content, clazz);
     }
-    
+
     /**
      * Either deserialize JSON content from given JSON content String into an instance of 
      * given {@code clazz} type, or any exception that occurred during parsing.
@@ -149,7 +149,7 @@ public class _Json {
             return _Either.right(e);
         }
     }
-    
+
     /**
      * Deserialize JSON content from given JSON content String into an instance of List 
      * with given {@code elementType}.
@@ -163,12 +163,12 @@ public class _Json {
      */
     public static <T> List<T> readJsonList(final Class<T> elementType, String content) 
             throws JsonParseException, JsonMappingException, IOException {
-        
+
         val mapper = new ObjectMapper();
         val listFactory = mapper.getTypeFactory().constructCollectionType(List.class, elementType);
         return mapper.readValue(content, listFactory);    
     }
-    
+
     /**
      * Either deserialize JSON content from given JSON content String into an instance of List
      * with given {@code elementType}, or any exception that occurred during parsing.
@@ -184,10 +184,10 @@ public class _Json {
             return _Either.right(e);
         }
     }
-    
-    
+
+
     // -- FILE CONTENT
-    
+
     /**
      * Deserialize JSON content from given JSON content File into an instance of 
      * given {@code clazz} type.
@@ -201,10 +201,10 @@ public class _Json {
      */
     public static <T> T readJson(final Class<T> clazz, File content) 
             throws JsonParseException, JsonMappingException, IOException {
-        
+
         return (T) new ObjectMapper().readValue(content, clazz);
     }
-    
+
     /**
      * Either deserialize JSON content from given JSON content File into an instance of 
      * given {@code clazz} type, or any exception that occurred during parsing.
@@ -220,7 +220,7 @@ public class _Json {
             return _Either.right(e);
         }
     }
-    
+
     /**
      * Deserialize JSON content from given JSON content File into an instance of List 
      * with given {@code elementType}.
@@ -234,12 +234,12 @@ public class _Json {
      */
     public static <T> List<T> readJsonList(final Class<T> elementType, File content) 
             throws JsonParseException, JsonMappingException, IOException {
-        
+
         val mapper = new ObjectMapper();
         val listFactory = mapper.getTypeFactory().constructCollectionType(List.class, elementType);
         return mapper.readValue(content, listFactory);    
     }
-    
+
     /**
      * Either deserialize JSON content from given JSON content File into an instance of List
      * with given {@code elementType}, or any exception that occurred during parsing.
@@ -255,9 +255,9 @@ public class _Json {
             return _Either.right(e);
         }
     }
-    
+
     // -- BYTE CONTENT
-    
+
     /**
      * Deserialize JSON content from given JSON content byte[] into an instance of 
      * given {@code clazz} type.
@@ -271,10 +271,10 @@ public class _Json {
      */
     public static <T> T readJson(final Class<T> clazz, byte[] content) 
             throws JsonParseException, JsonMappingException, IOException {
-        
+
         return (T) new ObjectMapper().readValue(content, clazz);
     }
-    
+
     /**
      * Either deserialize JSON content from given JSON content byte[] into an instance of 
      * given {@code clazz} type, or any exception that occurred during parsing.
@@ -290,7 +290,7 @@ public class _Json {
             return _Either.right(e);
         }
     }
-    
+
     /**
      * Deserialize JSON content from given JSON content byte[] into an instance of List 
      * with given {@code elementType}.
@@ -304,12 +304,12 @@ public class _Json {
      */
     public static <T> List<T> readJsonList(final Class<T> elementType, byte[] content) 
             throws JsonParseException, JsonMappingException, IOException {
-        
+
         val mapper = new ObjectMapper();
         val listFactory = mapper.getTypeFactory().constructCollectionType(List.class, elementType);
         return mapper.readValue(content, listFactory);    
     }
-    
+
     /**
      * Either deserialize JSON content from given JSON content byte[] into an instance of List
      * with given {@code elementType}, or any exception that occurred during parsing.
@@ -325,5 +325,5 @@ public class _Json {
             return _Either.right(e);
         }
     }
-    
+
 }
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 86b3b8e..16d4aeb 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
@@ -80,7 +80,7 @@ public final class _Resources {
         final InputStream is = load(contextClass, resourceName);
         return _Strings.ofBytes(_Bytes.of(is), charset);
     }
-    
+
     /**
      * Shortcut using Charset UTF-8, see {@link #loadAsString(Class, String, Charset)} 
      */
@@ -139,7 +139,7 @@ public final class _Resources {
             return "/" + contextPath + path;
         }
     }
-    
+
     public static String prependContextPathIfRequired(String url) {
         if(url==null) {
             return null; 
@@ -237,6 +237,6 @@ public final class _Resources {
     }
 
 
-    
+
 
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/FutureWithIndexIntoFutureOfList.java b/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/FutureWithIndexIntoFutureOfList.java
index 8a35562..54cda52 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/FutureWithIndexIntoFutureOfList.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/FutureWithIndexIntoFutureOfList.java
@@ -28,7 +28,7 @@ import java.util.concurrent.TimeoutException;
 final class FutureWithIndexIntoFutureOfList<T> implements Future<T> {
     final Future<List<T>> commonFuture;
     final int index;
-    
+
     FutureWithIndexIntoFutureOfList(Future<List<T>> commonFuture, int index) {
         this.commonFuture = commonFuture;
         this.index = index;
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolExecutionMode.java b/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolExecutionMode.java
index eade240..2cee9b5 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolExecutionMode.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolExecutionMode.java
@@ -30,19 +30,19 @@ public enum ThreadPoolExecutionMode {
      *  (expected lowest concurrency)
      */
     SEQUENTIAL_WITHIN_CALLING_THREAD,
-    
+
     /**
      * Wraps submitted tasks into a single task, which is then executed on the default executor.
      * (expected medium concurrency)
      */
     SEQUENTIAL,
-    
+
     /**
      * Executes submitted tasks on the default executor. 
      * (expected highest concurrency)
      */
     PARALLEL,
-    
+
     ;
 
     /**
@@ -54,12 +54,12 @@ public enum ThreadPoolExecutionMode {
      */
     public static ThreadPoolExecutionMode honorHighestConcurrencyAllowed(
             ThreadPoolExecutionMode proposedExecutionMode) {
-        
+
         final int upper = ThreadPoolSupport.HIGHEST_CONCURRENCY_EXECUTION_MODE_ALLOWED.ordinal();
         final int proposed = proposedExecutionMode.ordinal();
         final int bounded = proposed>upper ? upper : proposed; 
-        
+
         return ThreadPoolExecutionMode.values()[bounded];
     }
-    
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolSizeAdvisor.java b/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolSizeAdvisor.java
index 4eaa102..ddc8fe1 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolSizeAdvisor.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolSizeAdvisor.java
@@ -36,19 +36,19 @@ final class ThreadPoolSizeAdvisor {
     // if we are running in a container, eg docker, its up to the JVM to report correct values
     private final int logicalCoreCount = 
             Runtime.getRuntime().availableProcessors(); // reasonable upper limit    
-    
+
     int corePoolSize() {
         return minThreadCount;
     }
-    
+
     int maximumPoolSize() {
         final int upperLimit = Math.min(maxThreadCount, logicalCoreCount);
         return Math.max(minThreadCount, upperLimit);
     }
-    
+
     public static ThreadPoolSizeAdvisor get() {
         return new ThreadPoolSizeAdvisor();
     }
-    
-    
+
+
 }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolSupport.java b/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolSupport.java
index 17af573..677c3d5 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolSupport.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/threadpool/ThreadPoolSupport.java
@@ -64,7 +64,7 @@ public final class ThreadPoolSupport implements AutoCloseable {
 
     public static ThreadPoolExecutionMode HIGHEST_CONCURRENCY_EXECUTION_MODE_ALLOWED = 
             ThreadPoolExecutionMode.PARALLEL;
-    
+
     private final static int KEEP_ALIVE_TIME_SECS = 5;
     private final static int QUEUE_CAPACITY = Integer.MAX_VALUE;
 
@@ -77,11 +77,11 @@ public final class ThreadPoolSupport implements AutoCloseable {
     public static ThreadPoolSupport getInstance() {
         return _Context.computeIfAbsent(ThreadPoolSupport.class, ThreadPoolSupport::new);
     }
-    
+
     ThreadPoolSupport() {
 
         group = new ThreadGroup(ThreadPoolSupport.class.getName());
-        
+
         final ThreadPoolSizeAdvisor advisor = ThreadPoolSizeAdvisor.get();
 
         final ThreadFactory threadFactory = (Runnable r) -> new Thread(group, r);
@@ -89,15 +89,15 @@ public final class ThreadPoolSupport implements AutoCloseable {
         final Supplier<BlockingQueue<Runnable>> workQueueFactory =
                 ()->new LinkedBlockingQueue<>(QUEUE_CAPACITY);
 
-        concurrentExecutor = new ThreadPoolExecutor(
-                advisor.corePoolSize(),
-                advisor.maximumPoolSize(),
-                KEEP_ALIVE_TIME_SECS,
-                TimeUnit.SECONDS,
-                workQueueFactory.get(),
-                threadFactory);
+                concurrentExecutor = new ThreadPoolExecutor(
+                        advisor.corePoolSize(),
+                        advisor.maximumPoolSize(),
+                        KEEP_ALIVE_TIME_SECS,
+                        TimeUnit.SECONDS,
+                        workQueueFactory.get(),
+                        threadFactory);
     }
-    
+
     /*
      * Implementation Note: triggered by _Context.clear() when application shuts down.
      */
@@ -105,14 +105,14 @@ public final class ThreadPoolSupport implements AutoCloseable {
     public void close() throws Exception {
         concurrentExecutor.shutdown();
     }
-    
+
     /**
      * @return this thread-pool's underlying concurrent executor
      */
     public Executor getExecutor() {
         return concurrentExecutor;
     }
-    
+
     /**
      * Non-blocking call. 
      * <p>
@@ -165,9 +165,9 @@ public final class ThreadPoolSupport implements AutoCloseable {
         case SEQUENTIAL_WITHIN_CALLING_THREAD:
         {
             return callables.stream()
-            .map(FutureTask::new)
-            .peek(FutureTask::run) // immediately run task on submission
-            .collect(toList());
+                    .map(FutureTask::new)
+                    .peek(FutureTask::run) // immediately run task on submission
+                    .collect(toList());
         }
 
         default:
@@ -175,7 +175,7 @@ public final class ThreadPoolSupport implements AutoCloseable {
         }
 
     }
-    
+
     /**
      * Executes specified {@code callables} on the default executor.  
      * See {@link ThreadPoolExecutor#invokeAll(java.util.Collection)}
@@ -195,7 +195,7 @@ public final class ThreadPoolSupport implements AutoCloseable {
         if (futures == null) {
             return null;
         }
-        
+
         final long t0 = System.nanoTime();
         try{
             final List<Object> returnValues = _Lists.newArrayList();
@@ -252,18 +252,18 @@ public final class ThreadPoolSupport implements AutoCloseable {
             return null;
         }
     }
-    
+
     @Override
     public String toString() {
         return concurrentExecutor.toString();
     }
 
     // -- HELPERS
-    
+
     private <T> List<Future<T>> invokeAll(
             ThreadPoolExecutor executor, 
             @Nullable final List<? extends Callable<T>> callables) {
-        
+
         if(isEmpty(callables)) {
             return Collections.emptyList();
         }
@@ -277,7 +277,7 @@ public final class ThreadPoolSupport implements AutoCloseable {
     private static <T> List<Callable<T>> timed(
             final ThreadPoolExecutor executor,
             final List<? extends Callable<T>> callables) {
-        
+
         final long queuedAt = System.currentTimeMillis();
         return callables.stream()
                 .map(callable -> timed(callable, executor.getQueue().size(), queuedAt))
@@ -319,7 +319,7 @@ public final class ThreadPoolSupport implements AutoCloseable {
             return resultList;
         };
     }
-    
+
     private static boolean isEmpty(Collection<?> x) { return x==null || x.size() == 0; }
 
 }
diff --git a/core/commons/src/test/java/org/apache/isis/commons/internal/base/BytesTest.java b/core/commons/src/test/java/org/apache/isis/commons/internal/base/BytesTest.java
index 736c0b9..76de051 100644
--- a/core/commons/src/test/java/org/apache/isis/commons/internal/base/BytesTest.java
+++ b/core/commons/src/test/java/org/apache/isis/commons/internal/base/BytesTest.java
@@ -36,167 +36,167 @@ import static org.hamcrest.Matchers.lessThan;
 
 public class BytesTest {
 
-	final int n = 256;
-	private final byte[] allBytes = new byte[n];
-	
-	private final static byte[] testimonial = 
-			_Strings.toBytes(
-					"https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html#basic?"+
-					"0-theme-entityPageContainer-entity-rows-2-rowContents-1-col-tabGroups-1-panel-"
-					+ "tabPanel-rows-1-rowContents-1-col-fieldSets-1-memberGroup-properties-1-property-"
-					+ "scalarTypeContainer-scalarIfRegular-associatedActionLinksBelow-additionalLinkList-"
-					+ "additionalLinkItem-0-additionalLink", 
-					StandardCharsets.UTF_8);
-	
-	@Before
-	public void before() {
-		for(int i=0; i<n; ++i) {
-			allBytes[i] = (byte)i;
-		}
-	}
-	
-	// -- PREPEND/APPEND
-	
-	@Test
-	public void concatNullWithNull() throws Exception {
-		Assert.assertNull(_Bytes.append(null, null));
-		Assert.assertNull(_Bytes.prepend(null, null));
-	}
-	
-	@Test
-	public void concatNullWithEmpty() throws Exception {
-		Assert.assertArrayEquals(_Constants.emptyBytes, _Bytes.append(null));
-		Assert.assertArrayEquals(_Constants.emptyBytes, _Bytes.prepend(null));
-	}
-	
-	@Test
-	public void concatWithNull() throws Exception {
-		assertArrayEqualsButNotSame(allBytes, _Bytes.append(allBytes, null));
-		assertArrayEqualsButNotSame(allBytes, _Bytes.prepend(allBytes, null));
-	}
-
-	@Test
-	public void concatWithEmpty() throws Exception {
-		assertArrayEqualsButNotSame(allBytes, _Bytes.append(allBytes));
-		assertArrayEqualsButNotSame(allBytes, _Bytes.prepend(allBytes));
-	}
-	
-	@Test
-	public void concatHappyCase() throws Exception {
-		assertArrayEqualsButNotSame(new byte[] {1,2,3,4,5}, _Bytes.append(new byte[] {1,2,3}, (byte)4, (byte)5));
-		assertArrayEqualsButNotSame(new byte[] {4,5,1,2,3}, _Bytes.prepend(new byte[] {1,2,3}, (byte)4, (byte)5));
-	}
-	
-	@Test
-	public void compressIdentityWithNull() throws Exception {
-		Assert.assertNull(_Bytes.decompress(_Bytes.compress(null)));
-	}
-	
-	@Test
-	public void compressIdentityWithByteRange() throws Exception {
-		Assert.assertArrayEquals(allBytes,
-				_Bytes.decompress(_Bytes.compress(allBytes)));
-	}
-	
-	@Test
-	public void compressIdentityWithTestimonial() throws Exception {
-		Assert.assertArrayEquals(testimonial,
-				_Bytes.decompress(_Bytes.compress(testimonial)));
-	}
-	
-	@Test
-	public void compressionRatio() throws Exception {
-		// lower is better
-		final double compressionRatio = (double)_Bytes.compress(testimonial).length / testimonial.length;
-		Assert.assertThat(compressionRatio, lessThan(0.7));
-	}
-	
-	
-	// -- COMPRESSION
-	
-	@RunWith(Parameterized.class)
-	public static class CompressionTest {
-		
-		
-	    @Parameters
-	    public static Object[] data() {
-	        return new Object[] { 
-	        		(byte[]) null,
-	        		new byte[] { },
-	        		new byte[] { 0 }, 
-	        		new byte[] { 0, 1 },
-	        		new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 17 
-	        		new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 18
-	        		new byte[] { 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 19
-	        		};
-	    }
-		
-	    @Parameter
-	    public byte[] input;
-		
-
-		@Test
-		public void compressIdentity() throws Exception {
-			Assert.assertArrayEquals(input,
-					_Bytes.decompress(_Bytes.compress(input)));
-		}
-	
-	}
-	
-	// -- BASE-64
-	
-	@Test
-	public void base64IdentityWithNull() throws Exception {
-		Assert.assertNull(_Bytes.decodeBase64(
-				Base64.getUrlDecoder(), 
-				_Bytes.encodeToBase64(Base64.getUrlEncoder(), null)));
-	}
-	
-	@Test
-	public void base64IdentityWithByteRange() throws Exception {
-		Assert.assertArrayEquals(allBytes,
-				_Bytes.decodeBase64(
-						Base64.getUrlDecoder(), 
-						_Bytes.encodeToBase64(Base64.getUrlEncoder(), allBytes)));
-	}
-	
-	@Test
-	public void base64IdentityWithTestimonial() throws Exception {
-		Assert.assertArrayEquals(testimonial,
-				_Bytes.decodeBase64(
-						Base64.getUrlDecoder(), 
-						_Bytes.encodeToBase64(Base64.getUrlEncoder(), testimonial)));
-	}
-	
-	// -- OPERATOR COMPOSITION
-	
-	@Test
-	public void composedOperatorWithNull() throws Exception {
-		Assert.assertNull(_Bytes.asCompressedUrlBase64.apply(null));
-		Assert.assertNull(_Bytes.ofCompressedUrlBase64.apply(null));
-		Assert.assertNull(_Bytes.asUrlBase64.apply(null));
-		Assert.assertNull(_Bytes.ofUrlBase64.apply(null));
-	}
-	
-	@Test
-	public void composedIdentityWithByteRange() throws Exception {
-		Assert.assertArrayEquals(allBytes,
-				_Bytes.ofCompressedUrlBase64.apply(
-						_Bytes.asCompressedUrlBase64.apply(allBytes)));
-	}
-	
-	@Test
-	public void composedIdentityWithTestimonial() throws Exception {
-		Assert.assertArrayEquals(testimonial,
-				_Bytes.ofCompressedUrlBase64.apply(
-						_Bytes.asCompressedUrlBase64.apply(testimonial)));
-	}
-	
-	// -- HELPER
-	
-	private void assertArrayEqualsButNotSame(byte[] a, byte[] b) {
-		Assert.assertFalse(a == b);
-		Assert.assertArrayEquals(a, b);
-	}
-	
+    final int n = 256;
+    private final byte[] allBytes = new byte[n];
+
+    private final static byte[] testimonial = 
+            _Strings.toBytes(
+                    "https://docs.oracle.com/javase/8/docs/api/java/util/Base64.html#basic?"+
+                            "0-theme-entityPageContainer-entity-rows-2-rowContents-1-col-tabGroups-1-panel-"
+                            + "tabPanel-rows-1-rowContents-1-col-fieldSets-1-memberGroup-properties-1-property-"
+                            + "scalarTypeContainer-scalarIfRegular-associatedActionLinksBelow-additionalLinkList-"
+                            + "additionalLinkItem-0-additionalLink", 
+                            StandardCharsets.UTF_8);
+
+    @Before
+    public void before() {
+        for(int i=0; i<n; ++i) {
+            allBytes[i] = (byte)i;
+        }
+    }
+
+    // -- PREPEND/APPEND
+
+    @Test
+    public void concatNullWithNull() throws Exception {
+        Assert.assertNull(_Bytes.append(null, null));
+        Assert.assertNull(_Bytes.prepend(null, null));
+    }
+
+    @Test
+    public void concatNullWithEmpty() throws Exception {
+        Assert.assertArrayEquals(_Constants.emptyBytes, _Bytes.append(null));
+        Assert.assertArrayEquals(_Constants.emptyBytes, _Bytes.prepend(null));
+    }
+
+    @Test
+    public void concatWithNull() throws Exception {
+        assertArrayEqualsButNotSame(allBytes, _Bytes.append(allBytes, null));
+        assertArrayEqualsButNotSame(allBytes, _Bytes.prepend(allBytes, null));
+    }
+
+    @Test
+    public void concatWithEmpty() throws Exception {
+        assertArrayEqualsButNotSame(allBytes, _Bytes.append(allBytes));
+        assertArrayEqualsButNotSame(allBytes, _Bytes.prepend(allBytes));
+    }
+
+    @Test
+    public void concatHappyCase() throws Exception {
+        assertArrayEqualsButNotSame(new byte[] {1,2,3,4,5}, _Bytes.append(new byte[] {1,2,3}, (byte)4, (byte)5));
+        assertArrayEqualsButNotSame(new byte[] {4,5,1,2,3}, _Bytes.prepend(new byte[] {1,2,3}, (byte)4, (byte)5));
+    }
+
+    @Test
+    public void compressIdentityWithNull() throws Exception {
+        Assert.assertNull(_Bytes.decompress(_Bytes.compress(null)));
+    }
+
+    @Test
+    public void compressIdentityWithByteRange() throws Exception {
+        Assert.assertArrayEquals(allBytes,
+                _Bytes.decompress(_Bytes.compress(allBytes)));
+    }
+
+    @Test
+    public void compressIdentityWithTestimonial() throws Exception {
+        Assert.assertArrayEquals(testimonial,
+                _Bytes.decompress(_Bytes.compress(testimonial)));
+    }
+
+    @Test
+    public void compressionRatio() throws Exception {
+        // lower is better
+        final double compressionRatio = (double)_Bytes.compress(testimonial).length / testimonial.length;
+        Assert.assertThat(compressionRatio, lessThan(0.7));
+    }
+
+
+    // -- COMPRESSION
+
+    @RunWith(Parameterized.class)
+    public static class CompressionTest {
+
+
+        @Parameters
+        public static Object[] data() {
+            return new Object[] { 
+                    (byte[]) null,
+                    new byte[] { },
+                    new byte[] { 0 }, 
+                    new byte[] { 0, 1 },
+                    new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 17 
+                    new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 18
+                    new byte[] { 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 19
+            };
+        }
+
+        @Parameter
+        public byte[] input;
+
+
+        @Test
+        public void compressIdentity() throws Exception {
+            Assert.assertArrayEquals(input,
+                    _Bytes.decompress(_Bytes.compress(input)));
+        }
+
+    }
+
+    // -- BASE-64
+
+    @Test
+    public void base64IdentityWithNull() throws Exception {
+        Assert.assertNull(_Bytes.decodeBase64(
+                Base64.getUrlDecoder(), 
+                _Bytes.encodeToBase64(Base64.getUrlEncoder(), null)));
+    }
+
+    @Test
+    public void base64IdentityWithByteRange() throws Exception {
+        Assert.assertArrayEquals(allBytes,
+                _Bytes.decodeBase64(
+                        Base64.getUrlDecoder(), 
+                        _Bytes.encodeToBase64(Base64.getUrlEncoder(), allBytes)));
+    }
+
+    @Test
+    public void base64IdentityWithTestimonial() throws Exception {
+        Assert.assertArrayEquals(testimonial,
+                _Bytes.decodeBase64(
+                        Base64.getUrlDecoder(), 
+                        _Bytes.encodeToBase64(Base64.getUrlEncoder(), testimonial)));
+    }
+
+    // -- OPERATOR COMPOSITION
+
+    @Test
+    public void composedOperatorWithNull() throws Exception {
+        Assert.assertNull(_Bytes.asCompressedUrlBase64.apply(null));
+        Assert.assertNull(_Bytes.ofCompressedUrlBase64.apply(null));
+        Assert.assertNull(_Bytes.asUrlBase64.apply(null));
+        Assert.assertNull(_Bytes.ofUrlBase64.apply(null));
+    }
+
+    @Test
+    public void composedIdentityWithByteRange() throws Exception {
+        Assert.assertArrayEquals(allBytes,
+                _Bytes.ofCompressedUrlBase64.apply(
+                        _Bytes.asCompressedUrlBase64.apply(allBytes)));
+    }
+
+    @Test
+    public void composedIdentityWithTestimonial() throws Exception {
+        Assert.assertArrayEquals(testimonial,
+                _Bytes.ofCompressedUrlBase64.apply(
+                        _Bytes.asCompressedUrlBase64.apply(testimonial)));
+    }
+
+    // -- HELPER
+
+    private void assertArrayEqualsButNotSame(byte[] a, byte[] b) {
+        Assert.assertFalse(a == b);
+        Assert.assertArrayEquals(a, b);
+    }
+
 }
diff --git a/core/commons/src/test/java/org/apache/isis/commons/internal/base/NullSafeTest.java b/core/commons/src/test/java/org/apache/isis/commons/internal/base/NullSafeTest.java
index e72c486..9d61563 100644
--- a/core/commons/src/test/java/org/apache/isis/commons/internal/base/NullSafeTest.java
+++ b/core/commons/src/test/java/org/apache/isis/commons/internal/base/NullSafeTest.java
@@ -33,84 +33,84 @@ import static org.hamcrest.CoreMatchers.is;
 
 public class NullSafeTest {
 
-	@Test
-	public void isEmptyString() throws Exception {
-		Assert.assertThat(_NullSafe.isEmpty((String)null), is(true));
-		Assert.assertThat(_NullSafe.isEmpty(""), is(true));
-		Assert.assertThat(_NullSafe.isEmpty(" 12 aBc"), is(false));
-	}
-	
-	@Test
-	public void isEmptyCollection() throws Exception {
-		Assert.assertThat(_NullSafe.isEmpty((Collection<?>)null), is(true));
-		Assert.assertThat(_NullSafe.isEmpty(Collections.emptyList()), is(true));
-		Assert.assertThat(_NullSafe.isEmpty(Arrays.asList(new String[] {"foo", "bar"})), is(false));
-	}
-	
-	@Test
-	public void absence() throws Exception {
-		Assert.assertThat(_NullSafe.isAbsent(null), is(true));
-		Assert.assertThat(_NullSafe.isAbsent(""), is(false));
-	}
-	
-	@Test
-	public void presence() throws Exception {
-		Assert.assertThat(_NullSafe.isPresent(null), is(false));
-		Assert.assertThat(_NullSafe.isPresent(""), is(true));
-	}
-	
-	
-	@Test
-	public void emptyStreamWithArray() throws Exception {
-		
-		Assert.assertNotNull(_NullSafe.stream((String[])null));
-		
-		Assert.assertNotNull(_NullSafe.stream(_Strings.emptyArray));
-		Assert.assertEquals(0L, _NullSafe.stream(_Strings.emptyArray).count());
-	}
-	
-	@Test
-	public void streamWithArray() throws Exception {
-		Assert.assertThat(
-				_NullSafe.stream(new String[] {"foo", "bar"})
-				.collect(Collectors.joining("|")),
-				is("foo|bar"));
-	}
-	
-	@Test
-	public void emptyStreamWithCollection() throws Exception {
-		
-		Assert.assertNotNull(_NullSafe.stream((List<?>)null));
-		
-		Assert.assertNotNull(_NullSafe.stream(Arrays.asList(_Strings.emptyArray)));
-		Assert.assertEquals(0L, _NullSafe.stream(Arrays.asList(_Strings.emptyArray)).count());
-	}
-	
-	@Test
-	public void streamWithCollection() throws Exception {
-		Assert.assertThat(
-				_NullSafe.stream(Arrays.asList(new String[] {"foo", "bar"}))
-				.collect(Collectors.joining("|")),
-				is("foo|bar"));
-	}
-	
-	@Test
-	public void emptyStreamWithIterator() throws Exception {
-		
-		Assert.assertNotNull(_NullSafe.stream((Iterator<?>)null));
-		
-		Assert.assertNotNull(_NullSafe.stream(Arrays.asList(_Strings.emptyArray)).iterator());
-		Assert.assertEquals(0L, _NullSafe.stream(Arrays.asList(_Strings.emptyArray).iterator()).count());
-	}
-	
-	@Test
-	public void streamWithIterator() throws Exception {
-		Assert.assertThat(
-				_NullSafe.stream(Arrays.asList(new String[] {"foo", "bar"}).iterator())
-				.collect(Collectors.joining("|")),
-				is("foo|bar"));
-	}
-
-	
-	
+    @Test
+    public void isEmptyString() throws Exception {
+        Assert.assertThat(_NullSafe.isEmpty((String)null), is(true));
+        Assert.assertThat(_NullSafe.isEmpty(""), is(true));
+        Assert.assertThat(_NullSafe.isEmpty(" 12 aBc"), is(false));
+    }
+
+    @Test
+    public void isEmptyCollection() throws Exception {
+        Assert.assertThat(_NullSafe.isEmpty((Collection<?>)null), is(true));
+        Assert.assertThat(_NullSafe.isEmpty(Collections.emptyList()), is(true));
+        Assert.assertThat(_NullSafe.isEmpty(Arrays.asList(new String[] {"foo", "bar"})), is(false));
+    }
+
+    @Test
+    public void absence() throws Exception {
+        Assert.assertThat(_NullSafe.isAbsent(null), is(true));
+        Assert.assertThat(_NullSafe.isAbsent(""), is(false));
+    }
+
+    @Test
+    public void presence() throws Exception {
+        Assert.assertThat(_NullSafe.isPresent(null), is(false));
+        Assert.assertThat(_NullSafe.isPresent(""), is(true));
+    }
+
+
+    @Test
+    public void emptyStreamWithArray() throws Exception {
+
+        Assert.assertNotNull(_NullSafe.stream((String[])null));
+
+        Assert.assertNotNull(_NullSafe.stream(_Strings.emptyArray));
+        Assert.assertEquals(0L, _NullSafe.stream(_Strings.emptyArray).count());
+    }
+
+    @Test
+    public void streamWithArray() throws Exception {
+        Assert.assertThat(
+                _NullSafe.stream(new String[] {"foo", "bar"})
+                .collect(Collectors.joining("|")),
+                is("foo|bar"));
+    }
+
+    @Test
+    public void emptyStreamWithCollection() throws Exception {
+
+        Assert.assertNotNull(_NullSafe.stream((List<?>)null));
+
+        Assert.assertNotNull(_NullSafe.stream(Arrays.asList(_Strings.emptyArray)));
+        Assert.assertEquals(0L, _NullSafe.stream(Arrays.asList(_Strings.emptyArray)).count());
+    }
+
+    @Test
+    public void streamWithCollection() throws Exception {
+        Assert.assertThat(
+                _NullSafe.stream(Arrays.asList(new String[] {"foo", "bar"}))
+                .collect(Collectors.joining("|")),
+                is("foo|bar"));
+    }
+
+    @Test
+    public void emptyStreamWithIterator() throws Exception {
+
+        Assert.assertNotNull(_NullSafe.stream((Iterator<?>)null));
+
+        Assert.assertNotNull(_NullSafe.stream(Arrays.asList(_Strings.emptyArray)).iterator());
+        Assert.assertEquals(0L, _NullSafe.stream(Arrays.asList(_Strings.emptyArray).iterator()).count());
+    }
+
+    @Test
+    public void streamWithIterator() throws Exception {
+        Assert.assertThat(
+                _NullSafe.stream(Arrays.asList(new String[] {"foo", "bar"}).iterator())
+                .collect(Collectors.joining("|")),
+                is("foo|bar"));
+    }
+
+
+
 }
diff --git a/core/commons/src/test/java/org/apache/isis/commons/internal/base/ReductionTest.java b/core/commons/src/test/java/org/apache/isis/commons/internal/base/ReductionTest.java
index d19fb5a..9e00b3a 100644
--- a/core/commons/src/test/java/org/apache/isis/commons/internal/base/ReductionTest.java
+++ b/core/commons/src/test/java/org/apache/isis/commons/internal/base/ReductionTest.java
@@ -30,45 +30,45 @@ import static org.hamcrest.CoreMatchers.is;
 
 public class ReductionTest {
 
-	@Test
-	public void findMinimum() throws Exception {
-		
-		final List<Integer> values = _Lists.of(5, 4, 3, 2, 1, 2, 3, 4);
-		
-		_Reduction<Integer> toMinReduction = _Reduction.of((min, next)-> next<min ? next : min);
-		
-		values.forEach(toMinReduction);
-		
-		Assert.assertThat(toMinReduction.getResult().get(), is(1));
-	}
-	
-	@Test
-	public void findMinimum_initialized_low() throws Exception {
-		
-		final int initial = -1;
-		
-		final List<Integer> values = _Lists.of(5, 4, 3, 2, 1, 2, 3, 4);
-		
-		_Reduction<Integer> toMinReduction = _Reduction.of(initial, (min, next)-> next<min ? next : min);
-		
-		values.forEach(toMinReduction);
-		
-		Assert.assertThat(toMinReduction.getResult().get(), is(initial));
-	}
-	
-	@Test
-	public void findMinimum_initialized_high() throws Exception {
-		
-		final int initial = 3;
-		
-		final List<Integer> values = _Lists.of(5, 4, 3, 2, 1, 2, 3, 4);
-		
-		_Reduction<Integer> toMinReduction = _Reduction.of(initial, (min, next)-> next<min ? next : min);
-		
-		values.forEach(toMinReduction);
-		
-		Assert.assertThat(toMinReduction.getResult().get(), is(1));
-	}
-	
-	
+    @Test
+    public void findMinimum() throws Exception {
+
+        final List<Integer> values = _Lists.of(5, 4, 3, 2, 1, 2, 3, 4);
+
+        _Reduction<Integer> toMinReduction = _Reduction.of((min, next)-> next<min ? next : min);
+
+        values.forEach(toMinReduction);
+
+        Assert.assertThat(toMinReduction.getResult().get(), is(1));
+    }
+
+    @Test
+    public void findMinimum_initialized_low() throws Exception {
+
+        final int initial = -1;
+
+        final List<Integer> values = _Lists.of(5, 4, 3, 2, 1, 2, 3, 4);
+
+        _Reduction<Integer> toMinReduction = _Reduction.of(initial, (min, next)-> next<min ? next : min);
+
+        values.forEach(toMinReduction);
+
+        Assert.assertThat(toMinReduction.getResult().get(), is(initial));
+    }
+
+    @Test
+    public void findMinimum_initialized_high() throws Exception {
+
+        final int initial = 3;
+
+        final List<Integer> values = _Lists.of(5, 4, 3, 2, 1, 2, 3, 4);
+
+        _Reduction<Integer> toMinReduction = _Reduction.of(initial, (min, next)-> next<min ? next : min);
+
+        values.forEach(toMinReduction);
+
+        Assert.assertThat(toMinReduction.getResult().get(), is(1));
+    }
+
+
 }
diff --git a/core/commons/src/test/java/org/apache/isis/commons/internal/base/StringsTest.java b/core/commons/src/test/java/org/apache/isis/commons/internal/base/StringsTest.java
index cbc874e..171a94b 100644
--- a/core/commons/src/test/java/org/apache/isis/commons/internal/base/StringsTest.java
+++ b/core/commons/src/test/java/org/apache/isis/commons/internal/base/StringsTest.java
@@ -31,276 +31,276 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.nullValue;
 
 public class StringsTest {
-	
-	@Test
-	public void isEmpty() throws Exception {
-		Assert.assertThat(_Strings.isEmpty(" 12 aBc"), is(false));
-		Assert.assertThat(_Strings.isEmpty(""), is(true));
-		Assert.assertThat(_Strings.isEmpty(null), is(true));
-	}
-
-	@Test
-	public void isNotEmpty() throws Exception {
-		Assert.assertThat(_Strings.isNotEmpty(" 12 aBc"), is(true));
-		Assert.assertThat(_Strings.isNotEmpty(""), is(false));
-		Assert.assertThat(_Strings.isNotEmpty(null), is(false));
-	}
-	
-	
-	@Test
-	public void lowerWithNull() throws Exception {
-		Assert.assertThat(
-				_Strings.lower(null), 
-				nullValue());
-	}
-	
-	@Test
-	public void lowerMixed() throws Exception {
-		Assert.assertThat(
-				_Strings.lower("12aBc"), 
-				is("12abc"));
-	}
-	
-	
-	@Test
-	public void upperWithNull() throws Exception {
-		Assert.assertThat(
-				_Strings.upper(null), 
-				nullValue());
-	}
-	
-	@Test
-	public void upperMixed() throws Exception {
-		Assert.assertThat(
-				_Strings.upper("12aBc"), 
-				is("12ABC"));
-	}
-	
-	@Test
-	public void capitalizeWithNull() throws Exception {
-		Assert.assertThat(
-				_Strings.capitalize(null), 
-				nullValue());
-	}
-	
-	@Test
-	public void capitalizeSize0() throws Exception {
-		Assert.assertThat(
-				_Strings.capitalize(""), 
-				is(""));
-	}
-	
-	@Test
-	public void capitalizeSize1() throws Exception {
-		Assert.assertThat(
-				_Strings.capitalize("a"), 
-				is("A"));
-	}
-	
-	@Test
-	public void capitalizeSize2() throws Exception {
-		Assert.assertThat(
-				_Strings.capitalize("ab"), 
-				is("Ab"));
-	}
-	
-	@Test
-	public void trimWithNull() throws Exception {
-		Assert.assertThat(
-				_Strings.trim(null), 
-				nullValue());
-	}
-	
-	@Test
-	public void trimMixed() throws Exception {
-		Assert.assertThat(
-				_Strings.trim(" 12 aBc"), 
-				is("12 aBc"));
-	}
-	
-	@Test
-	public void splitThenStreamWithNull() throws Exception {
-		Assert.assertThat(
-				_Strings.splitThenStream(null, "$")
-				.collect(Collectors.joining("|")),
-				is(""));
-	}
-	
-	@Test
-	public void splitThenStreamSingle() throws Exception {
-		Assert.assertThat(
-				_Strings.splitThenStream(" 12 aBc ", "$")
-				.collect(Collectors.joining("|")),
-				is(" 12 aBc "));
-	}
-	
-	@Test
-	public void splitThenStreamMultipleWithSeparatorAtBegin() throws Exception {
-		Assert.assertThat(
-				_Strings.splitThenStream("$ 1$2 a$Bc ", "$")
-				.collect(Collectors.joining("|")),
-				is("| 1|2 a|Bc "));
-	}
-	
-	@Test
-	public void splitThenStreamMultipleWithSeparatorAtEnd() throws Exception {
-		Assert.assertThat(
-				_Strings.splitThenStream(" 1$2 a$Bc $", "$")
-				.collect(Collectors.joining("|")),
-				is(" 1|2 a|Bc |"));
-	}
-	
-	@Test
-	public void splitThenStreamMultipleWithSeparatorsInSequence() throws Exception {
-		Assert.assertThat(
-				_Strings.splitThenStream(" 1$2 a$$Bc ", "$")
-				.collect(Collectors.joining("|")),
-				is(" 1|2 a||Bc "));
-	}
-	
-	@Test
-	public void condenseWhitespacesWithNull() throws Exception {
-		Assert.assertThat(
-				_Strings.condenseWhitespaces(null,"|"), 
-				nullValue());
-	}
-	
-	@Test
-	public void condenseWhitespaces() throws Exception {
-		Assert.assertThat(
-				_Strings.condenseWhitespaces("  12 aBc","|"), 
-				is("|12|aBc"));
-	}
-	
-	// -- TO BYTE CONVERSION
-	
-	@Test
-	public void toByteConvertWithNull() throws Exception {
-		Assert.assertThat(
-				_Strings.toBytes(null, StandardCharsets.UTF_8), 
-				nullValue());
-	}
-	
-	@Test
-	public void toByteConvertWithEmpty() throws Exception {
-		Assert.assertArrayEquals(
-				_Constants.emptyBytes,
-				_Strings.toBytes("", StandardCharsets.UTF_8));
-	}
-	
-	@Test
-	public void toByteConvert() throws Exception {
-		Assert.assertArrayEquals(
-				new byte[] {48,49,50,51},
-				_Strings.toBytes("0123", StandardCharsets.UTF_8));
-	}
-	
-	// -- FROM BYTE CONVERSION
-	
-	@Test
-	public void fromByteConvertWithNull() throws Exception {
-		Assert.assertThat(
-				_Strings.ofBytes(null, StandardCharsets.UTF_8), 
-				nullValue());
-	}
-	
-	@Test
-	public void fromByteConvertWithEmpty() throws Exception {
-		Assert.assertThat(
-				_Strings.ofBytes(_Constants.emptyBytes, StandardCharsets.UTF_8), 
-				is(""));
-	}
-	
-	@Test
-	public void fromByteConvert() throws Exception {
-		Assert.assertThat(
-				_Strings.ofBytes(new byte[] {48,49,50,51}, StandardCharsets.UTF_8), 
-				is("0123"));
-	}
-	
... 53337 lines suppressed ...