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 2021/12/22 21:21:31 UTC

[isis] branch master updated: ISIS-2932: [antora] auto-update site docs

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

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


The following commit(s) were added to refs/heads/master by this push:
     new ba14685  ISIS-2932: [antora] auto-update site docs
ba14685 is described below

commit ba14685f57706e07e8341467595dad2b6afa94ea
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Dec 22 21:29:50 2021 +0100

    ISIS-2932: [antora] auto-update site docs
---
 .../modules/applib/pages/index/Identifier.adoc     |  15 +-
 .../applib/pages/index/annotation/Action.adoc      |  34 +-
 .../pages/index/annotation/ActionLayout.adoc       |  12 +-
 .../applib/pages/index/annotation/Collection.adoc  |   3 +-
 .../pages/index/annotation/CollectionLayout.adoc   |  12 -
 .../applib/pages/index/annotation/Defaulted.adoc   |  46 -
 .../pages/index/annotation/DomainObject.adoc       |  37 +-
 .../pages/index/annotation/DomainService.adoc      |  26 -
 .../{MinLength.adoc => Domain~Exclude.adoc}        |  12 +-
 .../{Projecting.adoc => Domain~Include.adoc}       |  38 +-
 .../pages/index/annotation/EqualByContent.adoc     |  20 -
 .../applib/pages/index/annotation/Facets.adoc      |  53 --
 .../pages/index/annotation/Introspection.adoc      |  77 ++
 .../pages/index/annotation/LogicalTypeName.adoc}   |  31 +-
 .../pages/index/annotation/MemberSupport.adoc      |   2 +-
 .../applib/pages/index/annotation/MinLength.adoc   |   2 +-
 .../{Projecting.adoc => ObjectLifecycle.adoc}      |  38 +-
 .../{MemberSupport.adoc => ObjectSupport.adoc}     |  14 +-
 .../applib/pages/index/annotation/Optionality.adoc |   1 +
 .../pages/index/annotation/ParameterLayout.adoc    |  12 -
 .../applib/pages/index/annotation/Projecting.adoc  |   4 +-
 .../applib/pages/index/annotation/SemanticsOf.adoc |  22 +-
 .../applib/pages/index/annotation/Value.adoc       |  41 -
 .../pages/index/annotation/ValueSemantics.adoc     |  93 ++
 .../applib/pages/index/clock/VirtualClock.adoc     | 240 +++++-
 .../JavaTimeXMLGregorianCalendarMarshalling.adoc   |  24 +-
 .../index/jaxb/PersistentEntitiesAdapter.adoc      |   2 +-
 .../layout/component/CollectionLayoutData.adoc     |   4 +-
 .../index/layout/component/PropertyLayoutData.adoc |   4 +-
 .../UserLocale.adoc}                               |  11 +-
 .../pages/index/services/bookmark/Bookmark.adoc    |   5 +-
 .../index/services/bookmark/BookmarkService.adoc   |   2 +-
 .../applib/pages/index/services/bookmark/Oid.adoc  |  25 -
 .../index/services/confview/ConfigurationMenu.adoc |   1 -
 .../exceprecog/ExceptionRecognizerAbstract.adoc    |   2 +-
 .../index/services/factory/FactoryService.adoc     |  47 +-
 .../{LocaleProvider.adoc => LanguageProvider.adoc} |  26 +-
 .../index/services/i18n/TranslationContext.adoc    |   1 -
 .../pages/index/services/iactn/Execution.adoc      |   4 +-
 .../services/iactnlayer/InteractionContext.adoc    |  42 +-
 .../pages/index/services/jaxb/JaxbService.adoc     |   6 +-
 .../index/services/layout/LayoutServiceMenu.adoc   |   7 +-
 .../services/locale/LocaleChoiceProvider.adoc}     |  12 +-
 .../index/services/message/MessageService.adoc     |   6 +-
 .../pages/index/services/metamodel/BeanSort.adoc   |   1 +
 .../services/metamodel/MetaModelServiceMenu.adoc   |  17 -
 .../queryresultscache/QueryResultsCache.adoc       |  12 +-
 .../services/repository/RepositoryService.adoc     |  52 +-
 .../index/services/sitemap/SitemapService.adoc}    |  12 +-
 .../services/sitemap/SitemapServiceMenu.adoc}      |  11 +-
 .../pages/index/services/user/ImpersonateMenu.adoc |  34 -
 .../services/user/ImpersonateMenuAdvisor.adoc      |  12 +-
 .../index/services/user/ImpersonateStopMenu.adoc   |   2 -
 .../pages/index/services/user/UserMemento.adoc     |   3 +-
 .../pages/index/services/userui/UserMenu.adoc      |   2 -
 .../index/services/wrapper/WrapperFactory.adoc     |   6 +-
 .../services/wrapper/control/AsyncControl.adoc     |   8 +-
 .../modules/applib/pages/index/util/Enums.adoc     |   7 +-
 .../applib/pages/index/util/ObjectContracts.adoc   |  18 +-
 .../pages/index/util/schema/CommonDtoUtils.adoc    |  15 -
 .../index/util/schema/InteractionDtoUtils.adoc     |   7 -
 .../modules/applib/pages/index/value/Clob.adoc     |  14 +-
 .../pages/index/value/LocalResourcePath.adoc       |   8 +-
 .../modules/applib/pages/index/value/Markup.adoc   |  22 +-
 .../modules/applib/pages/index/value/Password.adoc |   2 +-
 .../pages/index/value/semantics/Converter.adoc}    |  13 +-
 .../semantics}/DefaultsProvider.adoc               |   0
 .../semantics}/EncoderDecoder.adoc                 |   0
 .../semantics}/EncodingException.adoc              |   0
 .../pages/index/value/semantics/OrderRelation.adoc |  45 +
 .../{adapters => value/semantics}/Parser.adoc      |  61 +-
 .../semantics}/ParsingException.adoc               |   0
 .../value/{Markup.adoc => semantics/Renderer.adoc} |  28 +-
 .../semantics/ValueComposer.adoc}                  |  11 +-
 .../semantics/ValueSemanticsAbstract.adoc}         |  23 +-
 .../semantics}/ValueSemanticsProvider.adoc         |  57 +-
 .../semantics/ValueSemanticsResolver.adoc}         |  16 +-
 .../pages/index/btree/Compound.adoc}               |  35 +-
 .../commons/pages/index/btree/FunCompound.adoc     |  32 +
 .../commons/pages/index/collections/Can.adoc       |  42 +-
 .../services/ixn/InteractionDtoFactory.adoc        |   8 +-
 .../services/schema/SchemaValueMarshaller.adoc     | 129 +++
 .../primary/ui/CommandReplayOnPrimaryService.adoc  |  39 -
 .../ui/CommandReplayOnSecondaryService.adoc        |   2 -
 .../fullcalendar/applib/CalendarEventable.adoc     |   2 +-
 .../index/fullcalendar/applib/Calendarable.adoc    |   6 +-
 .../fullcalendar/applib/value/CalendarEvent.adoc   |  20 +-
 .../pages/index/restclient/ResponseDigest.adoc     |   4 +-
 .../index/restclient/auth/BasicAuthFilter.adoc     |   6 +-
 .../permission/dom/ApplicationPermission.adoc      |   2 +-
 .../index/secman/applib/user/menu/MeService.adoc   |   1 -
 .../applib/user/spi/PasswordEncryptionService.adoc |  14 -
 .../services/PasswordEncoderUsingJBcrypt.adoc}     |  11 +-
 .../PasswordEncryptionServiceUsingJBcrypt.adoc     |  14 -
 .../IsisModuleExtSecmanEncryptionSpring.adoc}      |  19 +-
 .../authenticator/AuthenticatorSecman.adoc         |   1 +
 .../AuthenticatorSecmanAutoConfiguration.adoc      |   2 +-
 .../ui/components/CollectionContentsAsExcel.adoc   |  16 -
 .../CollectionContentsAsExcelFactory.adoc          |   2 +-
 .../changetracking/JdoLifecycleListener.adoc       |  20 +-
 .../jdo/datanucleus/dialect/DnJdoDialect.adoc      |   4 +-
 .../applib/services/calendar/CalendarService.adoc  |   4 +-
 .../pages/index/docx/applib/DocxService.adoc       |  10 +-
 .../pages/index/excel/applib/dom/ExcelService.adoc |  40 +-
 .../excel/applib/dom/util/ExcelServiceImpl.adoc    | 137 ---
 .../applib/{dom => }/util/AnnotationList.adoc      |   0
 .../applib/{dom => }/util/AnnotationTriplet.adoc   |   0
 .../{dom => }/util/ExcelFileBlobConverter.adoc     |   0
 .../index/excel/applib/{dom => }/util/Mode.adoc    |   0
 .../excel/applib/{dom => }/util/PivotUtils.adoc    |   0
 .../excel/applib/{dom => }/util/SheetPivoter.adoc  |   0
 .../applib/{service => }/XDocReportService.adoc    |   7 +-
 ...adoc => XDocReportService~XDocReportModel.adoc} |   4 +-
 .../applib/classrules/ArchitectureDomainRules.adoc |  38 +-
 .../applib/classrules/ArchitectureJdoRules.adoc    |   3 +
 .../applib/fixturescripts/FixtureScripts.adoc      |  65 +-
 .../applib/validate/DomainModelValidator.adoc      |  27 +-
 .../integration/ObjectFactoryForIntegration.adoc   |   4 +-
 .../asciidoc/applib/jaxb/AsciiDocJaxbAdapter.adoc  |   4 +-
 .../index/asciidoc/applib/value/AsciiDoc.adoc      |  20 +-
 .../applib/IsisModuleValJodatimeApplib.adoc}       |   8 +-
 .../applib}/jaxb/JodaTimeJaxbAdapters.adoc         |   0
 .../JodaTimeXMLGregorianCalendarMarshalling.adoc   |   2 +-
 .../jodatime/applib/value/JodaTimeConverters.adoc} |  37 +-
 .../IsisModuleValJodatimeIntegration.adoc}         |   7 +-
 .../applib/value/Markdown.adoc}                    |  17 +-
 .../common/applib/mixins/Object_impersonate.adoc   |   2 +-
 .../applib/mixins/Object_impersonateWithRoles.adoc |   2 +-
 .../restfulobjects/applib/JsonRepresentation.adoc  |  58 +-
 .../pages/index/restfulobjects/applib/Rel.adoc     |  29 +-
 .../restfulobjects/applib/RepresentationType.adoc  |  27 +-
 .../restfulobjects/rendering/IResourceContext.adoc |  23 +-
 .../service/swagger/SwaggerServiceMenu.adoc        |   9 +-
 core/adoc/modules/_overview/pages/about.adoc       | 947 +++++++++++++++++----
 134 files changed, 2018 insertions(+), 1579 deletions(-)

diff --git a/antora/components/refguide-index/modules/applib/pages/index/Identifier.adoc b/antora/components/refguide-index/modules/applib/pages/index/Identifier.adoc
index 9679f4c..691292d 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/Identifier.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/Identifier.adoc
@@ -13,10 +13,11 @@ For xref:refguide:applib:index/Identifier.adoc[Identifier] (s) of type _Identifi
 class Identifier {
   Identifier classIdentifier(final LogicalType typeIdentifier)
   Identifier propertyOrCollectionIdentifier(final LogicalType typeIdentifier, final String propertyOrCollectionName)
+  Identifier methodIdentifier(final LogicalType typeIdentifier, final Method method)     // <.>
   Identifier actionIdentifier(final LogicalType typeIdentifier, final String actionName, final Class<?>... parameterClasses)
   Identifier actionIdentifier(final LogicalType typeIdentifier, final String actionName, final Can<String> parameterClassNames)
+  Identifier withParameterIndex(final int parameterIndex)
   String getLogicalIdentityString(final String delimiter)
-  boolean matchesCommand(final Command command)
   String getClassNaturalName()
   String getMemberNaturalName()
   Can<String> getMemberParameterClassNaturalNames()
@@ -28,3 +29,15 @@ class Identifier {
 }
 ----
 
+<.> xref:#methodIdentifier__LogicalType_Method[methodIdentifier(LogicalType, Method)]
++
+--
+for reporting orphaned methods
+--
+
+== Members
+
+[#methodIdentifier__LogicalType_Method]
+=== methodIdentifier(LogicalType, Method)
+
+for reporting orphaned methods
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Action.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Action.adoc
index b388c62..5216100 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Action.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Action.adoc
@@ -9,7 +9,6 @@ Groups together all domain-specific metadata for an invokable action on a domain
 .Action.java
 ----
 @interface Action {
-  String associateWith() default "";     // <.>
   String choicesFrom() default "";     // <.>
   Class<? extends CommandDtoProcessor> commandDtoProcessor() default CommandDtoProcessor.class;     // <.>
   Publishing commandPublishing() default Publishing.NOT_SPECIFIED;     // <.>
@@ -18,23 +17,12 @@ Groups together all domain-specific metadata for an invokable action on a domain
   Where hidden() default Where.NOT_SPECIFIED;     // <.>
   RestrictTo restrictTo() default RestrictTo.NOT_SPECIFIED;     // <.>
   SemanticsOf semantics() default SemanticsOf.NOT_SPECIFIED;     // <.>
-  Class<?> typeOf() default Object.class;     // <.>
+  Class<?> typeOf() default // represents unspecified
+void.class;     // <.>
   String fileAccept() default "";     // <.>
 }
 ----
 
-<.> xref:#associateWith[associateWith]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-use { _#choicesFrom()_ instead
-====
-
-Associates this action with a property or collection, specifying its id.
---
 <.> xref:#choicesFrom[choicesFrom]
 +
 --
@@ -88,24 +76,6 @@ For downloading xref:refguide:applib:index/value/Blob.adoc[Blob] or xref:refguid
 
 == Members
 
-[#associateWith]
-=== associateWith
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-use { _#choicesFrom()_ instead
-====
-
-Associates this action with a property or collection, specifying its id.
-
-To specify the layout order use _ActionLayout#sequence()_ .
-
-For example `@Action(associateWith="items") @ActionLayout(sequence="2.1")` 
-
-If an action is associated with a collection, then any matching parameters will have their choices automatically inferred from the collection (if not otherwise specified) and any collection parameter defaults can be specified using checkboxes (in the Wicket UI, at least).
-
 [#choicesFrom]
 === choicesFrom
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/ActionLayout.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/ActionLayout.adoc
index e3022c3..5af503d 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/ActionLayout.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/ActionLayout.adoc
@@ -59,12 +59,12 @@ Description of this action, eg to be rendered in a tooltip.
 <.> xref:#fieldSetId[fieldSetId]
 +
 --
-Specifies the *id* of associated _FieldSet_ .To associate an _Action_ with a _Collection_ , use _Action#associateWith()_ instead.
+Specifies the *id* of associated _FieldSet_ .To associate an _Action_ with a _Collection_ , use _Action#choicesFrom()_ instead.
 --
 <.> xref:#fieldSetName[fieldSetName]
 +
 --
-Specifies the *friendly-name* of associated _FieldSet_ or _Collection_ .To associate an _Action_ with a _Collection_ , use _Action#associateWith()_ instead.
+Specifies the *friendly-name* of associated _FieldSet_ or _Collection_ .To associate an _Action_ with a _Collection_ , use _Action#choicesFrom()_ instead.
 --
 <.> xref:#hidden[hidden]
 +
@@ -79,7 +79,7 @@ Name of this action (overriding the name derived from its name in code).
 <.> xref:#position[position]
 +
 --
-For actions that are associated with a property (using either _Action#associateWith()_ or _ActionLayout#fieldSetId()_ or _ActionLayout#fieldSetName()_ , indicates the positioning of the action's button relative to the property.
+For actions that are associated with a property (using either _Action#choicesFrom()_ or _ActionLayout#fieldSetId()_ or _ActionLayout#fieldSetName()_ , indicates the positioning of the action's button relative to the property.
 --
 <.> xref:#promptStyle[promptStyle]
 +
@@ -144,14 +144,14 @@ Description of this action, eg to be rendered in a tooltip.
 [#fieldSetId]
 === fieldSetId
 
-Specifies the *id* of associated _FieldSet_ .To associate an _Action_ with a _Collection_ , use _Action#associateWith()_ instead.
+Specifies the *id* of associated _FieldSet_ .To associate an _Action_ with a _Collection_ , use _Action#choicesFrom()_ instead.
 
 For a more in depth description see the analogous _PropertyLayout#fieldSetId()_ .
 
 [#fieldSetName]
 === fieldSetName
 
-Specifies the *friendly-name* of associated _FieldSet_ or _Collection_ .To associate an _Action_ with a _Collection_ , use _Action#associateWith()_ instead.
+Specifies the *friendly-name* of associated _FieldSet_ or _Collection_ .To associate an _Action_ with a _Collection_ , use _Action#choicesFrom()_ instead.
 
 For a more in depth description see the analogous _PropertyLayout#fieldSetId()_ ;
 
@@ -170,7 +170,7 @@ A typical use case is if the desired name is a reserved Java keyword, such as `d
 [#position]
 === position
 
-For actions that are associated with a property (using either _Action#associateWith()_ or _ActionLayout#fieldSetId()_ or _ActionLayout#fieldSetName()_ , indicates the positioning of the action's button relative to the property.
+For actions that are associated with a property (using either _Action#choicesFrom()_ or _ActionLayout#fieldSetId()_ or _ActionLayout#fieldSetName()_ , indicates the positioning of the action's button relative to the property.
 
 Ignored if the action has not been associated with a property.
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Collection.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Collection.adoc
index 46971b1..2ec70ad 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Collection.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Collection.adoc
@@ -11,7 +11,8 @@ Domain semantics for domain object collection.
 @interface Collection {
   Class<? extends CollectionDomainEvent<?, ?>> domainEvent() default CollectionDomainEvent.Default.class;     // <.>
   Where hidden() default Where.NOT_SPECIFIED;     // <.>
-  Class<?> typeOf() default Object.class;     // <.>
+  Class<?> typeOf() default // represents unspecified
+void.class;     // <.>
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/CollectionLayout.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/CollectionLayout.adoc
index 2a28c8d..b8e22f6 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/CollectionLayout.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/CollectionLayout.adoc
@@ -14,8 +14,6 @@ Layout hints for collections.
   String describedAs() default "";     // <.>
   Where hidden() default Where.NOT_SPECIFIED;     // <.>
   String named() default "";     // <.>
-  @Deprecated
-boolean namedEscaped() default true;     // <.>
   int paged() default -1;     // <.>
   String sequence() default "";     // <.>
   @SuppressWarnings("rawtypes")
@@ -48,11 +46,6 @@ Indicates where in the UI the collection should _not_ not be visible.
 --
 Name of this collection (overriding the name derived from its name in code).
 --
-<.> xref:#namedEscaped[namedEscaped]
-+
---
-A flag indicating whether the value of _#named()_ should be HTML escaped or not.
---
 <.> xref:#paged[paged]
 +
 --
@@ -104,11 +97,6 @@ Name of this collection (overriding the name derived from its name in code).
 
 A typical use case is if the desired name is a reserved Java keyword, such as `default` or `package`.
 
-[#namedEscaped]
-=== namedEscaped
-
-A flag indicating whether the value of _#named()_ should be HTML escaped or not.
-
 [#paged]
 === paged
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Defaulted.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Defaulted.adoc
deleted file mode 100644
index 49a7058..0000000
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Defaulted.adoc
+++ /dev/null
@@ -1,46 +0,0 @@
-= @Defaulted
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-Indicates that the class should have a default, by providing a link to a xref:refguide:applib:index/adapters/DefaultsProvider.adoc[DefaultsProvider] , or some externally-configured mechanism.
-
-This possibly seems a little tortuous. The more obvious means to provide a default would seem to be a simple `@DefaultsTo(new SomeObject())` . However, Java only allows primitives, strings and class literals to be used in annotations. We therefore need delegate to an external implementation. (This more complex design is also more flexible of course; the implementation of xref:refguide:applib:index/adapters/DefaultsProvider.adoc[DefaultsProvider] could adjust the default it provides accor [...]
-
-== API
-
-[source,java]
-.Defaulted.java
-----
-@interface Defaulted {
-  String defaultsProviderName() default "";     // <.>
-  Class<?> defaultsProviderClass() default Defaulted.class;     // <.>
-}
-----
-
-<.> xref:#defaultsProviderName[defaultsProviderName]
-+
---
-The fully qualified name of a class that implements the xref:refguide:applib:index/adapters/DefaultsProvider.adoc[DefaultsProvider] interface.
---
-<.> xref:#defaultsProviderClass[defaultsProviderClass]
-+
---
-As per _#defaultsProviderName()_ , but specifying a class literal rather than a fully qualified class name.
---
-
-== Members
-
-[#defaultsProviderName]
-=== defaultsProviderName
-
-The fully qualified name of a class that implements the xref:refguide:applib:index/adapters/DefaultsProvider.adoc[DefaultsProvider] interface.
-
-This is optional because some implementations may pick up the defaults provider via a configuration file, or via the equivalent _#defaultsProviderClass()_ .
-
-Implementation note: the default value provided here is simply an empty string because `null` is not a valid default.
-
-[#defaultsProviderClass]
-=== defaultsProviderClass
-
-As per _#defaultsProviderName()_ , but specifying a class literal rather than a fully qualified class name.
-
-Implementation note: the default value provided here is simply the xref:refguide:applib:index/annotation/Defaulted.adoc[Defaulted] 's own class, because `null` is not a valid default.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/DomainObject.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/DomainObject.adoc
index 78b9e64..ae2faf7 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/DomainObject.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/DomainObject.adoc
@@ -15,10 +15,9 @@ Domain semantics for domain objects (entities and view models; for services see
   Editing editing() default Editing.NOT_SPECIFIED;     // <.>
   String editingDisabledReason() default "Disabled";     // <.>
   Publishing entityChangePublishing() default Publishing.NOT_SPECIFIED;     // <.>
+  Introspection introspection() default Introspection.NOT_SPECIFIED;     // <.>
   String mixinMethod() default "$$";     // <.>
   Nature nature() default Nature.NOT_SPECIFIED;     // <.>
-  @AliasFor(annotation = DomainObject.class, value = "logicalTypeName")
-String objectType() default "";     // <.>
   String logicalTypeName() default "";     // <.>
   Class<? extends ObjectCreatedEvent<?>> createdLifecycleEvent() default ObjectCreatedEvent.Default.class;     // <.>
   Class<? extends ObjectPersistingEvent<?>> persistingLifecycleEvent() default ObjectPersistingEvent.Default.class;     // <.>
@@ -63,6 +62,11 @@ If _#editing()_ is set to _Editing#DISABLED_ , then the reason to provide to the
 --
 Whether entity changes (persistent property updates) should be published to _org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber_ s and whether entity changes, captured as _org.apache.isis.applib.services.publishing.spi.EntityChanges_ , should be published to _org.apache.isis.applib.services.publishing.spi.EntityChangesSubscriber_ s.
 --
+<.> xref:#introspection[introspection]
++
+--
+Controls on a per class basis, how meta-model class introspection should process members, supporting methods and callback methods.
+--
 <.> xref:#mixinMethod[mixinMethod]
 +
 --
@@ -73,18 +77,6 @@ Applicable only if _#nature()_ is _Nature#MIXIN_ , indicates the name of the met
 --
 The nature of this domain object.
 --
-<.> xref:#objectType[objectType]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-use _#logicalTypeName()_ instead
-====
-
-Synonym for _#logicalTypeName()_ .
---
 <.> xref:#logicalTypeName[logicalTypeName]
 +
 --
@@ -183,6 +175,11 @@ If _#editing()_ is set to _Editing#DISABLED_ , then the reason to provide to the
 
 Whether entity changes (persistent property updates) should be published to _org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber_ s and whether entity changes, captured as _org.apache.isis.applib.services.publishing.spi.EntityChanges_ , should be published to _org.apache.isis.applib.services.publishing.spi.EntityChangesSubscriber_ s.
 
+[#introspection]
+=== introspection
+
+Controls on a per class basis, how meta-model class introspection should process members, supporting methods and callback methods.
+
 [#mixinMethod]
 === mixinMethod
 
@@ -197,18 +194,6 @@ Typical examples are "act", "prop", "coll", "exec", "execute", "invoke", "apply"
 
 The nature of this domain object.
 
-[#objectType]
-=== objectType
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-use _#logicalTypeName()_ instead
-====
-
-Synonym for _#logicalTypeName()_ .
-
 [#logicalTypeName]
 === logicalTypeName
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/DomainService.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/DomainService.adoc
index 328d841..eb39e98 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/DomainService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/DomainService.adoc
@@ -13,8 +13,6 @@ Also indicates whether the domain service acts as a repository for an entity, an
 @interface DomainService {
   NatureOfService nature() default NatureOfService.VIEW;     // <.>
   @AliasFor(annotation = Named.class, attribute = "value")
-String objectType() default "";     // <.>
-  @AliasFor(annotation = Named.class, attribute = "value")
 String logicalTypeName() default "";     // <.>
 }
 ----
@@ -24,18 +22,6 @@ String logicalTypeName() default "";     // <.>
 --
 The nature of this service, either in the UI or REST only
 --
-<.> xref:#objectType[objectType]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-use _#logicalTypeName()_ instead
-====
-
-Synonym for _#logicalTypeName()_ .
---
 <.> xref:#logicalTypeName[logicalTypeName]
 +
 --
@@ -49,18 +35,6 @@ The logical name of this object's type, that uniquely and fully qualifies it. Th
 
 The nature of this service, either in the UI or REST only
 
-[#objectType]
-=== objectType
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-use _#logicalTypeName()_ instead
-====
-
-Synonym for _#logicalTypeName()_ .
-
 [#logicalTypeName]
 === logicalTypeName
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/MinLength.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Domain~Exclude.adoc
similarity index 79%
copy from antora/components/refguide-index/modules/applib/pages/index/annotation/MinLength.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/annotation/Domain~Exclude.adoc
index 380c0d6..af6d372 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/MinLength.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Domain~Exclude.adoc
@@ -1,16 +1,16 @@
-= @MinLength
+= @Domain.Exclude
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Specify the minimum number of characters for an autocomplete search argument.
+Indicates that a field, method or type should be ignored by the meta-model introspection.
+
+Acts as the semantic counterpart to _Domain.Include_ .
 
 == API
 
 [source,java]
-.MinLength.java
+.Domain~Exclude.java
 ----
-@interface MinLength {
-  int value();
+@interface Exclude {
 }
 ----
 
-include::hooks/MinLength_010-examples-and-usage.adoc[]
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Projecting.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Domain~Include.adoc
similarity index 60%
copy from antora/components/refguide-index/modules/applib/pages/index/annotation/Projecting.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/annotation/Domain~Include.adoc
index ef1a260..c00149d 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Projecting.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Domain~Include.adoc
@@ -1,36 +1,20 @@
-= Projecting _(enum)_
+= @Domain.Include
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Indicates that a field or method must contribute to the metamodel.
+
+For _mixins_ is also allowed to be placed on the mixin's main method.
+
+By placing the _Domain.Include_ annotation on a method or field, a contract with the meta-model is enforced, such that this class-member must be recognized by the meta-model and cannot be ignored. Meta-model validation will fail when this contract is violated.
+
+Acts as the semantic counterpart to _Domain.Exclude_ .
+
 == API
 
 [source,java]
-.Projecting.java
+.Domain~Include.java
 ----
-enum Projecting {
-  PROJECTED     // <.>
-  NOT_SPECIFIED     // <.>
+@interface Include {
 }
 ----
 
-<.> xref:#PROJECTED[PROJECTED]
-+
---
-The property holds the underlying domain object of which this (view model) object is a projection.
---
-<.> xref:#NOT_SPECIFIED[NOT_SPECIFIED]
-+
---
-The property
---
-
-== Members
-
-[#PROJECTED]
-=== PROJECTED
-
-The property holds the underlying domain object of which this (view model) object is a projection.
-
-[#NOT_SPECIFIED]
-=== NOT_SPECIFIED
-
-The property
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/EqualByContent.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/EqualByContent.adoc
deleted file mode 100644
index 190fc14..0000000
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/EqualByContent.adoc
+++ /dev/null
@@ -1,20 +0,0 @@
-= @EqualByContent
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-Indicates that the class follows the equal-by-content contract, usually associated with xref:refguide:applib:index/annotation/Value.adoc[Value] types.
-
-If a class claims to be equal-by-content then its _#equals(Object)_ should return `true` if its content (as opposed to identity) is the same. For example, _String_ , _BigDecimal_ and _Date_ follow this contract.
-
-Note also that the Java Language Specification requires that two objects that are _#equals(Object) equal_ must return the same value from _#hashCode()_ . Failure to do this means that that the object will not behave correctly when used as a key into a hashing structure (eg a _HashMap_ ).
-
-By default any xref:refguide:applib:index/annotation/Value.adoc[Value] types are assumed to follow the equal-by-content rule, though this can be overridden if required. Value types are usually also immutable (though there are some classic exceptions to this, such as _Date_ ).
-
-== API
-
-[source,java]
-.EqualByContent.java
-----
-@interface EqualByContent {
-}
-----
-
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Facets.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Facets.adoc
deleted file mode 100644
index ea39f7c..0000000
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Facets.adoc
+++ /dev/null
@@ -1,53 +0,0 @@
-= @Facets
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-currently alternatively works with MetaModelRefiner(s), but ultimately FacetFactory(s) should be managed by Spring
-====
-
-Indicates that the class has additional facets, and specifies the how to obtain the `FacetFactory` to manufacture them.
-
-At least one named factory (as per _#facetFactoryNames()_ ) or one class factory (as per _#facetFactoryClasses()_ ) should be specified.
-
-== API
-
-[source,java]
-.Facets.java
-----
-@interface Facets {
-  String[] facetFactoryNames() default {};     // <.>
-  Class<?>[] facetFactoryClasses() default {};     // <.>
-}
-----
-
-<.> xref:#facetFactoryNames[facetFactoryNames]
-+
---
-Array of fully qualified names of classes each implementing `org.apache.isis.core.metamodel.facets.FacetFactory` .
---
-<.> xref:#facetFactoryClasses[facetFactoryClasses]
-+
---
-Array of _Class_ s, each indicating a class implementing `org.apache.isis.core.metamodel.facets.FacetFactory` .
---
-
-== Members
-
-[#facetFactoryNames]
-=== facetFactoryNames
-
-Array of fully qualified names of classes each implementing `org.apache.isis.core.metamodel.facets.FacetFactory` .
-
-Either the array provided by this method or by _#facetFactoryClasses()_ should be non-empty.
-
-[#facetFactoryClasses]
-=== facetFactoryClasses
-
-Array of _Class_ s, each indicating a class implementing `org.apache.isis.core.metamodel.facets.FacetFactory` .
-
-Either the array provided by this method or by _#facetFactoryNames()_ should be non-empty.
-
-include::hooks/Facets_010-examples-and-usage.adoc[]
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Introspection.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Introspection.adoc
new file mode 100644
index 0000000..a0a2199
--- /dev/null
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Introspection.adoc
@@ -0,0 +1,77 @@
+= Introspection _(enum)_
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+The available policies as to how class introspection should process members, supporting methods and callback methods.
+
+Particularly whether to consider or ignore non-public members as contributors to the meta-model (encapsulation). And also whether or not to enforce presence of the _Domain.Include_ annotation on those members.
+
+== API
+
+[source,java]
+.Introspection.java
+----
+enum Introspection {
+  NOT_SPECIFIED     // <.>
+  AS_CONFIGURED     // <.>
+  ENCAPSULATION_ENABLED     // <.>
+  ANNOTATION_REQUIRED     // <.>
+  ANNOTATION_OPTIONAL     // <.>
+  boolean isNotSpecified()
+  boolean isAsConfigured()
+}
+----
+
+<.> xref:#NOT_SPECIFIED[NOT_SPECIFIED]
++
+--
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or super-classes/interfaces).
+--
+<.> xref:#AS_CONFIGURED[AS_CONFIGURED]
++
+--
+Introspection should be handled as per the default introspection policy configured in `application.properties` .
+--
+<.> xref:#ENCAPSULATION_ENABLED[ENCAPSULATION_ENABLED]
++
+--
+Introspect public and non-public members, while presence of at least one appropriate domain annotation is enforced.
+--
+<.> xref:#ANNOTATION_REQUIRED[ANNOTATION_REQUIRED]
++
+--
+Introspect public members only, while presence of at least one appropriate domain annotation is enforced.
+--
+<.> xref:#ANNOTATION_OPTIONAL[ANNOTATION_OPTIONAL]
++
+--
+Introspect public members only, while presence of domain annotations is optional.
+--
+
+== Members
+
+[#NOT_SPECIFIED]
+=== NOT_SPECIFIED
+
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or super-classes/interfaces).
+
+[#AS_CONFIGURED]
+=== AS_CONFIGURED
+
+Introspection should be handled as per the default introspection policy configured in `application.properties` .
+
+If not configured, then encapsulation is disabled and presence of the _Domain.Include_ annotation is not enforced.
+
+[#ENCAPSULATION_ENABLED]
+=== ENCAPSULATION_ENABLED
+
+Introspect public and non-public members, while presence of at least one appropriate domain annotation is enforced.
+
+[#ANNOTATION_REQUIRED]
+=== ANNOTATION_REQUIRED
+
+Introspect public members only, while presence of at least one appropriate domain annotation is enforced.
+
+[#ANNOTATION_OPTIONAL]
+=== ANNOTATION_OPTIONAL
+
+Introspect public members only, while presence of domain annotations is optional.
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/Mode.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/LogicalTypeName.adoc
similarity index 66%
copy from antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/Mode.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/annotation/LogicalTypeName.adoc
index fb33737..4509180 100644
--- a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/Mode.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/LogicalTypeName.adoc
@@ -1,36 +1,27 @@
-= Mode _(enum)_
+= @LogicalTypeName
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Introduced to allow for abstract types to be mapped to a logical-type-name, for the security model to apply permission checks against.
+
 == API
 
 [source,java]
-.Mode.java
+.LogicalTypeName.java
 ----
-enum Mode {
-  STRICT     // <.>
-  RELAXED     // <.>
+@interface LogicalTypeName {
+  String value() default "";     // <.>
 }
 ----
 
-<.> xref:#STRICT[STRICT]
-+
---
-All cells must be well formed and with valid data
---
-<.> xref:#RELAXED[RELAXED]
+<.> xref:#value[value]
 +
 --
-Ignore any cells that cannot be interpreted.
+If unspecified, the fully-qualified class name is used instead.
 --
 
 == Members
 
-[#STRICT]
-=== STRICT
-
-All cells must be well formed and with valid data
-
-[#RELAXED]
-=== RELAXED
+[#value]
+=== value
 
-Ignore any cells that cannot be interpreted.
+If unspecified, the fully-qualified class name is used instead.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/MemberSupport.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/MemberSupport.adoc
index 8c8e1ed..59e426b 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/MemberSupport.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/MemberSupport.adoc
@@ -7,7 +7,7 @@ For _mixins_ is also allowed to be placed on the mixin's main method.
 
 By placing the xref:refguide:applib:index/annotation/MemberSupport.adoc[MemberSupport] annotation on a method, a contract with the meta-model is enforced, such that this method must be recognized by the meta-model and cannot be ignored.
 
-In some sense acts as the semantic counterpart to xref:refguide:applib:index/annotation/Programmatic.adoc[Programmatic] .
+It is complementary to xref:refguide:applib:index/annotation/ObjectSupport.adoc[ObjectSupport] and xref:refguide:applib:index/annotation/ObjectLifecycle.adoc[ObjectLifecycle] , and in some sense acts as the semantic counterpart to xref:refguide:applib:index/annotation/Programmatic.adoc[Programmatic] .
 
 == API
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/MinLength.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/MinLength.adoc
index 380c0d6..38bdf78 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/MinLength.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/MinLength.adoc
@@ -1,7 +1,7 @@
 = @MinLength
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Specify the minimum number of characters for an autocomplete search argument.
+Specify the minimum number of characters for an auto-complete search argument.
 
 == API
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Projecting.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/ObjectLifecycle.adoc
similarity index 50%
copy from antora/components/refguide-index/modules/applib/pages/index/annotation/Projecting.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/annotation/ObjectLifecycle.adoc
index ef1a260..9d141c4 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Projecting.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/ObjectLifecycle.adoc
@@ -1,36 +1,20 @@
-= Projecting _(enum)_
+= @ObjectLifecycle
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Indicates that a method is an _Object_ lifecycle callback method, one of (created, loaded, saved, ...).
+
+May only be placed on _domain object_ methods, not _mixins_ nor _domain services_ .
+
+By placing the xref:refguide:applib:index/annotation/ObjectLifecycle.adoc[ObjectLifecycle] annotation on a method, a contract with the meta-model is enforced, such that this method must be recognized by the meta-model and cannot be ignored.
+
+It is complementary to xref:refguide:applib:index/annotation/MemberSupport.adoc[MemberSupport] and xref:refguide:applib:index/annotation/ObjectSupport.adoc[ObjectSupport] , and in some sense acts as the semantic counterpart to xref:refguide:applib:index/annotation/Programmatic.adoc[Programmatic] .
+
 == API
 
 [source,java]
-.Projecting.java
+.ObjectLifecycle.java
 ----
-enum Projecting {
-  PROJECTED     // <.>
-  NOT_SPECIFIED     // <.>
+@interface ObjectLifecycle {
 }
 ----
 
-<.> xref:#PROJECTED[PROJECTED]
-+
---
-The property holds the underlying domain object of which this (view model) object is a projection.
---
-<.> xref:#NOT_SPECIFIED[NOT_SPECIFIED]
-+
---
-The property
---
-
-== Members
-
-[#PROJECTED]
-=== PROJECTED
-
-The property holds the underlying domain object of which this (view model) object is a projection.
-
-[#NOT_SPECIFIED]
-=== NOT_SPECIFIED
-
-The property
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/MemberSupport.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/ObjectSupport.adoc
similarity index 60%
copy from antora/components/refguide-index/modules/applib/pages/index/annotation/MemberSupport.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/annotation/ObjectSupport.adoc
index 8c8e1ed..d8e05ec 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/MemberSupport.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/ObjectSupport.adoc
@@ -1,20 +1,20 @@
-= @MemberSupport
+= @ObjectSupport
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Indicates that a method is a supporting-method, one that contributes (hide, validate, ...) to an _Action_ , _Property_ or _Collection_ .
+Indicates that a method is a supporting-method, one that contributes (disabled, hidden, ...) to its _Object_ .
 
-For _mixins_ is also allowed to be placed on the mixin's main method.
+May only be placed on _domain object_ methods, not _mixins_ nor _domain services_ .
 
-By placing the xref:refguide:applib:index/annotation/MemberSupport.adoc[MemberSupport] annotation on a method, a contract with the meta-model is enforced, such that this method must be recognized by the meta-model and cannot be ignored.
+By placing the xref:refguide:applib:index/annotation/ObjectSupport.adoc[ObjectSupport] annotation on a method, a contract with the meta-model is enforced, such that this method must be recognized by the meta-model and cannot be ignored.
 
-In some sense acts as the semantic counterpart to xref:refguide:applib:index/annotation/Programmatic.adoc[Programmatic] .
+It is complementary to xref:refguide:applib:index/annotation/MemberSupport.adoc[MemberSupport] and xref:refguide:applib:index/annotation/ObjectLifecycle.adoc[ObjectLifecycle] , and in some sense acts as the semantic counterpart to xref:refguide:applib:index/annotation/Programmatic.adoc[Programmatic] .
 
 == API
 
 [source,java]
-.MemberSupport.java
+.ObjectSupport.java
 ----
-@interface MemberSupport {
+@interface ObjectSupport {
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
index b32ee8c..105d843 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Optionality.adoc
@@ -13,6 +13,7 @@ enum Optionality {
   OPTIONAL     // <.>
   MANDATORY     // <.>
   NOT_SPECIFIED     // <.>
+  boolean isOptional()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/ParameterLayout.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/ParameterLayout.adoc
index 5978574..9858ef1 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/ParameterLayout.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/ParameterLayout.adoc
@@ -13,8 +13,6 @@ Collects together all layout hints for action parameters in a single annotation.
   String describedAs() default "";     // <.>
   LabelPosition labelPosition() default LabelPosition.NOT_SPECIFIED;     // <.>
   String named() default "";     // <.>
-  @Deprecated
-boolean namedEscaped() default true;     // <.>
   int multiLine() default -1;     // <.>
   RenderDay renderDay() default RenderDay.NOT_SPECIFIED;     // <.>
   int typicalLength() default -1;     // <.>
@@ -41,11 +39,6 @@ In forms, positioning of the label (left, top or none) relative to the parameter
 --
 Name of this action parameter.
 --
-<.> xref:#namedEscaped[namedEscaped]
-+
---
-A flag indicating whether the value of _#named()_ should be HTML escaped or not.
---
 <.> xref:#multiLine[multiLine]
 +
 --
@@ -90,11 +83,6 @@ The name of an action parameters is available to the framework provided that the
 
 The only reason then to name the parameter is if the desired name is a reserved Java keyword, such as `default` or `package`.
 
-[#namedEscaped]
-=== namedEscaped
-
-A flag indicating whether the value of _#named()_ should be HTML escaped or not.
-
 [#multiLine]
 === multiLine
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Projecting.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Projecting.adoc
index ef1a260..6749c5a 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Projecting.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Projecting.adoc
@@ -20,7 +20,7 @@ The property holds the underlying domain object of which this (view model) objec
 <.> xref:#NOT_SPECIFIED[NOT_SPECIFIED]
 +
 --
-The property
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
 --
 
 == Members
@@ -33,4 +33,4 @@ The property holds the underlying domain object of which this (view model) objec
 [#NOT_SPECIFIED]
 === NOT_SPECIFIED
 
-The property
+Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta annotations or superclasses/interfaces).
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/SemanticsOf.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/SemanticsOf.adoc
index 7e4081a..684c1c9 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/SemanticsOf.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/SemanticsOf.adoc
@@ -18,9 +18,9 @@ enum SemanticsOf {
   String getCamelCaseName()
   boolean isIdempotentInNature()     // <.>
   boolean isSafeInNature()     // <.>
-  boolean isSafe()     // <.>
   boolean isSafeAndRequestCacheable()
   boolean isAreYouSure()
+  boolean isIdempotentOrCachable()
 }
 ----
 
@@ -69,16 +69,6 @@ Any of _#SAFE_ , _#SAFE_AND_REQUEST_CACHEABLE_ or (obviously) _#IDEMPOTENT_ .
 --
 Either of _#SAFE_ or _#SAFE_AND_REQUEST_CACHEABLE_ .
 --
-<.> xref:#isSafe__[isSafe()]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-- use _#isSafeInNature()_ instead (avoid any ambiguity).
-====
---
 
 == Members
 
@@ -156,13 +146,3 @@ Any of _#SAFE_ , _#SAFE_AND_REQUEST_CACHEABLE_ or (obviously) _#IDEMPOTENT_ .
 === isSafeInNature()
 
 Either of _#SAFE_ or _#SAFE_AND_REQUEST_CACHEABLE_ .
-
-[#isSafe__]
-=== isSafe()
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-- use _#isSafeInNature()_ instead (avoid any ambiguity).
-====
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/Value.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/Value.adoc
index 6c121e5..81829a5 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/Value.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/Value.adoc
@@ -3,17 +3,6 @@
 
 Indicates that the class has value semantics.
 
-By "value semantics" all we actually mean that the class is aggregated (or embedded) and so therefore (conceptually) is not shared between instances of classes. However, values very often have other semantics, and so this annotation allows these to also be specified:
-
-* it may be parseable
-* it may be encodeable
-* it may be immutable, and by default is presumed that it is
-* it may follow the equal-by-content contract (as per xref:refguide:applib:index/annotation/EqualByContent.adoc[EqualByContent] ), and by default is presumed that it does.
-+
---
-Note also that though a value is conceptually not shared, if it is also immutable then it is in fact safe to share objects (as in the flyweight pattern). In addition, the xref:refguide:applib:index/annotation/EqualByContent.adoc[EqualByContent] semantic means that we needn't care whether value types are being shared or not.
---
-
 == API
 
 [source,java]
@@ -21,8 +10,6 @@ Note also that though a value is conceptually not shared, if it is also immutabl
 ----
 @interface Value {
   String logicalTypeName() default "";     // <.>
-  String semanticsProviderName() default "";     // <.>
-  Class<?> semanticsProviderClass() default Value.class;     // <.>
 }
 ----
 
@@ -31,16 +18,6 @@ Note also that though a value is conceptually not shared, if it is also immutabl
 --
 The logical name of this value's type, that uniquely and fully qualifies it. The logical name is analogous to - but independent of - the actual fully qualified class name. eg. _sales.Customer_ for a class 'org.mycompany.dom.Customer'
 --
-<.> xref:#semanticsProviderName[semanticsProviderName]
-+
---
-The fully qualified name of a class that implements the xref:refguide:applib:index/adapters/ValueSemanticsProvider.adoc[ValueSemanticsProvider] interface.
---
-<.> xref:#semanticsProviderClass[semanticsProviderClass]
-+
---
-As per _#semanticsProviderName()_ , but specifying a class literal rather than a fully qualified class name.
---
 
 == Members
 
@@ -50,21 +27,3 @@ As per _#semanticsProviderName()_ , but specifying a class literal rather than a
 The logical name of this value's type, that uniquely and fully qualifies it. The logical name is analogous to - but independent of - the actual fully qualified class name. eg. _sales.Customer_ for a class 'org.mycompany.dom.Customer'
 
 If not specified, the fully qualified class name is used instead.
-
-[#semanticsProviderName]
-=== semanticsProviderName
-
-The fully qualified name of a class that implements the xref:refguide:applib:index/adapters/ValueSemanticsProvider.adoc[ValueSemanticsProvider] interface.
-
-This is optional because some implementations may pick up encodeability via a configuration file, or via the equivalent _#semanticsProviderClass()_ .
-
-It is possible for value classes to act as their own semantics providers, and may in particular implement the xref:refguide:applib:index/adapters/EncoderDecoder.adoc[EncoderDecoder] interface. The framework requires that the nominated class provides a `public` no-arg constructor on the class, and will instantiates an instance of the class to interact with it. In the case of encoding, the framework uses the result of discards the instantiated object. What that means in particular is that  [...]
-
-Implementation note: the default value provided here is simply an empty string because `null` is not a valid default.
-
-[#semanticsProviderClass]
-=== semanticsProviderClass
-
-As per _#semanticsProviderName()_ , but specifying a class literal rather than a fully qualified class name.
-
-Implementation note: the default value provided here is simply the xref:refguide:applib:index/annotation/Value.adoc[Value] 's own class, because `null` is not a valid default.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/ValueSemantics.adoc b/antora/components/refguide-index/modules/applib/pages/index/annotation/ValueSemantics.adoc
new file mode 100644
index 0000000..77f2275
--- /dev/null
+++ b/antora/components/refguide-index/modules/applib/pages/index/annotation/ValueSemantics.adoc
@@ -0,0 +1,93 @@
+= @ValueSemantics
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+Collects all the value-type specific customization attributes.
+
+== API
+
+[source,java]
+.ValueSemantics.java
+----
+@interface ValueSemantics {
+  String provider() default "";     // <.>
+  int maxTotalDigits() default 65;     // <.>
+  int minIntegerDigits() default 1;     // <.>
+  int maxFractionalDigits() default 30;     // <.>
+  int minFractionalDigits() default 0;     // <.>
+  FormatStyle dateFormatStyle() default FormatStyle.MEDIUM;     // <.>
+  FormatStyle timeFormatStyle() default FormatStyle.MEDIUM;     // <.>
+}
+----
+
+<.> xref:#provider[provider]
++
+--
+Allows to select xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] (s) by qualifier.
+--
+<.> xref:#maxTotalDigits[maxTotalDigits]
++
+--
+If associated with a _Number_ , the maximum number of total digits accepted for this number.Can be omitted, if _Column#precision()_ is used.default = _65_
+--
+<.> xref:#minIntegerDigits[minIntegerDigits]
++
+--
+If associated with a _Number_ , the minimum number of integer digits required for this number.default = _1_
+--
+<.> xref:#maxFractionalDigits[maxFractionalDigits]
++
+--
+If associated with a _BigDecimal_ , the maximum number of fractional digits accepted for this number.Can be omitted, if _Column#scale()_ is used.default = _30_
+--
+<.> xref:#minFractionalDigits[minFractionalDigits]
++
+--
+If associated with a _BigDecimal_ , the minimum number of fractional digits required for this number.default = _0_
+--
+<.> xref:#dateFormatStyle[dateFormatStyle]
++
+--
+If associated with a temporal date value, the style of a localized date.
+--
+<.> xref:#timeFormatStyle[timeFormatStyle]
++
+--
+If associated with a temporal time value, the style of a localized time.
+--
+
+== Members
+
+[#provider]
+=== provider
+
+Allows to select xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] (s) by qualifier.
+
+[#maxTotalDigits]
+=== maxTotalDigits
+
+If associated with a _Number_ , the maximum number of total digits accepted for this number.Can be omitted, if _Column#precision()_ is used.default = _65_
+
+[#minIntegerDigits]
+=== minIntegerDigits
+
+If associated with a _Number_ , the minimum number of integer digits required for this number.default = _1_
+
+[#maxFractionalDigits]
+=== maxFractionalDigits
+
+If associated with a _BigDecimal_ , the maximum number of fractional digits accepted for this number.Can be omitted, if _Column#scale()_ is used.default = _30_
+
+[#minFractionalDigits]
+=== minFractionalDigits
+
+If associated with a _BigDecimal_ , the minimum number of fractional digits required for this number.default = _0_
+
+[#dateFormatStyle]
+=== dateFormatStyle
+
+If associated with a temporal date value, the style of a localized date.
+
+[#timeFormatStyle]
+=== timeFormatStyle
+
+If associated with a temporal time value, the style of a localized time.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/clock/VirtualClock.adoc b/antora/components/refguide-index/modules/applib/pages/index/clock/VirtualClock.adoc
index 20e19af..8c5ccb2 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/clock/VirtualClock.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/clock/VirtualClock.adoc
@@ -11,24 +11,24 @@ Works in connection with xref:refguide:applib:index/services/iactnlayer/Interact
 interface VirtualClock {
   Instant nowAsInstant()     // <.>
   VirtualClock system()     // <.>
-  VirtualClock nowAt(Instant virtualNow)     // <.>
-  VirtualClock nowAt(java.time.LocalDate virtualNow)     // <.>
-  VirtualClock nowAt(java.time.LocalDateTime virtualNow)
-  VirtualClock nowAt(java.time.OffsetDateTime virtualNow)
-  VirtualClock nowAt(java.time.ZonedDateTime virtualNow)
-  VirtualClock nowAt(java.util.Date virtualNow)
-  VirtualClock nowAt(org.joda.time.LocalDate virtualNow)
-  VirtualClock nowAt(org.joda.time.LocalDateTime virtualNow)
-  VirtualClock nowAt(org.joda.time.DateTime virtualNow)
-  VirtualClock frozenAt(Instant frozenAt)     // <.>
-  VirtualClock frozenAt(java.time.LocalDate frozenAt)
-  VirtualClock frozenAt(java.time.LocalDateTime frozenAt)
-  VirtualClock frozenAt(java.time.OffsetDateTime frozenAt)
-  VirtualClock frozenAt(java.time.ZonedDateTime frozenAt)
-  VirtualClock frozenAt(java.util.Date frozenAt)
-  VirtualClock frozenAt(org.joda.time.LocalDate frozenAt)
-  VirtualClock frozenAt(org.joda.time.LocalDateTime frozenAt)
-  VirtualClock frozenAt(org.joda.time.DateTime frozenAt)
+  VirtualClock nowAt(final Instant virtualNow)     // <.>
+  VirtualClock nowAt(final java.time.LocalDate virtualNow)     // <.>
+  VirtualClock nowAt(final java.time.LocalDateTime virtualNow)
+  VirtualClock nowAt(final java.time.OffsetDateTime virtualNow)
+  VirtualClock nowAt(final java.time.ZonedDateTime virtualNow)
+  VirtualClock nowAt(final java.util.Date virtualNow)
+  VirtualClock nowAt(final org.joda.time.LocalDate virtualNow)     // <.>
+  VirtualClock nowAt(final org.joda.time.LocalDateTime virtualNow)     // <.>
+  VirtualClock nowAt(final org.joda.time.DateTime virtualNow)     // <.>
+  VirtualClock frozenAt(final Instant frozenAt)     // <.>
+  VirtualClock frozenAt(final java.time.LocalDate frozenAt)
+  VirtualClock frozenAt(final java.time.LocalDateTime frozenAt)
+  VirtualClock frozenAt(final java.time.OffsetDateTime frozenAt)
+  VirtualClock frozenAt(final java.time.ZonedDateTime frozenAt)
+  VirtualClock frozenAt(final java.util.Date frozenAt)
+  VirtualClock frozenAt(final org.joda.time.LocalDate frozenAt)     // <.>
+  VirtualClock frozenAt(final org.joda.time.LocalDateTime frozenAt)     // <.>
+  VirtualClock frozenAt(final org.joda.time.DateTime frozenAt)     // <.>
   VirtualClock frozenTestClock()     // <.>
   long nowAsEpochMilli()     // <.>
   LocalDate nowAsLocalDate(final ZoneId zoneId)     // <.>
@@ -69,11 +69,71 @@ Returns a ticking clock set to virtual time _Instant_ _virtualNow_
 --
 Returns a ticking clock set to virtual time.
 --
+<.> xref:#nowAt__org.joda.time.LocalDate[nowAt(org.joda.time.LocalDate)]
++
+--
+[WARNING]
+====
+[red]#_deprecated:_#
+
+convert use java.time variant instead (Joda Time is deprecated)
+====
+--
+<.> xref:#nowAt__org.joda.time.LocalDateTime[nowAt(org.joda.time.LocalDateTime)]
++
+--
+[WARNING]
+====
+[red]#_deprecated:_#
+
+convert use java.time variant instead (Joda Time is deprecated)
+====
+--
+<.> xref:#nowAt__org.joda.time.DateTime[nowAt(org.joda.time.DateTime)]
++
+--
+[WARNING]
+====
+[red]#_deprecated:_#
+
+convert use java.time variant instead (Joda Time is deprecated)
+====
+--
 <.> xref:#frozenAt__Instant[frozenAt(Instant)]
 +
 --
 Always returns the time _Instant_ as given by _frozenAt_
 --
+<.> xref:#frozenAt__org.joda.time.LocalDate[frozenAt(org.joda.time.LocalDate)]
++
+--
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+--
+<.> xref:#frozenAt__org.joda.time.LocalDateTime[frozenAt(org.joda.time.LocalDateTime)]
++
+--
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+--
+<.> xref:#frozenAt__org.joda.time.DateTime[frozenAt(org.joda.time.DateTime)]
++
+--
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+--
 <.> xref:#frozenTestClock__[frozenTestClock()]
 +
 --
@@ -132,31 +192,71 @@ Returns the (virtual) time as _XMLGregorianCalendar_ .
 <.> xref:#nowAsJodaDateTime__ZoneId[nowAsJodaDateTime(ZoneId)]
 +
 --
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
 Returns the time as a Joda _org.joda.time.DateTime_ , using the specified _ZoneId_ timezone.
 --
 <.> xref:#nowAsJodaDateTime__[nowAsJodaDateTime()]
 +
 --
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
 Returns the time as a Joda _org.joda.time.DateTime_ , using the _ZoneId#systemDefault() system default_ timezone.
 --
 <.> xref:#nowAsJodaLocalDateTime__ZoneId[nowAsJodaLocalDateTime(ZoneId)]
 +
 --
-Returns the time as a Joda _org.joda.time.LocalDateTime_ , using the specified _ZoneId_ timezone.
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
 --
 <.> xref:#nowAsJodaLocalDateTime__[nowAsJodaLocalDateTime()]
 +
 --
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
 Returns the time as a Joda _org.joda.time.LocalDateTime_ , using the _ZoneId#systemDefault() system default_ timezone.
 --
 <.> xref:#nowAsJodaLocalDate__ZoneId[nowAsJodaLocalDate(ZoneId)]
 +
 --
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
 Returns the time as a Joda _DateTime_ , using the specified _ZoneId_ timezone.
 --
 <.> xref:#nowAsJodaLocalDate__[nowAsJodaLocalDate()]
 +
 --
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
 Returns the time as a Joda _DateTime_ , using the _ZoneId#systemDefault() system default_ timezone.
 --
 
@@ -182,11 +282,71 @@ Returns a ticking clock set to virtual time _Instant_ _virtualNow_
 
 Returns a ticking clock set to virtual time.
 
+[#nowAt__org.joda.time.LocalDate]
+=== nowAt(org.joda.time.LocalDate)
+
+[WARNING]
+====
+[red]#_deprecated:_#
+
+convert use java.time variant instead (Joda Time is deprecated)
+====
+
+[#nowAt__org.joda.time.LocalDateTime]
+=== nowAt(org.joda.time.LocalDateTime)
+
+[WARNING]
+====
+[red]#_deprecated:_#
+
+convert use java.time variant instead (Joda Time is deprecated)
+====
+
+[#nowAt__org.joda.time.DateTime]
+=== nowAt(org.joda.time.DateTime)
+
+[WARNING]
+====
+[red]#_deprecated:_#
+
+convert use java.time variant instead (Joda Time is deprecated)
+====
+
 [#frozenAt__Instant]
 === frozenAt(Instant)
 
 Always returns the time _Instant_ as given by _frozenAt_
 
+[#frozenAt__org.joda.time.LocalDate]
+=== frozenAt(org.joda.time.LocalDate)
+
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
+[#frozenAt__org.joda.time.LocalDateTime]
+=== frozenAt(org.joda.time.LocalDateTime)
+
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
+[#frozenAt__org.joda.time.DateTime]
+=== frozenAt(org.joda.time.DateTime)
+
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
 [#frozenTestClock__]
 === frozenTestClock()
 
@@ -245,29 +405,69 @@ Returns the (virtual) time as _XMLGregorianCalendar_ .
 [#nowAsJodaDateTime__ZoneId]
 === nowAsJodaDateTime(ZoneId)
 
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
 Returns the time as a Joda _org.joda.time.DateTime_ , using the specified _ZoneId_ timezone.
 
 [#nowAsJodaDateTime__]
 === nowAsJodaDateTime()
 
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
 Returns the time as a Joda _org.joda.time.DateTime_ , using the _ZoneId#systemDefault() system default_ timezone.
 
 [#nowAsJodaLocalDateTime__ZoneId]
 === nowAsJodaLocalDateTime(ZoneId)
 
-Returns the time as a Joda _org.joda.time.LocalDateTime_ , using the specified _ZoneId_ timezone.
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
 
 [#nowAsJodaLocalDateTime__]
 === nowAsJodaLocalDateTime()
 
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
 Returns the time as a Joda _org.joda.time.LocalDateTime_ , using the _ZoneId#systemDefault() system default_ timezone.
 
 [#nowAsJodaLocalDate__ZoneId]
 === nowAsJodaLocalDate(ZoneId)
 
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
 Returns the time as a Joda _DateTime_ , using the specified _ZoneId_ timezone.
 
 [#nowAsJodaLocalDate__]
 === nowAsJodaLocalDate()
 
+[WARNING]
+====
+[red]#_deprecated:_#
+
+use java.time variant instead (Joda Time is deprecated)
+====
+
 Returns the time as a Joda _DateTime_ , using the _ZoneId#systemDefault() system default_ timezone.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/jaxb/JavaTimeXMLGregorianCalendarMarshalling.adoc b/antora/components/refguide-index/modules/applib/pages/index/jaxb/JavaTimeXMLGregorianCalendarMarshalling.adoc
index a3e1279..efbc8a9 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/jaxb/JavaTimeXMLGregorianCalendarMarshalling.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/jaxb/JavaTimeXMLGregorianCalendarMarshalling.adoc
@@ -7,18 +7,18 @@
 .JavaTimeXMLGregorianCalendarMarshalling.java
 ----
 class JavaTimeXMLGregorianCalendarMarshalling {
-  LocalDate toLocalDate(XMLGregorianCalendar cal)
-  LocalTime toLocalTime(XMLGregorianCalendar cal)
-  LocalDateTime toLocalDateTime(XMLGregorianCalendar cal)
-  OffsetDateTime toOffsetDateTime(XMLGregorianCalendar cal)
-  OffsetTime toOffsetTime(XMLGregorianCalendar cal)
-  ZonedDateTime toZonedDateTime(XMLGregorianCalendar cal)
-  XMLGregorianCalendar toXMLGregorianCalendar2(LocalDate localDate)
-  XMLGregorianCalendar toXMLGregorianCalendar2(LocalTime localTime)
-  XMLGregorianCalendar toXMLGregorianCalendar2(LocalDateTime localDateTime)
-  XMLGregorianCalendar toXMLGregorianCalendar2(OffsetTime offsetTime)
-  XMLGregorianCalendar toXMLGregorianCalendar2(OffsetDateTime offsetDateTime)
-  XMLGregorianCalendar toXMLGregorianCalendar2(ZonedDateTime zonedDateTime)
+  LocalDate toLocalDate(final XMLGregorianCalendar cal)
+  LocalTime toLocalTime(final XMLGregorianCalendar cal)
+  LocalDateTime toLocalDateTime(final XMLGregorianCalendar cal)
+  OffsetDateTime toOffsetDateTime(final XMLGregorianCalendar cal)
+  OffsetTime toOffsetTime(final XMLGregorianCalendar cal)
+  ZonedDateTime toZonedDateTime(final XMLGregorianCalendar cal)
+  XMLGregorianCalendar toXMLGregorianCalendar(final LocalDate localDate)
+  XMLGregorianCalendar toXMLGregorianCalendar(final LocalTime localTime)
+  XMLGregorianCalendar toXMLGregorianCalendar(final LocalDateTime localDateTime)
+  XMLGregorianCalendar toXMLGregorianCalendar(final OffsetTime offsetTime)
+  XMLGregorianCalendar toXMLGregorianCalendar(final OffsetDateTime offsetDateTime)
+  XMLGregorianCalendar toXMLGregorianCalendar(final ZonedDateTime zonedDateTime)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/jaxb/PersistentEntitiesAdapter.adoc b/antora/components/refguide-index/modules/applib/pages/index/jaxb/PersistentEntitiesAdapter.adoc
index a74d373..785ae04 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/jaxb/PersistentEntitiesAdapter.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/jaxb/PersistentEntitiesAdapter.adoc
@@ -8,7 +8,7 @@
 ----
 class PersistentEntitiesAdapter {
   List<Object> unmarshal(final OidsDto oidsDto)
-  OidsDto marshal(final List<Object> domainObjects)
+  OidsDto marshal(final Iterable<Object> domainObjects)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/layout/component/CollectionLayoutData.adoc b/antora/components/refguide-index/modules/applib/pages/index/layout/component/CollectionLayoutData.adoc
index bab20d5..d692009 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/layout/component/CollectionLayoutData.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/layout/component/CollectionLayoutData.adoc
@@ -42,7 +42,7 @@ class CollectionLayoutData {
 <.> xref:#getId__[getId()]
 +
 --
-Collection identifier, being the getter method without "get" prefix, first letter lower cased.
+Collection identifier, being the getter method without 'get' prefix, first letter lower cased.
 --
 <.> xref:#getDefaultView__[getDefaultView()]
 +
@@ -70,7 +70,7 @@ The link to access this resource from the REST API (Restful Objects viewer).
 [#getId__]
 === getId()
 
-Collection identifier, being the getter method without "get" prefix, first letter lower cased.
+Collection identifier, being the getter method without 'get' prefix, first letter lower cased.
 
 [#getDefaultView__]
 === getDefaultView()
diff --git a/antora/components/refguide-index/modules/applib/pages/index/layout/component/PropertyLayoutData.adoc b/antora/components/refguide-index/modules/applib/pages/index/layout/component/PropertyLayoutData.adoc
index 7b8d740..ac46534 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/layout/component/PropertyLayoutData.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/layout/component/PropertyLayoutData.adoc
@@ -48,7 +48,7 @@ class PropertyLayoutData {
 <.> xref:#getId__[getId()]
 +
 --
-Property identifier, being the getter method without "get" or "is" prefix, first letter lower cased.
+Property identifier, being the getter method without 'get' or 'is' prefix, first letter lower cased.
 --
 <.> xref:#getOwner__[getOwner()]
 +
@@ -71,7 +71,7 @@ The link to access this resource from the REST API (Restful Objects viewer).
 [#getId__]
 === getId()
 
-Property identifier, being the getter method without "get" or "is" prefix, first letter lower cased.
+Property identifier, being the getter method without 'get' or 'is' prefix, first letter lower cased.
 
 [#getOwner__]
 === getOwner()
diff --git a/antora/components/refguide-index/modules/applib/pages/index/jaxb/JodaTimeJaxbAdapters.adoc b/antora/components/refguide-index/modules/applib/pages/index/locale/UserLocale.adoc
similarity index 80%
copy from antora/components/refguide-index/modules/applib/pages/index/jaxb/JodaTimeJaxbAdapters.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/locale/UserLocale.adoc
index 0213376..3cd83be 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/jaxb/JodaTimeJaxbAdapters.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/locale/UserLocale.adoc
@@ -1,12 +1,17 @@
-= JodaTimeJaxbAdapters
+= UserLocale
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+User specific regional preferred settings.
+
 == API
 
 [source,java]
-.JodaTimeJaxbAdapters.java
+.UserLocale.java
 ----
-class JodaTimeJaxbAdapters {
+class UserLocale {
+  UserLocale getDefault()
+  UserLocale valueOf(final Locale mainLocale)
+  UserLocaleBuilder asBuilder()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/Bookmark.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/Bookmark.adoc
index fe36d4a..7d55a5e 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/Bookmark.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/Bookmark.adoc
@@ -13,8 +13,9 @@ class Bookmark {
   Bookmark forLogicalTypeAndIdentifier(final LogicalType logicalType, final String identifier)
   Bookmark forOidDto(final OidDto oidDto)
   Bookmark withHintId(final String hintId)
-  Optional<Bookmark> parse(String str)     // <.>
-  Optional<Bookmark> parseUrlEncoded(String urlEncodedStr)
+  Optional<Bookmark> parse(final String str)     // <.>
+  Bookmark parseElseFail(final String input)
+  Optional<Bookmark> parseUrlEncoded(final String urlEncodedStr)
   OidDto toOidDto()
   String stringify()
   boolean equals(final Object other)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/BookmarkService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/BookmarkService.adoc
index 43e0aab..1ce225f 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/BookmarkService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/BookmarkService.adoc
@@ -13,7 +13,7 @@ interface BookmarkService {
   Optional<Bookmark> bookmarkFor(Class<?> type, String identifier)     // <.>
   Optional<Object> lookup(BookmarkHolder bookmarkHolder)     // <.>
   Optional<Object> lookup(Bookmark bookmark)     // <.>
-  Optional<T> lookup(Bookmark bookmark, Class<T> cls)     // <.>
+  Optional<T> lookup(final Bookmark bookmark, final Class<T> cls)     // <.>
   Bookmark bookmarkForElseFail(Object domainObject)     // <.>
 }
 ----
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/Oid.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/Oid.adoc
index 1477467..ef3853f 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/Oid.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/bookmark/Oid.adoc
@@ -10,7 +10,6 @@ interface Oid {
   static final String SEPARATOR;
   String getLogicalTypeName()     // <.>
   String getIdentifier()     // <.>
-  String getObjectType()     // <.>
   String stringify()     // <.>
 }
 ----
@@ -25,18 +24,6 @@ Logical-type-name of the domain object this Oid is representing. (aka. object-ty
 --
 Stringified version of the ID of the domain object instance this Oid is representing.
 --
-<.> xref:#getObjectType__[getObjectType()]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-use _#getLogicalTypeName()_
-====
-
-Alias for _#getLogicalTypeName()_ .
---
 <.> xref:#stringify__[stringify()]
 +
 --
@@ -55,18 +42,6 @@ Logical-type-name of the domain object this Oid is representing. (aka. object-ty
 
 Stringified version of the ID of the domain object instance this Oid is representing.
 
-[#getObjectType__]
-=== getObjectType()
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-use _#getLogicalTypeName()_
-====
-
-Alias for _#getLogicalTypeName()_ .
-
 [#stringify__]
 === stringify()
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/confview/ConfigurationMenu.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/confview/ConfigurationMenu.adoc
index 08379cc..93d5182 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/confview/ConfigurationMenu.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/confview/ConfigurationMenu.adoc
@@ -10,7 +10,6 @@ Simply provides a UI in order to access the configuration properties available f
 ----
 class ConfigurationMenu {
   public static final String LOGICAL_TYPE_NAME;
-  ConfigurationViewmodel configuration()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/ExceptionRecognizerAbstract.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/ExceptionRecognizerAbstract.adoc
index bae18ec..21ccfdc 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/ExceptionRecognizerAbstract.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/exceprecog/ExceptionRecognizerAbstract.adoc
@@ -15,7 +15,7 @@ class ExceptionRecognizerAbstract {
   ExceptionRecognizerAbstract(final Predicate<Throwable> predicate, final Function<Throwable, String> rootCauseMessageFormatter)
   ExceptionRecognizerAbstract(final Category category, final Predicate<Throwable> predicate)
   ExceptionRecognizerAbstract(final Predicate<Throwable> predicate)
-  Optional<Recognition> recognize(Throwable ex)
+  Optional<Recognition> recognize(final Throwable ex)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/factory/FactoryService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/factory/FactoryService.adoc
index 67e15e1..b1bdb32 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/factory/FactoryService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/factory/FactoryService.adoc
@@ -14,11 +14,10 @@ interface FactoryService {
   T detachedEntity(Class<T> domainClass)     // <.>
   T detachedEntity(T entity)     // <.>
   T mixin(Class<T> mixinClass, Object mixedIn)     // <.>
-  T viewModel(Class<T> viewModelClass, String mementoStr)     // <.>
-  T viewModel(Class<T> viewModelClass)     // <.>
+  T viewModel(Class<T> viewModelClass, Bookmark bookmark)     // <.>
+  T viewModel(final Class<T> viewModelClass)     // <.>
   T viewModel(T viewModel)     // <.>
   T create(Class<T> domainClass)     // <.>
-  T instantiate(Class<T> domainClass)     // <.>
 }
 ----
 
@@ -47,10 +46,10 @@ Creates a new detached entity instance, with injection points resolved.
 --
 Creates a new Mixin instance, with injection points resolved.
 --
-<.> xref:#viewModel__Class_String[viewModel(Class, String)]
+<.> xref:#viewModel__Class_Bookmark[viewModel(Class, Bookmark)]
 +
 --
-Creates a new ViewModel instance, with injection points resolved, and initialized according to the given _mementoStr_
+Creates a new ViewModel instance, with injection points resolved, and initialized according to the given _bookmark_
 --
 <.> xref:#viewModel__Class[viewModel(Class)]
 +
@@ -67,18 +66,6 @@ Resolves injection points for given ViewModel instance.
 --
 Creates a new instance of the specified class, with injection points resolved and defaults applied.
 --
-<.> xref:#instantiate__Class[instantiate(Class)]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-with semantic changes since 2.0 previous behavior is no longer guaranteed, instead consider use of @ _#detachedEntity(Class)_ or _#getOrCreate(Class)_ if applicable
-====
-
-Creates a new instance of the specified class, but does not persist it.
---
 
 == Members
 
@@ -109,10 +96,10 @@ Creates a new detached entity instance, with injection points resolved.
 
 Creates a new Mixin instance, with injection points resolved.
 
-[#viewModel__Class_String]
-=== viewModel(Class, String)
+[#viewModel__Class_Bookmark]
+=== viewModel(Class, Bookmark)
 
-Creates a new ViewModel instance, with injection points resolved, and initialized according to the given _mementoStr_
+Creates a new ViewModel instance, with injection points resolved, and initialized according to the given _bookmark_
 
 [#viewModel__Class]
 === viewModel(Class)
@@ -129,26 +116,6 @@ Resolves injection points for given ViewModel instance.
 
 Creates a new instance of the specified class, with injection points resolved and defaults applied.
 
-[#instantiate__Class]
-=== instantiate(Class)
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-with semantic changes since 2.0 previous behavior is no longer guaranteed, instead consider use of @ _#detachedEntity(Class)_ or _#getOrCreate(Class)_ if applicable
-====
-
-Creates a new instance of the specified class, but does not persist it.
-
-It is recommended that the object be initially instantiated using this method, though the framework will also handle the case when the object is simply _new()_ ed up. The benefits of using _#instantiate(Class)_ are:
-
-* any services will be injected into the object immediately (otherwise they will not be injected until the framework becomes aware of the object, typically when it is _RepositoryService#persist(Object) persist_ ed
-* the default value for any properties (usually as specified by `default _Xxx_ ()` supporting methods) will (since 2.0) be used
-* the `created()` callback will not be called.
-
-The corollary is: if your code never uses `default _Xxx_ ()` supporting methods or the `created()` callback, then you can alternatively just _new()_ up the object rather than call this method.
-
 include::hooks/FactoryService_010-implementation.adoc[]
 
 include::hooks/FactoryService_020-examples-and-usage.adoc[]
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/LocaleProvider.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/LanguageProvider.adoc
similarity index 59%
copy from antora/components/refguide-index/modules/applib/pages/index/services/i18n/LocaleProvider.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/services/i18n/LanguageProvider.adoc
index 7acf604..aa08d2d 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/LocaleProvider.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/LanguageProvider.adoc
@@ -1,31 +1,29 @@
-= LocaleProvider _(interface)_
+= LanguageProvider _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-One of a number of services that work together to provide support for i18n, its responsibility being simply to return the _Locale_ of the current user.
+Provides the preferred language _Locale_ of the current user.
+
+One of a number of services that work together to provide support for i18n.
 
 == API
 
 [source,java]
-.LocaleProvider.java
+.LanguageProvider.java
 ----
-interface LocaleProvider {
-  Locale getLocale()     // <.>
+interface LanguageProvider {
+  Optional<Locale> getPreferredLanguage()     // <.>
 }
 ----
 
-<.> xref:#getLocale__[getLocale()]
+<.> xref:#getPreferredLanguage__[getPreferredLanguage()]
 +
 --
-Returns the _Locale_ of the current user.
+Optionally returns the preferred language _Locale_ of the current user, based on whether there is a context with a current user object.
 --
 
 == Members
 
-[#getLocale__]
-=== getLocale()
-
-Returns the _Locale_ of the current user.
-
-include::hooks/LocaleProvider_010-implementation.adoc[]
+[#getPreferredLanguage__]
+=== getPreferredLanguage()
 
-include::hooks/LocaleProvider_020-examples-and-usage.adoc[]
+Optionally returns the preferred language _Locale_ of the current user, based on whether there is a context with a current user object.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslationContext.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslationContext.adoc
index ebc485c..5e2a8e5 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslationContext.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/i18n/TranslationContext.adoc
@@ -13,7 +13,6 @@ class TranslationContext {
   TranslationContext forMethod(final Method method)
   TranslationContext forEnum(final Enum<?> objectAsEnum)
   TranslationContext empty()
-  TranslationContext forTabIdentifier(Identifier identifier)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Execution.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Execution.adoc
index 6417c5b..2d1ff0d 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Execution.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/iactn/Execution.adoc
@@ -16,8 +16,8 @@ class Execution<T, E> {
   void setEvent(final E event)     // <.>
   Timestamp start(final ClockService clockService, final MetricsService metricsService)
   void setCompletedAt(final Timestamp completedAt, final MetricsService metricsService)     // <.>
-  void setReturned(Object returned)     // <.>
-  void setThrew(Exception threw)     // <.>
+  void setReturned(final Object returned)     // <.>
+  void setThrew(final Exception threw)     // <.>
   void setDto(final T executionDto)     // <.>
 }
 ----
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionContext.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionContext.adoc
index ae3e056..f6ecdcf 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionContext.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/iactnlayer/InteractionContext.adoc
@@ -10,13 +10,13 @@ Provides the user and scenario specific environment for an xref:refguide:applib:
 ----
 class InteractionContext {
   InteractionContext ofUserWithSystemDefaults(final UserMemento user)     // <.>
+  UserLocale getLocale()
   UnaryOperator<InteractionContext> switchUser(final UserMemento userMemento)     // <.>
   UnaryOperator<InteractionContext> switchClock(final VirtualClock clock)     // <.>
-  UnaryOperator<InteractionContext> switchLocale(final Locale locale)     // <.>
-  UnaryOperator<InteractionContext> switchTimeZone(final TimeZone timeZone)     // <.>
+  UnaryOperator<InteractionContext> switchLocale(final UserLocale locale)     // <.>
+  UnaryOperator<InteractionContext> switchTimeZone(final ZoneId timeZone)     // <.>
   UnaryOperator<T> combine(final UnaryOperator<T>... mappers)     // <.>
   UnaryOperator<T> combine(final Stream<UnaryOperator<T>> mappers)     // <.>
-  void replaceUser(final UserMemento user)     // <.>
 }
 ----
 
@@ -35,30 +35,25 @@ Convenience method for use with _org.apache.isis.applib.services.sudo.SudoServic
 --
 Convenience method for use with _org.apache.isis.applib.services.sudo.SudoService_ , returning a _UnaryOperator_ that will act upon the provided xref:refguide:applib:index/services/iactnlayer/InteractionContext.adoc[InteractionContext] to return the same but with the specified xref:refguide:applib:index/clock/VirtualClock.adoc[VirtualClock] .
 --
-<.> xref:#switchLocale__Locale[switchLocale(Locale)]
+<.> xref:#switchLocale__UserLocale[switchLocale(UserLocale)]
 +
 --
 Convenience method for use with _org.apache.isis.applib.services.sudo.SudoService_ , returning a _UnaryOperator_ that will act upon the provided xref:refguide:applib:index/services/iactnlayer/InteractionContext.adoc[InteractionContext] to return the same but with the specified _Locale_ .
 --
-<.> xref:#switchTimeZone__TimeZone[switchTimeZone(TimeZone)]
+<.> xref:#switchTimeZone__ZoneId[switchTimeZone(ZoneId)]
 +
 --
-Convenience method for use with _org.apache.isis.applib.services.sudo.SudoService_ , returning a _UnaryOperator_ that will act upon the provided xref:refguide:applib:index/services/iactnlayer/InteractionContext.adoc[InteractionContext] to return the same but with the specified _TimeZone_ .
+Convenience method for use with _org.apache.isis.applib.services.sudo.SudoService_ , returning a _UnaryOperator_ that will act upon the provided xref:refguide:applib:index/services/iactnlayer/InteractionContext.adoc[InteractionContext] to return the same but with the specified _ZoneId_ .
 --
 <.> xref:#combine__UnaryOperator[combine(UnaryOperator)]
 +
 --
-Convenience method to combine _UnaryOperator_ s, for example as per _#switchUser(UserMemento)_ and _#switchTimeZone(TimeZone)_ .
+Convenience method to combine _UnaryOperator_ s, for example as per _#switchUser(UserMemento)_ and _#switchTimeZone(ZoneId)_ .
 --
 <.> xref:#combine__Stream[combine(Stream)]
 +
 --
-Convenience method to combine _UnaryOperator_ s, for example as per _#switchUser(UserMemento)_ and _#switchTimeZone(TimeZone)_ . credit: https://stackoverflow.com/a/51065029/56880
---
-<.> xref:#replaceUser__UserMemento[replaceUser(UserMemento)]
-+
---
-For internal usage, not API.
+Convenience method to combine _UnaryOperator_ s, for example as per _#switchUser(UserMemento)_ and _#switchTimeZone(ZoneId)_ . credit: https://stackoverflow.com/a/51065029/56880
 --
 
 == Members
@@ -78,31 +73,24 @@ Convenience method for use with _org.apache.isis.applib.services.sudo.SudoServic
 
 Convenience method for use with _org.apache.isis.applib.services.sudo.SudoService_ , returning a _UnaryOperator_ that will act upon the provided xref:refguide:applib:index/services/iactnlayer/InteractionContext.adoc[InteractionContext] to return the same but with the specified xref:refguide:applib:index/clock/VirtualClock.adoc[VirtualClock] .
 
-[#switchLocale__Locale]
-=== switchLocale(Locale)
+[#switchLocale__UserLocale]
+=== switchLocale(UserLocale)
 
 Convenience method for use with _org.apache.isis.applib.services.sudo.SudoService_ , returning a _UnaryOperator_ that will act upon the provided xref:refguide:applib:index/services/iactnlayer/InteractionContext.adoc[InteractionContext] to return the same but with the specified _Locale_ .
 
-[#switchTimeZone__TimeZone]
-=== switchTimeZone(TimeZone)
+[#switchTimeZone__ZoneId]
+=== switchTimeZone(ZoneId)
 
-Convenience method for use with _org.apache.isis.applib.services.sudo.SudoService_ , returning a _UnaryOperator_ that will act upon the provided xref:refguide:applib:index/services/iactnlayer/InteractionContext.adoc[InteractionContext] to return the same but with the specified _TimeZone_ .
+Convenience method for use with _org.apache.isis.applib.services.sudo.SudoService_ , returning a _UnaryOperator_ that will act upon the provided xref:refguide:applib:index/services/iactnlayer/InteractionContext.adoc[InteractionContext] to return the same but with the specified _ZoneId_ .
 
 [#combine__UnaryOperator]
 === combine(UnaryOperator)
 
-Convenience method to combine _UnaryOperator_ s, for example as per _#switchUser(UserMemento)_ and _#switchTimeZone(TimeZone)_ .
+Convenience method to combine _UnaryOperator_ s, for example as per _#switchUser(UserMemento)_ and _#switchTimeZone(ZoneId)_ .
 
 NOTE: this implementation can result in heap pollution; better to use the _#combine(Stream) overload_ .
 
 [#combine__Stream]
 === combine(Stream)
 
-Convenience method to combine _UnaryOperator_ s, for example as per _#switchUser(UserMemento)_ and _#switchTimeZone(TimeZone)_ . credit: https://stackoverflow.com/a/51065029/56880
-
-[#replaceUser__UserMemento]
-=== replaceUser(UserMemento)
-
-For internal usage, not API.
-
-Instead, use _#withUser(UserMemento)_ , which honours the value semantics of this class.
+Convenience method to combine _UnaryOperator_ s, for example as per _#switchUser(UserMemento)_ and _#switchTimeZone(ZoneId)_ . credit: https://stackoverflow.com/a/51065029/56880
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/jaxb/JaxbService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/jaxb/JaxbService.adoc
index 184d0a3..cb99d68 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/jaxb/JaxbService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/jaxb/JaxbService.adoc
@@ -11,11 +11,11 @@ The default implementation automatically caches the JAXB marshallers by target c
 .JaxbService.java
 ----
 interface JaxbService {
-  Object fromXml(JAXBContext jaxbContext, String xml)     // <.>
+  Object fromXml(final JAXBContext jaxbContext, final String xml)     // <.>
   Object fromXml(JAXBContext jaxbContext, String xml, Map<String, Object> unmarshallerProperties)     // <.>
-  T fromXml(Class<T> domainClass, String xml)     // <.>
+  T fromXml(final Class<T> domainClass, final String xml)     // <.>
   T fromXml(Class<T> domainClass, String xml, Map<String, Object> unmarshallerProperties)     // <.>
-  String toXml(Object domainObject)     // <.>
+  String toXml(final Object domainObject)     // <.>
   String toXml(Object domainObject, Map<String, Object> marshallerProperties)     // <.>
   Map<String, String> toXsd(Object domainObject, IsisSchemas isisSchemas)     // <.>
 }
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/layout/LayoutServiceMenu.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/layout/LayoutServiceMenu.adoc
index 5d0414c..121efb2 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/layout/LayoutServiceMenu.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/layout/LayoutServiceMenu.adoc
@@ -10,12 +10,7 @@ Simply provides a UI to allow layouts (obtained from xref:refguide:applib:index/
 ----
 class LayoutServiceMenu {
   public static final String LOGICAL_TYPE_NAME;
-  LayoutServiceMenu()
-  Blob downloadLayouts(final Style style)
-  Style default0DownloadLayouts()
-  Clob downloadMenuBarsLayout(final String fileName, final MenuBarsService.Type type)
-  String default0DownloadMenuBarsLayout()
-  MenuBarsService.Type default1DownloadMenuBarsLayout()
+  LayoutServiceMenu(final LayoutService layoutService)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/locale/LocaleChoiceProvider.adoc
similarity index 82%
copy from antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/services/locale/LocaleChoiceProvider.adoc
index a7a9071..985c1ed 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/locale/LocaleChoiceProvider.adoc
@@ -1,15 +1,15 @@
-= MeService
+= LocaleChoiceProvider _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Provides supported _Locale_ choices.
+
 == API
 
 [source,java]
-.MeService.java
+.LocaleChoiceProvider.java
 ----
-class MeService {
-  public static final String LOGICAL_TYPE_NAME;
-  String iconName()
-  ApplicationUser me()
+interface LocaleChoiceProvider {
+  List<Locale> getAvailableLocales()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/message/MessageService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/message/MessageService.adoc
index 161825d..f343171 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/message/MessageService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/message/MessageService.adoc
@@ -83,7 +83,7 @@ In the Wicket viewer this is implemented as a "toast" message that automatically
 
 As _#informUser(String)_ , but with the message translated (if possible) to user's _java.util.Locale_ .
 
-More precisely, the locale is as provided by the configured _org.apache.isis.applib.services.i18n.LocaleProvider_ service. This should be the _java.util.Locale_ of the user making the current request.
+More precisely, the locale is as provided by the configured _org.apache.isis.applib.services.i18n.LanguageProvider_ service. This should be the _java.util.Locale_ of the user making the current request.
 
 [#informUser__TranslatableString_TranslationContext]
 === informUser(TranslatableString, TranslationContext)
@@ -104,7 +104,7 @@ In the Wicket viewer this is implemented as a "toast" message that must be expli
 
 As _#warnUser(String)_ , but with the message translated (if possible) to user's _java.util.Locale_ .
 
-More precisely, the locale is as provided by the configured _org.apache.isis.applib.services.i18n.LocaleProvider_ service. This should be the _java.util.Locale_ of the user making the current request.
+More precisely, the locale is as provided by the configured _org.apache.isis.applib.services.i18n.LanguageProvider_ service. This should be the _java.util.Locale_ of the user making the current request.
 
 [#warnUser__TranslatableString_TranslationContext]
 === warnUser(TranslatableString, TranslationContext)
@@ -125,7 +125,7 @@ In the Wicket viewer this is implemented as a toast (with a different colour) th
 
 As _#raiseError(String)_ , but with the message translated (if possible) to user's _java.util.Locale_ .
 
-More precisely, the locale is as provided by the configured _org.apache.isis.applib.services.i18n.LocaleProvider_ service. This should be the _java.util.Locale_ of the user making the current request.
+More precisely, the locale is as provided by the configured _org.apache.isis.applib.services.i18n.LanguageProvider_ service. This should be the _java.util.Locale_ of the user making the current request.
 
 [#raiseError__TranslatableString_TranslationContext]
 === raiseError(TranslatableString, TranslationContext)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/BeanSort.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/BeanSort.adoc
index 2a4c42c..847d273 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/BeanSort.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/BeanSort.adoc
@@ -20,6 +20,7 @@ enum BeanSort {
   VETOED     // <.>
   UNKNOWN
   boolean isManagedBeanContributing()
+  boolean isManagedBeanNotContributing()
   boolean isManagedBean()
   boolean isMixin()
   boolean isViewModel()
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/MetaModelServiceMenu.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/MetaModelServiceMenu.adoc
index 9dd7d66..dd10039 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/MetaModelServiceMenu.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/metamodel/MetaModelServiceMenu.adoc
@@ -10,23 +10,6 @@ Provides a UI to allow domain model metadata (obtained from xref:refguide:applib
 ----
 class MetaModelServiceMenu {
   public static final String LOGICAL_TYPE_NAME;
-  Blob downloadMetaModelCsv(final String csvFileName)
-  String default0DownloadMetaModelCsv()
-  Blob downloadMetaModelXml(final String fileName, final List<String> namespaces, final boolean ignoreInterfaces)
-  String validateDownloadMetaModelXml(final String fileName, final List<String> namespacePrefixes, final boolean ignoreInterfaces)
-  String default0DownloadMetaModelXml()
-  List<String> choices1DownloadMetaModelXml()
-  boolean default2DownloadMetaModelXml()
-  Blob downloadMetaModelAscii(final String fileName, final List<String> namespaces, final boolean ignoreInterfaces)
-  String validateDownloadMetaModelAscii(final String fileName, final List<String> namespacePrefixes, final boolean ignoreInterfaces)
-  String default0DownloadMetaModelAscii()
-  List<String> choices1DownloadMetaModelAscii()
-  boolean default2DownloadMetaModelAscii()
-  Blob downloadMetaModelDiff(final String fileName, final List<String> namespaces, final boolean ignoreInterfaces, Blob zippedMetamodelBlob)
-  String validateDownloadMetaModelDiff(final String fileName, final List<String> namespacePrefixes, final boolean ignoreInterfaces, final Blob rightMetamodelBlob)
-  String default0DownloadMetaModelDiff()
-  List<String> choices1DownloadMetaModelDiff()
-  boolean default2DownloadMetaModelDiff()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/QueryResultsCache.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/QueryResultsCache.adoc
index e267036..3d8c3da 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/QueryResultsCache.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/queryresultscache/QueryResultsCache.adoc
@@ -14,12 +14,12 @@ For example, code that makes a repository call many times within a loop can be p
 ----
 class QueryResultsCache {
   T execute(final Callable<T> callable, final Class<?> callingClass, final String methodName, final Object... keys)     // <.>
-  R execute(MethodReferences.Call0<? extends R> action, Class<?> callingClass, String methodName)
-  R execute(MethodReferences.Call1<? extends R, A0> action, Class<?> callingClass, String methodName, A0 arg0)
-  R execute(MethodReferences.Call2<? extends R, A0, A1> action, Class<?> callingClass, String methodName, A0 arg0, A1 arg1)
-  R execute(MethodReferences.Call3<? extends R, A0, A1, A2> action, Class<?> callingClass, String methodName, A0 arg0, A1 arg1, A2 arg2)
-  R execute(MethodReferences.Call4<? extends R, A0, A1, A2, A3> action, Class<?> callingClass, String methodName, A0 arg0, A1 arg1, A2 arg2, A3 arg3)
-  R execute(MethodReferences.Call5<? extends R, A0, A1, A2, A3, A4> action, Class<?> callingClass, String methodName, A0 arg0, A1 arg1, A2 arg2, A3 arg3, A4 arg4)
+  R execute(final MethodReferences.Call0<? extends R> action, final Class<?> callingClass, final String methodName)
+  R execute(final MethodReferences.Call1<? extends R, A0> action, final Class<?> callingClass, final String methodName, final A0 arg0)
+  R execute(final MethodReferences.Call2<? extends R, A0, A1> action, final Class<?> callingClass, final String methodName, final A0 arg0, final A1 arg1)
+  R execute(final MethodReferences.Call3<? extends R, A0, A1, A2> action, final Class<?> callingClass, final String methodName, final A0 arg0, final A1 arg1, final A2 arg2)
+  R execute(final MethodReferences.Call4<? extends R, A0, A1, A2, A3> action, final Class<?> callingClass, final String methodName, final A0 arg0, final A1 arg1, final A2 arg2, final A3 arg3)
+  R execute(final MethodReferences.Call5<? extends R, A0, A1, A2, A3, A4> action, final Class<?> callingClass, final String methodName, final A0 arg0, final A1 arg1, final A2 arg2, final A3 arg3, final A4 arg4)
   void onTransactionEnded()     // <.>
   void destroy()
 }
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/repository/RepositoryService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/repository/RepositoryService.adoc
index 0d9339b..a53d41a 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/repository/RepositoryService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/repository/RepositoryService.adoc
@@ -15,7 +15,7 @@ interface RepositoryService {
   T detachedEntity(T entity)     // <.>
   T persist(T domainObject)     // <.>
   T persistAndFlush(T domainObject)     // <.>
-  void persistAndFlush(Object... domainObjects)     // <.>
+  void persistAndFlush(final Object... domainObjects)     // <.>
   void remove(Object domainObject)     // <.>
   void removeAndFlush(Object domainObject)     // <.>
   void removeAll(Class<T> cls)     // <.>
@@ -30,8 +30,6 @@ interface RepositoryService {
   Optional<T> firstMatch(Query<T> query)     // <.>
   T refresh(T pojo)     // <.>
   T detach(T entity)     // <.>
-  T detachedEntity(Class<T> ofType)     // <.>
-  T instantiate(Class<T> ofType)     // <.>
 }
 ----
 
@@ -130,30 +128,6 @@ Reloads the domain entity from the database.
 --
 Explicitly detaches the entity from the current persistence session.
 --
-<.> xref:#detachedEntity__Class[detachedEntity(Class)]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-as it requires that the domain entity has a no-arg constructor. Use _#detachedEntity(Object)_ instead.
-====
-
-Overload of _#detachedEntity(Object)_ , but will also instantiate the domain class first.
---
-<.> xref:#instantiate__Class[instantiate(Class)]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-as it requires that the domain entity has a no-arg constructor. Use _#detachedEntity(Object)_ instead.
-====
-
-Equivalent to _#detachedEntity(Class)_ .
---
 
 == Members
 
@@ -304,30 +278,6 @@ Explicitly detaches the entity from the current persistence session.
 
 This allows the entity to be read from even after the PersistenceSession that obtained it has been closed.
 
-[#detachedEntity__Class]
-=== detachedEntity(Class)
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-as it requires that the domain entity has a no-arg constructor. Use _#detachedEntity(Object)_ instead.
-====
-
-Overload of _#detachedEntity(Object)_ , but will also instantiate the domain class first.
-
-[#instantiate__Class]
-=== instantiate(Class)
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-as it requires that the domain entity has a no-arg constructor. Use _#detachedEntity(Object)_ instead.
-====
-
-Equivalent to _#detachedEntity(Class)_ .
-
 include::hooks/RepositoryService_010-implementation.adoc[]
 
 include::hooks/RepositoryService_020-examples-and-usage.adoc[]
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/sitemap/SitemapService.adoc
similarity index 82%
copy from antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/services/sitemap/SitemapService.adoc
index a7a9071..412d26b 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/sitemap/SitemapService.adoc
@@ -1,15 +1,15 @@
-= MeService
+= SitemapService _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Provides a site-map based on the menu bar layout.
+
 == API
 
 [source,java]
-.MeService.java
+.SitemapService.java
 ----
-class MeService {
-  public static final String LOGICAL_TYPE_NAME;
-  String iconName()
-  ApplicationUser me()
+interface SitemapService {
+  String toSitemapAdoc(String title)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/secondary/ui/CommandReplayOnSecondaryService.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/sitemap/SitemapServiceMenu.adoc
similarity index 73%
copy from antora/components/refguide-index/modules/extensions/pages/index/commandreplay/secondary/ui/CommandReplayOnSecondaryService.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/services/sitemap/SitemapServiceMenu.adoc
index 3dab90a..0a6c619 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/secondary/ui/CommandReplayOnSecondaryService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/sitemap/SitemapServiceMenu.adoc
@@ -1,15 +1,16 @@
-= CommandReplayOnSecondaryService
+= SitemapServiceMenu
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Simply provides a UI to allow a site-map (obtained from xref:refguide:applib:index/services/sitemap/SitemapService.adoc[SitemapService] to be downloaded within the UI.
+
 == API
 
 [source,java]
-.CommandReplayOnSecondaryService.java
+.SitemapServiceMenu.java
 ----
-class CommandReplayOnSecondaryService {
+class SitemapServiceMenu {
   public static final String LOGICAL_TYPE_NAME;
-  CommandModel findMostRecentReplayed()
-  void uploadCommands(final Clob commandsDtoAsXml)
+  SitemapServiceMenu(final SitemapService sitemapService)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateMenu.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateMenu.adoc
index 3c102c6..c479642 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateMenu.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateMenu.adoc
@@ -13,40 +13,6 @@ All of the actions provided here are restricted to PROTOTYPE mode only; this fea
 class ImpersonateMenu {
   // deliberately not part of isis.applib
 public static final String LOGICAL_TYPE_NAME;
-  void impersonate(final String userName)     // <.>
-  boolean hideImpersonate()
-  String disableImpersonate()
-  void impersonateWithRoles(final String userName, final List<String> roleNames, final String multiTenancyToken)     // <.>
-  boolean hideImpersonateWithRoles()
-  String disableImpersonateWithRoles()
-  List<String> choices0ImpersonateWithRoles()
-  List<String> choices1ImpersonateWithRoles(final String userName)
-  List<String> default1ImpersonateWithRoles(final String userName)
-  String default2ImpersonateWithRoles(final String userName, final List<String> roleNames)
 }
 ----
 
-<.> xref:#impersonate__String[impersonate(String)]
-+
---
-Simple implementation that is surfaced if there is no advisor.
---
-<.> xref:#impersonateWithRoles__String_List_String[impersonateWithRoles(String, List, String)]
-+
---
-Impersonate a selected user, either using their current roles or with a specific set of roles.
---
-
-== Members
-
-[#impersonate__String]
-=== impersonate(String)
-
-Simple implementation that is surfaced if there is no advisor.
-
-[#impersonateWithRoles__String_List_String]
-=== impersonateWithRoles(String, List, String)
-
-Impersonate a selected user, either using their current roles or with a specific set of roles.
-
-This more sophisticated implementation is only available if there is an xref:refguide:applib:index/services/user/ImpersonateMenuAdvisor.adoc[ImpersonateMenuAdvisor] implementation to provide the choices.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateMenuAdvisor.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateMenuAdvisor.adoc
index 43448cf..d9a8a3f 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateMenuAdvisor.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateMenuAdvisor.adoc
@@ -1,9 +1,9 @@
 = ImpersonateMenuAdvisor _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Enables _ImpersonateMenu#impersonateWithRoles(String, List, String)_ , to provides choices for user and roles.
+Enables _ImpersonateMenu.impersonateWithRoles#act(String, List, String)_ , to provides choices for user and roles.
 
-This will result in the simpler _ImpersonateMenu#impersonate(String)_ (which simply allows a username to be specified, with no roles) being hidden.
+This will result in the simpler _ImpersonateMenu.impersonate#act(String)_ (which simply allows a username to be specified, with no roles) being hidden.
 
 == API
 
@@ -46,25 +46,25 @@ Returns the multi-tenancy token of the specified username.
 
 Returns the names of all known users.
 
-The xref:refguide:applib:index/services/user/ImpersonateMenu.adoc[ImpersonateMenu] uses this to provide a choices (drop-down) for the username (string) argument of _ImpersonateMenu#impersonateWithRoles(String, List, String)_ .
+The xref:refguide:applib:index/services/user/ImpersonateMenu.adoc[ImpersonateMenu] uses this to provide a choices (drop-down) for the username (string) argument of _ImpersonateMenu.impersonateWithRoles#act(String, List, String)_ .
 
 [#allRoleNames__]
 === allRoleNames()
 
 Returns the names of all known roles.
 
-The xref:refguide:applib:index/services/user/ImpersonateMenu.adoc[ImpersonateMenu] uses this to provide a choices (drop-down) for the rolenames (list) argument of _ImpersonateMenu#impersonateWithRoles(String, List, String)_ .
+The xref:refguide:applib:index/services/user/ImpersonateMenu.adoc[ImpersonateMenu] uses this to provide a choices (drop-down) for the rolenames (list) argument of _ImpersonateMenu.impersonateWithRoles#act(String, List, String)_ .
 
 [#roleNamesFor__String]
 === roleNamesFor(String)
 
 Returns the names of the roles of the specified username.
 
-The xref:refguide:applib:index/services/user/ImpersonateMenu.adoc[ImpersonateMenu] uses this to select the defaults for the rolenames (list) argument of _ImpersonateMenu#impersonateWithRoles(String, List, String)_ .
+The xref:refguide:applib:index/services/user/ImpersonateMenu.adoc[ImpersonateMenu] uses this to select the defaults for the rolenames (list) argument of _ImpersonateMenu.impersonateWithRoles#act(String, List, String)_ .
 
 [#multiTenancyTokenFor__String]
 === multiTenancyTokenFor(String)
 
 Returns the multi-tenancy token of the specified username.
 
-The xref:refguide:applib:index/services/user/ImpersonateMenu.adoc[ImpersonateMenu] uses this to select the defaults for the rolenames (list) argument of _ImpersonateMenu#impersonateWithRoles(String, List, String)_ .
+The xref:refguide:applib:index/services/user/ImpersonateMenu.adoc[ImpersonateMenu] uses this to select the defaults for the rolenames (list) argument of _ImpersonateMenu.impersonateWithRoles#act(String, List, String)_ .
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateStopMenu.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateStopMenu.adoc
index f2df99a..c951c90 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateStopMenu.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/user/ImpersonateStopMenu.adoc
@@ -13,8 +13,6 @@ All of the actions provided here are restricted to PROTOTYPE mode only; this fea
 class ImpersonateStopMenu {
   // deliberately IS part of isis.applib
 public static final String LOGICAL_TYPE_NAME;
-  void stopImpersonating()
-  boolean hideStopImpersonating()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/user/UserMemento.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/user/UserMemento.adoc
index dad3b4e..bd3f796 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/user/UserMemento.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/user/UserMemento.adoc
@@ -17,11 +17,12 @@ class UserMemento {
   UserMemento ofNameAndRoleNames(final String name, final List<String> roleNames)     // <.>
   UserMemento ofNameAndRoleNames(final String name, final Stream<String> roleNames)     // <.>
   List<RoleMemento> getRoles()     // <.>
-  UserMemento withRoleAdded(String role)
+  UserMemento withRoleAdded(final String role)
   boolean isCurrentUser(final String userName)     // <.>
   Stream<String> streamRoleNames()
   boolean hasRoleName(final String roleName)
   UserMementoBuilder asBuilder()
+  UserLocale asUserLocale()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/userui/UserMenu.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/userui/UserMenu.adoc
index 4e9e3a7..adb3016 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/userui/UserMenu.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/userui/UserMenu.adoc
@@ -8,8 +8,6 @@
 ----
 class UserMenu {
   public static final String LOGICAL_TYPE_NAME;
-  UserMemento me()
-  String disableMe()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/WrapperFactory.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/WrapperFactory.adoc
index 8641b2e..57ca3db 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/WrapperFactory.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/WrapperFactory.adoc
@@ -30,12 +30,12 @@ If the object has (see _#isWrapper(Object)_ already been wrapped), then should j
 interface WrapperFactory {
   T wrap(T domainObject, SyncControl syncControl)     // <.>
   T wrap(T domainObject)     // <.>
-  T wrapMixin(Class<T> mixinClass, Object mixedIn, SyncControl syncControl)     // <.>
-  T wrapMixin(Class<T> mixinClass, Object mixedIn)     // <.>
+  T wrapMixin(Class<T> mixinClass, Object mixee, SyncControl syncControl)     // <.>
+  T wrapMixin(Class<T> mixinClass, Object mixee)     // <.>
   T unwrap(T possibleWrappedDomainObject)     // <.>
   boolean isWrapper(T possibleWrappedDomainObject)     // <.>
   T asyncWrap(T domainObject, AsyncControl<R> asyncControl)     // <.>
-  T asyncWrapMixin(Class<T> mixinClass, Object mixedIn, AsyncControl<R> asyncControl)     // <.>
+  T asyncWrapMixin(Class<T> mixinClass, Object mixee, AsyncControl<R> asyncControl)     // <.>
   List<InteractionListener> getListeners()     // <.>
   boolean addInteractionListener(InteractionListener listener)     // <.>
   boolean removeInteractionListener(InteractionListener listener)     // <.>
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/control/AsyncControl.adoc b/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/control/AsyncControl.adoc
index 56d4c5c..4d1c8a7 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/control/AsyncControl.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/services/wrapper/control/AsyncControl.adoc
@@ -14,13 +14,13 @@ class AsyncControl<R> {
   AsyncControl<Void> returningVoid()     // <.>
   AsyncControl<X> returning(final Class<X> cls)     // <.>
   AsyncControl<R> withSkipRules()     // <.>
-  AsyncControl with(ExceptionHandler exceptionHandler)     // <.>
-  AsyncControl<R> with(ExecutorService executorService)     // <.>
+  AsyncControl with(final ExceptionHandler exceptionHandler)     // <.>
+  AsyncControl<R> with(final ExecutorService executorService)     // <.>
   AsyncControl<R> withClock(final VirtualClock clock)
   AsyncControl<R> withLocale(final Locale locale)
-  AsyncControl<R> withTimeZone(final TimeZone timeZone)
+  AsyncControl<R> withTimeZone(final ZoneId timeZone)
   AsyncControl<R> withUser(final UserMemento user)     // <.>
-  void setFuture(Future<R> future)     // <.>
+  void setFuture(final Future<R> future)     // <.>
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/util/Enums.adoc b/antora/components/refguide-index/modules/applib/pages/index/util/Enums.adoc
index e707f86..277dac1 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/util/Enums.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/util/Enums.adoc
@@ -7,12 +7,13 @@
 .Enums.java
 ----
 class Enums {
-  String getFriendlyNameOf(Enum<?> anEnum)
-  String getFriendlyNameOf(String anEnumName)
-  String getEnumNameFromFriendly(String anEnumFriendlyName)
+  String getFriendlyNameOf(final Enum<?> anEnum)
+  String getFriendlyNameOf(final String anEnumName)
+  String getEnumNameFromFriendly(final String anEnumFriendlyName)
   String enumToHttpHeader(final Enum<?> anEnum)
   String enumNameToHttpHeader(final String name)
   String enumToCamelCase(final Enum<?> anEnum)
+  Optional<T> parseFriendlyName(final Class<T> correspondingClass, final String text)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/util/ObjectContracts.adoc b/antora/components/refguide-index/modules/applib/pages/index/util/ObjectContracts.adoc
index 9f4991c..903c45e 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/util/ObjectContracts.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/util/ObjectContracts.adoc
@@ -9,15 +9,15 @@ Provides fluent composition for Objects' equals, hashCode and toString.
 .ObjectContracts.java
 ----
 class ObjectContracts {
-  ToString<T> toString(String name, Function<T, ?> getter)
-  Equality<T> checkEquals(Function<T, ?> getter)
-  Hashing<T> hashing(Function<T, ?> getter)
-  ObjectContract<T> contract(Class<T> objectClass)
-  ObjectContract<T> parse(Class<T> target, String propertyNames)
-  String toString(T obj, String propertyNames)
-  boolean equals(T obj, Object other, String propertyNames)
-  int hashCode(Object obj, String propertyNames)
-  int compare(T obj, T other, String propertyNames)
+  ToString<T> toString(final String name, final Function<T, ?> getter)
+  Equality<T> checkEquals(final Function<T, ?> getter)
+  Hashing<T> hashing(final Function<T, ?> getter)
+  ObjectContract<T> contract(final Class<T> objectClass)
+  ObjectContract<T> parse(final Class<T> target, final String propertyNames)
+  String toString(final T obj, final String propertyNames)
+  boolean equals(final T obj, final Object other, final String propertyNames)
+  int hashCode(final Object obj, final String propertyNames)
+  int compare(final T obj, final T other, final String propertyNames)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/util/schema/CommonDtoUtils.adoc b/antora/components/refguide-index/modules/applib/pages/index/util/schema/CommonDtoUtils.adoc
index 13837ab..07ea06c 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/util/schema/CommonDtoUtils.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/util/schema/CommonDtoUtils.adoc
@@ -7,23 +7,8 @@
 .CommonDtoUtils.java
 ----
 class CommonDtoUtils {
-  public static final Function<ParamDto, String> PARAM_DTO_TO_NAME;
-  public static final Function<ParamDto, ValueType> PARAM_DTO_TO_TYPE;
-  public static final Map<Class<?>, ValueType> valueTypeByClass;
-  ValueType asValueType(final Class<?> type)
-  ValueDto newValueDto(final ValueType valueType, final Object value, final BookmarkService bookmarkService)
-  T setValueOn(final T valueWithTypeDto, final ValueType valueType, final Object value, final BookmarkService bookmarkService)
-  T setValueOnNonScalar(final T valueWithTypeDto, final ValueType elementValueType, final Object value, final BookmarkService bookmarkService)
-  T setValueOn(final T valueDto, final ValueType valueType, final Object pojo, final BookmarkService bookmarkService)
-  T getValue(final ValueDto valueDto, final ValueType valueType)
-  ValueWithTypeDto newValueWithTypeDto(final Class<?> type, final Object val, final BookmarkService bookmarkService)
-  T getValue(final ValueWithTypeDto valueWithTypeDto)
-  ParamDto newParamDto(final String parameterName, final Class<?> parameterType, final Object arg, final BookmarkService bookmarkService)
-  ParamDto newParamDtoNonScalar(final String parameterName, final Class<?> parameterElementType, final Object arg, final BookmarkService bookmarkService)
-  T getValue(final ParamDto paramDto)
   String getMapValue(final MapDto mapDto, final String key)
   void putMapKeyValue(final MapDto mapDto, final String key, final String value)
-  boolean isValueType(Class<?> type)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/util/schema/InteractionDtoUtils.adoc b/antora/components/refguide-index/modules/applib/pages/index/util/schema/InteractionDtoUtils.adoc
index aeff274..8ea574f 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/util/schema/InteractionDtoUtils.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/util/schema/InteractionDtoUtils.adoc
@@ -19,8 +19,6 @@ class InteractionDtoUtils {
   ActionInvocationDto newActionInvocation(final int sequence, final Bookmark targetBookmark, final String targetTitle, final String actionIdentifier, final List<ParamDto> parameterDtos, final String user)
   PropertyEditDto newPropertyEdit(final int sequence, final Bookmark targetBookmark, final String targetTitle, final String propertyIdentifier, final ValueWithTypeDto newValueDto, final String user)
   String deriveLogicalMemberId(final Bookmark bookmark, final String memberId)
-  void addParamArg(final InteractionDto interactionDto, final String parameterName, final Class<?> parameterType, final Object arg, final BookmarkService bookmarkService)
-  void addReturn(final ActionInvocationDto invocationDto, final Class<?> returnType, final Object result, final BookmarkService bookmarkService)     // <.>
   List<ParamDto> getParameters(final ActionInvocationDto ai)
   List<String> getParameterNames(final ActionInvocationDto ai)
   List<ValueType> getParameterTypes(final ActionInvocationDto ai)
@@ -29,7 +27,6 @@ class InteractionDtoUtils {
   String getParameterName(final ActionInvocationDto ai, final int paramNum)
   ValueType getParameterType(final ActionInvocationDto ai, final int paramNum)
   boolean isNull(final ActionInvocationDto ai, final int paramNum)
-  T getParameterArgValue(final ActionInvocationDto ai, final int paramNum)
   void dump(final InteractionDto ixnDto, final PrintStream out)
 }
 ----
@@ -44,7 +41,6 @@ Creates a _InteractionDto_ (serializable to XML) for the provided xref:refguide:
 --
 Creates a _InteractionDto_ (serializable to XML) for the provided xref:refguide:applib:index/services/iactn/Execution.adoc[Execution] (the applib object).
 --
-<.> xref:#addReturn__ActionInvocationDto_Class_Object_BookmarkService[addReturn(ActionInvocationDto, Class, Object, BookmarkService)]
 
 == Members
 
@@ -57,6 +53,3 @@ Creates a _InteractionDto_ (serializable to XML) for the provided xref:refguide:
 === newInteractionDto(Execution, Strategy)
 
 Creates a _InteractionDto_ (serializable to XML) for the provided xref:refguide:applib:index/services/iactn/Execution.adoc[Execution] (the applib object).
-
-[#addReturn__ActionInvocationDto_Class_Object_BookmarkService]
-=== addReturn(ActionInvocationDto, Class, Object, BookmarkService)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/Clob.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/Clob.adoc
index 70d7130..29d4f7f 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/value/Clob.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/Clob.adoc
@@ -15,13 +15,13 @@ Conceptually you can consider it as a set of characters (an RTF or XML document,
 .Clob.java
 ----
 class Clob {
-  Clob(String name, String primaryType, String subType, char[] chars)
-  Clob(String name, String mimeTypeBase, char[] chars)
-  Clob(String name, MimeType mimeType, char[] chars)
-  Clob(String name, String primaryType, String subType, CharSequence chars)
-  Clob(String name, String mimeTypeBase, CharSequence chars)
-  Clob(String name, MimeType mimeType, CharSequence chars)
-  Clob of(String name, CommonMimeType mimeType, CharSequence content)     // <.>
+  Clob(final String name, final String primaryType, final String subType, final char[] chars)
+  Clob(final String name, final String mimeTypeBase, final char[] chars)
+  Clob(final String name, final MimeType mimeType, final char[] chars)
+  Clob(final String name, final String primaryType, final String subType, final CharSequence chars)
+  Clob(final String name, final String mimeTypeBase, final CharSequence chars)
+  Clob(final String name, final MimeType mimeType, final CharSequence chars)
+  Clob of(final String name, final CommonMimeType mimeType, final CharSequence content)     // <.>
   String getName()
   MimeType getMimeType()
   CharSequence getChars()
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/LocalResourcePath.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/LocalResourcePath.adoc
index 2f822bb..1aa75ba 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/value/LocalResourcePath.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/LocalResourcePath.adoc
@@ -15,12 +15,12 @@ xref:refguide:applib:index/value/OpenUrlStrategy.adoc[OpenUrlStrategy] gives con
 class LocalResourcePath {
   LocalResourcePath(final String path)
   LocalResourcePath(final String path, final OpenUrlStrategy openUrlStrategy)
-  Object getValue()
-  String getPath()
+  String getValue()
+  String getEffectivePath(final UnaryOperator<String> contextPathPrepender)
   String toString()
-  boolean equals(Object obj)
+  boolean equals(final Object obj)
   int hashCode()
-  boolean isEqualTo(LocalResourcePath other)
+  boolean isEqualTo(final LocalResourcePath other)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/Markup.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/Markup.adoc
index cd6c4fe..c3d7b12 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/value/Markup.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/Markup.adoc
@@ -1,7 +1,7 @@
 = Markup
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Intended to be used as a read-only property, to render arbitrary HTML markup into the user interface.
+Intended to be used as a read-only property, to render plain HTML.
 
 == API
 
@@ -10,26 +10,10 @@ Intended to be used as a read-only property, to render arbitrary HTML markup int
 ----
 class Markup {
   Markup()
-  Markup(String html)
+  Markup(final String html)
+  Markup valueOf(final String html)
   String asHtml()
-  boolean isEqualTo(final Markup other)
-  String title()
-  boolean equals(final Object obj)
-  int hashCode()
   String toString()
-  Markup valueOfHtml(String html)     // <.>
 }
 ----
 
-<.> xref:#valueOfHtml__String[valueOfHtml(String)]
-+
---
-syntactic sugar
---
-
-== Members
-
-[#valueOfHtml__String]
-=== valueOfHtml(String)
-
-syntactic sugar
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/Password.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/Password.adoc
index d75b527..05d8add 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/value/Password.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/Password.adoc
@@ -9,7 +9,7 @@ Represents a password that will not displayed to the UI but can be persisted.
 .Password.java
 ----
 class Password {
-  Password(String password)
+  Password(final String password)
   Password of(final String password)
   boolean checkPassword(final String password)
   String toString()
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/Converter.adoc
similarity index 81%
copy from antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/value/semantics/Converter.adoc
index a7a9071..bfdf9f4 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/Converter.adoc
@@ -1,15 +1,16 @@
-= MeService
+= Converter _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
+Provides forth and back conversion between 2 types.
+
 == API
 
 [source,java]
-.MeService.java
+.Converter.java
 ----
-class MeService {
-  public static final String LOGICAL_TYPE_NAME;
-  String iconName()
-  ApplicationUser me()
+interface Converter<T, D> {
+  T fromDelegateValue(D value)
+  D toDelegateValue(T value)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/adapters/DefaultsProvider.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/DefaultsProvider.adoc
similarity index 100%
rename from antora/components/refguide-index/modules/applib/pages/index/adapters/DefaultsProvider.adoc
rename to antora/components/refguide-index/modules/applib/pages/index/value/semantics/DefaultsProvider.adoc
diff --git a/antora/components/refguide-index/modules/applib/pages/index/adapters/EncoderDecoder.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/EncoderDecoder.adoc
similarity index 100%
rename from antora/components/refguide-index/modules/applib/pages/index/adapters/EncoderDecoder.adoc
rename to antora/components/refguide-index/modules/applib/pages/index/value/semantics/EncoderDecoder.adoc
diff --git a/antora/components/refguide-index/modules/applib/pages/index/adapters/EncodingException.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/EncodingException.adoc
similarity index 100%
rename from antora/components/refguide-index/modules/applib/pages/index/adapters/EncodingException.adoc
rename to antora/components/refguide-index/modules/applib/pages/index/value/semantics/EncodingException.adoc
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/semantics/OrderRelation.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/OrderRelation.adoc
new file mode 100644
index 0000000..2649410
--- /dev/null
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/OrderRelation.adoc
@@ -0,0 +1,45 @@
+= OrderRelation _(interface)_
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+Provides an ordering relation for a given value-type.
+
+Does supports an _epsilon_ parameter (measure of accuracy), which has different meaning, depending on context
+
+* Numbers: accuracy is usually given as number eg. _1E-12_ - in case of integers should default to _0_
+* Dates (temporal): accuracy is usually given as a number of days - should default to _0_
+* Times (temporal): accuracy is usually given as a number of seconds - eg. _1E-3_ for millisecond resolution
+
+== API
+
+[source,java]
+.OrderRelation.java
+----
+interface OrderRelation<T, D> {
+  D epsilon()     // <.>
+  int compare(T a, T b, D epsilon)     // <.>
+  int compare(final T a, final T b)
+  boolean equals(T a, T b, D epsilon)     // <.>
+  boolean equals(final T a, final T b)
+}
+----
+
+<.> xref:#epsilon__[epsilon()]
++
+--
+Default epsilon (measure of accuracy).
+--
+<.> xref:#compare__T_T_D[compare(T, T, D)]
+<.> xref:#equals__T_T_D[equals(T, T, D)]
+
+== Members
+
+[#epsilon__]
+=== epsilon()
+
+Default epsilon (measure of accuracy).
+
+[#compare__T_T_D]
+=== compare(T, T, D)
+
+[#equals__T_T_D]
+=== equals(T, T, D)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/adapters/Parser.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/Parser.adoc
similarity index 66%
rename from antora/components/refguide-index/modules/applib/pages/index/adapters/Parser.adoc
rename to antora/components/refguide-index/modules/applib/pages/index/value/semantics/Parser.adoc
index 854e452..bf952f5 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/adapters/Parser.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/Parser.adoc
@@ -9,7 +9,7 @@ Specifically, this interface embodies three related capabilities:
 * to provide a string representation of the object, for use as its title.
 * to indicate the typical length of such a string representation.
 
-For custom-written (as opposed to third-party) value types, the ability for the xref:refguide:applib:index/adapters/Parser.adoc[Parser] to provide a title responsibilities overlap with other conventions for domain objects. Specifically, normally we write a `title()` method to return a title. In such cases a typical implementation of xref:refguide:applib:index/adapters/Parser.adoc[Parser] would just delegate to the value type itself to obtain the title (ie invoking the `title()` method di [...]
+For custom-written (as opposed to third-party) value types, the ability for the xref:refguide:applib:index/value/semantics/Parser.adoc[Parser] to provide a title responsibilities overlap with other conventions for domain objects. Specifically, normally we write a `title()` method to return a title. In such cases a typical implementation of xref:refguide:applib:index/value/semantics/Parser.adoc[Parser] would just delegate to the value type itself to obtain the title (ie invoking the `titl [...]
 
 For third-party value types, eg seeTime-and-Moneythere is no ability to write `title()` methods; so this is the main reason that this interface has to deal with titles and lengths.
 
@@ -25,39 +25,28 @@ Whatever the class that implements this interface, it must also expose either a
 .Parser.java
 ----
 interface Parser<T> {
-  T parseTextEntry(Object contextPojo, String entry)     // <.>
+  String parseableTextRepresentation(ValueSemanticsProvider.Context context, T value)     // <.>
+  T parseTextRepresentation(ValueSemanticsProvider.Context context, String text)     // <.>
   int typicalLength()     // <.>
-  String displayTitleOf(T object)     // <.>
-  String displayTitleOf(T object, String usingMask)     // <.>
-  String parseableTitleOf(T existing)     // <.>
   int maxLength()     // <.>
+  String getPattern(final ValueSemanticsProvider.Context context)
 }
 ----
 
-<.> xref:#parseTextEntry__Object_String[parseTextEntry(Object, String)]
+<.> xref:#parseableTextRepresentation__ValueSemanticsProvider.Context_T[parseableTextRepresentation(ValueSemanticsProvider.Context, T)]
 +
 --
-Parses a string to an instance of the object.
+A title for the object that is valid but which may be easier to edit than the title provided by a `TitleFacet` . (bijective)
 --
-<.> xref:#typicalLength__[typicalLength()]
-+
---
-The typical length of objects that can be parsed.
---
-<.> xref:#displayTitleOf__T[displayTitleOf(T)]
+<.> xref:#parseTextRepresentation__ValueSemanticsProvider.Context_String[parseTextRepresentation(ValueSemanticsProvider.Context, String)]
 +
 --
-The title of the object.
+Parses a string to an instance of the object. (bijective)
 --
-<.> xref:#displayTitleOf__T_String[displayTitleOf(T, String)]
-+
---
-The title of the object using a mask.
---
-<.> xref:#parseableTitleOf__T[parseableTitleOf(T)]
+<.> xref:#typicalLength__[typicalLength()]
 +
 --
-A title for the object that is valid but which may be easier to edit than the title provided by a `TitleFacet` .
+The typical length of objects that can be parsed.
 --
 <.> xref:#maxLength__[maxLength()]
 +
@@ -67,35 +56,23 @@ The max length of objects that can be parsed (if any). A return type of -1 corre
 
 == Members
 
-[#parseTextEntry__Object_String]
-=== parseTextEntry(Object, String)
+[#parseableTextRepresentation__ValueSemanticsProvider.Context_T]
+=== parseableTextRepresentation(ValueSemanticsProvider.Context, T)
 
-Parses a string to an instance of the object.
+A title for the object that is valid but which may be easier to edit than the title provided by a `TitleFacet` . (bijective)
 
-Note that here the implementing class is acting as a factory for itself.
+The idea here is that the viewer can display a parseable title for an existing object when, for example, the user initially clicks in the field. So, a date might be rendered via a `TitleFacet` as `May 2, 2007` , but its editable form might be `20070502` .
+
+[#parseTextRepresentation__ValueSemanticsProvider.Context_String]
+=== parseTextRepresentation(ValueSemanticsProvider.Context, String)
+
+Parses a string to an instance of the object. (bijective)
 
 [#typicalLength__]
 === typicalLength()
 
 The typical length of objects that can be parsed.
 
-[#displayTitleOf__T]
-=== displayTitleOf(T)
-
-The title of the object.
-
-[#displayTitleOf__T_String]
-=== displayTitleOf(T, String)
-
-The title of the object using a mask.
-
-[#parseableTitleOf__T]
-=== parseableTitleOf(T)
-
-A title for the object that is valid but which may be easier to edit than the title provided by a `TitleFacet` .
-
-The idea here is that the viewer can display a parseable title for an existing object when, for example, the user initially clicks in the field. So, a date might be rendered via a `TitleFacet` as `May 2, 2007` , but its editable form might be `20070502` .
-
 [#maxLength__]
 === maxLength()
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/adapters/ParsingException.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/ParsingException.adoc
similarity index 100%
copy from antora/components/refguide-index/modules/applib/pages/index/adapters/ParsingException.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/value/semantics/ParsingException.adoc
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/Markup.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/Renderer.adoc
similarity index 59%
copy from antora/components/refguide-index/modules/applib/pages/index/value/Markup.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/value/semantics/Renderer.adoc
index cd6c4fe..71e8a86 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/value/Markup.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/Renderer.adoc
@@ -1,35 +1,25 @@
-= Markup
+= Renderer _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Intended to be used as a read-only property, to render arbitrary HTML markup into the user interface.
-
 == API
 
 [source,java]
-.Markup.java
+.Renderer.java
 ----
-class Markup {
-  Markup()
-  Markup(String html)
-  String asHtml()
-  boolean isEqualTo(final Markup other)
-  String title()
-  boolean equals(final Object obj)
-  int hashCode()
-  String toString()
-  Markup valueOfHtml(String html)     // <.>
+interface Renderer<T> {
+  String simpleTextPresentation(ValueSemanticsProvider.Context context, T value)     // <.>
 }
 ----
 
-<.> xref:#valueOfHtml__String[valueOfHtml(String)]
+<.> xref:#simpleTextPresentation__ValueSemanticsProvider.Context_T[simpleTextPresentation(ValueSemanticsProvider.Context, T)]
 +
 --
-syntactic sugar
+The value in its read-only summarizing text presentation form. (irreversible)
 --
 
 == Members
 
-[#valueOfHtml__String]
-=== valueOfHtml(String)
+[#simpleTextPresentation__ValueSemanticsProvider.Context_T]
+=== simpleTextPresentation(ValueSemanticsProvider.Context, T)
 
-syntactic sugar
+The value in its read-only summarizing text presentation form. (irreversible)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/annotation/MinLength.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueComposer.adoc
similarity index 78%
copy from antora/components/refguide-index/modules/applib/pages/index/annotation/MinLength.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueComposer.adoc
index 380c0d6..7e42671 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/annotation/MinLength.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueComposer.adoc
@@ -1,16 +1,15 @@
-= @MinLength
+= ValueComposer _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Specify the minimum number of characters for an autocomplete search argument.
+Provides construction and extraction for a given value-type from and into its constituent parts.
 
 == API
 
 [source,java]
-.MinLength.java
+.ValueComposer.java
 ----
-@interface MinLength {
-  int value();
+interface ValueComposer<T> {
+  Object getValueMixin(final T value)
 }
 ----
 
-include::hooks/MinLength_010-examples-and-usage.adoc[]
diff --git a/antora/components/refguide-index/modules/applib/pages/index/adapters/AbstractValueSemanticsProvider.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueSemanticsAbstract.adoc
similarity index 69%
copy from antora/components/refguide-index/modules/applib/pages/index/adapters/AbstractValueSemanticsProvider.adoc
copy to antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueSemanticsAbstract.adoc
index fd8b90b..52315d4 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/adapters/AbstractValueSemanticsProvider.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueSemanticsAbstract.adoc
@@ -1,15 +1,32 @@
-= AbstractValueSemanticsProvider
+= ValueSemanticsAbstract
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
 == API
 
 [source,java]
-.AbstractValueSemanticsProvider.java
+.ValueSemanticsAbstract.java
 ----
-class AbstractValueSemanticsProvider<T> {
+class ValueSemanticsAbstract<T> {
+  public static final String NULL_REPRESENTATION;
+  OrderRelation<T, ?> getOrderRelation()
+  Converter<T, ?> getConverter()
+  Renderer<T> getRenderer()
   EncoderDecoder<T> getEncoderDecoder()
   Parser<T> getParser()
   DefaultsProvider<T> getDefaultsProvider()
+  Can<T> getExamples()     // <.>
 }
 ----
 
+<.> xref:#getExamples__[getExamples()]
++
+--
+JUnit support.
+--
+
+== Members
+
+[#getExamples__]
+=== getExamples()
+
+JUnit support.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/adapters/ValueSemanticsProvider.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueSemanticsProvider.adoc
similarity index 51%
rename from antora/components/refguide-index/modules/applib/pages/index/adapters/ValueSemanticsProvider.adoc
rename to antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueSemanticsProvider.adoc
index 6071523..c647a2e 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/adapters/ValueSemanticsProvider.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueSemanticsProvider.adoc
@@ -13,43 +13,88 @@ Whatever the class that implements this interface, it must also expose either a
 .ValueSemanticsProvider.java
 ----
 interface ValueSemanticsProvider<T> {
+  Class<T> getCorrespondingClass()
+  ValueType getSchemaValueType()     // <.>
+  OrderRelation<T, ?> getOrderRelation()     // <.>
+  Converter<T, ?> getConverter()     // <.>
+  Renderer<T> getRenderer()     // <.>
   Parser<T> getParser()     // <.>
   EncoderDecoder<T> getEncoderDecoder()     // <.>
   DefaultsProvider<T> getDefaultsProvider()     // <.>
 }
 ----
 
+<.> xref:#getSchemaValueType__[getSchemaValueType()]
++
+--
+Values might appear within _CommandDto_ , _InteractionDto_ and _ChangesDto_ , where a mapping onto one of _ValueType_ (s) as provided by the XML schema is required.
+--
+<.> xref:#getOrderRelation__[getOrderRelation()]
++
+--
+The xref:refguide:applib:index/value/semantics/OrderRelation.adoc[OrderRelation] , if any.
+--
+<.> xref:#getConverter__[getConverter()]
++
+--
+The xref:refguide:applib:index/value/semantics/Converter.adoc[Converter] , if any.
+--
+<.> xref:#getRenderer__[getRenderer()]
++
+--
+The xref:refguide:applib:index/value/semantics/Renderer.adoc[Renderer] , if any.
+--
 <.> xref:#getParser__[getParser()]
 +
 --
-The xref:refguide:applib:index/adapters/Parser.adoc[Parser] , if any.
+The xref:refguide:applib:index/value/semantics/Parser.adoc[Parser] , if any.
 --
 <.> xref:#getEncoderDecoder__[getEncoderDecoder()]
 +
 --
-The xref:refguide:applib:index/adapters/EncoderDecoder.adoc[EncoderDecoder] , if any.
+The xref:refguide:applib:index/value/semantics/EncoderDecoder.adoc[EncoderDecoder] , if any.
 --
 <.> xref:#getDefaultsProvider__[getDefaultsProvider()]
 +
 --
-The xref:refguide:applib:index/adapters/DefaultsProvider.adoc[DefaultsProvider] , if any.
+The xref:refguide:applib:index/value/semantics/DefaultsProvider.adoc[DefaultsProvider] , if any.
 --
 
 == Members
 
+[#getSchemaValueType__]
+=== getSchemaValueType()
+
+Values might appear within _CommandDto_ , _InteractionDto_ and _ChangesDto_ , where a mapping onto one of _ValueType_ (s) as provided by the XML schema is required.
+
+[#getOrderRelation__]
+=== getOrderRelation()
+
+The xref:refguide:applib:index/value/semantics/OrderRelation.adoc[OrderRelation] , if any.
+
+[#getConverter__]
+=== getConverter()
+
+The xref:refguide:applib:index/value/semantics/Converter.adoc[Converter] , if any.
+
+[#getRenderer__]
+=== getRenderer()
+
+The xref:refguide:applib:index/value/semantics/Renderer.adoc[Renderer] , if any.
+
 [#getParser__]
 === getParser()
 
-The xref:refguide:applib:index/adapters/Parser.adoc[Parser] , if any.
+The xref:refguide:applib:index/value/semantics/Parser.adoc[Parser] , if any.
 
 [#getEncoderDecoder__]
 === getEncoderDecoder()
 
-The xref:refguide:applib:index/adapters/EncoderDecoder.adoc[EncoderDecoder] , if any.
+The xref:refguide:applib:index/value/semantics/EncoderDecoder.adoc[EncoderDecoder] , if any.
 
 [#getDefaultsProvider__]
 === getDefaultsProvider()
 
-The xref:refguide:applib:index/adapters/DefaultsProvider.adoc[DefaultsProvider] , if any.
+The xref:refguide:applib:index/value/semantics/DefaultsProvider.adoc[DefaultsProvider] , if any.
 
 If not `null` , implies that the value has (or may have) a default.
diff --git a/antora/components/refguide-index/modules/applib/pages/index/adapters/ParsingException.adoc b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueSemanticsResolver.adoc
similarity index 67%
rename from antora/components/refguide-index/modules/applib/pages/index/adapters/ParsingException.adoc
rename to antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueSemanticsResolver.adoc
index e107f48..553d063 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/adapters/ParsingException.adoc
+++ b/antora/components/refguide-index/modules/applib/pages/index/value/semantics/ValueSemanticsResolver.adoc
@@ -1,18 +1,16 @@
-= ParsingException
+= ValueSemanticsResolver _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Indicates that parsing has failed, ie the entry is illegal (rather than invalid).
-
 == API
 
 [source,java]
-.ParsingException.java
+.ValueSemanticsResolver.java
 ----
-class ParsingException {
-  ParsingException()
-  ParsingException(final String msg)
-  ParsingException(final String msg, final Throwable cause)
-  ParsingException(final Throwable cause)
+interface ValueSemanticsResolver {
+  boolean hasValueSemantics(Class<?> valueType)
+  Stream<ValueSemanticsProvider<T>> streamValueSemantics(Class<T> valueType)
+  Stream<Class<?>> streamClassesWithValueSemantics()
+  Can<ValueSemanticsProvider<T>> selectValueSemantics(Identifier featureIdentifier, Class<T> valueType)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/LocaleProvider.adoc b/antora/components/refguide-index/modules/commons/pages/index/btree/Compound.adoc
similarity index 60%
copy from antora/components/refguide-index/modules/applib/pages/index/services/i18n/LocaleProvider.adoc
copy to antora/components/refguide-index/modules/commons/pages/index/btree/Compound.adoc
index 7acf604..66bbc64 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/LocaleProvider.adoc
+++ b/antora/components/refguide-index/modules/commons/pages/index/btree/Compound.adoc
@@ -1,31 +1,30 @@
-= LocaleProvider _(interface)_
+= Compound
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-One of a number of services that work together to provide support for i18n, its responsibility being simply to return the _Locale_ of the current user.
+Represents a binary tree data structure.
 
 == API
 
 [source,java]
-.LocaleProvider.java
+.Compound.java
 ----
-interface LocaleProvider {
-  Locale getLocale()     // <.>
+class Compound<T> {
+  Compound<T> of(final T left)
+  Compound<T> of(final T left, final T right)
+  Compound<T> of(final T left, final Compound<T> right)
+  Compound<T> of(final Compound<T> left, final T right)
+  Compound<T> of(final Compound<T> left, final Compound<T> right)
+  int size()     // <.>
+  Stream<T> streamDepthFirstPostorder()
+  List<T> flatten()
+  Compound<X> map(final Function<T, X> mapper)
+  Compound<T> nil()
 }
 ----
 
-<.> xref:#getLocale__[getLocale()]
-+
---
-Returns the _Locale_ of the current user.
---
+<.> xref:#size__[size()]
 
 == Members
 
-[#getLocale__]
-=== getLocale()
-
-Returns the _Locale_ of the current user.
-
-include::hooks/LocaleProvider_010-implementation.adoc[]
-
-include::hooks/LocaleProvider_020-examples-and-usage.adoc[]
+[#size__]
+=== size()
diff --git a/antora/components/refguide-index/modules/commons/pages/index/btree/FunCompound.adoc b/antora/components/refguide-index/modules/commons/pages/index/btree/FunCompound.adoc
new file mode 100644
index 0000000..6ef133c
--- /dev/null
+++ b/antora/components/refguide-index/modules/commons/pages/index/btree/FunCompound.adoc
@@ -0,0 +1,32 @@
+= FunCompound
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+Represents a binary tree data structure of function elements.
+
+== API
+
+[source,java]
+.FunCompound.java
+----
+class FunCompound<T, R> {
+  FunCompound<T, R> of(final Function<T, R> left)
+  FunCompound<T, R> of(final Function<T, R> left, final Function<T, R> right)
+  FunCompound<T, R> of(final Function<T, R> left, final FunCompound<T, R> right)
+  FunCompound<T, R> of(final FunCompound<T, R> left, final Function<T, R> right)
+  FunCompound<T, R> of(final FunCompound<T, R> left, final FunCompound<T, R> right)
+  int size()     // <.>
+  Stream<Function<T, R>> streamDepthFirstPostorder()
+  List<Function<T, R>> flatten()
+  Compound<R> apply(final T value)
+  FunCompound<T, X> map(final Function<R, X> mapper)
+  FunCompound<T, X> compose(final FunCompound<R, X> other)
+  FunCompound<T, R> nil()
+}
+----
+
+<.> xref:#size__[size()]
+
+== Members
+
+[#size__]
+=== size()
diff --git a/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc b/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc
index f979f1d..708e558 100644
--- a/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc
+++ b/antora/components/refguide-index/modules/commons/pages/index/collections/Can.adoc
@@ -39,11 +39,15 @@ interface Can<T> {
   Can<T> ofEnumeration(final Enumeration<T> enumeration)     // <.>
   Can<T> ofStream(final Stream<T> stream)     // <.>
   Can<T> ofInstance(final Instance<T> instance)     // <.>
-  Can<T> unique()     // <.>
+  Can<T> sorted(Comparator<? super T> comparator)     // <.>
+  Can<T> distinct()     // <.>
+  Can<T> distinct(BiPredicate<T, T> equality)     // <.>
   Can<T> reverse()     // <.>
   Can<T> filter(Predicate<? super T> predicate)     // <.>
   Can<R> map(final Function<? super T, R> mapper)     // <.>
+  Can<R> flatMap(final Function<? super T, ? extends Can<? extends R>> mapper)
   Can<T> concat(final Can<T> can, final T element)     // <.>
+  Iterator<T> iterator(int skip, int limit)     // <.>
   Iterator<T> reverseIterator()
   void forEach(Consumer<? super T> action)
   void zip(Iterable<R> zippedIn, BiConsumer<? super T, ? super R> action)     // <.>
@@ -162,11 +166,21 @@ Returns either a _Can_ with all the elements from given _stream_ or an empty _Ca
 --
 Returns either a _Can_ with all the elements from given _instance_ or an empty _Can_ if the _instance_ is _null_ . Any elements equal to _null_ are ignored and will not be contained in the resulting _Can_ .
 --
-<.> xref:#unique__[unique()]
+<.> xref:#sorted__Comparator[sorted(Comparator)]
++
+--
+Returns a _Can_ with all the elements from this _Can_ , but sorted based on _Comparable#compareTo(Object)_ order.
+--
+<.> xref:#distinct__[distinct()]
 +
 --
 Returns a _Can_ with all the elements from this _Can_ , but duplicated elements removed, based on _Object#equals(Object)_ object equality.
 --
+<.> xref:#distinct__BiPredicate[distinct(BiPredicate)]
++
+--
+Returns a _Can_ with all the elements from this _Can_ , but duplicated elements removed, based on given _equality_ relation.
+--
 <.> xref:#reverse__[reverse()]
 +
 --
@@ -187,6 +201,11 @@ Returns a _Can_ with all the elements from this _Can_ 'transformed' by the given
 --
 Returns a _Can_ with all the elements from given _can_ joined by the given _element_ . If any of given _can_ or _element_ are _null_ these do not contribute any elements and are ignored.
 --
+<.> xref:#iterator__int_int[iterator(int, int)]
++
+--
+Returns an iterator that skips the first _skip_ elements, then returns a maximum of _limit_ elements.
+--
 <.> xref:#zip__Iterable_BiConsumer[zip(Iterable, BiConsumer)]
 +
 --
@@ -352,11 +371,21 @@ As side-effect, consumes given _stream_ .
 
 Returns either a _Can_ with all the elements from given _instance_ or an empty _Can_ if the _instance_ is _null_ . Any elements equal to _null_ are ignored and will not be contained in the resulting _Can_ .
 
-[#unique__]
-=== unique()
+[#sorted__Comparator]
+=== sorted(Comparator)
+
+Returns a _Can_ with all the elements from this _Can_ , but sorted based on _Comparable#compareTo(Object)_ order.
+
+[#distinct__]
+=== distinct()
 
 Returns a _Can_ with all the elements from this _Can_ , but duplicated elements removed, based on _Object#equals(Object)_ object equality.
 
+[#distinct__BiPredicate]
+=== distinct(BiPredicate)
+
+Returns a _Can_ with all the elements from this _Can_ , but duplicated elements removed, based on given _equality_ relation.
+
 [#reverse__]
 === reverse()
 
@@ -377,6 +406,11 @@ Returns a _Can_ with all the elements from this _Can_ 'transformed' by the given
 
 Returns a _Can_ with all the elements from given _can_ joined by the given _element_ . If any of given _can_ or _element_ are _null_ these do not contribute any elements and are ignored.
 
+[#iterator__int_int]
+=== iterator(int, int)
+
+Returns an iterator that skips the first _skip_ elements, then returns a maximum of _limit_ elements.
+
 [#zip__Iterable_BiConsumer]
 === zip(Iterable, BiConsumer)
 
diff --git a/antora/components/refguide-index/modules/core/pages/index/metamodel/services/ixn/InteractionDtoFactory.adoc b/antora/components/refguide-index/modules/core/pages/index/metamodel/services/ixn/InteractionDtoFactory.adoc
index ecf7ef5..d0fafe8 100644
--- a/antora/components/refguide-index/modules/core/pages/index/metamodel/services/ixn/InteractionDtoFactory.adoc
+++ b/antora/components/refguide-index/modules/core/pages/index/metamodel/services/ixn/InteractionDtoFactory.adoc
@@ -13,7 +13,7 @@ There are some similarities to _org.apache.isis.core.metamodel.services.command.
 interface InteractionDtoFactory {
   ActionInvocationDto asActionInvocationDto(ObjectAction objectAction, InteractionHead head, Can<ManagedObject> argumentAdapters)     // <.>
   PropertyEditDto asPropertyEditDto(OneToOneAssociation property, ManagedObject targetAdapter, ManagedObject newValueAdapterIfAny)     // <.>
-  ActionInvocationDto updateResult(ActionInvocationDto actionInvocationDto, ObjectAction objectAction, Object resultPojo)     // <.>
+  ActionInvocationDto updateResult(ActionInvocationDto actionInvocationDto, ObjectAction objectAction, ManagedObject resultObject)     // <.>
 }
 ----
 
@@ -27,7 +27,7 @@ Called by the framework when invoking an action, to create an _ActionInvocationD
 --
 Called by the framework when editing a property, to create an _PropertyEditDto_ capturing the details of the action invocation (target, arguments etc).
 --
-<.> xref:#updateResult__ActionInvocationDto_ObjectAction_Object[updateResult(ActionInvocationDto, ObjectAction, Object)]
+<.> xref:#updateResult__ActionInvocationDto_ObjectAction_ManagedObject[updateResult(ActionInvocationDto, ObjectAction, ManagedObject)]
 +
 --
 Called by the framework to attach the result of an action invocation to the aforementioned _ActionInvocationDto_ .
@@ -49,7 +49,7 @@ Called by the framework when editing a property, to create an _PropertyEditDto_
 
 _PropertyEditDto_ is a subtype of _org.apache.isis.schema.ixn.v2.MemberExecutionDto_ that is in turn a part of the overall _org.apache.isis.schema.ixn.v2.InteractionDto_ .
 
-[#updateResult__ActionInvocationDto_ObjectAction_Object]
-=== updateResult(ActionInvocationDto, ObjectAction, Object)
+[#updateResult__ActionInvocationDto_ObjectAction_ManagedObject]
+=== updateResult(ActionInvocationDto, ObjectAction, ManagedObject)
 
 Called by the framework to attach the result of an action invocation to the aforementioned _ActionInvocationDto_ .
diff --git a/antora/components/refguide-index/modules/core/pages/index/metamodel/services/schema/SchemaValueMarshaller.adoc b/antora/components/refguide-index/modules/core/pages/index/metamodel/services/schema/SchemaValueMarshaller.adoc
new file mode 100644
index 0000000..18b3023
--- /dev/null
+++ b/antora/components/refguide-index/modules/core/pages/index/metamodel/services/schema/SchemaValueMarshaller.adoc
@@ -0,0 +1,129 @@
+= SchemaValueMarshaller _(interface)_
+:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
+
+Provides the runtime context for converting values between their XML _Schema_ and their _Java_ type representation, based on xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] if specified.
+
+== API
+
+[source,java]
+.SchemaValueMarshaller.java
+----
+interface SchemaValueMarshaller {
+  Identifier actionIdentifier(ActionInvocationDto actionInvocationDto)     // <.>
+  Identifier actionIdentifier(ActionDto actionDto)     // <.>
+  Identifier propertyIdentifier(PropertyDto propertyDto)     // <.>
+  ManagedObject recoverReferenceFrom(OidDto oidDto)
+  ManagedObject recoverValueFrom(PropertyDto propertyDto)     // <.>
+  ManagedObject recoverValuesFrom(Identifier paramIdentifier, ParamDto paramDto)     // <.>
+  ActionInvocationDto recordActionResultScalar(ActionInvocationDto invocationDto, ObjectSpecification elementType, ManagedObject value)     // <.>
+  ActionInvocationDto recordActionResultNonScalar(ActionInvocationDto invocationDto, ObjectSpecification elementType, Can<ManagedObject> values)     // <.>
+  PropertyDto recordPropertyValue(PropertyDto propertyDto, ObjectSpecification elementType, ManagedObject value)     // <.>
+  ParamDto recordParamScalar(Identifier paramIdentifier, ParamDto paramDto, ObjectSpecification elementType, ManagedObject value)     // <.>
+  ParamDto recordParamNonScalar(Identifier paramIdentifier, ParamDto paramDto, ObjectSpecification elementType, Can<ManagedObject> values)     // <.>
+}
+----
+
+<.> xref:#actionIdentifier__ActionInvocationDto[actionIdentifier(ActionInvocationDto)]
++
+--
+Recovers an _Action's_ xref:refguide:applib:index/Identifier.adoc[Identifier] from given DTO.
+--
+<.> xref:#actionIdentifier__ActionDto[actionIdentifier(ActionDto)]
++
+--
+Recovers an _Action's_ xref:refguide:applib:index/Identifier.adoc[Identifier] from given DTO.
+--
+<.> xref:#propertyIdentifier__PropertyDto[propertyIdentifier(PropertyDto)]
++
+--
+Recovers a _Property's_ xref:refguide:applib:index/Identifier.adoc[Identifier] from given DTO.
+--
+<.> xref:#recoverValueFrom__PropertyDto[recoverValueFrom(PropertyDto)]
++
+--
+Recovers a property value, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Property_ .
+--
+<.> xref:#recoverValuesFrom__Identifier_ParamDto[recoverValuesFrom(Identifier, ParamDto)]
++
+--
+Recovers a parameter value, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Action Parameter_ .
+--
+<.> xref:#recordActionResultScalar__ActionInvocationDto_ObjectSpecification_ManagedObject[recordActionResultScalar(ActionInvocationDto, ObjectSpecification, ManagedObject)]
++
+--
+Records given result value into given DTO object, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Action_ .
+--
+<.> xref:#recordActionResultNonScalar__ActionInvocationDto_ObjectSpecification_Can[recordActionResultNonScalar(ActionInvocationDto, ObjectSpecification, Can)]
++
+--
+Records given result values into given DTO object, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Action_ .
+--
+<.> xref:#recordPropertyValue__PropertyDto_ObjectSpecification_ManagedObject[recordPropertyValue(PropertyDto, ObjectSpecification, ManagedObject)]
++
+--
+Records given property value into given DTO object, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Property_ .
+--
+<.> xref:#recordParamScalar__Identifier_ParamDto_ObjectSpecification_ManagedObject[recordParamScalar(Identifier, ParamDto, ObjectSpecification, ManagedObject)]
++
+--
+Records given parameter value into given DTO object, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Action Parameter_ .
+--
+<.> xref:#recordParamNonScalar__Identifier_ParamDto_ObjectSpecification_Can[recordParamNonScalar(Identifier, ParamDto, ObjectSpecification, Can)]
++
+--
+Records given parameter values into given DTO object, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Action Parameter_ .
+--
+
+== Members
+
+[#actionIdentifier__ActionInvocationDto]
+=== actionIdentifier(ActionInvocationDto)
+
+Recovers an _Action's_ xref:refguide:applib:index/Identifier.adoc[Identifier] from given DTO.
+
+[#actionIdentifier__ActionDto]
+=== actionIdentifier(ActionDto)
+
+Recovers an _Action's_ xref:refguide:applib:index/Identifier.adoc[Identifier] from given DTO.
+
+[#propertyIdentifier__PropertyDto]
+=== propertyIdentifier(PropertyDto)
+
+Recovers a _Property's_ xref:refguide:applib:index/Identifier.adoc[Identifier] from given DTO.
+
+[#recoverValueFrom__PropertyDto]
+=== recoverValueFrom(PropertyDto)
+
+Recovers a property value, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Property_ .
+
+[#recoverValuesFrom__Identifier_ParamDto]
+=== recoverValuesFrom(Identifier, ParamDto)
+
+Recovers a parameter value, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Action Parameter_ .
+
+Packed up if non-scalar.
+
+[#recordActionResultScalar__ActionInvocationDto_ObjectSpecification_ManagedObject]
+=== recordActionResultScalar(ActionInvocationDto, ObjectSpecification, ManagedObject)
+
+Records given result value into given DTO object, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Action_ .
+
+[#recordActionResultNonScalar__ActionInvocationDto_ObjectSpecification_Can]
+=== recordActionResultNonScalar(ActionInvocationDto, ObjectSpecification, Can)
+
+Records given result values into given DTO object, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Action_ .
+
+[#recordPropertyValue__PropertyDto_ObjectSpecification_ManagedObject]
+=== recordPropertyValue(PropertyDto, ObjectSpecification, ManagedObject)
+
+Records given property value into given DTO object, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Property_ .
+
+[#recordParamScalar__Identifier_ParamDto_ObjectSpecification_ManagedObject]
+=== recordParamScalar(Identifier, ParamDto, ObjectSpecification, ManagedObject)
+
+Records given parameter value into given DTO object, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Action Parameter_ .
+
+[#recordParamNonScalar__Identifier_ParamDto_ObjectSpecification_Can]
+=== recordParamNonScalar(Identifier, ParamDto, ObjectSpecification, Can)
+
+Records given parameter values into given DTO object, using xref:refguide:applib:index/value/semantics/ValueSemanticsProvider.adoc[ValueSemanticsProvider] for corresponding _Action Parameter_ .
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/primary/ui/CommandReplayOnPrimaryService.adoc b/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/primary/ui/CommandReplayOnPrimaryService.adoc
index 53e06ef..e04e99a 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/primary/ui/CommandReplayOnPrimaryService.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/primary/ui/CommandReplayOnPrimaryService.adoc
@@ -8,45 +8,6 @@
 ----
 class CommandReplayOnPrimaryService {
   public static final String LOGICAL_TYPE_NAME;
-  List<? extends CommandModel> findCommands(final UUID interactionId, final Integer batchSize)     // <.>
-  Integer default1FindCommandsOnPrimaryFrom()
-  Clob downloadCommands(final UUID interactionId, final Integer batchSize, final String filenamePrefix)     // <.>
-  Integer default1DownloadCommands()
-  String default2DownloadCommands()
-  Clob downloadCommandById(final UUID interactionId, final String filenamePrefix)     // <.>
-  String default1DownloadCommandById()
 }
 ----
 
-<.> xref:#findCommands__UUID_Integer[findCommands(UUID, Integer)]
-+
---
-These actions should be called with HTTP Accept Header set to: `application/xml;profile="urn:org.restfulobjects:repr-types/action-result";x-ro-domain-type="org.apache.isis.schema.cmd.v1.CommandsDto"` 
---
-<.> xref:#downloadCommands__UUID_Integer_String[downloadCommands(UUID, Integer, String)]
-+
---
-These actions should be called with HTTP Accept Header set to: `application/xml;profile="urn:org.restfulobjects:repr-types/action-result";x-ro-domain-type="org.apache.isis.schema.cmd.v1.CommandsDto"` 
---
-<.> xref:#downloadCommandById__UUID_String[downloadCommandById(UUID, String)]
-+
---
-This action should be called with HTTP Accept Header set to: `application/xml;profile="urn:org.restfulobjects:repr-types/action-result";x-ro-domain-type="org.apache.isis.schema.cmd.v1.CommandDto"` 
---
-
-== Members
-
-[#findCommands__UUID_Integer]
-=== findCommands(UUID, Integer)
-
-These actions should be called with HTTP Accept Header set to: `application/xml;profile="urn:org.restfulobjects:repr-types/action-result";x-ro-domain-type="org.apache.isis.schema.cmd.v1.CommandsDto"` 
-
-[#downloadCommands__UUID_Integer_String]
-=== downloadCommands(UUID, Integer, String)
-
-These actions should be called with HTTP Accept Header set to: `application/xml;profile="urn:org.restfulobjects:repr-types/action-result";x-ro-domain-type="org.apache.isis.schema.cmd.v1.CommandsDto"` 
-
-[#downloadCommandById__UUID_String]
-=== downloadCommandById(UUID, String)
-
-This action should be called with HTTP Accept Header set to: `application/xml;profile="urn:org.restfulobjects:repr-types/action-result";x-ro-domain-type="org.apache.isis.schema.cmd.v1.CommandDto"` 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/secondary/ui/CommandReplayOnSecondaryService.adoc b/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/secondary/ui/CommandReplayOnSecondaryService.adoc
index 3dab90a..c16c6a1 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/secondary/ui/CommandReplayOnSecondaryService.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/commandreplay/secondary/ui/CommandReplayOnSecondaryService.adoc
@@ -8,8 +8,6 @@
 ----
 class CommandReplayOnSecondaryService {
   public static final String LOGICAL_TYPE_NAME;
-  CommandModel findMostRecentReplayed()
-  void uploadCommands(final Clob commandsDtoAsXml)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/CalendarEventable.adoc b/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/CalendarEventable.adoc
index 70160a5..8b2a6b8 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/CalendarEventable.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/CalendarEventable.adoc
@@ -25,6 +25,6 @@ The name of the calendar to which this event belongs.
 
 The name of the calendar to which this event belongs.
 
-For example, an `Employee` might provide have a `employedOn` , so the calendar name would be "employedOn"
+For example, an `Employee` might provide have a `employedOn` , so the calendar name would be 'employedOn'
 
 If there is possibly more than one date associated with the entity, then use xref:refguide:extensions:index/fullcalendar/applib/Calendarable.adoc[Calendarable] instead.
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/Calendarable.adoc b/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/Calendarable.adoc
index f878c7f..43c6785 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/Calendarable.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/Calendarable.adoc
@@ -15,7 +15,7 @@ interface Calendarable {
 <.> xref:#getCalendarNames__[getCalendarNames()]
 +
 --
-The names of unique "calendar"s provided by this object.
+The names of unique 'calendar's provided by this object.
 --
 <.> xref:#getCalendarEvents__[getCalendarEvents()]
 +
@@ -28,9 +28,9 @@ The events associated with this object, keyed by their corresponding _#getCalend
 [#getCalendarNames__]
 === getCalendarNames()
 
-The names of unique "calendar"s provided by this object.
+The names of unique 'calendar's provided by this object.
 
-The "calendar" is a string identifier that indicates the nature of this event.
+The 'calendar' is a string identifier that indicates the nature of this event.
 
 For example, an event of a lease's `FixedBreakOption` has three dates: the _break date_ , the _exercise date_ and the _reminder date_ . These therefore correspond to three different calendar names, respectively _Fixed break_ , _Fixed break exercise_ and _Fixed break exercise reminder_ .
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/value/CalendarEvent.adoc b/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/value/CalendarEvent.adoc
index e0609bc..43ca994 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/value/CalendarEvent.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/fullcalendar/applib/value/CalendarEvent.adoc
@@ -9,20 +9,12 @@ Value type representing an event on a calendar.
 .CalendarEvent.java
 ----
 class CalendarEvent {
-  CalendarEvent(final DateTime dateTime, final String calendarName, final String title)
-  CalendarEvent(final DateTime dateTime, final String calendarName, final String title, final String notes)
-  DateTime getDateTime()
-  String getCalendarName()
-  String getTitle()
-  String getNotes()
-  CalendarEvent withDateTime(final DateTime date)
-  CalendarEvent withCalendarName(final String calendarName)
-  CalendarEvent withTitle(final String title)
-  CalendarEvent withNotes(final String notes)
-  int hashCode()
-  boolean equals(Object obj)
-  String toString()
-  int typicalLength()
+  CalendarEvent of(final ZonedDateTime dateTime, final String calendarName, final String title)
+  CalendarEvent of(final ZonedDateTime dateTime, final String calendarName, final String title, final String notes)
+  CalendarEvent withDateTime(final ZonedDateTime dateTime)
+  CalendarEvent withDateTime(final LocalDateTime localDateTime, final ZoneId zoneId)
+  ZonedDateTime asDateTime(final ZoneId zoneId)
+  int compareTo(final CalendarEvent other)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/restclient/ResponseDigest.adoc b/antora/components/refguide-index/modules/extensions/pages/index/restclient/ResponseDigest.adoc
index b3ba9da..1c3f017 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/restclient/ResponseDigest.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/restclient/ResponseDigest.adoc
@@ -15,8 +15,8 @@ class ResponseDigest<T> {
   Optional<T> getEntity()     // <.>
   Can<T> getEntities()     // <.>
   Exception getFailureCause()     // <.>
-  T singletonOrElseMapFailure(Function<Exception, T> failureMapper)     // <.>
-  Can<T> multipleOrElseMapFailure(Function<Exception, Can<T>> failureMapper)     // <.>
+  T singletonOrElseMapFailure(final Function<Exception, T> failureMapper)     // <.>
+  Can<T> multipleOrElseMapFailure(final Function<Exception, Can<T>> failureMapper)     // <.>
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/restclient/auth/BasicAuthFilter.adoc b/antora/components/refguide-index/modules/extensions/pages/index/restclient/auth/BasicAuthFilter.adoc
index 1ad11fb..6a8cf20 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/restclient/auth/BasicAuthFilter.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/restclient/auth/BasicAuthFilter.adoc
@@ -7,10 +7,10 @@
 .BasicAuthFilter.java
 ----
 class BasicAuthFilter {
-  BasicAuthFilter of(Credentials credentials)
+  BasicAuthFilter of(final Credentials credentials)
   Credentials getCredentials()
-  void setCredentials(Credentials credentials)
-  void filter(ClientRequestContext requestContext)
+  void setCredentials(final Credentials credentials)
+  void filter(final ClientRequestContext requestContext)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/permission/dom/ApplicationPermission.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/permission/dom/ApplicationPermission.adoc
index 48a8fdc..4f08b85 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/permission/dom/ApplicationPermission.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/permission/dom/ApplicationPermission.adoc
@@ -25,7 +25,7 @@ class ApplicationPermission {
   public static final String NAMED_QUERY_FIND_BY_ROLE_NAMES;
   String title()
   String getSort()
-  ApplicationFeature findFeature(ApplicationFeatureId featureId)
+  ApplicationFeature findFeature(final ApplicationFeatureId featureId)
   Optional<ApplicationFeatureId> asFeatureId()
   int compareTo(final org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission other)
   boolean equals(final Object other)
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc
index a7a9071..a3516ab 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/menu/MeService.adoc
@@ -9,7 +9,6 @@
 class MeService {
   public static final String LOGICAL_TYPE_NAME;
   String iconName()
-  ApplicationUser me()
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/spi/PasswordEncryptionService.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/spi/PasswordEncryptionService.adoc
deleted file mode 100644
index 461b5eb..0000000
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/applib/user/spi/PasswordEncryptionService.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= PasswordEncryptionService _(interface)_
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-== API
-
-[source,java]
-.PasswordEncryptionService.java
-----
-interface PasswordEncryptionService {
-  String encrypt(final String password)
-  boolean matches(final String candidate, final String encrypted)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/applib/pages/index/adapters/AbstractValueSemanticsProvider.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/encryption/jbcrypt/services/PasswordEncoderUsingJBcrypt.adoc
similarity index 77%
rename from antora/components/refguide-index/modules/applib/pages/index/adapters/AbstractValueSemanticsProvider.adoc
rename to antora/components/refguide-index/modules/extensions/pages/index/secman/encryption/jbcrypt/services/PasswordEncoderUsingJBcrypt.adoc
index fd8b90b..bf8ff2b 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/adapters/AbstractValueSemanticsProvider.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/secman/encryption/jbcrypt/services/PasswordEncoderUsingJBcrypt.adoc
@@ -1,15 +1,14 @@
-= AbstractValueSemanticsProvider
+= PasswordEncoderUsingJBcrypt
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
 == API
 
 [source,java]
-.AbstractValueSemanticsProvider.java
+.PasswordEncoderUsingJBcrypt.java
 ----
-class AbstractValueSemanticsProvider<T> {
-  EncoderDecoder<T> getEncoderDecoder()
-  Parser<T> getParser()
-  DefaultsProvider<T> getDefaultsProvider()
+class PasswordEncoderUsingJBcrypt {
+  String encode(final CharSequence rawPassword)
+  boolean matches(final CharSequence rawPassword, final String encodedPassword)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/encryption/jbcrypt/services/PasswordEncryptionServiceUsingJBcrypt.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/encryption/jbcrypt/services/PasswordEncryptionServiceUsingJBcrypt.adoc
deleted file mode 100644
index 5d8481c..0000000
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/encryption/jbcrypt/services/PasswordEncryptionServiceUsingJBcrypt.adoc
+++ /dev/null
@@ -1,14 +0,0 @@
-= PasswordEncryptionServiceUsingJBcrypt
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-== API
-
-[source,java]
-.PasswordEncryptionServiceUsingJBcrypt.java
-----
-class PasswordEncryptionServiceUsingJBcrypt {
-  String encrypt(String password)
-  boolean matches(String candidate, String encrypted)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/Password.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/encryption/spring/IsisModuleExtSecmanEncryptionSpring.adoc
similarity index 74%
copy from antora/components/refguide-index/modules/applib/pages/index/value/Password.adoc
copy to antora/components/refguide-index/modules/extensions/pages/index/secman/encryption/spring/IsisModuleExtSecmanEncryptionSpring.adoc
index d75b527..1de02d6 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/value/Password.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/secman/encryption/spring/IsisModuleExtSecmanEncryptionSpring.adoc
@@ -1,18 +1,19 @@
-= Password
+= IsisModuleExtSecmanEncryptionSpring
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Represents a password that will not displayed to the UI but can be persisted.
-
 == API
 
 [source,java]
-.Password.java
+.IsisModuleExtSecmanEncryptionSpring.java
 ----
-class Password {
-  Password(String password)
-  Password of(final String password)
-  boolean checkPassword(final String password)
-  String toString()
+class IsisModuleExtSecmanEncryptionSpring {
+  PasswordEncoder passwordEncoder()     // <.>
 }
 ----
 
+<.> xref:#passwordEncoder__[passwordEncoder()]
+
+== Members
+
+[#passwordEncoder__]
+=== passwordEncoder()
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/integration/authenticator/AuthenticatorSecman.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/integration/authenticator/AuthenticatorSecman.adoc
index d2e96ca..d1831b5 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/integration/authenticator/AuthenticatorSecman.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/secman/integration/authenticator/AuthenticatorSecman.adoc
@@ -11,6 +11,7 @@ This Authenticator is a fallback and is only used if there is no other implement
 .AuthenticatorSecman.java
 ----
 class AuthenticatorSecman {
+  AuthenticatorSecman(final ApplicationUserRepository applicationUserRepository, final PasswordEncoder passwordEncoder)
   boolean canAuthenticate(final Class<? extends AuthenticationRequest> authenticationRequestClass)
   InteractionContext authenticate(final AuthenticationRequest request, final String code)
   void logout(final InteractionContext context)
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/secman/integration/authenticator/AuthenticatorSecmanAutoConfiguration.adoc b/antora/components/refguide-index/modules/extensions/pages/index/secman/integration/authenticator/AuthenticatorSecmanAutoConfiguration.adoc
index a313c94..c86609d 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/secman/integration/authenticator/AuthenticatorSecmanAutoConfiguration.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/secman/integration/authenticator/AuthenticatorSecmanAutoConfiguration.adoc
@@ -7,7 +7,7 @@
 .AuthenticatorSecmanAutoConfiguration.java
 ----
 class AuthenticatorSecmanAutoConfiguration {
-  Authenticator authenticatorSecman(final ApplicationUserRepository applicationUserRepository, final PasswordEncryptionService passwordEncryptionService)
+  Authenticator authenticatorSecman(final ApplicationUserRepository applicationUserRepository, final PasswordEncoder passwordEncoder)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcel.adoc b/antora/components/refguide-index/modules/extensions/pages/index/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcel.adoc
deleted file mode 100644
index ad3cd0e..0000000
--- a/antora/components/refguide-index/modules/extensions/pages/index/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcel.adoc
+++ /dev/null
@@ -1,16 +0,0 @@
-= CollectionContentsAsExcel
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-_PanelAbstract Panel_ that represents a _EntityCollectionModel collection of entity_ s rendered using _AjaxFallbackDefaultDataTable_ .
-
-== API
-
-[source,java]
-.CollectionContentsAsExcel.java
-----
-class CollectionContentsAsExcel {
-  CollectionContentsAsExcel(final String id, final EntityCollectionModel model)
-  void renderHead(IHeaderResponse response)
-}
-----
-
diff --git a/antora/components/refguide-index/modules/extensions/pages/index/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcelFactory.adoc b/antora/components/refguide-index/modules/extensions/pages/index/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcelFactory.adoc
index 2d4cf41..5826f26 100644
--- a/antora/components/refguide-index/modules/extensions/pages/index/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcelFactory.adoc
+++ b/antora/components/refguide-index/modules/extensions/pages/index/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcelFactory.adoc
@@ -1,7 +1,7 @@
 = CollectionContentsAsExcelFactory
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-_ComponentFactory_ for xref:refguide:extensions:index/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcel.adoc[CollectionContentsAsExcel] .
+_ComponentFactory_ for _DownloadLink_ .
 
 == API
 
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc
index c6eeb8d..5216cb8 100644
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc
+++ b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/changetracking/JdoLifecycleListener.adoc
@@ -18,16 +18,16 @@ class JdoLifecycleListener {
   void preAttach(final InstanceLifecycleEvent event)
   void postAttach(final InstanceLifecycleEvent event)
   void postLoad(final InstanceLifecycleEvent event)
-  void preStore(InstanceLifecycleEvent event)
-  void postStore(InstanceLifecycleEvent event)
-  void preDirty(InstanceLifecycleEvent event)
-  void postDirty(InstanceLifecycleEvent event)
-  void preDelete(InstanceLifecycleEvent event)
-  void postDelete(InstanceLifecycleEvent event)
-  void preClear(InstanceLifecycleEvent event)     // <.>
-  void postClear(InstanceLifecycleEvent event)     // <.>
-  void preDetach(InstanceLifecycleEvent event)
-  void postDetach(InstanceLifecycleEvent event)
+  void preStore(final InstanceLifecycleEvent event)
+  void postStore(final InstanceLifecycleEvent event)
+  void preDirty(final InstanceLifecycleEvent event)
+  void postDirty(final InstanceLifecycleEvent event)
+  void preDelete(final InstanceLifecycleEvent event)
+  void postDelete(final InstanceLifecycleEvent event)
+  void preClear(final InstanceLifecycleEvent event)     // <.>
+  void postClear(final InstanceLifecycleEvent event)     // <.>
+  void preDetach(final InstanceLifecycleEvent event)
+  void postDetach(final InstanceLifecycleEvent event)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/dialect/DnJdoDialect.adoc b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/dialect/DnJdoDialect.adoc
index 9a12947..abae594 100644
--- a/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/dialect/DnJdoDialect.adoc
+++ b/antora/components/refguide-index/modules/persistence/pages/index/jdo/datanucleus/dialect/DnJdoDialect.adoc
@@ -9,8 +9,8 @@ Vendor ( _Datanucleus_ ) specific implementation of _Spring's_ _JdoDialect_ inte
 .DnJdoDialect.java
 ----
 class DnJdoDialect {
-  DnJdoDialect(Object connectionFactory)
-  DataAccessException translateExceptionIfPossible(RuntimeException cause)
+  DnJdoDialect(final Object connectionFactory)
+  DataAccessException translateExceptionIfPossible(final RuntimeException cause)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/base/applib/services/calendar/CalendarService.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/base/applib/services/calendar/CalendarService.adoc
index 0ffa385..f16e6be 100644
--- a/antora/components/refguide-index/modules/subdomains/pages/index/base/applib/services/calendar/CalendarService.adoc
+++ b/antora/components/refguide-index/modules/subdomains/pages/index/base/applib/services/calendar/CalendarService.adoc
@@ -1,4 +1,4 @@
-= CalendarService
+= CalendarService _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
 == API
@@ -6,7 +6,7 @@
 [source,java]
 .CalendarService.java
 ----
-class CalendarService {
+interface CalendarService {
   LocalDate beginningOfMonth()     // <.>
   LocalDate beginningOfMonth(final LocalDate date)
   LocalDate beginningOfQuarter()     // <.>
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/docx/applib/DocxService.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/docx/applib/DocxService.adoc
index d9dcaea..fa0f6b7 100644
--- a/antora/components/refguide-index/modules/subdomains/pages/index/docx/applib/DocxService.adoc
+++ b/antora/components/refguide-index/modules/subdomains/pages/index/docx/applib/DocxService.adoc
@@ -1,16 +1,16 @@
-= DocxService
+= DocxService _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Provides a mail-merge capability.
+Merges input HTML against a provided _docx_ template, generating a _Word docx_ .
 
 == API
 
 [source,java]
 .DocxService.java
 ----
-class DocxService {
-  WordprocessingMLPackage loadPackage(final InputStream docxTemplate)     // <.>
-  void merge(final MergeParams mergeDefn)     // <.>
+interface DocxService {
+  WordprocessingMLPackage loadPackage(InputStream docxTemplate)     // <.>
+  void merge(MergeParams mergeDefn)     // <.>
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/ExcelService.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/ExcelService.adoc
index 0437919..76defa7 100644
--- a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/ExcelService.adoc
+++ b/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/ExcelService.adoc
@@ -1,4 +1,4 @@
-= ExcelService
+= ExcelService _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
 == API
@@ -6,26 +6,24 @@
 [source,java]
 .ExcelService.java
 ----
-class ExcelService {
-  public static final String XSLX_MIME_TYPE;
-  ExcelService()
-  void init()
-  Blob toExcel(final List<T> domainObjects, final Class<T> cls, final String sheetName, final String fileName)     // <.>
-  Blob toExcel(final List<T> domainObjects, final Class<T> cls, final String sheetName, final String fileName, final InputStream in)
-  Blob toExcel(final WorksheetContent worksheetContent, final String fileName)
-  Blob toExcel(final WorksheetContent worksheetContent, final String fileName, final InputStream in)
-  Blob toExcel(final List<WorksheetContent> worksheetContents, final String fileName)
-  Blob toExcel(final List<WorksheetContent> worksheetContents, final String fileName, final InputStream in)
-  Blob toExcelPivot(final List<T> domainObjects, final Class<T> cls, final String fileName)
-  Blob toExcelPivot(final List<T> domainObjects, final Class<T> cls, final String sheetName, final String fileName)
-  Blob toExcelPivot(final WorksheetContent worksheetContent, final String fileName)
-  Blob toExcelPivot(final List<WorksheetContent> worksheetContents, final String fileName)
-  List<T> fromExcel(final Blob excelBlob, final Class<T> cls, final String sheetName)     // <.>
-  List<T> fromExcel(final Blob excelBlob, final Class<T> cls, final String sheetName, final Mode mode)
-  List<T> fromExcel(final Blob excelBlob, final WorksheetSpec worksheetSpec)
-  List<List<?>> fromExcel(final Blob excelBlob, final List<WorksheetSpec> worksheetSpecs)
-  List<List<?>> fromExcel(final Blob excelBlob, final WorksheetSpec.Matcher matcher)
-  List<List<?>> fromExcel(final Blob excelBlob, final WorksheetSpec.Matcher matcher, final WorksheetSpec.Sequencer sequencer)
+interface ExcelService {
+  String XSLX_MIME_TYPE;
+  Blob toExcel(List<T> domainObjects, Class<T> cls, String sheetName, String fileName)     // <.>
+  Blob toExcel(List<T> domainObjects, Class<T> cls, String sheetName, String fileName, InputStream in)
+  Blob toExcel(WorksheetContent worksheetContent, String fileName)
+  Blob toExcel(WorksheetContent worksheetContent, String fileName, InputStream in)
+  Blob toExcel(List<WorksheetContent> worksheetContents, String fileName)
+  Blob toExcel(List<WorksheetContent> worksheetContents, String fileName, InputStream in)
+  Blob toExcelPivot(List<T> domainObjects, Class<T> cls, String fileName)
+  Blob toExcelPivot(List<T> domainObjects, Class<T> cls, String sheetName, String fileName)
+  Blob toExcelPivot(WorksheetContent worksheetContent, String fileName)
+  Blob toExcelPivot(List<WorksheetContent> worksheetContents, String fileName)
+  List<T> fromExcel(Blob excelBlob, Class<T> cls, String sheetName)     // <.>
+  List<T> fromExcel(Blob excelBlob, Class<T> cls, String sheetName, Mode mode)
+  List<T> fromExcel(Blob excelBlob, WorksheetSpec worksheetSpec)
+  List<List<?>> fromExcel(Blob excelBlob, List<WorksheetSpec> worksheetSpecs)
+  List<List<?>> fromExcel(Blob excelBlob, WorksheetSpec.Matcher matcher)
+  List<List<?>> fromExcel(Blob excelBlob, WorksheetSpec.Matcher matcher, WorksheetSpec.Sequencer sequencer)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/ExcelServiceImpl.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/ExcelServiceImpl.adoc
deleted file mode 100644
index 8cb763f..0000000
--- a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/ExcelServiceImpl.adoc
+++ /dev/null
@@ -1,137 +0,0 @@
-= ExcelServiceImpl
-:Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
-
-== API
-
-[source,java]
-.ExcelServiceImpl.java
-----
-class ExcelServiceImpl {
-  Blob toExcel(final List<T> domainObjects, final Class<T> cls, final String sheetName, final String fileName)     // <.>
-  Blob toExcel(final List<T> domainObjects, final Class<T> cls, final String sheetName, final String fileName, final InputStream in)     // <.>
-  Blob toExcel(WorksheetContent worksheetContent, final String fileName)     // <.>
-  Blob toExcel(WorksheetContent worksheetContent, final String fileName, final InputStream in)     // <.>
-  Blob toExcel(final List<WorksheetContent> worksheetContents, final String fileName)     // <.>
-  Blob toExcel(final List<WorksheetContent> worksheetContents, final String fileName, final InputStream in)     // <.>
-  Blob toExcelPivot(final List<T> domainObjects, final Class<T> cls, final String fileName)     // <.>
-  Blob toExcelPivot(final List<T> domainObjects, final Class<T> cls, final String sheetName, final String fileName)
-  Blob toExcelPivot(WorksheetContent worksheetContent, final String fileName)
-  Blob toExcelPivot(final List<WorksheetContent> worksheetContents, final String fileName)
-  List<T> fromExcel(final Blob excelBlob, final Class<T> cls, final String sheetName)     // <.>
-  List<T> fromExcel(final Blob excelBlob, final WorksheetSpec worksheetSpec)     // <.>
-  List<List<?>> fromExcel(final Blob excelBlob, final List<WorksheetSpec> worksheetSpecs)     // <.>
-}
-----
-
-<.> xref:#toExcel__List_Class_String_String[toExcel(List, Class, String, String)]
-+
---
-Creates a Blob holding a single-sheet spreadsheet of the domain objects.
---
-<.> xref:#toExcel__List_Class_String_String_InputStream[toExcel(List, Class, String, String, InputStream)]
-+
---
-As _#toExcel(List, Class, String, String)_ , but appends a single-sheet spreadsheet of the domain objects to an existing workbook instead of creating one.
---
-<.> xref:#toExcel__WorksheetContent_String[toExcel(WorksheetContent, String)]
-+
---
-As _#toExcel(List, Class, String, String)_ , but with the domain objects, class and sheet name provided using a xref:refguide:subdomains:index/excel/applib/dom/WorksheetContent.adoc[WorksheetContent] .
---
-<.> xref:#toExcel__WorksheetContent_String_InputStream[toExcel(WorksheetContent, String, InputStream)]
-+
---
-As _#toExcel(List, Class, String, String)_ , but with the domain objects, class and sheet name provided using a xref:refguide:subdomains:index/excel/applib/dom/WorksheetContent.adoc[WorksheetContent] and with an input stream.
---
-<.> xref:#toExcel__List_String[toExcel(List, String)]
-+
---
-As _#toExcel(WorksheetContent, String)_ , but with multiple sheets.
---
-<.> xref:#toExcel__List_String_InputStream[toExcel(List, String, InputStream)]
-+
---
-As _#toExcel(WorksheetContent, String)_ , but with multiple sheets and an input stream.
---
-<.> xref:#toExcelPivot__List_Class_String[toExcelPivot(List, Class, String)]
-+
---
-Creates a Blob holding a single-sheet spreadsheet with a pivot of the domain objects. The sheet name is derived from the class name.
---
-<.> xref:#fromExcel__Blob_Class_String[fromExcel(Blob, Class, String)]
-+
---
-Returns a list of objects for each line in the spreadsheet, of the specified type. The objects are read from a sheet taken as the simple name of the class.
---
-<.> xref:#fromExcel__Blob_WorksheetSpec[fromExcel(Blob, WorksheetSpec)]
-+
---
-As _#fromExcel(Blob, Class, String)_ , but specifying the class name and sheet name by way of a xref:refguide:subdomains:index/excel/applib/dom/WorksheetSpec.adoc[WorksheetSpec] .
---
-<.> xref:#fromExcel__Blob_List[fromExcel(Blob, List)]
-+
---
-As _#fromExcel(Blob, WorksheetSpec)_ , but reading multiple sheets (and returning a list of lists of domain objects).
---
-
-== Members
-
-[#toExcel__List_Class_String_String]
-=== toExcel(List, Class, String, String)
-
-Creates a Blob holding a single-sheet spreadsheet of the domain objects.
-
-There are no specific restrictions on the domain objects; they can be either persistable entities or view models. Do be aware though that if imported back using _#fromExcel(Blob, Class, String)_ , then new instances are always created. It is generally better therefore to work with view models than to work with entities. This also makes it easier to maintain backward compatibility in the future if the persistence model changes; using view models represents a stable API for import/export.
-
-[#toExcel__List_Class_String_String_InputStream]
-=== toExcel(List, Class, String, String, InputStream)
-
-As _#toExcel(List, Class, String, String)_ , but appends a single-sheet spreadsheet of the domain objects to an existing workbook instead of creating one.
-
-[#toExcel__WorksheetContent_String]
-=== toExcel(WorksheetContent, String)
-
-As _#toExcel(List, Class, String, String)_ , but with the domain objects, class and sheet name provided using a xref:refguide:subdomains:index/excel/applib/dom/WorksheetContent.adoc[WorksheetContent] .
-
-[#toExcel__WorksheetContent_String_InputStream]
-=== toExcel(WorksheetContent, String, InputStream)
-
-As _#toExcel(List, Class, String, String)_ , but with the domain objects, class and sheet name provided using a xref:refguide:subdomains:index/excel/applib/dom/WorksheetContent.adoc[WorksheetContent] and with an input stream.
-
-[#toExcel__List_String]
-=== toExcel(List, String)
-
-As _#toExcel(WorksheetContent, String)_ , but with multiple sheets.
-
-[#toExcel__List_String_InputStream]
-=== toExcel(List, String, InputStream)
-
-As _#toExcel(WorksheetContent, String)_ , but with multiple sheets and an input stream.
-
-[#toExcelPivot__List_Class_String]
-=== toExcelPivot(List, Class, String)
-
-Creates a Blob holding a single-sheet spreadsheet with a pivot of the domain objects. The sheet name is derived from the class name.
-
-Minimal requirements for the domain object are:
-
-* One property has annotation xref:refguide:subdomains:index/excel/applib/dom/PivotRow.adoc[PivotRow] and will be used as row identifier in left column of pivot. Empty values are supported.
-* At least one property has annotation xref:refguide:subdomains:index/excel/applib/dom/PivotColumn.adoc[PivotColumn] . Its values will be used in columns of pivot. Empty values are supported.
-* At least one property has annotation xref:refguide:subdomains:index/excel/applib/dom/PivotValue.adoc[PivotValue] . Its values will be distributed in the pivot.
-
-[#fromExcel__Blob_Class_String]
-=== fromExcel(Blob, Class, String)
-
-Returns a list of objects for each line in the spreadsheet, of the specified type. The objects are read from a sheet taken as the simple name of the class.
-
-If the class is a view model then the objects will be properly instantiated, with the correct view model memento; otherwise the objects will be simple transient objects.
-
-[#fromExcel__Blob_WorksheetSpec]
-=== fromExcel(Blob, WorksheetSpec)
-
-As _#fromExcel(Blob, Class, String)_ , but specifying the class name and sheet name by way of a xref:refguide:subdomains:index/excel/applib/dom/WorksheetSpec.adoc[WorksheetSpec] .
-
-[#fromExcel__Blob_List]
-=== fromExcel(Blob, List)
-
-As _#fromExcel(Blob, WorksheetSpec)_ , but reading multiple sheets (and returning a list of lists of domain objects).
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/AnnotationList.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/AnnotationList.adoc
similarity index 100%
rename from antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/AnnotationList.adoc
rename to antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/AnnotationList.adoc
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/AnnotationTriplet.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/AnnotationTriplet.adoc
similarity index 100%
rename from antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/AnnotationTriplet.adoc
rename to antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/AnnotationTriplet.adoc
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/ExcelFileBlobConverter.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/ExcelFileBlobConverter.adoc
similarity index 100%
rename from antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/ExcelFileBlobConverter.adoc
rename to antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/ExcelFileBlobConverter.adoc
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/Mode.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/Mode.adoc
similarity index 100%
rename from antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/Mode.adoc
rename to antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/Mode.adoc
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/PivotUtils.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/PivotUtils.adoc
similarity index 100%
rename from antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/PivotUtils.adoc
rename to antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/PivotUtils.adoc
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/SheetPivoter.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/SheetPivoter.adoc
similarity index 100%
rename from antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/dom/util/SheetPivoter.adoc
rename to antora/components/refguide-index/modules/subdomains/pages/index/excel/applib/util/SheetPivoter.adoc
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/service/XDocReportService.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/XDocReportService.adoc
similarity index 83%
rename from antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/service/XDocReportService.adoc
rename to antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/XDocReportService.adoc
index f63e073..0c794d4 100644
--- a/antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/service/XDocReportService.adoc
+++ b/antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/XDocReportService.adoc
@@ -1,4 +1,4 @@
-= XDocReportService
+= XDocReportService _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
 == API
@@ -6,9 +6,8 @@
 [source,java]
 .XDocReportService.java
 ----
-class XDocReportService {
-  void init()
-  byte[] render(final byte[] templateBytes, final XDocReportModel dataModel, final OutputType outputType)
+interface XDocReportService {
+  byte[] render(byte[] templateBytes, XDocReportModel dataModel, OutputType outputType)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/service/XDocReportModel.adoc b/antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/XDocReportService~XDocReportModel.adoc
similarity index 90%
rename from antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/service/XDocReportModel.adoc
rename to antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/XDocReportService~XDocReportModel.adoc
index 5b810e1..5b5e904 100644
--- a/antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/service/XDocReportModel.adoc
+++ b/antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/XDocReportService~XDocReportModel.adoc
@@ -1,10 +1,10 @@
-= XDocReportModel _(interface)_
+= XDocReportService.XDocReportModel _(interface)_
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
 == API
 
 [source,java]
-.XDocReportModel.java
+.XDocReportService~XDocReportModel.java
 ----
 interface XDocReportModel {
   Map<String, Data> getContextData()
diff --git a/antora/components/refguide-index/modules/testing/pages/index/archtestsupport/applib/classrules/ArchitectureDomainRules.adoc b/antora/components/refguide-index/modules/testing/pages/index/archtestsupport/applib/classrules/ArchitectureDomainRules.adoc
index 4e8dfe8..41b7ff1 100644
--- a/antora/components/refguide-index/modules/testing/pages/index/archtestsupport/applib/classrules/ArchitectureDomainRules.adoc
+++ b/antora/components/refguide-index/modules/testing/pages/index/archtestsupport/applib/classrules/ArchitectureDomainRules.adoc
@@ -9,15 +9,15 @@ A library of architecture tests to ensure coding conventions are followed for do
 .ArchitectureDomainRules.java
 ----
 class ArchitectureDomainRules {
-  @ArchTest
-public static ArchRule every_jaxb_view_model_must_also_be_annotated_with_DomainObject_nature_MIXIN;     // <.>
   ArchRule every_DomainObject_must_specify_logicalTypeName()     // <.>
   ArchRule every_DomainService_must_specify_logicalTypeName()     // <.>
+  ArchRule every_logicalTypeName_must_be_unique()     // <.>
   ArchRule every_DomainObject_must_also_be_annotated_with_DomainObjectLayout()     // <.>
   ArchRule every_DomainService_must_also_be_annotated_with_DomainServiceLayout()     // <.>
   DescribedPredicate<JavaAnnotation<?>> DomainService_logicalTypeName()
   DescribedPredicate<JavaAnnotation<?>> DomainObject_logicalTypeName()
   DescribedPredicate<JavaAnnotation<?>> DomainXxx_logicalTypeName(final Class<? extends Annotation> annotationClass)
+  ArchRule every_jaxb_view_model_must_also_be_annotated_with_DomainObject_nature_VIEW_MODEL()     // <.>
   ArchRule every_Action_mixin_must_follow_naming_convention()     // <.>
   ArchRule every_Property_mixin_must_follow_naming_convention()     // <.>
   ArchRule every_Collection_mixin_must_follow_naming_convention()     // <.>
@@ -32,11 +32,6 @@ public static ArchRule every_jaxb_view_model_must_also_be_annotated_with_DomainO
 }
 ----
 
-<.> xref:#every_jaxb_view_model_must_also_be_annotated_with_DomainObject_nature_MIXIN[every_jaxb_view_model_must_also_be_annotated_with_DomainObject_nature_MIXIN]
-+
---
-This rule requires that classes annotated with the _XmlRootElement_ annotation must also be annotated with the xref:refguide:applib:index/annotation/DomainObject.adoc[DomainObject] annotation specifying a xref:refguide:applib:index/annotation/Nature.adoc[Nature] of _Nature#MIXIN MIXIN_ .
---
 <.> xref:#every_DomainObject_must_specify_logicalTypeName__[every_DomainObject_must_specify_logicalTypeName()]
 +
 --
@@ -47,6 +42,11 @@ This rule requires that classes annotated with the xref:refguide:applib:index/an
 --
 This rule requires that classes annotated with the xref:refguide:applib:index/annotation/DomainService.adoc[DomainService] annotation must specify their _DomainService#logicalTypeName() logicalTypeName_ .
 --
+<.> xref:#every_logicalTypeName_must_be_unique__[every_logicalTypeName_must_be_unique()]
++
+--
+This rule requires that classes annotated the `logicalTypeName` must be unique across all non-abstract xref:refguide:applib:index/annotation/DomainObject.adoc[DomainObject] s and xref:refguide:applib:index/annotation/DomainService.adoc[DomainService] s
+--
 <.> xref:#every_DomainObject_must_also_be_annotated_with_DomainObjectLayout__[every_DomainObject_must_also_be_annotated_with_DomainObjectLayout()]
 +
 --
@@ -57,6 +57,11 @@ This rule requires that classes annotated with the xref:refguide:applib:index/an
 --
 This rule requires that classes annotated with the xref:refguide:applib:index/annotation/DomainService.adoc[DomainService] annotation must also be annotated with the xref:refguide:applib:index/annotation/DomainServiceLayout.adoc[DomainServiceLayout] annotation.
 --
+<.> xref:#every_jaxb_view_model_must_also_be_annotated_with_DomainObject_nature_VIEW_MODEL__[every_jaxb_view_model_must_also_be_annotated_with_DomainObject_nature_VIEW_MODEL()]
++
+--
+This rule requires that classes annotated with the _XmlRootElement_ annotation must also be annotated with the xref:refguide:applib:index/annotation/DomainObject.adoc[DomainObject] annotation specifying a xref:refguide:applib:index/annotation/Nature.adoc[Nature] of _Nature#VIEW_MODEL VIEW_MODEL_ .
+--
 <.> xref:#every_Action_mixin_must_follow_naming_convention__[every_Action_mixin_must_follow_naming_convention()]
 +
 --
@@ -110,13 +115,6 @@ This rule requires that finders of repos reutrn either _java.util.Collection_ s
 
 == Members
 
-[#every_jaxb_view_model_must_also_be_annotated_with_DomainObject_nature_MIXIN]
-=== every_jaxb_view_model_must_also_be_annotated_with_DomainObject_nature_MIXIN
-
-This rule requires that classes annotated with the _XmlRootElement_ annotation must also be annotated with the xref:refguide:applib:index/annotation/DomainObject.adoc[DomainObject] annotation specifying a xref:refguide:applib:index/annotation/Nature.adoc[Nature] of _Nature#MIXIN MIXIN_ .
-
-This is required because the framework uses Spring to detect entities and view models (the xref:refguide:applib:index/annotation/DomainObject.adoc[DomainObject] annotation is actually a meta-annotation for Spring's _org.springframework.stereotype.Component_ annotation.
-
 [#every_DomainObject_must_specify_logicalTypeName__]
 === every_DomainObject_must_specify_logicalTypeName()
 
@@ -127,6 +125,11 @@ This rule requires that classes annotated with the xref:refguide:applib:index/an
 
 This rule requires that classes annotated with the xref:refguide:applib:index/annotation/DomainService.adoc[DomainService] annotation must specify their _DomainService#logicalTypeName() logicalTypeName_ .
 
+[#every_logicalTypeName_must_be_unique__]
+=== every_logicalTypeName_must_be_unique()
+
+This rule requires that classes annotated the `logicalTypeName` must be unique across all non-abstract xref:refguide:applib:index/annotation/DomainObject.adoc[DomainObject] s and xref:refguide:applib:index/annotation/DomainService.adoc[DomainService] s
+
 [#every_DomainObject_must_also_be_annotated_with_DomainObjectLayout__]
 === every_DomainObject_must_also_be_annotated_with_DomainObjectLayout()
 
@@ -137,6 +140,13 @@ This rule requires that classes annotated with the xref:refguide:applib:index/an
 
 This rule requires that classes annotated with the xref:refguide:applib:index/annotation/DomainService.adoc[DomainService] annotation must also be annotated with the xref:refguide:applib:index/annotation/DomainServiceLayout.adoc[DomainServiceLayout] annotation.
 
+[#every_jaxb_view_model_must_also_be_annotated_with_DomainObject_nature_VIEW_MODEL__]
+=== every_jaxb_view_model_must_also_be_annotated_with_DomainObject_nature_VIEW_MODEL()
+
+This rule requires that classes annotated with the _XmlRootElement_ annotation must also be annotated with the xref:refguide:applib:index/annotation/DomainObject.adoc[DomainObject] annotation specifying a xref:refguide:applib:index/annotation/Nature.adoc[Nature] of _Nature#VIEW_MODEL VIEW_MODEL_ .
+
+This is required because the framework uses Spring to detect entities and view models (the xref:refguide:applib:index/annotation/DomainObject.adoc[DomainObject] annotation is actually a meta-annotation for Spring's _org.springframework.stereotype.Component_ annotation.
+
 [#every_Action_mixin_must_follow_naming_convention__]
 === every_Action_mixin_must_follow_naming_convention()
 
diff --git a/antora/components/refguide-index/modules/testing/pages/index/archtestsupport/applib/classrules/ArchitectureJdoRules.adoc b/antora/components/refguide-index/modules/testing/pages/index/archtestsupport/applib/classrules/ArchitectureJdoRules.adoc
index dab8e80..ef3f459 100644
--- a/antora/components/refguide-index/modules/testing/pages/index/archtestsupport/applib/classrules/ArchitectureJdoRules.adoc
+++ b/antora/components/refguide-index/modules/testing/pages/index/archtestsupport/applib/classrules/ArchitectureJdoRules.adoc
@@ -9,6 +9,7 @@ A library of architecture tests to ensure coding conventions are followed for cl
 .ArchitectureJdoRules.java
 ----
 class ArchitectureJdoRules {
+  ArchRule every_logicalTypeName_and_jdo_discriminator_must_be_same()
   ArchRule every_jdo_PersistenceCapable_must_be_annotated_with_DomainObject_nature_of_ENTITY()     // <.>
   ArchRule every_jdo_PersistenceCapable_must_be_annotated_with_Version()     // <.>
   ArchRule every_jdo_PersistenceCapable_must_be_annotated_as_XmlJavaAdapter_PersistentEntityAdapter()     // <.>
@@ -107,6 +108,8 @@ This rule requires that classes annotated with the JDO _javax.jdo.annotations.Pe
 
 This is so that entities will have an alternative business key in addition to the system-defined surrogate key.
 
+The rule does _not_ apply to any entities that are subtype entities where there is a supertype entity.
+
 [#every_jdo_PersistenceCapable_must_have_schema__]
 === every_jdo_PersistenceCapable_must_have_schema()
 
diff --git a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScripts.adoc b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScripts.adoc
index e63f892..f7d66a9 100644
--- a/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScripts.adoc
+++ b/antora/components/refguide-index/modules/testing/pages/index/fixtures/applib/fixturescripts/FixtureScripts.adoc
@@ -23,7 +23,7 @@ public static final String LOGICAL_TYPE_NAME;
   Object recreateObjectsAndReturnFirst()     // <.>
   boolean hideRecreateObjectsAndReturnFirst()
   void run(final FixtureScript... fixtureScriptList)
-  void runPersonas(PersonaWithBuilderScript<? extends BuilderScriptAbstract<?>>... personaScripts)
+  void runPersonas(final PersonaWithBuilderScript<? extends BuilderScriptAbstract<?>>... personaScripts)
   T runPersona(final PersonaWithBuilderScript<? extends BuilderScriptAbstract<? extends T>> persona)
   T runBuilder(final BuilderScriptAbstract<T> builderScript)     // <.>
   T runBuilderScriptNonTransactional(final BuilderScriptAbstract<T> builderScript)     // <.>
@@ -33,9 +33,6 @@ public static final String LOGICAL_TYPE_NAME;
   void initOf(final String xml, final FixtureScript fs)
   FixtureResult newFixtureResult(final FixtureScript script, final String subkey, final Object object, final boolean firstTime)
   String titleOf(final FixtureResult fixtureResult)
-  T fixtureScript(final PersonaWithBuilderScript<BuilderScriptAbstract<T>> persona)     // <.>
-  void runFixtureScript(final FixtureScript... fixtureScriptList)     // <.>
-  T runBuilderScript(final BuilderScriptAbstract<T> builderScript)     // <.>
 }
 ----
 
@@ -64,36 +61,6 @@ Runs the builderScript within its own transactional boundary.
 --
 Runs the builderScript without its own transactional boundary.The caller is responsible to provide a transactional context/boundary.
 --
-<.> xref:#fixtureScript__PersonaWithBuilderScript[fixtureScript(PersonaWithBuilderScript)]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-renamed to _#runPersona(PersonaWithBuilderScript)_
-====
---
-<.> xref:#runFixtureScript__FixtureScript[runFixtureScript(FixtureScript)]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-renamed to _#run(FixtureScript...)_
-====
---
-<.> xref:#runBuilderScript__BuilderScriptAbstract[runBuilderScript(BuilderScriptAbstract)]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-renamed to _#runBuilder(BuilderScriptAbstract)_
-====
---
 
 == Members
 
@@ -124,34 +91,4 @@ Runs the builderScript within its own transactional boundary.
 
 Runs the builderScript without its own transactional boundary.The caller is responsible to provide a transactional context/boundary.
 
-[#fixtureScript__PersonaWithBuilderScript]
-=== fixtureScript(PersonaWithBuilderScript)
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-renamed to _#runPersona(PersonaWithBuilderScript)_
-====
-
-[#runFixtureScript__FixtureScript]
-=== runFixtureScript(FixtureScript)
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-renamed to _#run(FixtureScript...)_
-====
-
-[#runBuilderScript__BuilderScriptAbstract]
-=== runBuilderScript(BuilderScriptAbstract)
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-renamed to _#runBuilder(BuilderScriptAbstract)_
-====
-
 include::hooks/FixtureScripts_020-configuration-properties.adoc[]
diff --git a/antora/components/refguide-index/modules/testing/pages/index/integtestsupport/applib/validate/DomainModelValidator.adoc b/antora/components/refguide-index/modules/testing/pages/index/integtestsupport/applib/validate/DomainModelValidator.adoc
index f291b21..57bad83 100644
--- a/antora/components/refguide-index/modules/testing/pages/index/integtestsupport/applib/validate/DomainModelValidator.adoc
+++ b/antora/components/refguide-index/modules/testing/pages/index/integtestsupport/applib/validate/DomainModelValidator.adoc
@@ -7,14 +7,15 @@
 .DomainModelValidator.java
 ----
 class DomainModelValidator {
-  DomainModelValidator(ServiceRegistry registry)
+  DomainModelValidator(final ServiceRegistry registry)
   DomainModelValidator(final SpecificationLoader specificationLoader, final IsisConfiguration configuration, final IsisSystemEnvironment isisSystemEnvironment)
   void assertValid()     // <.>
   void throwIfInvalid()     // <.>
   Set<ValidationFailure> getFailures()
-  Stream<ValidationFailure> streamFailures(Predicate<Identifier> filter)
+  Stream<ValidationFailure> streamFailures(final Predicate<Identifier> filter)
   Stream<ValidationFailure> streamFailuresMatchingOriginatingIdentifier(final Identifier identifier)
-  boolean anyMatchesContaining(final Identifier identifier, final String messageSnippet)     // <.>
+  void assertAnyFailuresContaining(final Identifier identifier, final String messageSnippet)     // <.>
+  void assertAnyOfContainingAnyFailures(final Can<Identifier> classIdentifiers, final String messageSnippet)     // <.>
 }
 ----
 
@@ -28,10 +29,15 @@ Typical usage in integration tests.
 --
 Alternative way of checking
 --
-<.> xref:#anyMatchesContaining__Identifier_String[anyMatchesContaining(Identifier, String)]
+<.> xref:#assertAnyFailuresContaining__Identifier_String[assertAnyFailuresContaining(Identifier, String)]
 +
 --
-primarily used for testing
+JUnit support
+--
+<.> xref:#assertAnyOfContainingAnyFailures__Can_String[assertAnyOfContainingAnyFailures(Can, String)]
++
+--
+JUnit support
 --
 
 == Members
@@ -46,7 +52,12 @@ Typical usage in integration tests.
 
 Alternative way of checking
 
-[#anyMatchesContaining__Identifier_String]
-=== anyMatchesContaining(Identifier, String)
+[#assertAnyFailuresContaining__Identifier_String]
+=== assertAnyFailuresContaining(Identifier, String)
+
+JUnit support
+
+[#assertAnyOfContainingAnyFailures__Can_String]
+=== assertAnyOfContainingAnyFailures(Can, String)
 
-primarily used for testing
+JUnit support
diff --git a/antora/components/refguide-index/modules/testing/pages/index/specsupport/applib/integration/ObjectFactoryForIntegration.adoc b/antora/components/refguide-index/modules/testing/pages/index/specsupport/applib/integration/ObjectFactoryForIntegration.adoc
index 7486a3f..a636567 100644
--- a/antora/components/refguide-index/modules/testing/pages/index/specsupport/applib/integration/ObjectFactoryForIntegration.adoc
+++ b/antora/components/refguide-index/modules/testing/pages/index/specsupport/applib/integration/ObjectFactoryForIntegration.adoc
@@ -9,8 +9,8 @@
 class ObjectFactoryForIntegration {
   void start()
   void stop()
-  boolean addClass(Class<?> clazz)
-  T getInstance(Class<T> type)
+  boolean addClass(final Class<?> clazz)
+  T getInstance(final Class<T> type)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.adoc
index a945fc7..111e228 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/jaxb/AsciiDocJaxbAdapter.adoc
@@ -7,8 +7,8 @@
 .AsciiDocJaxbAdapter.java
 ----
 class AsciiDocJaxbAdapter {
-  AsciiDoc unmarshal(String v)
-  String marshal(AsciiDoc v)
+  AsciiDoc unmarshal(final String v)
+  String marshal(final AsciiDoc v)
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
index ce50519..c759441 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
@@ -10,14 +10,24 @@ Immutable value type holding pre-rendered HTML.
 ----
 class AsciiDoc {
   AsciiDoc()
-  AsciiDoc(String adoc)
-  AsciiDoc valueOfAdoc(String adoc)
-  String title()
+  AsciiDoc(final String adoc)
+  AsciiDoc valueOf(final String adoc)
   String asHtml()
   boolean isEqualTo(final AsciiDoc other)
-  boolean equals(final Object obj)
-  int hashCode()
   String toString()
+  void loadJRuby()     // <.>
 }
 ----
 
+<.> xref:#loadJRuby__[loadJRuby()]
++
+--
+Not strictly required, but allows for eager loading. Is a one-shot, that may take about 5 seconds.
+--
+
+== Members
+
+[#loadJRuby__]
+=== loadJRuby()
+
+Not strictly required, but allows for eager loading. Is a one-shot, that may take about 5 seconds.
diff --git a/antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/service/OutputType.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/applib/IsisModuleValJodatimeApplib.adoc
similarity index 88%
rename from antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/service/OutputType.adoc
rename to antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/applib/IsisModuleValJodatimeApplib.adoc
index 7d04940..279e6a5 100644
--- a/antora/components/refguide-index/modules/subdomains/pages/index/xdocreport/applib/service/OutputType.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/applib/IsisModuleValJodatimeApplib.adoc
@@ -1,14 +1,12 @@
-= OutputType _(enum)_
+= IsisModuleValJodatimeApplib
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
 == API
 
 [source,java]
-.OutputType.java
+.IsisModuleValJodatimeApplib.java
 ----
-enum OutputType {
-  DOCX
-  PDF
+class IsisModuleValJodatimeApplib {
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/applib/pages/index/jaxb/JodaTimeJaxbAdapters.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/applib/jaxb/JodaTimeJaxbAdapters.adoc
similarity index 100%
rename from antora/components/refguide-index/modules/applib/pages/index/jaxb/JodaTimeJaxbAdapters.adoc
rename to antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/applib/jaxb/JodaTimeJaxbAdapters.adoc
diff --git a/antora/components/refguide-index/modules/applib/pages/index/jaxb/JodaTimeXMLGregorianCalendarMarshalling.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/applib/jaxb/JodaTimeXMLGregorianCalendarMarshalling.adoc
similarity index 95%
rename from antora/components/refguide-index/modules/applib/pages/index/jaxb/JodaTimeXMLGregorianCalendarMarshalling.adoc
rename to antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/applib/jaxb/JodaTimeXMLGregorianCalendarMarshalling.adoc
index d7ae40f..a0cb428 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/jaxb/JodaTimeXMLGregorianCalendarMarshalling.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/applib/jaxb/JodaTimeXMLGregorianCalendarMarshalling.adoc
@@ -11,7 +11,7 @@ class JodaTimeXMLGregorianCalendarMarshalling {
   LocalDate toLocalDate(final XMLGregorianCalendar xgc)
   LocalDateTime toLocalDateTime(final XMLGregorianCalendar xgc)
   LocalTime toLocalTime(final XMLGregorianCalendar xgc)
-  XMLGregorianCalendar toXMLGregorianCalendar(DateTime dateTime)
+  XMLGregorianCalendar toXMLGregorianCalendar(final DateTime dateTime)
   XMLGregorianCalendar toXMLGregorianCalendar(final LocalDateTime localDateTime)
   XMLGregorianCalendar toXMLGregorianCalendar(final LocalDate localDate)
   XMLGregorianCalendar toXMLGregorianCalendar(final LocalTime localTime)
diff --git a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/LocaleProvider.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/applib/value/JodaTimeConverters.adoc
similarity index 54%
rename from antora/components/refguide-index/modules/applib/pages/index/services/i18n/LocaleProvider.adoc
rename to antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/applib/value/JodaTimeConverters.adoc
index 7acf604..d40c95e 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/services/i18n/LocaleProvider.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/applib/value/JodaTimeConverters.adoc
@@ -1,31 +1,24 @@
-= LocaleProvider _(interface)_
+= JodaTimeConverters
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-One of a number of services that work together to provide support for i18n, its responsibility being simply to return the _Locale_ of the current user.
-
 == API
 
 [source,java]
-.LocaleProvider.java
+.JodaTimeConverters.java
 ----
-interface LocaleProvider {
-  Locale getLocale()     // <.>
+class JodaTimeConverters {
+  Instant toJoda(final java.time.Instant input)
+  java.time.Instant fromJoda(final Instant input)
+  LocalTime toJoda(final java.time.LocalTime input)
+  java.time.LocalTime fromJoda(final LocalTime input)
+  LocalDate toJoda(final java.time.LocalDate input)
+  java.time.LocalDate fromJoda(final LocalDate input)
+  LocalDateTime toJoda(final java.time.LocalDateTime input)
+  java.time.LocalDateTime fromJoda(final LocalDateTime input)
+  DateTime toJoda(final java.time.ZonedDateTime input)
+  java.time.ZonedDateTime fromJoda(final DateTime input)
+  DateTimeZone toJoda(final java.time.ZoneId input)
+  java.time.ZoneId fromJoda(final DateTimeZone input)
 }
 ----
 
-<.> xref:#getLocale__[getLocale()]
-+
---
-Returns the _Locale_ of the current user.
---
-
-== Members
-
-[#getLocale__]
-=== getLocale()
-
-Returns the _Locale_ of the current user.
-
-include::hooks/LocaleProvider_010-implementation.adoc[]
-
-include::hooks/LocaleProvider_020-examples-and-usage.adoc[]
diff --git a/antora/components/refguide-index/modules/applib/pages/index/value/HasHtml.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/integration/IsisModuleValJodatimeIntegration.adoc
similarity index 87%
rename from antora/components/refguide-index/modules/applib/pages/index/value/HasHtml.adoc
rename to antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/integration/IsisModuleValJodatimeIntegration.adoc
index bdec5ab..2080afa 100644
--- a/antora/components/refguide-index/modules/applib/pages/index/value/HasHtml.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/jodatime/integration/IsisModuleValJodatimeIntegration.adoc
@@ -1,13 +1,12 @@
-= HasHtml _(interface)_
+= IsisModuleValJodatimeIntegration
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
 == API
 
 [source,java]
-.HasHtml.java
+.IsisModuleValJodatimeIntegration.java
 ----
-interface HasHtml {
-  String asHtml()
+class IsisModuleValJodatimeIntegration {
 }
 ----
 
diff --git a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc b/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/applib/value/Markdown.adoc
similarity index 79%
copy from antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
copy to antora/components/refguide-index/modules/valuetypes/pages/index/markdown/applib/value/Markdown.adoc
index ce50519..70f8e4d 100644
--- a/antora/components/refguide-index/modules/valuetypes/pages/index/asciidoc/applib/value/AsciiDoc.adoc
+++ b/antora/components/refguide-index/modules/valuetypes/pages/index/markdown/applib/value/Markdown.adoc
@@ -1,4 +1,4 @@
-= AsciiDoc
+= Markdown
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
 Immutable value type holding pre-rendered HTML.
@@ -6,17 +6,14 @@ Immutable value type holding pre-rendered HTML.
 == API
 
 [source,java]
-.AsciiDoc.java
+.Markdown.java
 ----
-class AsciiDoc {
-  AsciiDoc()
-  AsciiDoc(String adoc)
-  AsciiDoc valueOfAdoc(String adoc)
-  String title()
+class Markdown {
+  Markdown()
+  Markdown(final String markdown)
+  Markdown valueOf(final String markdown)
   String asHtml()
-  boolean isEqualTo(final AsciiDoc other)
-  boolean equals(final Object obj)
-  int hashCode()
+  boolean isEqualTo(final Markdown other)
   String toString()
 }
 ----
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/common/applib/mixins/Object_impersonate.adoc b/antora/components/refguide-index/modules/viewer/pages/index/common/applib/mixins/Object_impersonate.adoc
index 6d0fbf4..984d445 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/common/applib/mixins/Object_impersonate.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/common/applib/mixins/Object_impersonate.adoc
@@ -1,7 +1,7 @@
 = Object_impersonate
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Same as _ImpersonateMenu#impersonate(String)_ , but implemented as a mixin so that can be invoked while accessing an object.
+Same as _ImpersonateMenu.impersonate#act(String)_ , but implemented as a mixin so that can be invoked while accessing an object.
 
 == API
 
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/common/applib/mixins/Object_impersonateWithRoles.adoc b/antora/components/refguide-index/modules/viewer/pages/index/common/applib/mixins/Object_impersonateWithRoles.adoc
index 82b3987..30babfc 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/common/applib/mixins/Object_impersonateWithRoles.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/common/applib/mixins/Object_impersonateWithRoles.adoc
@@ -1,7 +1,7 @@
 = Object_impersonateWithRoles
 :Notice: Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at. http://www.apache.org/licenses/LICENSE-2.0 . Unless required by applicable law or ag [...]
 
-Same as _ImpersonateMenu#impersonateWithRoles(String, List, String)_ , but implemented as a mixin so that can be invoked while accessing an object.
+Same as _org.apache.isis.applib.services.user.ImpersonateMenu.impersonateWithRoles#act(String, List, String)_ , but implemented as a mixin so that can be invoked while accessing an object.
 
 == API
 
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/JsonRepresentation.adoc b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/JsonRepresentation.adoc
index edb2b30..9f0f361 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/JsonRepresentation.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/JsonRepresentation.adoc
@@ -62,8 +62,6 @@ class JsonRepresentation {
   Float asFloat()     // <.>
   boolean isDecimal(final String path)
   boolean isDecimal()
-  boolean isDouble(final String path)     // <.>
-  boolean isDouble()     // <.>
   Double getDouble(final String path)     // <.>
   Double asDouble()     // <.>
   boolean isBigInteger(final String path)
@@ -77,7 +75,7 @@ class JsonRepresentation {
   BigDecimal getBigDecimal(final String path)     // <.>
   BigDecimal getBigDecimal(final String path, final String formatRequested)     // <.>
   BigDecimal asBigDecimal()     // <.>
-  BigDecimal asBigDecimal(String format)     // <.>
+  BigDecimal asBigDecimal(final String format)     // <.>
   boolean isString(final String path)
   boolean isString()
   String getString(final String path)     // <.>
@@ -132,13 +130,13 @@ class JsonRepresentation {
   JsonRepresentation mapPut(final String key, final char value)
   JsonRepresentation mapPut(final String key, final Character value)
   JsonRepresentation mapPut(final String key, final BigInteger value)
-  JsonRepresentation mapPut(Iterable<Entry<String, JsonRepresentation>> entries)
-  JsonRepresentation mapPut(Entry<String, JsonRepresentation> entry)
+  JsonRepresentation mapPut(final Iterable<Entry<String, JsonRepresentation>> entries)
+  JsonRepresentation mapPut(final Entry<String, JsonRepresentation> entry)
   JsonRepresentation mapPut(final String key, final BigDecimal value)
   Stream<Map.Entry<String, JsonRepresentation>> streamMapEntries()
   JsonRepresentation ensureArray()     // <.>
   int hashCode()
-  boolean equals(Object obj)
+  boolean equals(final Object obj)
   String toString()
 }
 ----
@@ -228,35 +226,15 @@ Use _#isDecimal(String)_ to test if a decimal value
 --
 Use _#isNumber()_ to test if number (it is not possible to check if a float, however).
 --
-<.> xref:#isDouble__String[isDouble(String)]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-- use _#isDecimal(String)_
-====
---
-<.> xref:#isDouble__[isDouble()]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-- use _#isDecimal()_
-====
---
 <.> xref:#getDouble__String[getDouble(String)]
 +
 --
-Use _#isDouble(String)_ to check first, if required.
+Use _#isDecimal(String)_ to check first, if required.
 --
 <.> xref:#asDouble__[asDouble()]
 +
 --
-Use _#isDouble()_ to check first, if required.
+Use _#isDecimal()_ to check first, if required.
 --
 <.> xref:#getBigInteger__String[getBigInteger(String)]
 +
@@ -431,35 +409,15 @@ Use _#isDecimal(String)_ to test if a decimal value
 
 Use _#isNumber()_ to test if number (it is not possible to check if a float, however).
 
-[#isDouble__String]
-=== isDouble(String)
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-- use _#isDecimal(String)_
-====
-
-[#isDouble__]
-=== isDouble()
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-- use _#isDecimal()_
-====
-
 [#getDouble__String]
 === getDouble(String)
 
-Use _#isDouble(String)_ to check first, if required.
+Use _#isDecimal(String)_ to check first, if required.
 
 [#asDouble__]
 === asDouble()
 
-Use _#isDouble()_ to check first, if required.
+Use _#isDecimal()_ to check first, if required.
 
 [#getBigInteger__String]
 === getBigInteger(String)
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/Rel.adoc b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/Rel.adoc
index 8045a55..832353c 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/Rel.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/Rel.adoc
@@ -45,15 +45,28 @@ enum Rel {
   OBJECT_ICON
   LAYOUT
   MENUBARS
+  BRAND_LOGO_SIGNIN
+  BRAND_LOGO_HEADER
   LOGOUT
-  String getName()
-  String andParam(String paramName, String paramValue)     // <.>
-  boolean matches(Rel otherRel)
+  String getName()     // <.>
+  String getSimpleName()     // <.>
+  String andParam(final String paramName, final String paramValue)     // <.>
+  boolean matches(final Rel otherRel)
   boolean matches(final String otherRelStr)
   Rel parse(String str)
 }
 ----
 
+<.> xref:#getName__[getName()]
++
+--
+full spec name with rel-def and suffix, eg. _urn:org.apache.isis.restfulobjects:rels/menuBars_
+--
+<.> xref:#getSimpleName__[getSimpleName()]
++
+--
+suffix only, eg. _menuBars_
+--
 <.> xref:#andParam__String_String[andParam(String, String)]
 +
 --
@@ -62,6 +75,16 @@ For those xref:refguide:viewer:index/restfulobjects/applib/Rel.adoc[Rel] s that
 
 == Members
 
+[#getName__]
+=== getName()
+
+full spec name with rel-def and suffix, eg. _urn:org.apache.isis.restfulobjects:rels/menuBars_
+
+[#getSimpleName__]
+=== getSimpleName()
+
+suffix only, eg. _menuBars_
+
 [#andParam__String_String]
 === andParam(String, String)
 
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/RepresentationType.adoc b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/RepresentationType.adoc
index 56b42cc..f7d83f6 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/RepresentationType.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/applib/RepresentationType.adoc
@@ -21,7 +21,7 @@ enum RepresentationType {
   DOMAIN_TYPE
   LAYOUT
   OBJECT_LAYOUT
-  OBJECT_ICON
+  IMAGE
   MENUBARS
   PROPERTY_DESCRIPTION
   COLLECTION_DESCRIPTION
@@ -31,7 +31,6 @@ enum RepresentationType {
   ERROR
   GENERIC
   String getName()
-  MediaType getMediaType()     // <.>
   MediaType getJsonMediaType()
   MediaType getXmlMediaType()
   MediaType getJsonElseXmlMediaType()
@@ -51,20 +50,10 @@ enum RepresentationType {
 }
 ----
 
-<.> xref:#getMediaType__[getMediaType()]
-+
---
-[WARNING]
-====
-[red]#_deprecated:_#
-
-- use _#getJsonMediaType()_ instead.
-====
---
 <.> xref:#getMediaType__String_String[getMediaType(String, String)]
 +
 --
-Clones the (immutable) _#getMediaType() media type_ , adding in one additional parameter value.
+Clones the (immutable) _#getJsonMediaType() media type_ , adding in one additional parameter value.
 --
 <.> xref:#matchesXmlProfileWithParameter__List_String[matchesXmlProfileWithParameter(List, String)]
 +
@@ -79,20 +68,10 @@ whether any of the xref:refguide:viewer:index/restfulobjects/applib/Representati
 
 == Members
 
-[#getMediaType__]
-=== getMediaType()
-
-[WARNING]
-====
-[red]#_deprecated:_#
-
-- use _#getJsonMediaType()_ instead.
-====
-
 [#getMediaType__String_String]
 === getMediaType(String, String)
 
-Clones the (immutable) _#getMediaType() media type_ , adding in one additional parameter value.
+Clones the (immutable) _#getJsonMediaType() media type_ , adding in one additional parameter value.
 
 [#matchesXmlProfileWithParameter__List_String]
 === matchesXmlProfileWithParameter(List, String)
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/IResourceContext.adoc b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/IResourceContext.adoc
index b792630..f1b8996 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/IResourceContext.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/IResourceContext.adoc
@@ -9,7 +9,8 @@ Provides access to request-specific context (eg HTTP headers), session-specific
 .IResourceContext.java
 ----
 interface IResourceContext {
-  String urlFor(final String url)     // <.>
+  String restfulUrlFor(final String url)     // <.>
+  String applicationUrlFor(final String url)     // <.>
   List<MediaType> getAcceptableMediaTypes()     // <.>
   InteractionInitiatedBy getInteractionInitiatedBy()     // <.>
   Where getWhere()
@@ -32,10 +33,15 @@ interface IResourceContext {
 }
 ----
 
-<.> xref:#urlFor__String[urlFor(String)]
+<.> xref:#restfulUrlFor__String[restfulUrlFor(String)]
 +
 --
-Prepends with the base URI
+Prepends with the servlet's base URI
+--
+<.> xref:#applicationUrlFor__String[applicationUrlFor(String)]
++
+--
+Prepends with the application's base URI.
 --
 <.> xref:#getAcceptableMediaTypes__[getAcceptableMediaTypes()]
 +
@@ -60,10 +66,15 @@ Applies only when rendering a domain object.
 
 == Members
 
-[#urlFor__String]
-=== urlFor(String)
+[#restfulUrlFor__String]
+=== restfulUrlFor(String)
+
+Prepends with the servlet's base URI
+
+[#applicationUrlFor__String]
+=== applicationUrlFor(String)
 
-Prepends with the base URI
+Prepends with the application's base URI.
 
 [#getAcceptableMediaTypes__]
 === getAcceptableMediaTypes()
diff --git a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.adoc b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.adoc
index d7a8372..6474658 100644
--- a/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.adoc
+++ b/antora/components/refguide-index/modules/viewer/pages/index/restfulobjects/rendering/service/swagger/SwaggerServiceMenu.adoc
@@ -9,14 +9,7 @@
 class SwaggerServiceMenu {
   public static final String LOGICAL_TYPE_NAME;
   SwaggerServiceMenu(final SwaggerService swaggerService, final ServiceRegistry serviceRegistry, final RestEasyConfiguration restEasyConfiguration)
-  LocalResourcePath openSwaggerUi()
-  String disableOpenSwaggerUi()
-  LocalResourcePath openRestApi()
-  String disableOpenRestApi()
-  Clob downloadSwaggerSchemaDefinition(final String fileNamePrefix, final Visibility visibility, final Format format)
-  String default0DownloadSwaggerSchemaDefinition()
-  Visibility default1DownloadSwaggerSchemaDefinition()
-  Format default2DownloadSwaggerSchemaDefinition()
+  String disableReasonWhenRequiresROViewer()
 }
 ----
 
diff --git a/core/adoc/modules/_overview/pages/about.adoc b/core/adoc/modules/_overview/pages/about.adoc
index 4d3f495..69bbaf2 100644
--- a/core/adoc/modules/_overview/pages/about.adoc
+++ b/core/adoc/modules/_overview/pages/about.adoc
@@ -615,6 +615,7 @@ Directory: /testing/specsupport/applib
 io.cucumber:cucumber-java:jar:<managed> +
 io.cucumber:cucumber-junit-platform-engine:jar:<managed> +
 io.cucumber:cucumber-spring:jar:<managed> +
+io.cucumber:messages:jar:17.1.1 +
 org.apache.isis.testing:isis-testing-fakedata-applib:jar:<managed> +
 org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
 org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed> +
@@ -758,16 +759,16 @@ Directory: /examples/demo
 ****
 com.h2database:h2:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-exceldownload-ui:jar:<managed> +
-org.apache.isis.extensions:isis-extensions-secman-encryption-jbcrypt:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-secman-encryption-spring:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-secman-integration:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-secman-persistence-jdo:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-secman-persistence-jpa:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-secman-shiro-realm:jar:<managed> +
 org.apache.isis.valuetypes:isis-valuetypes-asciidoc-metamodel:jar:<managed> +
-org.apache.isis.valuetypes:isis-valuetypes-asciidoc-persistence-jdo-dn5:jar:<managed> +
+org.apache.isis.valuetypes:isis-valuetypes-asciidoc-persistence-jdo:jar:<managed> +
 org.apache.isis.valuetypes:isis-valuetypes-asciidoc-persistence-jpa:jar:<managed> +
 org.apache.isis.valuetypes:isis-valuetypes-markdown-metamodel:jar:<managed> +
-org.apache.isis.valuetypes:isis-valuetypes-markdown-persistence-jdo-dn5:jar:<managed> +
+org.apache.isis.valuetypes:isis-valuetypes-markdown-persistence-jdo:jar:<managed> +
 org.apache.isis.valuetypes:isis-valuetypes-markdown-persistence-jpa:jar:<managed> +
 org.apache.isis.valuetypes:isis-valuetypes-sse-applib:jar:<managed> +
 org.projectlombok:lombok:jar:<managed> +
@@ -781,14 +782,248 @@ Artifact: demo-domain
 Type: jar
 Directory: /examples/demo/domain
 ----
-|.Dependencies
+|.Components
+****
+demoapp.dom.AppConfiguration +
+demoapp.dom._infra.DefaultTitleProvider +
+demoapp.dom._infra.LibraryPreloadingService +
+demoapp.dom._infra.resources.AsciiDocConverterService +
+demoapp.dom._infra.resources.AsciiDocReaderService +
+demoapp.dom._infra.resources.AsciiDocValueSemanticsWithPreprocessing +
+demoapp.dom._infra.resources.MarkdownReaderService +
+demoapp.dom._infra.resources.MarkupReaderService +
+demoapp.dom._infra.resources.MarkupVariableResolverService +
+demoapp.dom._infra.resources.ResourceReaderService +
+demoapp.dom._infra.samples.NameSamples +
+demoapp.dom._infra.urlencoding.UrlEncodingServiceNaiveInMemory +
+demoapp.dom.domain._changes.EntityChangesSubscriberToCaptureChangesInMemory +
+demoapp.dom.domain._commands.ExposePersistedCommands$TableColumnOrderDefault +
+demoapp.dom.domain._interactions.ExecutionListenerToCaptureInteractionsInMemory +
+demoapp.dom.domain.actions.Action.commandPublishing.ActionCommandPublishingSeeding +
+demoapp.dom.domain.actions.Action.commandPublishing.jdo.ActionCommandPublishingJdoEntities +
+demoapp.dom.domain.actions.Action.commandPublishing.jpa.ActionCommandPublishingJpaEntities +
+demoapp.dom.domain.actions.Action.domainEvent.subscribers.ActionDomainEventControlService +
+demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPublishingSeeding +
+demoapp.dom.domain.actions.Action.executionPublishing.jdo.ActionExecutionPublishingJdoEntities +
+demoapp.dom.domain.actions.Action.executionPublishing.jpa.ActionExecutionPublishingJpaEntities +
+demoapp.dom.domain.collections.Collection.domainEvent.subscribers.CollectionDomainEventControlService +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.DomainObjectEntityChangePublishingDisabledSeeding +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.jdo.DomainObjectEntityChangePublishingDisabledJdoEntities +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.jpa.DomainObjectEntityChangePublishingDisabledJpaEntities +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.DomainObjectEntityChangePublishingEnabledSeeding +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.jdo.DomainObjectEntityChangePublishingEnabledJdoEntities +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.jpa.DomainObjectEntityChangePublishingEnabledJpaEntities +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotatedSeeding +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.jdo.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdoEntities +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.jpa.DomainObjectEntityChangePublishingEnabledMetaAnnotatedJpaEntities +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenSeeding +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.jdo.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdoEntities +
+demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.jpa.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJpaEntities +
+demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.JaxbRefSeeding +
+demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.jdo.JaxbRefJdoEntities +
+demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.jpa.JaxbRefJpaEntities +
+demoapp.dom.domain.objects.other.embedded.jdo.ComplexNumberJdoValueSemantics +
+demoapp.dom.domain.objects.other.embedded.jdo.NumberConstantJdoRepository +
+demoapp.dom.domain.objects.other.embedded.jpa.ComplexNumberJpaValueSemantics +
+demoapp.dom.domain.objects.other.embedded.jpa.NumberConstantJpaRepository +
+demoapp.dom.domain.objects.other.embedded.persistence.NumberConstantSeeding +
+demoapp.dom.domain.objects.other.embedded.samples.ComplexNumberSamples +
+demoapp.dom.domain.properties.Property.commandPublishing.PropertyCommandPublishingSeeding +
+demoapp.dom.domain.properties.Property.commandPublishing.jdo.PropertyCommandPublishingJdoEntities +
+demoapp.dom.domain.properties.Property.commandPublishing.jpa.PropertyCommandPublishingJpaEntities +
+demoapp.dom.domain.properties.Property.domainEvent.subscribers.PropertyDomainEventControlService +
+demoapp.dom.domain.properties.Property.executionPublishing.PropertyExecutionPublishingSeeding +
+demoapp.dom.domain.properties.Property.executionPublishing.jdo.PropertyExecutionPublishingJdoEntities +
+demoapp.dom.domain.properties.Property.executionPublishing.jpa.PropertyExecutionPublishingJpaEntities +
+demoapp.dom.domain.properties.Property.projecting.jdo.PropertyProjectingChildJdoEntities +
+demoapp.dom.domain.properties.Property.projecting.jpa.PropertyProjectingChildJpaEntities +
+demoapp.dom.domain.properties.Property.projecting.persistence.PropertyProjectingChildSeeding +
+demoapp.dom.domain.properties.PropertyLayout.navigable.FileTreeNodeService +
+demoapp.dom.domain.properties.PropertyLayout.repainting.PdfJsViewerAdvisorFallback +
+demoapp.dom.featured.customui.geocoding.GeoapifyClient +
+demoapp.dom.services.core.errorreportingservice.ErrorReportingServiceDemoImplementation +
+demoapp.dom.services.core.eventbusservice.EventLogEntryJdoRepository +
+demoapp.dom.services.core.eventbusservice.EventLogEntryJpaRepository +
+demoapp.dom.services.core.eventbusservice.EventSubscriberDemoImplementation +
+demoapp.dom.services.core.wrapperFactory.WrapperFactorySeeding +
+demoapp.dom.services.core.wrapperFactory.jdo.WrapperFactoryJdoEntities +
+demoapp.dom.services.core.wrapperFactory.jpa.WrapperFactoryJpaEntities +
+demoapp.dom.services.extensions.secman.apptenancy.ApplicationTenancyEvaluatorForDemo +
+demoapp.dom.services.extensions.secman.apptenancy.jdo.TenantedJdoEntities +
+demoapp.dom.services.extensions.secman.apptenancy.jpa.TenantedJpaEntities +
+demoapp.dom.services.extensions.secman.apptenancy.persistence.TenantedSeeding +
+demoapp.dom.services.extensions.secman.appuser.seed.AppUserSeeding +
+demoapp.dom.types.isis.blobs.jdo.IsisBlobJdoEntities +
+demoapp.dom.types.isis.blobs.jpa.IsisBlobJpaEntities +
+demoapp.dom.types.isis.blobs.persistence.IsisBlobSeeding +
+demoapp.dom.types.isis.blobs.samples.IsisBlobsSamples +
+demoapp.dom.types.isis.clobs.jdo.IsisClobJdoEntities +
+demoapp.dom.types.isis.clobs.jpa.IsisClobJpaEntities +
+demoapp.dom.types.isis.clobs.persistence.IsisClobSeeding +
+demoapp.dom.types.isis.clobs.samples.IsisClobsSamples +
+demoapp.dom.types.isis.localresourcepaths.jdo.IsisLocalResourcePathJdoEntities +
+demoapp.dom.types.isis.localresourcepaths.jpa.IsisLocalResourcePathJpaEntities +
+demoapp.dom.types.isis.localresourcepaths.persistence.IsisLocalResourcePathSeeding +
+demoapp.dom.types.isis.localresourcepaths.samples.IsisLocalResourcePathsSamples +
+demoapp.dom.types.isis.markups.jdo.IsisMarkupJdoEntities +
+demoapp.dom.types.isis.markups.jpa.IsisMarkupJpaEntities +
+demoapp.dom.types.isis.markups.persistence.IsisMarkupSeeding +
+demoapp.dom.types.isis.markups.samples.IsisMarkupSamples +
+demoapp.dom.types.isis.passwords.jdo.IsisPasswordJdoEntities +
+demoapp.dom.types.isis.passwords.jpa.IsisPasswordJpaEntities +
+demoapp.dom.types.isis.passwords.persistence.IsisPasswordSeeding +
+demoapp.dom.types.isis.passwords.samples.IsisPasswordsSamples +
+demoapp.dom.types.isisext.asciidocs.jdo.IsisAsciiDocJdoEntities +
+demoapp.dom.types.isisext.asciidocs.jpa.IsisAsciiDocJpaEntities +
+demoapp.dom.types.isisext.asciidocs.persistence.IsisAsciiDocSeeding +
+demoapp.dom.types.isisext.asciidocs.samples.IsisAsciiDocSamples +
+demoapp.dom.types.isisext.cal.jdo.IsisCalendarEventEntities +
+demoapp.dom.types.isisext.cal.jpa.IsisCalendarEventEntities +
+demoapp.dom.types.isisext.cal.persistence.IsisCalendarEventSeeding +
+demoapp.dom.types.isisext.cal.samples.IsisCalendarEventSamples +
+demoapp.dom.types.isisext.markdowns.jdo.IsisMarkdownJdoEntities +
+demoapp.dom.types.isisext.markdowns.jpa.IsisMarkdownJpaEntities +
+demoapp.dom.types.isisext.markdowns.persistence.IsisMarkdownSeeding +
+demoapp.dom.types.isisext.markdowns.samples.IsisMarkdownSamples +
+demoapp.dom.types.javaawt.images.jdo.JavaAwtBufferedImageJdoEntities +
+demoapp.dom.types.javaawt.images.jpa.JavaAwtBufferedImageJpaEntities +
+demoapp.dom.types.javaawt.images.persistence.JavaAwtBufferedImageSeeding +
+demoapp.dom.types.javaawt.images.samples.JavaAwtBufferedImageService +
+demoapp.dom.types.javaawt.images.samples.JavaAwtBufferedImagesSamples +
+demoapp.dom.types.javalang.booleans.jdo.WrapperBooleanJdoEntities +
+demoapp.dom.types.javalang.booleans.jpa.WrapperBooleanJpaEntities +
+demoapp.dom.types.javalang.booleans.persistence.WrapperBooleanSeeding +
+demoapp.dom.types.javalang.booleans.samples.WrapperBooleanSamples +
+demoapp.dom.types.javalang.bytes.jdo.WrapperByteJdoEntities +
+demoapp.dom.types.javalang.bytes.jpa.WrapperByteJpaEntities +
+demoapp.dom.types.javalang.bytes.persistence.WrapperByteSeeding +
+demoapp.dom.types.javalang.bytes.samples.WrapperByteSamples +
+demoapp.dom.types.javalang.characters.jdo.WrapperCharacterJdoEntities +
+demoapp.dom.types.javalang.characters.jpa.WrapperCharacterJpaEntities +
+demoapp.dom.types.javalang.characters.persistence.WrapperCharacterSeeding +
+demoapp.dom.types.javalang.characters.samples.WrapperCharacterSamples +
+demoapp.dom.types.javalang.doubles.jdo.WrapperDoubleJdoEntities +
+demoapp.dom.types.javalang.doubles.jpa.WrapperDoubleJpaEntities +
+demoapp.dom.types.javalang.doubles.persistence.WrapperDoubleSeeding +
+demoapp.dom.types.javalang.doubles.samples.WrapperDoubleSamples +
+demoapp.dom.types.javalang.floats.jdo.WrapperFloatJdoEntities +
+demoapp.dom.types.javalang.floats.jpa.WrapperFloatJpaEntities +
+demoapp.dom.types.javalang.floats.persistence.WrapperFloatSeeding +
+demoapp.dom.types.javalang.floats.samples.WrapperFloatSamples +
+demoapp.dom.types.javalang.integers.jdo.WrapperIntegerJdoEntities +
+demoapp.dom.types.javalang.integers.jpa.WrapperIntegerJpaEntities +
+demoapp.dom.types.javalang.integers.persistence.WrapperIntegerSeeding +
+demoapp.dom.types.javalang.integers.samples.WrapperIntegerSamples +
+demoapp.dom.types.javalang.longs.jdo.WrapperLongJdoEntities +
+demoapp.dom.types.javalang.longs.jpa.WrapperLongJpaEntities +
+demoapp.dom.types.javalang.longs.persistence.WrapperLongSeeding +
+demoapp.dom.types.javalang.longs.samples.WrapperLongSamples +
+demoapp.dom.types.javalang.shorts.jdo.WrapperShortJdoEntities +
+demoapp.dom.types.javalang.shorts.jpa.WrapperShortJpaEntities +
+demoapp.dom.types.javalang.shorts.persistence.WrapperShortSeeding +
+demoapp.dom.types.javalang.shorts.samples.WrapperShortSamples +
+demoapp.dom.types.javalang.strings.jdo.JavaLangStringJdoEntities +
+demoapp.dom.types.javalang.strings.jpa.JavaLangStringJpaEntities +
+demoapp.dom.types.javalang.strings.persistence.JavaLangStringSeeding +
+demoapp.dom.types.javamath.bigdecimals.jdo.JavaMathBigDecimalJdoEntities +
+demoapp.dom.types.javamath.bigdecimals.jpa.JavaMathBigDecimalJpaEntities +
+demoapp.dom.types.javamath.bigdecimals.persistence.JavaMathBigDecimalSeeding +
+demoapp.dom.types.javamath.bigdecimals.samples.JavaMathBigDecimalSamples +
+demoapp.dom.types.javamath.bigintegers.jdo.JavaMathBigIntegerJdoEntities +
+demoapp.dom.types.javamath.bigintegers.jpa.JavaMathBigIntegerJpaEntities +
+demoapp.dom.types.javamath.bigintegers.persistence.JavaMathBigIntegerSeeding +
+demoapp.dom.types.javamath.bigintegers.samples.JavaMathBigIntegerSamples +
+demoapp.dom.types.javanet.urls.jdo.JavaNetUrlJdoEntities +
+demoapp.dom.types.javanet.urls.jpa.JavaNetUrlJpaEntities +
+demoapp.dom.types.javanet.urls.persistence.JavaNetUrlSeeding +
+demoapp.dom.types.javanet.urls.samples.JavaNetUrlSamples +
+demoapp.dom.types.javasql.javasqldate.jdo.JavaSqlDateJdoEntities +
+demoapp.dom.types.javasql.javasqldate.jpa.JavaSqlDateJpaEntities +
+demoapp.dom.types.javasql.javasqldate.persistence.JavaSqlDateSeeding +
+demoapp.dom.types.javasql.javasqldate.samples.JavaSqlDateSamples +
+demoapp.dom.types.javasql.javasqltimestamp.jdo.JavaSqlTimestampJdoEntities +
+demoapp.dom.types.javasql.javasqltimestamp.jpa.JavaSqlTimestampJpaEntities +
+demoapp.dom.types.javasql.javasqltimestamp.persistence.JavaSqlTimestampSeeding +
+demoapp.dom.types.javasql.javasqltimestamp.samples.JavaSqlTimestampSamples +
+demoapp.dom.types.javatime.javatimelocaldate.jdo.JavaTimeLocalDateJdoEntities +
+demoapp.dom.types.javatime.javatimelocaldate.jpa.JavaTimeLocalDateJpaEntities +
+demoapp.dom.types.javatime.javatimelocaldate.persistence.JavaTimeLocalDateSeeding +
+demoapp.dom.types.javatime.javatimelocaldate.samples.JavaTimeLocalDateSamples +
+demoapp.dom.types.javatime.javatimelocaldatetime.jdo.JavaTimeLocalDateTimeJdoEntities +
+demoapp.dom.types.javatime.javatimelocaldatetime.jpa.JavaTimeLocalDateTimeJpaEntities +
+demoapp.dom.types.javatime.javatimelocaldatetime.persistence.JavaTimeLocalDateTimeSeeding +
+demoapp.dom.types.javatime.javatimelocaldatetime.samples.JavaTimeLocalDateTimeSamples +
+demoapp.dom.types.javatime.javatimelocaltime.jdo.JavaTimeLocalTimeJdoEntities +
+demoapp.dom.types.javatime.javatimelocaltime.jpa.JavaTimeLocalTimeJpaEntities +
+demoapp.dom.types.javatime.javatimelocaltime.persistence.JavaTimeLocalTimeSeeding +
+demoapp.dom.types.javatime.javatimelocaltime.samples.JavaTimeLocalTimeSamples +
+demoapp.dom.types.javatime.javatimeoffsetdatetime.jdo.JavaTimeOffsetDateTimeJdoEntities +
+demoapp.dom.types.javatime.javatimeoffsetdatetime.jpa.JavaTimeOffsetDateTimeJpaEntities +
+demoapp.dom.types.javatime.javatimeoffsetdatetime.persistence.JavaTimeOffsetDateTimeSeeding +
+demoapp.dom.types.javatime.javatimeoffsetdatetime.samples.JavaTimeOffsetDateTimeSamples +
+demoapp.dom.types.javatime.javatimeoffsettime.jdo.JavaTimeOffsetTimeJdoEntities +
+demoapp.dom.types.javatime.javatimeoffsettime.jpa.JavaTimeOffsetTimeJpaEntities +
+demoapp.dom.types.javatime.javatimeoffsettime.persistence.JavaTimeOffsetTimeSeeding +
+demoapp.dom.types.javatime.javatimeoffsettime.samples.JavaTimeOffsetTimeSamples +
+demoapp.dom.types.javatime.javatimezoneddatetime.jdo.JavaTimeZonedDateTimeJdoEntities +
+demoapp.dom.types.javatime.javatimezoneddatetime.jpa.JavaTimeZonedDateTimeJpaEntities +
+demoapp.dom.types.javatime.javatimezoneddatetime.persistence.JavaTimeZonedDateTimeSeeding +
+demoapp.dom.types.javatime.javatimezoneddatetime.samples.JavaTimeZonedDateTimeSamples +
+demoapp.dom.types.javautil.javautildate.jdo.JavaUtilDateJdoEntities +
+demoapp.dom.types.javautil.javautildate.jpa.JavaUtilDateJpaEntities +
+demoapp.dom.types.javautil.javautildate.persistence.JavaUtilDateSeeding +
+demoapp.dom.types.javautil.javautildate.samples.JavaUtilDateSamples +
+demoapp.dom.types.javautil.uuids.jdo.JavaUtilUuidJdoEntities +
+demoapp.dom.types.javautil.uuids.jpa.JavaUtilUuidJpaEntities +
+demoapp.dom.types.javautil.uuids.persistence.JavaUtilUuidSeeding +
+demoapp.dom.types.javautil.uuids.samples.JavaUtilUuidSamples +
+demoapp.dom.types.jodatime.jodadatetime.jdo.JodaDateTimeJdoEntities +
+demoapp.dom.types.jodatime.jodadatetime.persistence.JodaDateTimeJdoSeeding +
+demoapp.dom.types.jodatime.jodadatetime.samples.JodaDateTimeSamples +
+demoapp.dom.types.jodatime.jodalocaldate.jdo.JodaLocalDateJdoEntities +
+demoapp.dom.types.jodatime.jodalocaldate.persistence.JodaLocalDateJdoSeeding +
+demoapp.dom.types.jodatime.jodalocaldate.samples.JodaLocalDateSamples +
+demoapp.dom.types.jodatime.jodalocaldatetime.jdo.JodaLocalDateTimeJdoEntities +
+demoapp.dom.types.jodatime.jodalocaldatetime.persistence.JodaLocalDateTimeSeeding +
+demoapp.dom.types.jodatime.jodalocaldatetime.samples.JodaLocalDateTimeSamples +
+demoapp.dom.types.jodatime.jodalocaltime.jdo.JodaLocalTimeJdoEntities +
+demoapp.dom.types.jodatime.jodalocaltime.persistence.JodaLocalTimeSeeding +
+demoapp.dom.types.jodatime.jodalocaltime.samples.JodaLocalTimeSamples +
+demoapp.dom.types.primitive.booleans.jdo.PrimitiveBooleanJdoEntities +
+demoapp.dom.types.primitive.booleans.jpa.PrimitiveBooleanJpaEntities +
+demoapp.dom.types.primitive.booleans.persistence.PrimitiveBooleanSeeding +
+demoapp.dom.types.primitive.bytes.jdo.PrimitiveByteJdoEntities +
+demoapp.dom.types.primitive.bytes.jpa.PrimitiveByteJpaEntities +
+demoapp.dom.types.primitive.bytes.persistence.PrimitiveByteSeeding +
+demoapp.dom.types.primitive.chars.jdo.PrimitiveCharJdoEntities +
+demoapp.dom.types.primitive.chars.jpa.PrimitiveCharJpaEntities +
+demoapp.dom.types.primitive.chars.persistence.PrimitiveCharSeeding +
+demoapp.dom.types.primitive.doubles.jdo.PrimitiveDoubleJdoEntities +
+demoapp.dom.types.primitive.doubles.jpa.PrimitiveDoubleJpaEntities +
+demoapp.dom.types.primitive.doubles.persistence.PrimitiveDoubleSeeding +
+demoapp.dom.types.primitive.floats.jdo.PrimitiveFloatJdoEntities +
+demoapp.dom.types.primitive.floats.jpa.PrimitiveFloatJpaEntities +
+demoapp.dom.types.primitive.floats.persistence.PrimitiveFloatSeeding +
+demoapp.dom.types.primitive.ints.jdo.PrimitiveIntJdoEntities +
+demoapp.dom.types.primitive.ints.jpa.PrimitiveIntJpaEntities +
+demoapp.dom.types.primitive.ints.persistence.PrimitiveIntSeeding +
+demoapp.dom.types.primitive.longs.jdo.PrimitiveLongJdoEntities +
+demoapp.dom.types.primitive.longs.jpa.PrimitiveLongJpaEntities +
+demoapp.dom.types.primitive.longs.persistence.PrimitiveLongSeeding +
+demoapp.dom.types.primitive.shorts.jdo.PrimitiveShortJdoEntities +
+demoapp.dom.types.primitive.shorts.jpa.PrimitiveShortJpaEntities +
+demoapp.dom.types.primitive.shorts.persistence.PrimitiveShortSeeding +
+****
+
+.Dependencies
 ****
 com.h2database:h2:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-command-log-jdo:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-command-log-jpa:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-exceldownload-ui:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-fullcalendar-applib:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-pdfjs-applib:jar:<managed> +
-org.apache.isis.extensions:isis-extensions-secman-encryption-jbcrypt:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-secman-encryption-spring:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-secman-integration:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-secman-persistence-jdo:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-secman-persistence-jpa:jar:<managed> +
@@ -853,7 +1088,12 @@ Artifact: demo-web
 Type: jar
 Directory: /examples/demo/web
 ----
-|.Dependencies
+|.Components
+****
+demoapp.web._infra.utils.ThereCanBeOnlyOne +
+****
+
+.Dependencies
 ****
 org.apache.isis.examples.apps:demo-domain:jar:${project.version} +
 org.apache.isis.extensions:isis-extensions-command-replay-primary:jar:<managed> +
@@ -873,9 +1113,15 @@ Artifact: demo-wicket-common
 Type: jar
 Directory: /examples/demo/wicket/common
 ----
-|.Dependencies
+|.Components
+****
+demoapp.webapp.wicket.common.ui.custom.WhereInTheWorldPanelFactory +
+****
+
+.Dependencies
 ****
 org.apache.isis.examples.apps:demo-web:jar:${project.version} +
+org.apache.isis.extensions:isis-extensions-fullcalendar-ui:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-pdfjs-ui:jar:<managed> +
 org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed> +
 org.apache.isis.valuetypes:isis-valuetypes-asciidoc-ui-wkt:jar:<managed> +
@@ -946,18 +1192,11 @@ skinparam rectangle<<4>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
-skinparam rectangle<<5>> {
-  BackgroundColor #438dd5
-  FontColor #fffffe
-  BorderColor #2E6295
-}
 package "Root\n[Software System]" {
-  rectangle "==Apache Isis\n<size:10>[Container: packaging: pom]</size>" <<4>> as 4
-  rectangle "==Apache Isis (Aggregator)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
+  rectangle "==Apache Isis\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
   rectangle "==Apache Isis - Antora\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
-  rectangle "==Apache Isis Supplemental - Legal Info\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis Supplemental - Legal Info\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
 }
-2 .[#707070].> 4 : ""
 2 .[#707070].> 3 : ""
 @enduml
 ----
@@ -966,17 +1205,16 @@ package "Root\n[Software System]" {
 |===
 |Coordinates |Description 
 
-|Apache Isis (Aggregator)
+|Apache Isis
 [source,yaml]
 ----
 Group: org.apache.isis
-Artifact: isis-all
+Artifact: isis-parent
 Type: pom
 Directory: /
 ----
 |Convenience aggregator POM that references all modules, some explicitely,
 others via profiles, that are not activiated per default.
-The parent POM of the core framework is isis-parent/pom.xml.
 
 |Apache Isis - Antora
 [source,yaml]
@@ -988,16 +1226,6 @@ Directory: /antora
 ----
 |
 
-|Apache Isis
-[source,yaml]
-----
-Group: org.apache.isis
-Artifact: isis-parent
-Type: pom
-Directory: /isis-parent
-----
-|Parent for the core framework + extensions, starter parent pom for starter apps.
-
 |Apache Isis Supplemental - Legal Info
 [source,yaml]
 ----
@@ -1073,7 +1301,7 @@ org.yaml:snakeyaml:jar:<managed> +
 
 .Document Index Entries
 ****
-xref:refguide:commons:index/collections/Can.adoc[Can], xref:refguide:commons:index/collections/Cardinality.adoc[Cardinality], xref:refguide:commons:index/functional/Result.adoc[Result], xref:refguide:commons:index/resource/ResourceCoordinates.adoc[ResourceCoordinates]
+xref:refguide:commons:index/btree/Compound.adoc[Compound], xref:refguide:commons:index/btree/FunCompound.adoc[FunCompound], xref:refguide:commons:index/collections/Can.adoc[Can], xref:refguide:commons:index/collections/Cardinality.adoc[Cardinality], xref:refguide:commons:index/functional/Result.adoc[Result], xref:refguide:commons:index/resource/ResourceCoordinates.adoc[ResourceCoordinates]
 ****
 |===
 
@@ -1247,6 +1475,7 @@ o.a.i.applib.services.user.UserService +
 
 .Dependencies
 ****
+joda-time:joda-time:jar:<managed> +
 org.apache.isis.commons:isis-commons:jar:<managed> +
 org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
 org.apache.isis.core:isis-jdk-supplemental:pom:<managed> +
@@ -1256,7 +1485,7 @@ org.jmock:jmock:jar:<managed> +
 
 .Document Index Entries
 ****
-xref:refguide:applib:index/AbstractViewModel.adoc[AbstractViewModel], xref:refguide:applib:index/Identifier.adoc[Identifier], xref:refguide:applib:index/IsisModuleApplib.adoc[IsisModuleApplib], xref:refguide:applib:index/RecreatableDomainObject.adoc[RecreatableDomainObject], xref:refguide:applib:index/ViewModel.adoc[ViewModel], xref:refguide:applib:index/adapters/AbstractValueSemanticsProvider.adoc[AbstractValueSemanticsProvider], xref:refguide:applib:index/adapters/DefaultsProvider.adoc [...]
+xref:refguide:applib:index/AbstractViewModel.adoc[AbstractViewModel], xref:refguide:applib:index/Identifier.adoc[Identifier], xref:refguide:applib:index/IsisModuleApplib.adoc[IsisModuleApplib], xref:refguide:applib:index/RecreatableDomainObject.adoc[RecreatableDomainObject], xref:refguide:applib:index/ViewModel.adoc[ViewModel], xref:refguide:applib:index/annotation/Action.adoc[Action], xref:refguide:applib:index/annotation/ActionLayout.adoc[ActionLayout], xref:refguide:applib:index/annot [...]
 ****
 
 |Apache Isis Core - Code Gen (ByteBuddy)
@@ -1302,7 +1531,7 @@ o.a.i.core.config.environment.IsisLocaleInitializer +
 o.a.i.core.config.environment.IsisSystemEnvironment +
 o.a.i.core.config.environment.IsisTimeZoneInitializer +
 o.a.i.core.config.validators.PatternOptionalStringConstraintValidator +
-o.a.i.core.config.viewer.wicket.WebAppContextPath +
+o.a.i.core.config.viewer.web.WebAppContextPath +
 ****
 
 .Dependencies
@@ -1383,8 +1612,6 @@ Directory: /core/metamodel
 ----
 |.Components
 ****
-o.a.i.core.metamodel.facets.schema.IsisSchemaMetaModelRefiner +
-o.a.i.core.metamodel.facets.schema.IsisSchemaValueTypeProvider +
 o.a.i.core.metamodel.objectmanager.ObjectManagerDefault +
 o.a.i.core.metamodel.progmodel.ProgrammingModelInitFilterDefault +
 o.a.i.core.metamodel.services.ServiceInjectorDefault +
@@ -1407,10 +1634,43 @@ o.a.i.core.metamodel.services.tablecol.TableColumnOrderServiceUsingTxtFile +
 o.a.i.core.metamodel.services.title.TitleServiceDefault +
 o.a.i.core.metamodel.specloader.ProgrammingModelServiceDefault +
 o.a.i.core.metamodel.specloader.SpecificationLoaderDefault +
-o.a.i.core.metamodel.valuetypes.ValueTypeProviderDefault +
-o.a.i.core.metamodel.valuetypes.ValueTypeProviderForBuiltin +
-o.a.i.core.metamodel.valuetypes.ValueTypeProviderForCollections +
-o.a.i.core.metamodel.valuetypes.ValueTypeRegistry +
+o.a.i.core.metamodel.valuesemantics.BigDecimalValueSemantics +
+o.a.i.core.metamodel.valuesemantics.BigIntegerValueSemantics +
+o.a.i.core.metamodel.valuesemantics.BlobValueSemantics +
+o.a.i.core.metamodel.valuesemantics.BookmarkValueSemantics +
+o.a.i.core.metamodel.valuesemantics.BooleanValueSemantics +
+o.a.i.core.metamodel.valuesemantics.BufferedImageValueSemantics +
+o.a.i.core.metamodel.valuesemantics.ByteValueSemantics +
+o.a.i.core.metamodel.valuesemantics.ChangesDtoValueSemantics +
+o.a.i.core.metamodel.valuesemantics.CharacterValueSemantics +
+o.a.i.core.metamodel.valuesemantics.ClobValueSemantics +
+o.a.i.core.metamodel.valuesemantics.CommandDtoValueSemantics +
+o.a.i.core.metamodel.valuesemantics.DoubleValueSemantics +
+o.a.i.core.metamodel.valuesemantics.FloatValueSemantics +
+o.a.i.core.metamodel.valuesemantics.IntValueSemantics +
+o.a.i.core.metamodel.valuesemantics.InteractionDtoValueSemantics +
+o.a.i.core.metamodel.valuesemantics.LocalResourcePathValueSemantics +
+o.a.i.core.metamodel.valuesemantics.LocaleValueSemantics +
+o.a.i.core.metamodel.valuesemantics.LongValueSemantics +
+o.a.i.core.metamodel.valuesemantics.MarkupValueSemantics +
+o.a.i.core.metamodel.valuesemantics.OidDtoValueSemantics +
+o.a.i.core.metamodel.valuesemantics.PasswordValueSemantics +
+o.a.i.core.metamodel.valuesemantics.ShortValueSemantics +
+o.a.i.core.metamodel.valuesemantics.StringValueSemantics +
+o.a.i.core.metamodel.valuesemantics.TreeNodeValueSemantics +
+o.a.i.core.metamodel.valuesemantics.URLValueSemantics +
+o.a.i.core.metamodel.valuesemantics.UUIDValueSemantics +
+o.a.i.core.metamodel.valuesemantics.temporal.LocalDateTimeValueSemantics +
+o.a.i.core.metamodel.valuesemantics.temporal.LocalDateValueSemantics +
+o.a.i.core.metamodel.valuesemantics.temporal.LocalTimeValueSemantics +
+o.a.i.core.metamodel.valuesemantics.temporal.OffsetDateTimeValueSemantics +
+o.a.i.core.metamodel.valuesemantics.temporal.OffsetTimeValueSemantics +
+o.a.i.core.metamodel.valuesemantics.temporal.ZonedDateTimeValueSemantics +
+o.a.i.core.metamodel.valuesemantics.temporal.legacy.JavaSqlDateValueSemantics +
+o.a.i.core.metamodel.valuesemantics.temporal.legacy.JavaSqlTimeStampValueSemantics +
+o.a.i.core.metamodel.valuesemantics.temporal.legacy.JavaSqlTimeValueSemantics +
+o.a.i.core.metamodel.valuesemantics.temporal.legacy.JavaUtilDateValueSemantics +
+o.a.i.core.metamodel.valuetypes.ValueSemanticsResolverDefault +
 ****
 
 .Dependencies
@@ -1426,7 +1686,7 @@ org.jmock:jmock:jar:<managed> +
 
 .Document Index Entries
 ****
-xref:refguide:core:index/metamodel/services/command/CommandDtoFactory.adoc[CommandDtoFactory], xref:refguide:core:index/metamodel/services/ixn/InteractionDtoFactory.adoc[InteractionDtoFactory], xref:refguide:core:index/metamodel/services/publishing/CommandPublisher.adoc[CommandPublisher], xref:refguide:core:index/metamodel/services/publishing/ExecutionPublisher.adoc[ExecutionPublisher], xref:refguide:core:index/metamodel/services/tablecol/TableColumnOrderServiceDefault.adoc[TableColumnOr [...]
+xref:refguide:core:index/metamodel/services/command/CommandDtoFactory.adoc[CommandDtoFactory], xref:refguide:core:index/metamodel/services/ixn/InteractionDtoFactory.adoc[InteractionDtoFactory], xref:refguide:core:index/metamodel/services/publishing/CommandPublisher.adoc[CommandPublisher], xref:refguide:core:index/metamodel/services/publishing/ExecutionPublisher.adoc[ExecutionPublisher], xref:refguide:core:index/metamodel/services/schema/SchemaValueMarshaller.adoc[SchemaValueMarshaller],  [...]
 ****
 
 |Apache Isis Core - Runtime
@@ -1451,6 +1711,7 @@ org.apache.isis.core:isis-core-interaction:jar:<managed> +
 org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
 org.apache.isis.core:isis-core-metamodel:jar:<managed> +
 org.apache.isis.core:isis-core-transaction:jar:<managed> +
+org.apache.isis.valuetypes:isis-valuetypes-jodatime-integration:jar:${project.version} +
 ****
 
 |Apache Isis Core - Runtime Services
@@ -1468,6 +1729,7 @@ Directory: /core/runtimeservices
 o.a.i.core.runtimeservices.bookmarks.BookmarkServiceDefault +
 o.a.i.core.runtimeservices.command.CommandDtoFactoryDefault +
 o.a.i.core.runtimeservices.command.CommandExecutorServiceDefault +
+o.a.i.core.runtimeservices.command.SchemaValueMarshallerDefault +
 o.a.i.core.runtimeservices.email.EmailServiceDefault +
 o.a.i.core.runtimeservices.eventbus.EventBusServiceSpring +
 o.a.i.core.runtimeservices.executor.MemberExecutorServiceDefault +
@@ -1477,6 +1739,9 @@ o.a.i.core.runtimeservices.i18n.po.TranslationServicePo +
 o.a.i.core.runtimeservices.icons.ObjectIconServiceDefault +
 o.a.i.core.runtimeservices.interaction.InteractionDtoFactoryDefault +
 o.a.i.core.runtimeservices.jaxb.JaxbServiceDefault +
+o.a.i.core.runtimeservices.locale.LanguageProviderDefault +
+o.a.i.core.runtimeservices.locale.LocaleChoiceProviderDefault +
+o.a.i.core.runtimeservices.memento.ObjectMementoServiceDefault +
 o.a.i.core.runtimeservices.menubars.MenuBarsLoaderServiceDefault +
 o.a.i.core.runtimeservices.menubars.bootstrap3.MenuBarsServiceBS3 +
 o.a.i.core.runtimeservices.message.MessageServiceDefault +
@@ -1491,6 +1756,7 @@ o.a.i.core.runtimeservices.repository.RepositoryServiceDefault +
 o.a.i.core.runtimeservices.routing.RoutingServiceDefault +
 o.a.i.core.runtimeservices.scratchpad.ScratchpadDefault +
 o.a.i.core.runtimeservices.session.InteractionServiceDefault +
+o.a.i.core.runtimeservices.sitemap.SitemapServiceDefault +
 o.a.i.core.runtimeservices.transaction.TransactionServiceSpring +
 o.a.i.core.runtimeservices.urlencoding.UrlEncodingServiceWithCompression +
 o.a.i.core.runtimeservices.user.ImpersonateMenuAdvisorDefault +
@@ -1645,7 +1911,6 @@ Directory: /api/schema
 
 .Dependencies
 ****
-joda-time:joda-time:jar:<managed> +
 org.apache.isis.core:isis-jdk-supplemental:pom:<managed> +
 org.springframework:spring-context:jar:<managed> +
 ****
@@ -2032,7 +2297,7 @@ Directory: /persistence/jpa/integration
 .Components
 ****
 o.a.i.persistence.jpa.integration.changetracking.PersistenceMetricsServiceJpa +
-o.a.i.persistence.jpa.integration.metamodel.JpaProgrammingModel +
+o.a.i.persistence.jpa.integration.entity.JpaEntityIntegration +
 ****
 
 .Dependencies
@@ -2378,7 +2643,7 @@ o.a.i.viewer.common.model.userprofile.UserProfileUiModelProviderDefault +
 ****
 org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
 org.apache.isis.core:isis-core-runtime:jar:<managed> +
-org.webjars:font-awesome:jar:5.15.3 +
+org.webjars:font-awesome:jar:5.15.4 +
 ****
 
 .Document Index Entries
@@ -2757,10 +3022,8 @@ o.a.i.viewer.wicket.viewer.services.BookmarkUiServiceWicket +
 o.a.i.viewer.wicket.viewer.services.DeepLinkServiceWicket +
 o.a.i.viewer.wicket.viewer.services.HintStoreUsingWicketSession +
 o.a.i.viewer.wicket.viewer.services.ImageResourceCacheClassPath +
-o.a.i.viewer.wicket.viewer.services.LocaleProviderWicket +
 o.a.i.viewer.wicket.viewer.services.TranslationsResolverWicket +
 o.a.i.viewer.wicket.viewer.services.WicketViewerSettingsDefault +
-o.a.i.viewer.wicket.viewer.services.mementos.ObjectMementoServiceWicket +
 o.a.i.viewer.wicket.viewer.webmodule.WebModuleWicket +
 ****
 
@@ -2807,9 +3070,57 @@ skinparam rectangle<<2>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<3>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<4>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<5>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<6>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<7>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<8>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<9>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 package "Valuetypes\n[Software System]" {
+  rectangle "==Apache Isis Val - Joda Time (applib)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Val - Joda Time (integration)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis Val - Joda Time (parent)\n<size:10>[Container: packaging: pom]</size>" <<3>> as 3
+  rectangle "==Apache Isis Val - Prism (Parent)\n<size:10>[Container: packaging: pom]</size>" <<6>> as 6
+  rectangle "==Apache Isis Val - Prism (Vaadin)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis Val - Prism (Wicket)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
+  rectangle "==Apache Isis Val - Prism (resources)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
   rectangle "==Apache Isis Value types\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
 }
+3 .[#707070].> 4 : ""
+3 .[#707070].> 5 : ""
+6 .[#707070].> 9 : ""
+6 .[#707070].> 7 : ""
+2 .[#707070].> 3 : ""
+2 .[#707070].> 6 : ""
 @enduml
 ----
 .Projects/Modules (Valuetypes)
@@ -2831,6 +3142,113 @@ Directory: /valuetypes
 ****
 org.projectlombok:lombok:jar:<managed> +
 ****
+
+|Apache Isis Val - Joda Time (parent)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-jodatime
+Type: pom
+Directory: /valuetypes/jodatime
+----
+|Joda Time Library
+
+|Apache Isis Val - Joda Time (applib)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-jodatime-applib
+Type: jar
+Directory: /valuetypes/jodatime/applib
+----
+|.Dependencies
+****
+joda-time:joda-time:jar:<managed> +
+org.apache.isis.commons:isis-commons:jar:<managed> +
+org.apache.isis.core:isis-applib:jar:<managed> +
+org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
+****
+
+.Document Index Entries
+****
+xref:refguide:valuetypes:index/jodatime/applib/IsisModuleValJodatimeApplib.adoc[IsisModuleValJodatimeApplib], xref:refguide:valuetypes:index/jodatime/applib/jaxb/JodaTimeJaxbAdapters.adoc[JodaTimeJaxbAdapters], xref:refguide:valuetypes:index/jodatime/applib/jaxb/JodaTimeXMLGregorianCalendarMarshalling.adoc[JodaTimeXMLGregorianCalendarMarshalling], xref:refguide:valuetypes:index/jodatime/applib/value/JodaTimeConverters.adoc[JodaTimeConverters]
+****
+
+|Apache Isis Val - Joda Time (integration)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-jodatime-integration
+Type: jar
+Directory: /valuetypes/jodatime/integration
+----
+|.Components
+****
+o.a.i.valuetypes.jodatime.integration.valuesemantics.JodaDateTimeValueSemantics +
+o.a.i.valuetypes.jodatime.integration.valuesemantics.JodaLocalDateTimeValueSemantics +
+o.a.i.valuetypes.jodatime.integration.valuesemantics.JodaLocalDateValueSemantics +
+o.a.i.valuetypes.jodatime.integration.valuesemantics.JodaLocalTimeValueSemantics +
+****
+
+.Dependencies
+****
+org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
+org.apache.isis.core:isis-core-metamodel:jar:<managed> +
+org.apache.isis.valuetypes:isis-valuetypes-jodatime-applib:jar:<managed> +
+****
+
+.Document Index Entries
+****
+xref:refguide:valuetypes:index/jodatime/integration/IsisModuleValJodatimeIntegration.adoc[IsisModuleValJodatimeIntegration]
+****
+
+|Apache Isis Val - Prism (Parent)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-prism
+Type: pom
+Directory: /valuetypes/prism
+----
+|Client Side Syntax Highlighting
+
+|Apache Isis Val - Prism (resources)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-prism-resources
+Type: jar
+Directory: /valuetypes/prism/resources
+----
+|
+
+|Apache Isis Val - Prism (Vaadin)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-prism-vaadin
+Type: jar
+Directory: /valuetypes/prism/vaadin
+----
+|.Dependencies
+****
+org.apache.isis.incubator.viewer:isis-viewer-vaadin-ui:jar:${project.version} +
+org.apache.isis.valuetypes:isis-valuetypes-prism-resources:jar:${project.version} +
+****
+
+|Apache Isis Val - Prism (Wicket)
+[source,yaml]
+----
+Group: org.apache.isis.valuetypes
+Artifact: isis-valuetypes-prism-wicket
+Type: jar
+Directory: /valuetypes/prism/wicket
+----
+|.Dependencies
+****
+org.apache.isis.valuetypes:isis-valuetypes-prism-resources:jar:${project.version} +
+org.apache.wicket:wicket-core:jar:<managed> +
+****
 |===
 
 === Asciidoc
@@ -2897,10 +3315,10 @@ skinparam rectangle<<10>> {
 }
 package "Asciidoc\n[Software System]" {
   rectangle "==Apache Isis Val - Asciidoctor (MetaModel)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Val - Asciidoctor (Persistence JDO)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
   rectangle "==Apache Isis Val - Asciidoctor (Persistence)\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
   rectangle "==Apache Isis Val - Asciidoctor (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
   rectangle "==Apache Isis Val - Asciidoctor (parent)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Val - Asciidoctor (persistence jdo DN5)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
   rectangle "==Apache Isis Val - Asciidoctor (persistence jpa)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
   rectangle "==Apache Isis Val - Asciidoctor (ui vaadin)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
   rectangle "==Apache Isis Val - Asciidoctor (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
@@ -2960,8 +3378,10 @@ Directory: /valuetypes/asciidoc/metamodel
 ----
 |.Components
 ****
-o.a.i.valuetypes.asciidoc.metamodel.AsciiDocMetaModelRefiner +
-o.a.i.valuetypes.asciidoc.metamodel.AsciiDocValueTypeProvider +
+o.a.i.valuetypes.asciidoc.metamodel.semantics.AsciiDocValueSemantics +
+o.a.i.valuetypes.asciidoc.metamodel.semantics.ChangesDtoValueSemanticsPrettyRender +
+o.a.i.valuetypes.asciidoc.metamodel.semantics.CommandDtoValueSemanticsPrettyRender +
+o.a.i.valuetypes.asciidoc.metamodel.semantics.InteractionDtoValueSemanticsPrettyRender +
 ****
 
 .Dependencies
@@ -2989,13 +3409,13 @@ org.apache.isis.core:isis-core-metamodel:jar:<managed> +
 org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed> +
 ****
 
-|Apache Isis Val - Asciidoctor (persistence jdo DN5)
+|Apache Isis Val - Asciidoctor (Persistence JDO)
 [source,yaml]
 ----
 Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-asciidoc-persistence-jdo-dn5
+Artifact: isis-valuetypes-asciidoc-persistence-jdo
 Type: jar
-Directory: /valuetypes/asciidoc/persistence/jdo-dn5
+Directory: /valuetypes/asciidoc/persistence/jdo
 ----
 |.Dependencies
 ****
@@ -3030,9 +3450,9 @@ Directory: /valuetypes/asciidoc/ui
 ----
 |.Dependencies
 ****
-com.github.jnr:jnr-constants:jar:0.10.2 +
-com.github.jnr:jnr-enxio:jar:0.32.6 +
-com.github.jnr:jnr-posix:jar:3.1.7 +
+com.github.jnr:jnr-constants:jar:0.10.3 +
+com.github.jnr:jnr-enxio:jar:0.32.12 +
+com.github.jnr:jnr-posix:jar:3.1.14 +
 org.apache.isis.core:isis-core-metamodel:jar:<managed> +
 org.apache.isis.valuetypes:isis-valuetypes-asciidoc-applib:jar:<managed> +
 org.asciidoctor:asciidoctorj:jar:${asciidoctorj.version} +
@@ -3046,9 +3466,15 @@ Artifact: isis-valuetypes-asciidoc-ui-vaa
 Type: jar
 Directory: /valuetypes/asciidoc/ui/vaadin
 ----
-|.Dependencies
+|.Components
+****
+o.a.i.valuetypes.asciidoc.ui.vaa.components.AsciiDocFieldFactoryVaa +
+****
+
+.Dependencies
 ****
 org.apache.isis.incubator.viewer:isis-viewer-vaadin-ui:jar:${project.version} +
+org.apache.isis.valuetypes:isis-valuetypes-prism-vaadin:jar:${project.version} +
 ****
 
 |Apache Isis Val - Asciidoctor (ui wicket)
@@ -3063,16 +3489,11 @@ Directory: /valuetypes/asciidoc/ui/wicket
 ****
 o.a.i.valuetypes.asciidoc.ui.wkt.components.AsciiDocPanelFactoriesWkt$Parented +
 o.a.i.valuetypes.asciidoc.ui.wkt.components.AsciiDocPanelFactoriesWkt$Standalone +
-o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.chg.v2.ChangesDtoPanelFactoriesWkt$Parented +
-o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.chg.v2.ChangesDtoPanelFactoriesWkt$Standalone +
-o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.cmd.v2.CommandDtoPanelFactoriesWkt$Parented +
-o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.cmd.v2.CommandDtoPanelFactoriesWkt$Standalone +
-o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.ixn.v2.InteractionDtoPanelFactoriesWkt$Parented +
-o.a.i.valuetypes.asciidoc.ui.wkt.components.schema.ixn.v2.InteractionDtoPanelFactoriesWkt$Standalone +
 ****
 
 .Dependencies
 ****
+org.apache.isis.valuetypes:isis-valuetypes-prism-wicket:jar:${project.version} +
 org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed> +
 ****
 
@@ -3141,10 +3562,10 @@ skinparam rectangle<<9>> {
 }
 package "Markdown\n[Software System]" {
   rectangle "==Apache Isis Val - Markdown (MetaModel)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
+  rectangle "==Apache Isis Val - Markdown (Persistence JDO)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
   rectangle "==Apache Isis Val - Markdown (Persistence)\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
   rectangle "==Apache Isis Val - Markdown (applib)\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
   rectangle "==Apache Isis Val - Markdown (parent)\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
-  rectangle "==Apache Isis Val - Markdown (persistence jdo DN5)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
   rectangle "==Apache Isis Val - Markdown (persistence jpa)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
   rectangle "==Apache Isis Val - Markdown (ui wicket)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
   rectangle "==Apache Isis Val - Markdown (ui)\n<size:10>[Container: packaging: pom]</size>" <<8>> as 8
@@ -3190,7 +3611,7 @@ org.apache.isis.core:isis-applib:jar:<managed> +
 
 .Document Index Entries
 ****
-xref:refguide:valuetypes:index/markdown/applib/IsisModuleValMarkdownApplib.adoc[IsisModuleValMarkdownApplib], xref:refguide:valuetypes:index/markdown/applib/jaxb/MarkdownJaxbAdapter.adoc[MarkdownJaxbAdapter], xref:refguide:valuetypes:index/markdown/applib/value/Converter.adoc[Converter]
+xref:refguide:valuetypes:index/markdown/applib/IsisModuleValMarkdownApplib.adoc[IsisModuleValMarkdownApplib], xref:refguide:valuetypes:index/markdown/applib/jaxb/MarkdownJaxbAdapter.adoc[MarkdownJaxbAdapter], xref:refguide:valuetypes:index/markdown/applib/value/Converter.adoc[Converter], xref:refguide:valuetypes:index/markdown/applib/value/Markdown.adoc[Markdown]
 ****
 
 |Apache Isis Val - Markdown (MetaModel)
@@ -3203,8 +3624,7 @@ Directory: /valuetypes/markdown/metamodel
 ----
 |.Components
 ****
-o.a.i.valuetypes.markdown.metamodel.MarkdownMetaModelRefiner +
-o.a.i.valuetypes.markdown.metamodel.MarkdownValueTypeProvider +
+o.a.i.valuetypes.markdown.metamodel.semantics.MarkdownValueSemantics +
 ****
 
 .Dependencies
@@ -3232,13 +3652,13 @@ org.apache.isis.core:isis-core-metamodel:jar:<managed> +
 org.apache.isis.valuetypes:isis-valuetypes-markdown-applib:jar:<managed> +
 ****
 
-|Apache Isis Val - Markdown (persistence jdo DN5)
+|Apache Isis Val - Markdown (Persistence JDO)
 [source,yaml]
 ----
 Group: org.apache.isis.valuetypes
-Artifact: isis-valuetypes-markdown-persistence-jdo-dn5
+Artifact: isis-valuetypes-markdown-persistence-jdo
 Type: jar
-Directory: /valuetypes/markdown/persistence/jdo-dn5
+Directory: /valuetypes/markdown/persistence/jdo
 ----
 |.Dependencies
 ****
@@ -3293,8 +3713,15 @@ Artifact: isis-valuetypes-markdown-ui-wkt
 Type: jar
 Directory: /valuetypes/markdown/ui/wicket
 ----
-|.Dependencies
+|.Components
 ****
+o.a.i.valuetypes.markdown.ui.wkt.components.MarkdownPanelFactoriesWkt$Parented +
+o.a.i.valuetypes.markdown.ui.wkt.components.MarkdownPanelFactoriesWkt$Standalone +
+****
+
+.Dependencies
+****
+org.apache.isis.valuetypes:isis-valuetypes-prism-wicket:jar:${project.version} +
 org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed> +
 ****
 
@@ -3701,6 +4128,11 @@ skinparam rectangle<<25>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<26>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<10>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -3808,14 +4240,15 @@ package "Extensions\n[Software System]" {
   rectangle "==Apache Isis Ext - Flyway Impl\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
   rectangle "==Apache Isis Ext - Sec Man\n<size:10>[Container: packaging: pom]</size>" <<16>> as 16
   rectangle "==Apache Isis Ext - Sec Man Applib\n<size:10>[Container: packaging: jar]</size>" <<17>> as 17
+  rectangle "==Apache Isis Ext - Sec Man Encryption (Using Spring)\n<size:10>[Container: packaging: jar]</size>" <<19>> as 19
   rectangle "==Apache Isis Ext - Sec Man Encryption (Using jbcrypt)\n<size:10>[Container: packaging: jar]</size>" <<18>> as 18
-  rectangle "==Apache Isis Ext - Sec Man Integration\n<size:10>[Container: packaging: jar]</size>" <<19>> as 19
-  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JDO)\n<size:10>[Container: packaging: jar]</size>" <<20>> as 20
-  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JPA)\n<size:10>[Container: packaging: jar]</size>" <<21>> as 21
-  rectangle "==Apache Isis Ext - Sec Man Realm (Using Shiro)\n<size:10>[Container: packaging: jar]</size>" <<22>> as 22
-  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (impl)\n<size:10>[Container: packaging: jar]</size>" <<24>> as 24
-  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (parent)\n<size:10>[Container: packaging: pom]</size>" <<23>> as 23
-  rectangle "==Apache Isis Ext - Security - Spring Oauth2\n<size:10>[Container: packaging: jar]</size>" <<25>> as 25
+  rectangle "==Apache Isis Ext - Sec Man Integration\n<size:10>[Container: packaging: jar]</size>" <<20>> as 20
+  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JDO)\n<size:10>[Container: packaging: jar]</size>" <<21>> as 21
+  rectangle "==Apache Isis Ext - Sec Man Persistence (Using JPA)\n<size:10>[Container: packaging: jar]</size>" <<22>> as 22
+  rectangle "==Apache Isis Ext - Sec Man Realm (Using Shiro)\n<size:10>[Container: packaging: jar]</size>" <<23>> as 23
+  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (impl)\n<size:10>[Container: packaging: jar]</size>" <<25>> as 25
+  rectangle "==Apache Isis Ext - Security - Shiro LDAP Realm (parent)\n<size:10>[Container: packaging: pom]</size>" <<24>> as 24
+  rectangle "==Apache Isis Ext - Security - Spring Oauth2\n<size:10>[Container: packaging: jar]</size>" <<26>> as 26
   rectangle "==Apache Isis Ext - Wicket Viewer - Excel Download (parent)\n<size:10>[Container: packaging: pom]</size>" <<5>> as 5
   rectangle "==Apache Isis Ext - Wicket Viewer - Excel Download (ui)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
   rectangle "==Apache Isis Ext - Wicket Viewer - fullcalendar (applib)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
@@ -3830,12 +4263,13 @@ package "Extensions\n[Software System]" {
 3 .[#707070].> 4 : ""
 7 .[#707070].> 8 : ""
 16 .[#707070].> 17 : ""
-16 .[#707070].> 18 : ""
 16 .[#707070].> 19 : ""
+16 .[#707070].> 18 : ""
 16 .[#707070].> 20 : ""
 16 .[#707070].> 21 : ""
 16 .[#707070].> 22 : ""
-23 .[#707070].> 24 : ""
+16 .[#707070].> 23 : ""
+24 .[#707070].> 25 : ""
 5 .[#707070].> 6 : ""
 9 .[#707070].> 10 : ""
 9 .[#707070].> 11 : ""
@@ -3845,8 +4279,8 @@ package "Extensions\n[Software System]" {
 2 .[#707070].> 3 : ""
 2 .[#707070].> 7 : ""
 2 .[#707070].> 16 : ""
-2 .[#707070].> 23 : ""
-2 .[#707070].> 25 : ""
+2 .[#707070].> 24 : ""
+2 .[#707070].> 26 : ""
 2 .[#707070].> 5 : ""
 2 .[#707070].> 9 : ""
 2 .[#707070].> 12 : ""
@@ -3929,14 +4363,13 @@ o.a.i.extensions.viewer.wicket.exceldownload.ui.components.CollectionContentsAsE
 
 .Dependencies
 ****
+org.apache.isis.subdomains:isis-subdomains-poi:pom:${project.version} +
 org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed> +
-org.apache.poi:poi-ooxml:jar:<managed> +
-org.apache.poi:poi-ooxml-schemas:jar:<managed> +
 ****
 
 .Document Index Entries
 ****
-xref:refguide:extensions:index/viewer/wicket/exceldownload/ui/IsisModuleExtExcelDownloadUi.adoc[IsisModuleExtExcelDownloadUi], xref:refguide:extensions:index/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcel.adoc[CollectionContentsAsExcel], xref:refguide:extensions:index/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcelFactory.adoc[CollectionContentsAsExcelFactory]
+xref:refguide:extensions:index/viewer/wicket/exceldownload/ui/IsisModuleExtExcelDownloadUi.adoc[IsisModuleExtExcelDownloadUi], xref:refguide:extensions:index/viewer/wicket/exceldownload/ui/components/CollectionContentsAsExcelFactory.adoc[CollectionContentsAsExcelFactory]
 ****
 
 |Apache Isis Ext - Flyway
@@ -3984,9 +4417,15 @@ Artifact: isis-extensions-fullcalendar-applib
 Type: jar
 Directory: /extensions/vw/fullcalendar/applib
 ----
-|.Dependencies
+|.Components
+****
+o.a.i.extensions.fullcalendar.applib.value.CalendarEventSemanticsProvider +
+****
+
+.Dependencies
 ****
 de.agilecoders.wicket:wicket-bootstrap-core:jar:<managed> +
+org.apache.isis.commons:isis-commons:jar:<managed> +
 org.apache.isis.core:isis-applib:jar:<managed> +
 ****
 
@@ -4003,10 +4442,17 @@ Artifact: isis-extensions-fullcalendar-ui
 Type: jar
 Directory: /extensions/vw/fullcalendar/ui
 ----
-|.Dependencies
+|.Components
+****
+o.a.i.extensions.fullcalendar.ui.component.calendarable.CalendarableCollectionAsFullCalendarFactory +
+o.a.i.extensions.fullcalendar.ui.component.calendareventable.CalendarEventableCollectionAsFullCalendarFactory +
+****
+
+.Dependencies
 ****
 net.ftlines.wicket-fullcalendar:wicket-fullcalendar-core:jar:<managed> +
 org.apache.isis.extensions:isis-extensions-fullcalendar-applib:jar:<managed> +
+org.apache.isis.valuetypes:isis-valuetypes-jodatime-applib:jar:2.0.0-SNAPSHOT +
 org.apache.isis.viewer:isis-viewer-wicket-ui:jar:<managed> +
 ****
 
@@ -4122,11 +4568,12 @@ o.a.i.extensions.secman.applib.user.menu.MeService$UserMenuMeActionAdvisor +
 ****
 org.apache.isis.mavendeps:isis-mavendeps-integtests:pom:<managed> +
 org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
+org.springframework.security:spring-security-crypto:jar:<managed> +
 ****
 
 .Document Index Entries
 ****
-xref:refguide:extensions:index/secman/applib/IsisModuleExtSecmanApplib.adoc[IsisModuleExtSecmanApplib], xref:refguide:extensions:index/secman/applib/SecmanConfiguration.adoc[SecmanConfiguration], xref:refguide:extensions:index/secman/applib/permission/dom/ApplicationPermission.adoc[ApplicationPermission], xref:refguide:extensions:index/secman/applib/permission/dom/ApplicationPermissionMode.adoc[ApplicationPermissionMode], xref:refguide:extensions:index/secman/applib/permission/dom/Applic [...]
+xref:refguide:extensions:index/secman/applib/IsisModuleExtSecmanApplib.adoc[IsisModuleExtSecmanApplib], xref:refguide:extensions:index/secman/applib/SecmanConfiguration.adoc[SecmanConfiguration], xref:refguide:extensions:index/secman/applib/permission/dom/ApplicationPermission.adoc[ApplicationPermission], xref:refguide:extensions:index/secman/applib/permission/dom/ApplicationPermissionMode.adoc[ApplicationPermissionMode], xref:refguide:extensions:index/secman/applib/permission/dom/Applic [...]
 ****
 
 |Apache Isis Ext - Sec Man Encryption (Using jbcrypt)
@@ -4139,7 +4586,7 @@ Directory: /extensions/security/secman/encryption-jbcrypt
 ----
 |.Components
 ****
-o.a.i.extensions.secman.encryption.jbcrypt.services.PasswordEncryptionServiceUsingJBcrypt +
+o.a.i.extensions.secman.encryption.jbcrypt.services.PasswordEncoderUsingJBcrypt +
 ****
 
 .Dependencies
@@ -4151,7 +4598,26 @@ org.mindrot:jbcrypt:jar:<managed> +
 
 .Document Index Entries
 ****
-xref:refguide:extensions:index/secman/encryption/jbcrypt/IsisModuleExtSecmanEncryptionJbcrypt.adoc[IsisModuleExtSecmanEncryptionJbcrypt], xref:refguide:extensions:index/secman/encryption/jbcrypt/services/PasswordEncryptionServiceUsingJBcrypt.adoc[PasswordEncryptionServiceUsingJBcrypt]
+xref:refguide:extensions:index/secman/encryption/jbcrypt/IsisModuleExtSecmanEncryptionJbcrypt.adoc[IsisModuleExtSecmanEncryptionJbcrypt], xref:refguide:extensions:index/secman/encryption/jbcrypt/services/PasswordEncoderUsingJBcrypt.adoc[PasswordEncoderUsingJBcrypt]
+****
+
+|Apache Isis Ext - Sec Man Encryption (Using Spring)
+[source,yaml]
+----
+Group: org.apache.isis.extensions
+Artifact: isis-extensions-secman-encryption-spring
+Type: jar
+Directory: /extensions/security/secman/encryption-spring
+----
+|.Dependencies
+****
+org.apache.isis.core:isis-core-runtime:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-secman-applib:jar:<managed> +
+****
+
+.Document Index Entries
+****
+xref:refguide:extensions:index/secman/encryption/spring/IsisModuleExtSecmanEncryptionSpring.adoc[IsisModuleExtSecmanEncryptionSpring]
 ****
 
 |Apache Isis Ext - Sec Man Integration
@@ -4165,8 +4631,10 @@ Directory: /extensions/security/secman/integration
 |.Components
 ****
 o.a.i.extensions.secman.integration.authorizor.AuthorizorSecman +
+o.a.i.extensions.secman.integration.authorizor.AuthorizorSecman$PermissionCache +
 o.a.i.extensions.secman.integration.facets.TenantedAuthorizationPostProcessor$Register +
 o.a.i.extensions.secman.integration.spiimpl.ImpersonateMenuAdvisorForSecman +
+o.a.i.extensions.secman.integration.spiimpl.ImpersonateMenuAdvisorForSecman$Cache +
 o.a.i.extensions.secman.integration.spiimpl.TableColumnVisibilityServiceForSecman +
 o.a.i.extensions.secman.integration.usermementorefiner.UserMementoRefinerFromApplicationUser +
 o.a.i.extensions.secman.integration.userreg.UserRegistrationServiceForSecman +
@@ -4699,6 +5167,11 @@ skinparam rectangle<<12>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<13>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -4753,20 +5226,22 @@ package "Subdomains\n[Software System]" {
   rectangle "==Apache Isis Sub - Ognl (parent)\n<size:10>[Container: packaging: pom]</size>" <<7>> as 7
   rectangle "==Apache Isis Sub - PDF Box (applib)\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
   rectangle "==Apache Isis Sub - PDF Box (parent)\n<size:10>[Container: packaging: pom]</size>" <<9>> as 9
-  rectangle "==Apache Isis Sub - Zip (applib)\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
-  rectangle "==Apache Isis Sub - Zip (parent)\n<size:10>[Container: packaging: pom]</size>" <<11>> as 11
+  rectangle "==Apache Isis Sub - POI\n<size:10>[Container: packaging: pom]</size>" <<11>> as 11
+  rectangle "==Apache Isis Sub - Zip (applib)\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
+  rectangle "==Apache Isis Sub - Zip (parent)\n<size:10>[Container: packaging: pom]</size>" <<12>> as 12
   rectangle "==Apache Isis Subdomains\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
 }
 3 .[#707070].> 4 : ""
 5 .[#707070].> 6 : ""
 7 .[#707070].> 8 : ""
 9 .[#707070].> 10 : ""
-11 .[#707070].> 12 : ""
+12 .[#707070].> 13 : ""
 2 .[#707070].> 3 : ""
 2 .[#707070].> 5 : ""
 2 .[#707070].> 7 : ""
 2 .[#707070].> 9 : ""
 2 .[#707070].> 11 : ""
+2 .[#707070].> 12 : ""
 @enduml
 ----
 .Projects/Modules (Subdomains)
@@ -4810,7 +5285,7 @@ Directory: /subdomains/docx/applib
 ----
 |.Components
 ****
-o.a.i.subdomains.docx.applib.DocxService +
+o.a.i.subdomains.docx.applib.service.DocxServiceDefault +
 ****
 
 .Dependencies
@@ -4899,6 +5374,22 @@ Directory: /subdomains/pdfbox/applib
 org.apache.isis.core:isis-applib:jar:<managed> +
 ****
 
+|Apache Isis Sub - POI
+[source,yaml]
+----
+Group: org.apache.isis.subdomains
+Artifact: isis-subdomains-poi
+Type: pom
+Directory: /subdomains/poi
+----
+|Apache POI dependencies
+
+.Dependencies
+****
+org.apache.poi:poi-ooxml:jar:<managed> +
+org.apache.poi:poi-ooxml-lite:jar:<managed> +
+****
+
 |Apache Isis Sub - Zip (parent)
 [source,yaml]
 ----
@@ -4919,7 +5410,7 @@ Directory: /subdomains/zip/applib
 ----
 |.Components
 ****
-o.a.i.extensions.zip.dom.impl.ZipService +
+o.a.i.subdomains.zip.applib.service.ZipServiceDefault +
 ****
 
 .Dependencies
@@ -4989,7 +5480,7 @@ Directory: /subdomains/base/applib
 ----
 |.Components
 ****
-o.a.i.subdomains.base.applib.services.calendar.CalendarService +
+o.a.i.subdomains.base.applib.services.calendar.CalendarServiceDefault +
 ****
 
 .Dependencies
@@ -5089,7 +5580,7 @@ Directory: /subdomains/excel/applib
 ----
 |.Components
 ****
-o.a.i.subdomains.excel.applib.dom.ExcelService +
+o.a.i.subdomains.excel.applib.service.ExcelServiceDefault +
 ****
 
 .Dependencies
@@ -5098,14 +5589,12 @@ org.apache.isis.core:isis-applib:jar:<managed> +
 org.apache.isis.core:isis-core-internaltestsupport:jar:<managed> +
 org.apache.isis.core:isis-core-runtime:jar:<managed> +
 org.apache.isis.persistence:isis-persistence-jdo-applib:jar:<managed> +
-org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
-org.apache.poi:poi-ooxml:jar:<managed> +
-org.apache.poi:poi-ooxml-schemas:jar:<managed> +
+org.apache.isis.subdomains:isis-subdomains-poi:pom:<managed> +
 ****
 
 .Document Index Entries
 ****
-xref:refguide:subdomains:index/excel/applib/IsisModuleSubdomainsExcelApplib.adoc[IsisModuleSubdomainsExcelApplib], xref:refguide:subdomains:index/excel/applib/dom/AggregationType.adoc[AggregationType], xref:refguide:subdomains:index/excel/applib/dom/ExcelMetaDataEnabled.adoc[ExcelMetaDataEnabled], xref:refguide:subdomains:index/excel/applib/dom/ExcelService.adoc[ExcelService], xref:refguide:subdomains:index/excel/applib/dom/HyperLink.adoc[HyperLink], xref:refguide:subdomains:index/excel/ [...]
+xref:refguide:subdomains:index/excel/applib/IsisModuleSubdomainsExcelApplib.adoc[IsisModuleSubdomainsExcelApplib], xref:refguide:subdomains:index/excel/applib/dom/AggregationType.adoc[AggregationType], xref:refguide:subdomains:index/excel/applib/dom/ExcelMetaDataEnabled.adoc[ExcelMetaDataEnabled], xref:refguide:subdomains:index/excel/applib/dom/ExcelService.adoc[ExcelService], xref:refguide:subdomains:index/excel/applib/dom/HyperLink.adoc[HyperLink], xref:refguide:subdomains:index/excel/ [...]
 ****
 
 |Apache Isis Sub - Excel (Fixtures)
@@ -5155,6 +5644,7 @@ Directory: /subdomains/excel/testing
 ****
 org.apache.isis.core:isis-core-metamodel:jar:<managed> +
 org.apache.isis.subdomains:isis-subdomains-excel-applib:jar:<managed> +
+org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
 org.projectlombok:lombok:jar:<managed> +
 ****
 
@@ -5297,7 +5787,7 @@ Directory: /subdomains/xdocreport/applib
 ----
 |.Components
 ****
-o.a.i.subdomains.xdocreport.applib.service.XDocReportService +
+o.a.i.subdomains.xdocreport.applib.service.XDocReportServiceDefault +
 ****
 
 .Dependencies
@@ -5305,16 +5795,15 @@ o.a.i.subdomains.xdocreport.applib.service.XDocReportService +
 fr.opensagres.xdocreport:fr.opensagres.xdocreport.converter.docx.xwpf:jar:<managed> +
 fr.opensagres.xdocreport:fr.opensagres.xdocreport.document.docx:jar:<managed> +
 fr.opensagres.xdocreport:fr.opensagres.xdocreport.template.freemarker:jar:<managed> +
-fr.opensagres.xdocreport:org.apache.poi.xwpf.converter.core:jar:<managed> +
-fr.opensagres.xdocreport:org.apache.poi.xwpf.converter.pdf:jar:<managed> +
 org.apache.isis.core:isis-applib:jar:<managed> +
+org.apache.isis.subdomains:isis-subdomains-poi:pom:<managed> +
 org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed> +
 org.projectlombok:lombok:jar:<managed> +
 ****
 
 .Document Index Entries
 ****
-xref:refguide:subdomains:index/xdocreport/applib/IsisModuleSubdomainsXDocReportApplib.adoc[IsisModuleSubdomainsXDocReportApplib], xref:refguide:subdomains:index/xdocreport/applib/service/OutputType.adoc[OutputType], xref:refguide:subdomains:index/xdocreport/applib/service/XDocReportModel.adoc[XDocReportModel], xref:refguide:subdomains:index/xdocreport/applib/service/XDocReportService.adoc[XDocReportService]
+xref:refguide:subdomains:index/xdocreport/applib/IsisModuleSubdomainsXDocReportApplib.adoc[IsisModuleSubdomainsXDocReportApplib], xref:refguide:subdomains:index/xdocreport/applib/XDocReportService.adoc[XDocReportService], xref:refguide:subdomains:index/xdocreport/applib/XDocReportService~XDocReportModel.adoc[XDocReportService.XDocReportModel]
 ****
 |===
 
@@ -5370,21 +5859,28 @@ skinparam rectangle<<8>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<9>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 package "Tooling\n[Software System]" {
   rectangle "==Apache Isis - Tooling\n<size:10>[Container: packaging: pom]</size>" <<2>> as 2
   rectangle "==Apache Isis - Tooling - C4 Modeling\n<size:10>[Container: packaging: jar]</size>" <<3>> as 3
   rectangle "==Apache Isis - Tooling - CLI (Command Line Interface)\n<size:10>[Container: packaging: jar]</size>" <<4>> as 4
-  rectangle "==Apache Isis - Tooling - Java Model (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
-  rectangle "==Apache Isis - Tooling - Java to Asciidoc (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
-  rectangle "==Apache Isis - Tooling - Model for AsciiDoc\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
-  rectangle "==Apache Isis - Tooling - Project Model (Code mining)\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis - Tooling - Java DSL (Code Gen)\n<size:10>[Container: packaging: jar]</size>" <<5>> as 5
+  rectangle "==Apache Isis - Tooling - Java Model (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
+  rectangle "==Apache Isis - Tooling - Java to Asciidoc (Code Mining)\n<size:10>[Container: packaging: jar]</size>" <<6>> as 6
+  rectangle "==Apache Isis - Tooling - Model for AsciiDoc\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
+  rectangle "==Apache Isis - Tooling - Project Model (Code mining)\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
 }
 2 .[#707070].> 3 : ""
 2 .[#707070].> 4 : ""
-2 .[#707070].> 6 : ""
 2 .[#707070].> 5 : ""
 2 .[#707070].> 7 : ""
+2 .[#707070].> 6 : ""
 2 .[#707070].> 8 : ""
+2 .[#707070].> 9 : ""
 @enduml
 ----
 .Projects/Modules (Tooling)
@@ -5406,7 +5902,7 @@ eg. code mining, automated documentation.
 
 .Dependencies
 ****
-org.checkerframework:checker-qual:jar:3.17.0 +
+org.checkerframework:checker-qual:jar:3.21.0 +
 org.junit.jupiter:junit-jupiter-api:jar:<managed> +
 org.junit.jupiter:junit-jupiter-engine:jar:<managed> +
 org.junit.vintage:junit-vintage-engine:jar:<managed> +
@@ -5456,6 +5952,24 @@ org.apache.isis.tooling:isis-tooling-model4adoc:jar:<managed> +
 org.apache.isis.tooling:isis-tooling-projectmodel:jar:<managed> +
 ****
 
+|Apache Isis - Tooling - Java DSL (Code Gen)
+[source,yaml]
+----
+Group: org.apache.isis.tooling
+Artifact: isis-tooling-dsl
+Type: jar
+Directory: /tooling/dsl
+----
+|Tools for Java meta-programming and runtime class generaton.
+
+.Dependencies
+****
+com.graphql-java:graphql-java:jar:${graphql-java.version} +
+com.squareup:javapoet:jar:${javapoet.version} +
+org.apache.isis.commons:isis-commons:jar:<managed> +
+org.apache.logging.log4j:log4j-core:jar:<managed> +
+****
+
 |Apache Isis - Tooling - Java to Asciidoc (Code Mining)
 [source,yaml]
 ----
@@ -5579,6 +6093,16 @@ skinparam rectangle<<16>> {
   FontColor #fffffe
   BorderColor #2E6295
 }
+skinparam rectangle<<17>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
+skinparam rectangle<<18>> {
+  BackgroundColor #438dd5
+  FontColor #fffffe
+  BorderColor #2E6295
+}
 skinparam rectangle<<2>> {
   BackgroundColor #438dd5
   FontColor #fffffe
@@ -5633,13 +6157,15 @@ package "Regression Tests\n[Software System]" {
   rectangle "==Apache Isis - Regression Tests (stable) - Domain Model\n<size:10>[Container: packaging: jar]</size>" <<7>> as 7
   rectangle "==Apache Isis - Regression Tests (stable) - Event Handling\n<size:10>[Container: packaging: jar]</size>" <<8>> as 8
   rectangle "==Apache Isis - Regression Tests (stable) - Factory\n<size:10>[Container: packaging: jar]</size>" <<9>> as 9
-  rectangle "==Apache Isis - Regression Tests (stable) - Injecting\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
-  rectangle "==Apache Isis - Regression Tests (stable) - Interact\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
-  rectangle "==Apache Isis - Regression Tests (stable) - Logging\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
-  rectangle "==Apache Isis - Regression Tests (stable) - Persistence (JDO)\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
-  rectangle "==Apache Isis - Regression Tests (stable) - Persistence (JPA)\n<size:10>[Container: packaging: jar]</size>" <<14>> as 14
-  rectangle "==Apache Isis - Regression Tests (stable) - Publishing (JPA)\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
-  rectangle "==Apache Isis - Regression Tests (stable) - Rest\n<size:10>[Container: packaging: jar]</size>" <<16>> as 16
+  rectangle "==Apache Isis - Regression Tests (stable) - Interact\n<size:10>[Container: packaging: jar]</size>" <<10>> as 10
+  rectangle "==Apache Isis - Regression Tests (stable) - Persistence (JDO)\n<size:10>[Container: packaging: jar]</size>" <<11>> as 11
+  rectangle "==Apache Isis - Regression Tests (stable) - Persistence (JPA)\n<size:10>[Container: packaging: jar]</size>" <<12>> as 12
+  rectangle "==Apache Isis - Regression Tests (stable) - Publishing (JPA)\n<size:10>[Container: packaging: jar]</size>" <<13>> as 13
+  rectangle "==Apache Isis - Regression Tests (stable) - Rest\n<size:10>[Container: packaging: jar]</size>" <<14>> as 14
+  rectangle "==Apache Isis - Regression Tests (stable) - Value Types\n<size:10>[Container: packaging: jar]</size>" <<15>> as 15
+  rectangle "==Apache Isis - Regression Tests (stable) - Viewers Common\n<size:10>[Container: packaging: jar]</size>" <<16>> as 16
+  rectangle "==Apache Isis - Regression Tests (stable) - Viewers JDO\n<size:10>[Container: packaging: jar]</size>" <<17>> as 17
+  rectangle "==Apache Isis - Regression Tests (stable) - Viewers JPA\n<size:10>[Container: packaging: jar]</size>" <<18>> as 18
 }
 2 .[#707070].> 3 : ""
 2 .[#707070].> 4 : ""
@@ -5655,6 +6181,8 @@ package "Regression Tests\n[Software System]" {
 2 .[#707070].> 14 : ""
 2 .[#707070].> 15 : ""
 2 .[#707070].> 16 : ""
+2 .[#707070].> 17 : ""
+2 .[#707070].> 18 : ""
 @enduml
 ----
 .Projects/Modules (Regression Tests)
@@ -5675,26 +6203,8 @@ Directory: /regressiontests
 
 .Dependencies
 ****
-org.apache.directory.server:apacheds-test-framework:jar:2.0.0.AM26 +
-org.apache.isis.extensions:isis-extensions-secman-encryption-jbcrypt:jar:<managed> +
-org.apache.isis.extensions:isis-extensions-secman-integration:jar:<managed> +
-org.apache.isis.extensions:isis-extensions-secman-persistence-jdo:jar:<managed> +
-org.apache.isis.extensions:isis-extensions-secman-shiro-realm:jar:<managed> +
-org.apache.isis.extensions:isis-extensions-shiro-realm-ldap-impl:jar:<managed> +
-org.apache.isis.mappings:isis-mappings-restclient-applib:jar:<managed> +
-org.apache.isis.mavendeps:isis-mavendeps-integtests:pom:<managed> +
-org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed> +
-org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed> +
-org.apache.isis.persistence:isis-persistence-jpa-eclipselink:jar:<managed> +
-org.apache.isis.security:isis-security-shiro:jar:<managed> +
-org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
 org.apache.isis.testing:isis-testing-integtestsupport-applib:jar:<managed> +
-org.apache.isis.testing:isis-testing-specsupport-applib:jar:<managed> +
 org.apache.isis.testing:isis-testing-unittestsupport-applib:jar:<managed> +
-org.apache.isis.tooling:isis-tooling-model4adoc:jar:${project.version} +
-org.apache.isis.viewer:isis-viewer-common:jar:<managed> +
-org.glassfish:javax.json:jar:1.1.4 +
-org.glassfish.jersey.ext:jersey-spring5:jar:<managed> +
 org.projectlombok:lombok:jar:<managed> +
 ****
 
@@ -5706,10 +6216,44 @@ Artifact: isis-regressiontests-stable
 Type: jar
 Directory: /regressiontests/stable
 ----
-|.Dependencies
+|.Components
 ****
-org.apache.isis.extensions:isis-extensions-cors-impl:jar:<managed> +
-org.glassfish.jersey.ext:jersey-spring5:jar:<managed> +
+o.a.i.testdomain.conf.Configuration_headless$HeadlessCommandSupport +
+o.a.i.testdomain.jdo.JdoInventoryDao +
+o.a.i.testdomain.jdo.JdoTestFixtures +
+o.a.i.testdomain.jpa.JpaInventoryDao +
+o.a.i.testdomain.jpa.JpaTestFixtures +
+o.a.i.testdomain.jpa.springdata.EmployeeRepository +
+o.a.i.testdomain.model.valuetypes.ValueTypeExampleService +
+o.a.i.testdomain.publishing.PublishingTestFactoryAbstract$CommitListener +
+o.a.i.testdomain.publishing.PublishingTestFactoryJdo +
+o.a.i.testdomain.publishing.PublishingTestFactoryJpa +
+o.a.i.testdomain.publishing.subscriber.CommandSubscriberForTesting +
+o.a.i.testdomain.publishing.subscriber.EntityChangesSubscriberForTesting +
+o.a.i.testdomain.publishing.subscriber.EntityPropertyChangeSubscriberForTesting +
+o.a.i.testdomain.publishing.subscriber.ExecutionSubscriberForTesting +
+o.a.i.testdomain.util.event.LifecycleEventSubscriberJdoForTesting +
+o.a.i.testdomain.util.event.LifecycleEventSubscriberJpaForTesting +
+o.a.i.testdomain.util.interaction.DomainObjectTesterFactory +
+o.a.i.testdomain.util.interaction.InteractionBoundaryProbe +
+o.a.i.testdomain.util.kv.KVStoreForTesting +
+o.a.i.testdomain.util.rest.RestEndpointService +
+****
+
+.Dependencies
+****
+org.apache.isis.extensions:isis-extensions-secman-encryption-jbcrypt:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-secman-integration:jar:<managed> +
+org.apache.isis.extensions:isis-extensions-secman-persistence-jdo:jar:<managed> +
+org.apache.isis.mappings:isis-mappings-restclient-applib:jar:<managed> +
+org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed> +
+org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed> +
+org.apache.isis.persistence:isis-persistence-jpa-eclipselink:jar:<managed> +
+org.apache.isis.security:isis-security-shiro:jar:<managed> +
+org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
+org.apache.isis.valuetypes:isis-valuetypes-asciidoc-metamodel:jar:<managed> +
+org.apache.isis.valuetypes:isis-valuetypes-markdown-metamodel:jar:<managed> +
+org.apache.isis.valuetypes:isis-valuetypes-sse-metamodel:jar:<managed> +
 ****
 
 |Apache Isis - Regression Tests (stable) - Bootstrapping
@@ -5749,6 +6293,8 @@ Directory: /regressiontests/stable-cucumber
 |.Dependencies
 ****
 org.apache.isis.regressiontests:isis-regressiontests-stable:jar:<managed> +
+org.apache.isis.testing:isis-testing-specsupport-applib:jar:<managed> +
+org.junit.platform:junit-platform-suite-api:jar:<managed> +
 ****
 
 |Apache Isis - Regression Tests (stable) - Domain Model
@@ -5790,98 +6336,140 @@ Directory: /regressiontests/stable-factory
 org.apache.isis.regressiontests:isis-regressiontests-stable:jar:<managed> +
 ****
 
-|Apache Isis - Regression Tests (stable) - Injecting
+|Apache Isis - Regression Tests (stable) - Interact
 [source,yaml]
 ----
 Group: org.apache.isis.regressiontests
-Artifact: isis-regressiontests-stable-injecting
+Artifact: isis-regressiontests-stable-interact
 Type: jar
-Directory: /regressiontests/stable-injecting
+Directory: /regressiontests/stable-interact
 ----
 |.Dependencies
 ****
 org.apache.isis.regressiontests:isis-regressiontests-stable:jar:<managed> +
 ****
 
-|Apache Isis - Regression Tests (stable) - Interact
+|Apache Isis - Regression Tests (stable) - Persistence (JDO)
 [source,yaml]
 ----
 Group: org.apache.isis.regressiontests
-Artifact: isis-regressiontests-stable-interact
+Artifact: isis-regressiontests-stable-persistence-jdo
 Type: jar
-Directory: /regressiontests/stable-interact
+Directory: /regressiontests/stable-persistence-jdo
 ----
 |.Dependencies
 ****
+org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed> +
 org.apache.isis.regressiontests:isis-regressiontests-stable:jar:<managed> +
+org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
 ****
 
-|Apache Isis - Regression Tests (stable) - Logging
+|Apache Isis - Regression Tests (stable) - Persistence (JPA)
 [source,yaml]
 ----
 Group: org.apache.isis.regressiontests
-Artifact: isis-regressiontests-stable-logging
+Artifact: isis-regressiontests-stable-persistence-jpa
 Type: jar
-Directory: /regressiontests/stable-logging
+Directory: /regressiontests/stable-persistence-jpa
 ----
 |.Dependencies
 ****
+org.apache.isis.persistence:isis-persistence-jpa-eclipselink:jar:<managed> +
 org.apache.isis.regressiontests:isis-regressiontests-stable:jar:<managed> +
+org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
 ****
 
-|Apache Isis - Regression Tests (stable) - Persistence (JDO)
+|Apache Isis - Regression Tests (stable) - Publishing (JPA)
 [source,yaml]
 ----
 Group: org.apache.isis.regressiontests
-Artifact: isis-regressiontests-stable-persistence-jdo
+Artifact: isis-regressiontests-stable-publishing-jpa
 Type: jar
-Directory: /regressiontests/stable-persistence-jdo
+Directory: /regressiontests/stable-publishing-jpa
 ----
 |.Dependencies
 ****
+org.apache.isis.persistence:isis-persistence-jpa-eclipselink:jar:<managed> +
 org.apache.isis.regressiontests:isis-regressiontests-stable:jar:<managed> +
+org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
 ****
 
-|Apache Isis - Regression Tests (stable) - Persistence (JPA)
+|Apache Isis - Regression Tests (stable) - Rest
 [source,yaml]
 ----
 Group: org.apache.isis.regressiontests
-Artifact: isis-regressiontests-stable-persistence-jpa
+Artifact: isis-regressiontests-stable-rest
 Type: jar
-Directory: /regressiontests/stable-persistence-jpa
+Directory: /regressiontests/stable-rest
 ----
 |.Dependencies
 ****
+org.apache.isis.extensions:isis-extensions-cors-impl:jar:<managed> +
+org.apache.isis.mappings:isis-mappings-restclient-applib:jar:<managed> +
+org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed> +
+org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed> +
 org.apache.isis.regressiontests:isis-regressiontests-stable:jar:<managed> +
+org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
 ****
 
-|Apache Isis - Regression Tests (stable) - Publishing (JPA)
+|Apache Isis - Regression Tests (stable) - Value Types
 [source,yaml]
 ----
 Group: org.apache.isis.regressiontests
-Artifact: isis-regressiontests-stable-publishing-jpa
+Artifact: isis-regressiontests-stable-value
 Type: jar
-Directory: /regressiontests/stable-publishing-jpa
+Directory: /regressiontests/stable-value
 ----
 |.Dependencies
 ****
 org.apache.isis.regressiontests:isis-regressiontests-stable:jar:<managed> +
 ****
 
-|Apache Isis - Regression Tests (stable) - Rest
+|Apache Isis - Regression Tests (stable) - Viewers Common
 [source,yaml]
 ----
 Group: org.apache.isis.regressiontests
-Artifact: isis-regressiontests-stable-rest
+Artifact: isis-regressiontests-stable-viewers-common
 Type: jar
-Directory: /regressiontests/stable-rest
+Directory: /regressiontests/stable-viewers-common
 ----
 |.Dependencies
 ****
-org.apache.isis.extensions:isis-extensions-cors-impl:jar:<managed> +
 org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed> +
 org.apache.isis.regressiontests:isis-regressiontests-stable:jar:<managed> +
 ****
+
+|Apache Isis - Regression Tests (stable) - Viewers JDO
+[source,yaml]
+----
+Group: org.apache.isis.regressiontests
+Artifact: isis-regressiontests-stable-viewers-jdo
+Type: jar
+Directory: /regressiontests/stable-viewers-jdo
+----
+|.Dependencies
+****
+org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed> +
+org.apache.isis.persistence:isis-persistence-jdo-datanucleus:jar:<managed> +
+org.apache.isis.regressiontests:isis-regressiontests-stable:jar:<managed> +
+org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
+****
+
+|Apache Isis - Regression Tests (stable) - Viewers JPA
+[source,yaml]
+----
+Group: org.apache.isis.regressiontests
+Artifact: isis-regressiontests-stable-viewers-jpa
+Type: jar
+Directory: /regressiontests/stable-viewers-jpa
+----
+|.Dependencies
+****
+org.apache.isis.mavendeps:isis-mavendeps-webapp:pom:<managed> +
+org.apache.isis.persistence:isis-persistence-jpa-eclipselink:jar:<managed> +
+org.apache.isis.regressiontests:isis-regressiontests-stable:jar:<managed> +
+org.apache.isis.testing:isis-testing-fixtures-applib:jar:<managed> +
+****
 |===
 
 == Incubator
@@ -6065,7 +6653,30 @@ Artifact: isis-viewer-javafx-ui
 Type: jar
 Directory: /incubator/viewers/javafx/ui
 ----
-|.Dependencies
+|.Components
+****
+o.a.i.incubator.viewer.javafx.ui.components.UiComponentFactoryFx +
+o.a.i.incubator.viewer.javafx.ui.components.markup.MarkupFieldFactory +
+o.a.i.incubator.viewer.javafx.ui.components.number.NumberFieldFactory +
+o.a.i.incubator.viewer.javafx.ui.components.objectref.ObjectReferenceFieldFactory +
+o.a.i.incubator.viewer.javafx.ui.components.other.FallbackFieldFactory +
+o.a.i.incubator.viewer.javafx.ui.components.temporal.TemporalFieldFactory +
+o.a.i.incubator.viewer.javafx.ui.components.text.TextFieldFactory +
+o.a.i.incubator.viewer.javafx.ui.decorator.disabling.DisablingDecoratorForButton +
+o.a.i.incubator.viewer.javafx.ui.decorator.disabling.DisablingDecoratorForFormField +
+o.a.i.incubator.viewer.javafx.ui.decorator.icon.IconDecoratorForLabeled +
+o.a.i.incubator.viewer.javafx.ui.decorator.icon.IconDecoratorForMenuItem +
+o.a.i.incubator.viewer.javafx.ui.decorator.icon.IconServiceDefault +
+o.a.i.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingDecoratorForButton +
+o.a.i.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingDecoratorForFormField +
+o.a.i.incubator.viewer.javafx.ui.decorator.prototyping.PrototypingInfoPopupProvider +
+o.a.i.incubator.viewer.javafx.ui.main.MainViewFx +
+o.a.i.incubator.viewer.javafx.ui.main.UiActionHandlerFx +
+o.a.i.incubator.viewer.javafx.ui.main.UiBuilderFx +
+o.a.i.incubator.viewer.javafx.ui.main.UiContextFxDefault +
+****
+
+.Dependencies
 ****
 org.apache.isis.core:isis-core-runtimeservices:jar:<managed> +
 org.apache.isis.incubator.viewer:isis-viewer-javafx-model:jar:<managed> +
@@ -6179,7 +6790,23 @@ Artifact: isis-viewer-vaadin-ui
 Type: jar
 Directory: /incubator/viewers/vaadin/ui
 ----
-|.Dependencies
+|.Components
+****
+o.a.i.incubator.viewer.vaadin.ui.auth.LogoutHandlerVaa +
+o.a.i.incubator.viewer.vaadin.ui.auth.VaadinAuthenticationHandler +
+o.a.i.incubator.viewer.vaadin.ui.components.UiComponentFactoryVaa +
+o.a.i.incubator.viewer.vaadin.ui.components.blob.BlobFieldFactory +
+o.a.i.incubator.viewer.vaadin.ui.components.clob.ClobFieldFactory +
+o.a.i.incubator.viewer.vaadin.ui.components.markup.MarkupFieldFactory +
+o.a.i.incubator.viewer.vaadin.ui.components.other.FallbackFieldFactory +
+o.a.i.incubator.viewer.vaadin.ui.components.temporal.TemporalFieldFactory +
+o.a.i.incubator.viewer.vaadin.ui.components.text.TextFieldFactory +
+o.a.i.incubator.viewer.vaadin.ui.components.text.uuid.UuidFieldFactory +
+o.a.i.incubator.viewer.vaadin.ui.pages.main.UiActionHandlerVaa +
+o.a.i.incubator.viewer.vaadin.ui.pages.main.UiContextVaaDefault +
+****
+
+.Dependencies
 ****
 com.vaadin:vaadin-spring:jar:<managed> +
 commons-fileupload:commons-fileupload:jar:1.4 +