You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/09/14 13:40:04 UTC

[isis] branch master updated (d6160a7 -> d59b5fb)

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

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


    from d6160a7  Merge pull request #125 from apache/ISIS-1985-mm-validation
     new 6d53380  ISIS-1974: backports Andi's v2 improvements on ThreadPoolSupport into 'master' branch
     new 634854b  ISIS-1810: updates docs from v2 back to master.  Also skip git by default when building
     new e14c41a  ISIS-1899: reconcile pom files with v2 branch, backport improvements.
     new d59b5fb  ISIS-1986: backports skinnywar from v2.

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 adocs/documentation/pom.xml                        |  11 +-
 .../src/main/asciidoc/documentation.adoc           |  34 +-
 .../src/main/asciidoc/guides/cgcom/__versions.adoc |   3 +
 .../guides/cgcom/_cgcom_applying-patches.adoc      |   1 +
 .../cgcom/_cgcom_asciidoc-publish-procedure.adoc   | 128 +++--
 .../guides/cgcom/_cgcom_cutting-a-release.adoc     | 514 +++++++++------------
 .../guides/cgcom/_cgcom_key-generation.adoc        |   2 +-
 .../cgcom/_cgcom_post-release-successful.adoc      |  11 +-
 .../cgcom/_cgcom_post-release-unsuccessful.adoc    |   1 +
 ...cgcom_release-process-for-interim-releases.adoc |   5 +-
 .../_cgcom_release-process-for-snapshots.adoc      |   1 +
 .../cgcom/_cgcom_release-process-prereqs.adoc      |   1 +
 .../guides/cgcom/_cgcom_verifying-releases.adoc    |  23 +-
 .../asciidoc/guides/dg/_dg_asciidoc-templates.adoc |   6 +-
 .../main/asciidoc/guides/dg/_dg_ide_intellij.adoc  |   9 +-
 .../guides/rgant/_rgant-Action_command.adoc        |   3 +-
 .../guides/rgant/_rgant-Action_publishing.adoc     |  28 +-
 .../guides/rgant/_rgant-Collection_editing.adoc    |   5 +-
 .../guides/rgant/_rgant-Collection_typeOf.adoc     |   2 +-
 .../main/asciidoc/guides/rgant/_rgant-Column.adoc  |  12 +-
 .../_rgant-DomainObjectLayout_cssClassUiEvent.adoc |  54 +--
 .../_rgant-DomainObjectLayout_describedAs.adoc     |   2 +-
 .../_rgant-DomainObjectLayout_iconUiEvent.adoc     |  49 +-
 .../_rgant-DomainObjectLayout_titleUiEvent.adoc    |  22 +-
 .../guides/rgant/_rgant-DomainObject_auditing.adoc |   8 +-
 ..._rgant-DomainObject_autoCompleteRepository.adoc |  10 +-
 .../_rgant-DomainObject_createdLifecycleEvent.adoc |  50 +-
 .../_rgant-DomainObject_loadedLifecycleEvent.adoc  |  37 +-
 .../rgant/_rgant-DomainObject_objectType.adoc      |   6 +-
 ...rgant-DomainObject_persistedLifecycleEvent.adoc |  24 +-
 ...gant-DomainObject_persistingLifecycleEvent.adoc |  32 +-
 .../rgant/_rgant-DomainObject_publishing.adoc      |   8 +-
 ..._rgant-DomainObject_removingLifecycleEvent.adoc |  25 +-
 .../_rgant-DomainObject_updatedLifecycleEvent.adoc |  16 +-
 ..._rgant-DomainObject_updatingLifecycleEvent.adoc |  17 +-
 .../asciidoc/guides/rgant/_rgant-HomePage.adoc     |   4 +-
 .../main/asciidoc/guides/rgant/_rgant-Inject.adoc  |  48 +-
 .../asciidoc/guides/rgant/_rgant-MinLength.adoc    |   4 +-
 .../rgant/_rgant-ParameterLayout_describedAs.adoc  |  10 +-
 .../guides/rgant/_rgant-PostConstruct.adoc         |  36 +-
 .../asciidoc/guides/rgant/_rgant-PrimaryKey.adoc   |   6 +-
 .../asciidoc/guides/rgant/_rgant-Programmatic.adoc |   2 +-
 .../asciidoc/guides/rgant/_rgant-Property.adoc     |   1 -
 .../rgant/_rgant-PropertyLayout_describedAs.adoc   |   2 +-
 .../guides/rgant/_rgant-Property_editing.adoc      |   6 +-
 .../guides/rgant/_rgant-Property_publishing.adoc   |   8 +-
 .../main/asciidoc/guides/rgant/_rgant-Title.adoc   |   9 +-
 .../guides/rgant/_rgant-ViewModel_objectType.adoc  |   4 +-
 .../main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc |   4 +-
 .../src/main/asciidoc/guides/rgant/rgant.adoc      |   4 +-
 .../guides/rgcfg/_rgcfg_configuring-core.adoc      |   4 +-
 ..._classes_lifecycleevent_ObjectCreatedEvent.adoc |  10 +-
 ...lasses_lifecycleevent_ObjectPersistedEvent.adoc |  10 +-
 ...asses_lifecycleevent_ObjectPersistingEvent.adoc |  11 +-
 ...classes_lifecycleevent_ObjectRemovingEvent.adoc |  10 +-
 ..._classes_lifecycleevent_ObjectUpdatedEvent.adoc |   9 +-
 ...classes_lifecycleevent_ObjectUpdatingEvent.adoc |  10 +-
 .../guides/rgcms/_rgcms_classes_super.adoc         |   2 +-
 .../_rgcms_classes_super_AbstractService.adoc      |   5 +-
 .../_rgcms_classes_super_AbstractViewModel.adoc    |   2 +-
 .../rgcms/_rgcms_classes_super_FixtureScript.adoc  |   3 +-
 .../guides/rgcms/_rgcms_methods_lifecycle.adoc     |  15 +-
 .../rgcms/_rgcms_methods_lifecycle_created.adoc    |   2 +-
 .../rgcms/_rgcms_methods_prefixes_default.adoc     |  16 +-
 .../rgcms/_rgcms_methods_reserved_disable.adoc     |   4 +-
 .../guides/rgcms/_rgcms_schema-common.adoc         |   5 +-
 ..._persistence-layer_AuditingServiceInternal.adoc |  16 +-
 ...stence-layer_ChangedObjectsServiceInternal.adoc |  16 +-
 ...ersistence-layer_PublishingServiceInternal.adoc |  27 +-
 ...esentation-layer_ContentNegotiationService.adoc |  11 +-
 ...s_presentation-layer_RepresentationService.adoc |  31 +-
 ...lication-layer-api_ActionInvocationContext.adoc |  17 +-
 ...vc_application-layer-api_BackgroundService.adoc |   9 +-
 ...rgsvc_application-layer-api_CommandContext.adoc |  63 ++-
 ...svc_application-layer-api_DtoMappingHelper.adoc |   2 +-
 ...c_application-layer-api_InteractionContext.adoc |   7 +
 ...rgsvc_application-layer-api_MessageService.adoc |   1 +
 ...ication-layer-api_SessionManagementService.adoc |   1 +
 .../_rgsvc_application-layer-api_TitleService.adoc |   2 +-
 ...c_application-layer-api_TransactionService.adoc |   1 -
 ...rgsvc_application-layer-api_WrapperFactory.adoc |  35 +-
 ...rgsvc_application-layer-spi_CommandService.adoc |   3 +-
 ...lication-layer-spi_HomePageProviderService.adoc |   1 -
 ...vc_bootstrapping-spi_ClassDiscoveryService.adoc |   6 +-
 .../guides/rgsvc/_rgsvc_core-domain-api.adoc       |   1 +
 .../rgsvc/_rgsvc_core-domain-api_ClockService.adoc |  20 +-
 .../_rgsvc_core-domain-api_EventBusService.adoc    |   3 +
 .../_rgsvc_core-domain-api_FactoryService.adoc     |  12 +-
 .../rgsvc/_rgsvc_core-domain-api_Scratchpad.adoc   |   1 +
 .../_rgsvc_integration-api_BookmarkService.adoc    |   6 +-
 .../rgsvc/_rgsvc_integration-api_JaxbService.adoc  |   5 +-
 .../_rgsvc_integration-api_MementoService.adoc     |   2 +
 .../_rgsvc_integration-api_XmlSnapshotService.adoc |   3 +-
 .../main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc   | 145 +++---
 .../rgsvc/_rgsvc_metadata-api_LayoutService.adoc   |   7 +-
 .../_rgsvc_metadata-api_MetamodelService.adoc      |   3 +-
 .../rgsvc/_rgsvc_metadata-api_ServiceRegistry.adoc |   2 -
 .../rgsvc/_rgsvc_metadata-api_SwaggerService.adoc  |   8 +-
 ...rgsvc_persistence-layer-api_IsisJdoSupport.adoc |   2 +-
 ...rgsvc_persistence-layer-api_MetricsService.adoc |  20 +-
 ...vc_persistence-layer-api_QueryResultsCache.adoc |   1 +
 ...vc_persistence-layer-api_RepositoryService.adoc |   9 +-
 .../guides/rgsvc/_rgsvc_persistence-layer-spi.adoc |   2 +-
 ...rgsvc_persistence-layer-spi_AuditerService.adoc |  61 ++-
 ...svc_persistence-layer-spi_PublisherService.adoc |  78 ++--
 ...sistence-layer-spi_UserRegistrationService.adoc |   2 -
 ...presentation-layer-api_AcceptHeaderService.adoc |   5 +-
 ...svc_presentation-layer-api_DeepLinkService.adoc |   1 -
 ...c_presentation-layer-api_GuiceBeanProvider.adoc |   5 +-
 ...ntation-layer-spi_EmailNotificationService.adoc |   6 +-
 ...esentation-layer-spi_ErrorReportingService.adoc |   2 -
 ...presentation-layer-spi_ExceptionRecognizer.adoc |  34 +-
 .../_rgsvc_presentation-layer-spi_HintStore.adoc   |   1 +
 ...gsvc_presentation-layer-spi_RoutingService.adoc |   9 +-
 ...entation-layer-spi_TableColumnOrderService.adoc |   5 +
 ..._presentation-layer-spi_TranslationService.adoc |   4 +-
 ..._presentation-layer-spi_UrlEncodingService.adoc |  31 +-
 .../rgsvc/_rgsvc_testing_FixtureScripts.adoc       |   2 +-
 .../guides/ugbtb/_ugbtb_deployment_gae.adoc        |   2 +-
 .../ugbtb/_ugbtb_hints-and-tips_are-you-sure.adoc  |   4 +-
 ...d-tips_how-to-handle-void-and-null-results.adoc |   4 +-
 .../_ugbtb_hints-and-tips_persisted-title.adoc     |  10 +-
 ..._replacing-default-service-implementations.adoc |   5 +-
 .../main/asciidoc/guides/ugbtb/_ugbtb_i18n.adoc    |   4 +-
 .../ugbtb/_ugbtb_programming-model_finetuning.adoc |   6 +-
 ...ugfun_building-blocks_events_domain-events.adoc |  12 +-
 .../_ugfun_building-blocks_identifiers_oid.adoc    |   2 +-
 ...building-blocks_identifiers_title-and-icon.adoc |   2 +-
 ...ks_types-of-domain-objects_domain-entities.adoc |   2 +-
 .../_ugfun_core-concepts_apache-isis-vs_cqrs.adoc  |   4 +-
 ...ore-concepts_apache-isis-vs_event-sourcing.adoc |   2 +-
 .../_ugfun_core-concepts_deployment-options.adoc   |   2 +-
 .../main/asciidoc/guides/ugfun/_ugfun_crud.adoc    |   4 -
 .../ugfun/_ugfun_programming-model_actions.adoc    |   8 +-
 ...amming-model_domain-services_contributions.adoc |   2 +-
 .../ugfun/_ugfun_programming-model_mixins.adoc     |   2 +-
 ...amming-model_mixins_contributed-collection.adoc |   2 +-
 ...fun_programming-model_mixins_inferred-name.adoc |   2 +-
 ...rogramming-model_mixins_programmatic-usage.adoc |   8 +-
 .../_ugfun_ui-hints_names-and-descriptions.adoc    |   2 +-
 .../guides/ugsec/_ugsec_api-for-applications.adoc  |  11 +-
 .../src/main/asciidoc/guides/ugsec/ugsec.adoc      |   2 +-
 ..._ugtst_bdd-spec-support_writing-a-bdd-spec.adoc |   2 +-
 .../ugtst/_ugtst_fixture-scripts_sudo-service.adoc |   2 +-
 ...gtst_fixture-scripts_ticking-clock-fixture.adoc |   2 +-
 .../_ugtst_integ-test-support_typical-usage.adoc   |   4 +-
 .../_ugtst_integ-test-support_wrapper-factory.adoc |  32 +-
 .../_ugvw_customisation_tweaking-css-classes.adoc  |   3 +-
 .../guides/ugvw/_ugvw_layout_annotation-based.adoc |   8 +-
 .../guides/ugvw/_ugvw_layout_file-based.adoc       |   2 +-
 .../ugvw/_ugvw_menubars-layout_file-based.adoc     |   2 +-
 adocs/documentation/src/main/asciidoc/index.html   |  87 +++-
 .../_migration-notes_1.10.0-to-1.11.0.adoc         |  18 +-
 .../_migration-notes_1.11.0-to-1.12.0.adoc         |  30 +-
 .../_migration-notes_1.12.0-to-1.13.0.adoc         | 142 +++---
 .../_migration-notes_1.13.0-to-1.14.0.adoc         |   2 +-
 .../_migration-notes_1.14.0-to-1.15.0.adoc         |  20 +-
 .../_migration-notes_1.7.0-to-1.8.0.adoc           |  16 +-
 ...0-to-1.9.0_bootstrapping-using-AppManifest.adoc |   4 +-
 ...-notes_1.8.0-to-1.9.0_exception-recognizer.adoc |   6 +-
 ...9.0_fixture-scripts-specification-provider.adoc |   4 +-
 ...es_1.8.0-to-1.9.0_specify-all-dom-packages.adoc |   6 +-
 ...tion-notes_1.8.0-to-1.9.0_upgrading-to-dn4.adoc |   2 +-
 ...on-notes_1.8.0-to-1.9.0_upgrading-to-java8.adoc |   3 +-
 ...gration-notes_1.8.0-to-1.9.0_war-packaging.adoc |   4 +-
 .../_migration-notes_1.9.0-to-1.10.0.adoc          |   5 +-
 core/applib/pom.xml                                |  39 +-
 core/maven-plugin/pom.xml                          |   2 +-
 .../metamodel/specloader/SpecificationLoader.java  |   5 +-
 .../core/runtime/threadpool/ThreadPoolSupport.java | 206 ++++++---
 core/pom.xml                                       | 141 ++++--
 .../system/session/IsisSessionFactoryBuilder.java  |   4 +-
 core/viewer-restfulobjects-applib/pom.xml          |   1 -
 .../wicket/viewer/IsisWicketApplication.java       |   4 +-
 core/viewer-wicket-ui/pom.xml                      |   2 +-
 core/webdocker/pom.xml                             | 283 ++++++++++++
 .../src/main/assembly/assembly.xml}                |  29 +-
 .../conf/Catalina/localhost/host-manager.xml}      |  11 +-
 .../conf/Catalina/localhost/manager.xml}           |  11 +-
 .../catalina_home/conf/catalina.properties         | 148 ++++++
 .../resources/catalina_home/conf/tomcat-users.xml  |  50 ++
 .../webdocker/src/main/resources/docker/Dockerfile |  38 ++
 example/application/helloworld/pom.xml             |  67 +++
 .../application/simpleapp/module-simple/pom.xml    |  10 +-
 example/application/simpleapp/pom.xml              |  11 +-
 example/application/simpleapp/webapp/pom.xml       |  67 +++
 186 files changed, 2215 insertions(+), 1597 deletions(-)
 create mode 100644 adocs/documentation/src/main/asciidoc/guides/cgcom/__versions.adoc
 create mode 100644 core/webdocker/pom.xml
 copy core/{viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionprompt/ActionPromptModalWindow.html => webdocker/src/main/assembly/assembly.xml} (53%)
 copy core/{viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/zclip/SimpleClipboardModalWindow.html => webdocker/src/main/resources/catalina_home/conf/Catalina/localhost/host-manager.xml} (80%)
 copy core/{viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/zclip/SimpleClipboardModalWindow.html => webdocker/src/main/resources/catalina_home/conf/Catalina/localhost/manager.xml} (80%)
 create mode 100644 core/webdocker/src/main/resources/catalina_home/conf/catalina.properties
 create mode 100644 core/webdocker/src/main/resources/catalina_home/conf/tomcat-users.xml
 create mode 100644 core/webdocker/src/main/resources/docker/Dockerfile


[isis] 01/04: ISIS-1974: backports Andi's v2 improvements on ThreadPoolSupport into 'master' branch

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 6d53380f12c0b043413bbe8796b1a598a14c2e45
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Sep 14 07:09:28 2018 +0100

    ISIS-1974: backports Andi's v2 improvements on ThreadPoolSupport into 'master' branch
---
 .../metamodel/specloader/SpecificationLoader.java  |   5 +-
 .../core/runtime/threadpool/ThreadPoolSupport.java | 206 +++++++++++++++------
 .../system/session/IsisSessionFactoryBuilder.java  |   4 +-
 .../wicket/viewer/IsisWicketApplication.java       |   4 +-
 4 files changed, 153 insertions(+), 66 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index 9589f9f..7e52cf6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@ -212,8 +212,9 @@ public class SpecificationLoader implements ApplicationScopedComponent {
             };
             callables.add(callable);
         }
-        List<Future<Object>> futures = ThreadPoolSupport.invokeAll(callables);
-        ThreadPoolSupport.joinGatherFailures(futures);
+        ThreadPoolSupport threadPoolSupport = ThreadPoolSupport.getInstance();
+        List<Future<Object>> futures = threadPoolSupport.invokeAll(callables);
+        threadPoolSupport.joinGatherFailures(futures);
 
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
index 6c74b1f..bbff251 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
@@ -20,6 +20,8 @@
 package org.apache.isis.core.runtime.threadpool;
 
 import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.Callable;
@@ -30,9 +32,11 @@ import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
+import javax.annotation.Nullable;
+
 import com.google.common.base.Function;
+import com.google.common.base.Supplier;
 import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
 import org.slf4j.Logger;
@@ -45,32 +49,106 @@ public final class ThreadPoolSupport {
     private final static int KEEP_ALIVE_TIME_SECS = 5;
     private final static int QUEUE_CAPACITY = 5000;
 
-    private static final ThreadGroup group;
-    private static final BlockingQueue<Runnable> workQueue;
-    private static final ThreadPoolExecutor executor   ;
+    private final ThreadGroup group;
+    private final ThreadPoolExecutor concurrentExecutor;
+    private final ThreadPoolExecutor sequentialExecutor;
+
+    private static ThreadPoolSupport threadPoolSupport;
+
+    public static synchronized ThreadPoolSupport getInstance() {
+        if (threadPoolSupport == null) {
+            threadPoolSupport = new ThreadPoolSupport();
+        }
+        return threadPoolSupport;
+    }
 
-    static {
+    private ThreadPoolSupport() {
         group = new ThreadGroup(ThreadPoolSupport.class.getName());
-        workQueue = new LinkedBlockingQueue<>(QUEUE_CAPACITY);
 
         final int corePoolSize = Runtime.getRuntime().availableProcessors();
         final int maximumPoolSize = Runtime.getRuntime().availableProcessors();
 
-        executor = new ThreadPoolExecutor(
+        ThreadFactory threadFactory = new ThreadFactory() {
+            @Override
+            public Thread newThread(final Runnable r) {
+                return new Thread(group, r);
+            }
+        };
+
+        Supplier<BlockingQueue<Runnable>> workQueueFactory = new Supplier<BlockingQueue<Runnable>>() {
+            @Override
+            public BlockingQueue<Runnable> get() {
+                return new LinkedBlockingQueue<>(QUEUE_CAPACITY);
+            }
+        };
+
+        concurrentExecutor = new ThreadPoolExecutor(
                 corePoolSize,
                 maximumPoolSize,
                 KEEP_ALIVE_TIME_SECS,
                 TimeUnit.SECONDS,
-                workQueue,
-                new ThreadFactory() {
-                    @Override
-                    public Thread newThread(final Runnable r) {
-                        return new Thread(group, r);
-                    }
-                });
+                workQueueFactory.get(),
+                threadFactory);
+
+        sequentialExecutor = new ThreadPoolExecutor(
+                1,
+                1,
+                KEEP_ALIVE_TIME_SECS,
+                TimeUnit.SECONDS,
+                workQueueFactory.get(),
+                threadFactory);
+
+    }
+
+    public void close() throws Exception {
+        try {
+            concurrentExecutor.shutdown();
+        } finally {
+            // in case the previous throws, continue execution here
+            sequentialExecutor.shutdown();
+        }
+    }
+
+    /**
+     * Executes specified {@code callables} on the default executor.
+     * See {@link ThreadPoolExecutor#invokeAll(java.util.Collection)}
+     * @param callables nullable
+     * @return non-null
+     */
+    public List<Future<Object>> invokeAll(@Nullable final List<Callable<Object>> callables) {
+        return invokeAll(concurrentExecutor, callables);
+    }
+
+    /**
+     * Executes specified {@code callables} on the default executor.
+     * See {@link ThreadPoolExecutor#invokeAll(java.util.Collection)}
+     * @param callables nullable
+     * @return non-null
+     */
+    public List<Future<Object>> invokeAll(final Callable<Object>... callables) {
+        return invokeAll(Arrays.asList(callables));
+    }
+
+    /**
+     * Executes specified {@code callables} on the sequential executor in sequence, one by one.
+     * @param callables nullable
+     * @return non-null
+     */
+    public List<Future<Object>> invokeAllSequential(@Nullable final List<Callable<Object>> callables) {
+        return invokeAll(sequentialExecutor, callables);
     }
 
-    public static List<Object> join(final List<Future<Object>> futures) {
+    /**
+     * Executes specified {@code callables} on the sequential executor in sequence, one by one.
+     * @param callables nullable
+     * @return non-null
+     */
+    public List<Future<Object>> invokeAllSequential(final Callable<Object>... callables) {
+        return invokeAllSequential(Arrays.asList(callables));
+    }
+
+
+    public List<Object> join(final List<Future<Object>> futures) {
         if (futures == null) {
             return null;
         }
@@ -97,7 +175,7 @@ public final class ThreadPoolSupport {
         }
     }
 
-    public static List<Object> joinGatherFailures(final List<Future<Object>> futures) {
+    public List<Object> joinGatherFailures(final List<Future<Object>> futures) {
         if (futures == null) {
             return null;
         }
@@ -121,7 +199,7 @@ public final class ThreadPoolSupport {
         }
     }
 
-    public static Object join(final Future<Object> future) {
+    public Object join(final Future<Object> future) {
         try {
             return future.get();
         } catch (InterruptedException | ExecutionException e) {
@@ -130,55 +208,63 @@ public final class ThreadPoolSupport {
         }
     }
 
-    public static List<Future<Object>> invokeAll(final List<Callable<Object>> callables) {
-        final long queuedAt = System.currentTimeMillis();
+    // -- HELPER
+
+    private List<Future<Object>> invokeAll(ThreadPoolExecutor executor, @Nullable final List<Callable<Object>> callables) {
+        if(isEmpty(callables)) {
+            return Collections.emptyList();
+        }
         try {
-            ImmutableList<Callable<Object>> timedCallables =
-                    FluentIterable.from(callables).transform(
-                        new Function<Callable<Object>, Callable<Object>>() {
-                            @Override
-                            public Callable<Object> apply(final Callable<Object> callable) {
-                                return new Callable<Object>() {
-                                    @Override
-                                    public Object call() throws Exception {
-
-                                        final long startedAt = System.currentTimeMillis();
-                                        if(LOG.isDebugEnabled()) {
-                                            LOG.debug("START: workQueue.size: {}, waited for: {}ms, {}",
-                                                    workQueue.size(),
-                                                    startedAt - queuedAt,
-                                                    callable.toString());
-                                        }
-                                        try {
-                                            return callable.call();
-                                        } finally {
-                                            final long completedAt = System.currentTimeMillis();
-                                            if(LOG.isDebugEnabled()) {
-                                                LOG.debug("END: completed in: {}ms, {}",
-                                                        completedAt - startedAt,
-                                                        callable.toString());
-                                            }
-                                        }
-                                    }
-                                };
-                            }
-                        }).toList();
-            return executor.invokeAll(timedCallables);
+            return executor.invokeAll(timed(executor, callables));
         } catch (InterruptedException e) {
             throw new RuntimeException(e);
         }
     }
-    public static List<Future<Object>> invokeAll(final Callable<Object>... callables) {
-        return invokeAll(Arrays.asList(callables));
+
+    private static List<Callable<Object>> timed(
+            final ThreadPoolExecutor executor,
+            final List<Callable<Object>> callables) {
+        final long queuedAt = System.currentTimeMillis();
+        return FluentIterable.from(callables).transform(
+                new Function<Callable<Object>, Callable<Object>>() {
+                    @Override
+                    public Callable<Object> apply(final Callable<Object> callable) {
+                        final int queueSize = executor.getQueue().size();
+                        return timed(callable, queueSize, queuedAt);
+                    }
+                }).toList();
     }
-    public static List<Future<Object>> invokeSerial(final Callable<Object>... callables) {
-        List<Future<Object>> futures = Lists.newArrayList();
-        for (Callable<Object> callable : callables) {
-            List<Future<Object>> x = invokeAll(callable);
-            join(x);
-            futures.addAll(x);
-        }
-        return futures;
+
+    private static Callable<Object> timed(
+            final Callable<Object> callable,
+            final int queueSize,
+            final long queuedAt) {
+        return new Callable<Object>() {
+            @Override
+            public Object call() throws Exception {
+
+                final long startedAt = System.currentTimeMillis();
+                if(LOG.isDebugEnabled()) {
+                    LOG.debug("START: workQueue.size: {}, waited for: {}ms, {}",
+                            queueSize,
+                            startedAt - queuedAt,
+                            callable.toString());
+                }
+                try {
+                    return callable.call();
+                } finally {
+                    final long completedAt = System.currentTimeMillis();
+                    if(LOG.isDebugEnabled()) {
+                        LOG.debug("END: completed in: {}ms, {}",
+                                completedAt - startedAt,
+                                callable.toString());
+                    }
+                }
+            }
+        };
     }
 
+    private static boolean isEmpty(Collection<?> x) { return x==null || x.size() == 0; }
+
+
 }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java
index 2a00f07..802f407 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java
@@ -185,7 +185,7 @@ public class IsisSessionFactoryBuilder {
             IsisContext.setSessionFactory(isisSessionFactory);
 
 
-            final List<Future<Object>> futures = ThreadPoolSupport.invokeAll(
+            final List<Future<Object>> futures = ThreadPoolSupport.getInstance().invokeAll(
                     new Callable<Object>() {
                         @Override
                         public Object call() {
@@ -259,7 +259,7 @@ public class IsisSessionFactoryBuilder {
 
             );
 
-            ThreadPoolSupport.joinGatherFailures(futures);
+            ThreadPoolSupport.getInstance().joinGatherFailures(futures);
 
             persistenceSessionFactory.catalogNamedQueries(specificationLoader);
 
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index 3f47039..895f6f4 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -433,12 +433,12 @@ public class IsisWicketApplication
             LOG.error("Failed to initialize", ex);
             throw ex;
         } finally {
-            ThreadPoolSupport.join(futures);
+            ThreadPoolSupport.getInstance().join(futures);
         }
     }
 
     protected List<Future<Object>> startBackgroundInitializationThreads() {
-        return ThreadPoolSupport.invokeAll(
+        return ThreadPoolSupport.getInstance().invokeAll(
                 new Callable<Object>() {
                     @Override
                     public Object call() throws Exception {


[isis] 03/04: ISIS-1899: reconcile pom files with v2 branch, backport improvements.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit e14c41ad49c86b48dfe877659996c0185ade2e41
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Sep 14 14:10:37 2018 +0100

    ISIS-1899: reconcile pom files with v2 branch, backport improvements.
---
 adocs/documentation/pom.xml                        |  11 +-
 core/applib/pom.xml                                |  39 +-----
 core/maven-plugin/pom.xml                          |   2 +-
 core/pom.xml                                       | 137 ++++++++++++++-------
 core/viewer-restfulobjects-applib/pom.xml          |   1 -
 core/viewer-wicket-ui/pom.xml                      |   2 +-
 example/application/helloworld/pom.xml             |   1 +
 .../application/simpleapp/module-simple/pom.xml    |  10 +-
 example/application/simpleapp/pom.xml              |  11 +-
 9 files changed, 116 insertions(+), 98 deletions(-)

diff --git a/adocs/documentation/pom.xml b/adocs/documentation/pom.xml
index ec06654..3f76176 100644
--- a/adocs/documentation/pom.xml
+++ b/adocs/documentation/pom.xml
@@ -52,10 +52,11 @@
 
         <build.dir>${project.basedir}/target/site</build.dir>
 
-	<!-- expected isis-site to be checked out to /c/ASF/isis/isis-site, vs /c/github/apache/isis -->
-        <isis-site-latest.dir>../../../../../ASF/isis/isis-site/latest</isis-site-latest.dir>
-        <isis-site-content.dir>../../../../../ASF/isis/isis-site/content</isis-site-content.dir>
-        <isis-site-search.dir>../../../../../ASF/isis/isis-site/search</isis-site-search.dir>
+	    <!-- expects isis-site to be checked out to /c/ASF/isis/isis-site, vs /c/github/apache/isis -->
+        <isis-site.dir>../../../../../ASF/isis/isis-site</isis-site.dir>
+        <isis-site-latest.dir>${isis-site.dir}/latest</isis-site-latest.dir>
+        <isis-site-content.dir>${isis-site.dir}/content</isis-site-content.dir>
+        <isis-site-search.dir>${isis-site.dir}/search</isis-site-search.dir>
         <message>updating content (built from adocs/documentation in isis.git repo)</message>
     </properties>
 
@@ -415,7 +416,7 @@
                                         <echo message=""/>
                                         <echo message="TO COMPLETE:"/>
                                         <echo message=""/>
-                                        <echo message="   cd ../../../isis-site"/>
+                                        <echo message="   cd ${isis-site.dir}"/>
                                         <echo message="   sh preview.sh"/>
                                         <echo message="   git commit -am 'some message'"/>
                                         <echo message="   git push"/>
diff --git a/core/applib/pom.xml b/core/applib/pom.xml
index 3054ac2..c137a08 100644
--- a/core/applib/pom.xml
+++ b/core/applib/pom.xml
@@ -56,48 +56,15 @@
                 </excludes>
             </resource>
         </resources>
-        <pluginManagement>
-            <plugins>
-                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
-                <plugin>
-                    <groupId>org.eclipse.m2e</groupId>
-                    <artifactId>lifecycle-mapping</artifactId>
-                    <version>1.0.0</version>
-                    <configuration>
-                        <lifecycleMappingMetadata>
-                            <pluginExecutions>
-                                <pluginExecution>
-                                    <pluginExecutionFilter>
-                                        <groupId>
-                                            org.datanucleus
-                                        </groupId>
-                                        <artifactId>
-                                            datanucleus-maven-plugin
-                                        </artifactId>
-                                        <versionRange>
-                                            [4.0.0-release,)
-                                        </versionRange>
-                                        <goals>
-                                            <goal>enhance</goal>
-                                        </goals>
-                                    </pluginExecutionFilter>
-                                    <action>
-                                        <ignore />
-                                    </action>
-                                </pluginExecution>
-                            </pluginExecutions>
-                        </lifecycleMappingMetadata>
-                    </configuration>
-                </plugin>
-            </plugins>
-        </pluginManagement>
     </build>
 
     <dependencies>
-        <dependency>
+
+    	<dependency>
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-schema</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
             <artifactId>geronimo-atinject_1.0_spec</artifactId>
diff --git a/core/maven-plugin/pom.xml b/core/maven-plugin/pom.xml
index 43bf8b2..fa1bf5f 100644
--- a/core/maven-plugin/pom.xml
+++ b/core/maven-plugin/pom.xml
@@ -37,7 +37,7 @@
     </description>
 
     <prerequisites>
-        <maven>3.0.4</maven>
+        <maven>3.3.9</maven>
     </prerequisites>
 
     <properties>
diff --git a/core/pom.xml b/core/pom.xml
index 6e9e138..2490e62 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -91,20 +91,13 @@
         <!-- Datanucleus Objectstore -->
         <jdo-api.version>3.1</jdo-api.version>
 
+        <!-- Isis Datanucleus JDO dn -->
         <datanucleus-core.version>4.1.7</datanucleus-core.version>
         <datanucleus-api-jdo.version>4.1.1</datanucleus-api-jdo.version>
         <datanucleus-jdo-query.version>4.0.5</datanucleus-jdo-query.version>
         <datanucleus-rdbms.version>4.1.9</datanucleus-rdbms.version>
 
         <datanucleus-jodatime.version>4.1.0-release</datanucleus-jodatime.version>
-	<!--
-	    ISIS-1288: seen integration tests to fail;
-	    domain object date holding 1-Aug-2015 after xactn retrieved as 31-Jul-2015
-
-        https://github.com/datanucleus/datanucleus-jodatime/commit/b85795a1bf5f92909a95d2c8f8822bba2ba38b5f
-
-        <datanucleus-jodatime.version>4.1.1</datanucleus-jodatime.version>
-	-->
         <datanucleus-maven-plugin.version>4.0.2</datanucleus-maven-plugin.version>
 
         <shiro.version>1.2.6</shiro.version>
@@ -116,10 +109,10 @@
         <guava.version>19.0</guava.version>
 
         <hamcrest.version>1.3</hamcrest.version>
-
         <assertj.version>3.6.2</assertj.version>
         <objenesis.version>2.4</objenesis.version>
         <javassist.version>3.20.0-GA</javassist.version>
+
         <reflections.version>0.9.10</reflections.version>
 
         <commons-logging.version>1.2</commons-logging.version>
@@ -127,6 +120,7 @@
         <commons-httpclient.version>3.1</commons-httpclient.version>
         <commons-codec.version>1.10</commons-codec.version>
         <commons-email.version>1.4</commons-email.version>
+        <commons-io.version>2.6</commons-io.version>
         <com-sun-mail.version>1.5.2</com-sun-mail.version>
 
         <axon-core.version>2.4.4</axon-core.version>
@@ -134,7 +128,6 @@
         <jackson.version>2.8.0</jackson.version>
         <gson.version>2.7</gson.version>
         <swagger-core.version>1.5.9</swagger-core.version>
-        <webjars-servlet-2.x.version>1.5</webjars-servlet-2.x.version>
 
         <hsqldb.version>2.3.4</hsqldb.version>
         <log4jdbc-remix.version>0.2.7</log4jdbc-remix.version>
@@ -144,11 +137,12 @@
 
         <wicket.version>7.9.0</wicket.version>
         <wicketstuff.version>7.8.1</wicketstuff.version>
-
-        <wicket-webjars.version>0.5.4</wicket-webjars.version>
         <wicket-bootstrap.version>0.10.16</wicket-bootstrap.version>
         <wicket-source.version>7.0.0</wicket-source.version>
 
+        <wicket-webjars.version>0.5.4</wicket-webjars.version>
+        <webjars-servlet-2.x.version>1.5</webjars-servlet-2.x.version>
+
         <select2.version>4.0.3</select2.version>
 
         <jquery-ui.version>1.11.4</jquery-ui.version>
@@ -212,6 +206,16 @@
     </mailingLists>
 
     <developers>
+    	<developer>
+            <id>ahuber</id>
+            <name>Andi Huber</name>
+            <email>ahuber@apache.org</email>
+            <roles>
+                <role>pmc</role>
+                <role>committer</role>
+            </roles>
+            <timezone>+1</timezone>
+        </developer>
         <developer>
             <id>danhaywood</id>
             <name>Dan Haywood</name>
@@ -388,13 +392,6 @@
                 <enabled>true</enabled>
             </snapshots>
         </repository>
-        <repository>
-            <id>datanucleus-nightly</id>
-            <url>http://www.datanucleus.org/downloads/maven2-nightly/</url>
-            <snapshots>
-              <enabled>true</enabled>
-            </snapshots>
-        </repository>
 
         <!-- required for RestEasy -->
         <repository>
@@ -480,7 +477,7 @@
                             <exclude>**/*.svg</exclude>
                             <exclude>**/*.json</exclude>
                             <exclude>**/*.min.js</exclude>
-                            
+
                             <exclude>**/MANIFEST.MF</exclude>
                             <exclude>**/*.ucd</exclude>
                             <exclude>**/*.ucls</exclude>
@@ -488,7 +485,7 @@
                             <exclude>**/xml/objects/**</exclude>
                             <exclude>**/test.data</exclude>
                             <exclude>**/fixture-data/**</exclude>
-                            
+
                             <exclude>**/application.js</exclude>
 
                             <exclude>**/jquery.zclip.js</exclude>
@@ -498,9 +495,9 @@
                             <exclude>**/bootstrap-datetimepicker.min.css</exclude>
                             <exclude>**/bootstrap-datetimepicker.css</exclude>
                             <exclude>**/select2-bootstrap.css</exclude>
-                            
+
                             <exclude>**/wicket-xhtml1.4-strict.dtd</exclude>
-                            
+
                             <exclude>**/src/main/appended-resources/supplemental-models.xml</exclude>
                             <exclude>**/datanucleus.log</exclude>
                             <exclude>**/gradle/wrapper/gradle-wrapper.properties</exclude>
@@ -594,7 +591,6 @@
                     <!-- goal:compile binds to phase:compile -->
                     <!-- goal:testCompile binds to phase:test-compile -->
                 </plugin>
-
                 
                 <!-- Tests (ignore integration tests)-->
                 <plugin>
@@ -602,14 +598,6 @@
                     <artifactId>maven-surefire-plugin</artifactId>
                     <version>2.16</version>
                     <configuration>
-                    <!-- 
-                        <includes>
-                            <include>**/Test*.java</include>
-                            <include>**/*Test.java</include>
-                            <include>**/*TestCase.java</include>
-                            <include>**/*Test_*.java</include>
-                        </includes>
-                     -->
                         <excludes>
                             <exclude>${testsToExclude}</exclude>
                         </excludes>
@@ -1449,6 +1437,11 @@ ${license.additional-notes}
                 <artifactId>commons-codec</artifactId>
                 <version>${commons-codec.version}</version>
             </dependency>
+            <dependency>
+                <groupId>commons-io</groupId>
+                <artifactId>commons-io</artifactId>
+                <version>${commons-io.version}</version>
+            </dependency>
 
             <!-- Dependency injection -->
             <dependency>
@@ -1906,9 +1899,10 @@ ${license.additional-notes}
                 <artifactId>jetty-webapp</artifactId>
                 <version>${jetty.version}</version>
             </dependency>
-            
 
-            <!-- Testing libraries (not scope=test because used by isis-core-integtest) -->
+
+            <!-- TESTING LIBRARIES (not scope=test because used by isis-core-integtest) -->
+
             <dependency>
                 <groupId>junit</groupId>
                 <artifactId>junit</artifactId>
@@ -2094,13 +2088,13 @@ ${license.additional-notes}
 
         <!-- TEST DEPENDENCIES -->
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
+            <groupId>org.jmock</groupId>
+            <artifactId>jmock-junit4</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-junit4</artifactId>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -2110,10 +2104,9 @@ ${license.additional-notes}
         </dependency>
     </dependencies>
 
-    <profiles>
-
+	<profiles>
         <profile>
-            <id>jdk7</id>
+            <id>apache-release</id>
             <build>
                 <plugins>
                     <plugin>
@@ -2140,7 +2133,7 @@ ${license.additional-notes}
             </build>
         </profile>
         <profile>
-            <id>apache-release</id>
+            <id>jdk7</id>
             <build>
                 <plugins>
                     <plugin>
@@ -2218,6 +2211,7 @@ ${license.additional-notes}
                 </plugins>
             </build>
         </profile>
+
         <profile>
 
             <!--
@@ -2280,6 +2274,7 @@ ${license.additional-notes}
                 </repository>
             </distributionManagement>
         </profile>
+
         <profile>
             <id>owasp</id>
             <activation>
@@ -2335,6 +2330,24 @@ ${license.additional-notes}
                 </plugins>
             </build>
         </profile>
+
+        <profile>
+            <id>src</id>
+            <activation>
+                <property>
+                    <name>!skip.src</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-source-plugin</artifactId>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
         <profile>
             <id>git</id>
             <activation>
@@ -2391,6 +2404,46 @@ ${license.additional-notes}
                 </plugins>
             </build>
         </profile>
+
+        <profile>
+            <!--
+            as per https://stackoverflow.com/a/28860520/56880
+            allows -Dgpg.passphrase= to be used rather than gpg.useagent
+            inherited from parent.
+            Note that this requires gpg v2.1+
+            -->
+            <id>gpg</id>
+            <activation>
+                <property>
+                    <name>gpg.passphrase</name>
+                </property>
+            </activation>
+            <properties>
+                <gpg.useagent>false</gpg.useagent>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-gpg-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <id>sign-release-artifacts</id>
+                                <goals>
+                                    <goal>sign</goal>
+                                </goals>
+                                <configuration>
+                                    <gpgArguments>
+                                        <arg>--pinentry-mode</arg>
+                                        <arg>loopback</arg>
+                                    </gpgArguments>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
     </profiles>
 
     <modules>
diff --git a/core/viewer-restfulobjects-applib/pom.xml b/core/viewer-restfulobjects-applib/pom.xml
index 212f825..cae5d04 100644
--- a/core/viewer-restfulobjects-applib/pom.xml
+++ b/core/viewer-restfulobjects-applib/pom.xml
@@ -100,7 +100,6 @@
             <scope>test</scope>
         </dependency>
 
-
     </dependencies>
 
     <repositories>
diff --git a/core/viewer-wicket-ui/pom.xml b/core/viewer-wicket-ui/pom.xml
index 8953733..ded72eb 100644
--- a/core/viewer-wicket-ui/pom.xml
+++ b/core/viewer-wicket-ui/pom.xml
@@ -148,7 +148,7 @@
             <artifactId>log4j</artifactId>
         </dependency>
 
-	<!-- TEST DEPENDENCIES -->
+        <!-- TEST DEPENDENCIES -->
         <dependency>
             <groupId>org.apache.isis.core</groupId>
             <artifactId>isis-core-unittestsupport</artifactId>
diff --git a/example/application/helloworld/pom.xml b/example/application/helloworld/pom.xml
index 18fdd10..b30f21b 100644
--- a/example/application/helloworld/pom.xml
+++ b/example/application/helloworld/pom.xml
@@ -140,6 +140,7 @@
             <artifactId>isis-core-applib</artifactId>
         </dependency>
 
+        <!-- OTHER DEPENDENCIES -->
         <dependency>
             <groupId>org.hsqldb</groupId>
             <artifactId>hsqldb</artifactId>
diff --git a/example/application/simpleapp/module-simple/pom.xml b/example/application/simpleapp/module-simple/pom.xml
index 088fab8..549cb40 100644
--- a/example/application/simpleapp/module-simple/pom.xml
+++ b/example/application/simpleapp/module-simple/pom.xml
@@ -151,6 +151,10 @@
             <artifactId>axon-core</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.datanucleus</groupId>
+            <artifactId>datanucleus-core</artifactId>
+        </dependency>
 
         <!-- TESTS -->
 
@@ -162,12 +166,6 @@
         </dependency>
 
         <dependency>
-            <groupId>org.datanucleus</groupId>
-            <artifactId>datanucleus-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
             <groupId>org.hsqldb</groupId>
             <artifactId>hsqldb</artifactId>
             <scope>test</scope>
diff --git a/example/application/simpleapp/pom.xml b/example/application/simpleapp/pom.xml
index ab744db..19a7057 100644
--- a/example/application/simpleapp/pom.xml
+++ b/example/application/simpleapp/pom.xml
@@ -37,10 +37,9 @@
 
     <properties>
         <revision>1.16.3-SNAPSHOT</revision>
-	
         <isis.version>${revision}</isis.version>
 
-        <lombok.version>1.18.0</lombok.version>
+        <lombok.version>[1.18,)</lombok.version>
 
         <compiler-plugin.source>1.8</compiler-plugin.source>
         <compiler-plugin.target>1.8</compiler-plugin.target>
@@ -112,23 +111,23 @@
             <dependency>
                 <groupId>org.apache.isis.example.application</groupId>
                 <artifactId>simpleapp-module-simple</artifactId>
-                <version>${revision}</version>
+                <version>${project.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.example.application</groupId>
                 <artifactId>simpleapp-module-simple</artifactId>
-                <version>${revision}</version>
+                <version>${project.version}</version>
                 <type>test-jar</type>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.example.application</groupId>
                 <artifactId>simpleapp-application</artifactId>
-                <version>${revision}</version>
+                <version>${project.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.isis.example.application</groupId>
                 <artifactId>simpleapp-webapp</artifactId>
-                <version>${revision}</version>
+                <version>${project.version}</version>
             </dependency>
 
             <!-- lombok -->


[isis] 04/04: ISIS-1986: backports skinnywar from v2.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d59b5fbb989efcce81baab4c28f830147192eea1
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Sep 14 14:38:20 2018 +0100

    ISIS-1986: backports skinnywar from v2.
---
 core/pom.xml                                       |   2 +
 core/webdocker/pom.xml                             | 283 +++++++++++++++++++++
 core/webdocker/src/main/assembly/assembly.xml      |  36 +++
 .../conf/Catalina/localhost/host-manager.xml       |  23 ++
 .../conf/Catalina/localhost/manager.xml            |  23 ++
 .../catalina_home/conf/catalina.properties         | 148 +++++++++++
 .../resources/catalina_home/conf/tomcat-users.xml  |  50 ++++
 .../webdocker/src/main/resources/docker/Dockerfile |  38 +++
 example/application/helloworld/pom.xml             |  66 +++++
 example/application/simpleapp/webapp/pom.xml       |  67 +++++
 10 files changed, 736 insertions(+)

diff --git a/core/pom.xml b/core/pom.xml
index 2490e62..b7aef87 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -2476,6 +2476,8 @@ ${license.additional-notes}
         <module>mavendeps/intellij</module>
         <module>mavendeps/webapp</module>
         <module>mavendeps/testing</module>
+
+        <module>webdocker</module>
     </modules>
 
 </project>
diff --git a/core/webdocker/pom.xml b/core/webdocker/pom.xml
new file mode 100644
index 0000000..3e9dd68
--- /dev/null
+++ b/core/webdocker/pom.xml
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.isis.core</groupId>
+        <artifactId>isis</artifactId>
+        <version>${revision}</version>
+    </parent>
+
+    <artifactId>isis-webdocker</artifactId>
+    <name>Apache Isis WebDocker</name>
+
+    <description>Assembles all of the </description>
+
+    <packaging>jar</packaging>
+
+    <properties>
+        <isis-maven-plugin.appManifest>
+            domainapp.application.manifest.DomainAppAppManifest
+        </isis-maven-plugin.appManifest>
+
+        <jetty-console-maven-plugin.backgroundImage>
+            ${basedir}/src/main/jettyconsole/isis-banner.png
+        </jetty-console-maven-plugin.backgroundImage>
+
+        <assembly-plugin.finalName>core-${revision}</assembly-plugin.finalName>
+
+        <docker-plugin.imageName>apacheisis/core</docker-plugin.imageName>
+        <docker-plugin.imageTag>${project.version}</docker-plugin.imageTag>
+        <docker-plugin.resource.zip>${assembly-plugin.finalName}.zip</docker-plugin.resource.zip>
+        <docker-plugin.resource.tomcat-users.xml>classes/catalina_home/conf/tomcat-users.xml</docker-plugin.resource.tomcat-users.xml>
+        <docker-plugin.resource.catalina.properties>classes/catalina_home/conf/catalina.properties</docker-plugin.resource.catalina.properties>
+        <docker-plugin.resource.manager.xml>classes/catalina_home/conf/Catalina/localhost/manager.xml</docker-plugin.resource.manager.xml>
+        <docker-plugin.resource.host-manager.xml>classes/catalina_home/conf/Catalina/localhost/host-manager.xml</docker-plugin.resource.host-manager.xml>
+
+        <docker-plugin.serverId>docker-hub</docker-plugin.serverId>
+        <docker-plugin.registryUrl>https://index.docker.io/v1/</docker-plugin.registryUrl>
+
+        <maven-deploy-plugin.version>2.8.1</maven-deploy-plugin.version>
+        <docker-maven-plugin.version>1.0.0</docker-maven-plugin.version>
+
+    </properties>
+
+    <build>
+        <resources>
+            <resource>
+                <filtering>true</filtering>
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>**</include>
+                </includes>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/dependencies/lib</outputDirectory>
+                            <includeScope>compile</includeScope>
+                            <excludeTypes>pom</excludeTypes>
+                            <overWriteReleases>true</overWriteReleases>
+                            <overWriteSnapshots>true</overWriteSnapshots>
+                            <overWriteIfNewer>true</overWriteIfNewer>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>2.2.1</version>
+                <executions>
+                    <execution>
+                        <id>assemble-dependencies</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <configuration>
+                            <descriptors>
+                                <descriptor>src/main/assembly/assembly.xml</descriptor>
+                            </descriptors>
+                            <finalName>${assembly-plugin.finalName}</finalName>
+                            <appendAssemblyId>false</appendAssemblyId>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.isis.mavendeps</groupId>
+            <artifactId>isis-mavendeps-webapp</artifactId>
+            <type>pom</type>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.isis.core</groupId>
+            <artifactId>isis-core-applib</artifactId>
+        </dependency>
+
+    </dependencies>
+
+    <profiles>
+        <profile>
+            <id>jdbc-hsqldb</id>
+            <activation>
+                <property>
+                    <name>!skip.jdbc-hsqldb</name>
+                </property>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.hsqldb</groupId>
+                    <artifactId>hsqldb</artifactId>
+                </dependency>
+            </dependencies>
+        </profile>
+
+        <profile>
+            <id>mavenmixin-docker-install</id>
+            <activation>
+                <property>
+<!--
+                    <name>-Dskip.package-docker</name>
+-->
+                    <name>package-docker</name>
+                </property>
+            </activation>
+
+
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-deploy-plugin</artifactId>
+                        <version>${maven-deploy-plugin.version}</version>
+                        <configuration>
+                            <skip>true</skip>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <groupId>com.spotify</groupId>
+                        <artifactId>docker-maven-plugin</artifactId>
+                        <version>${docker-maven-plugin.version}</version>
+                        <executions>
+                            <execution>
+                                <id>build-image</id>
+                                <phase>package</phase>
+                                <goals>
+                                    <goal>build</goal>
+                                </goals>
+                                <configuration>
+                                    <imageName>${docker-plugin.imageName}</imageName>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>tag-image</id>
+                                <phase>install</phase>
+                                <goals>
+                                    <goal>tag</goal>
+                                </goals>
+                                <configuration>
+                                    <image>${docker-plugin.imageName}</image>
+                                    <newName>${docker-plugin.imageName}:${docker-plugin.imageTag}</newName>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>push-image-tagged</id>
+                                <phase>deploy</phase>
+                                <goals>
+                                    <goal>push</goal>
+                                </goals>
+                                <configuration>
+                                    <imageName>${docker-plugin.imageName}:${docker-plugin.imageTag}</imageName>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>push-image-latest</id>
+                                <phase>deploy</phase>
+                                <goals>
+                                    <goal>push</goal>
+                                </goals>
+                                <configuration>
+                                    <imageName>${docker-plugin.imageName}:latest</imageName>
+                                </configuration>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <dockerDirectory>${project.build.outputDirectory}/docker</dockerDirectory>
+                            <resources>
+                                <resource>
+                                    <targetPath>.</targetPath>
+                                    <directory>${project.build.directory}</directory>
+                                    <include>${docker-plugin.resource.zip}</include>
+                                    <include>${docker-plugin.resource.tomcat-users.xml}</include>
+                                    <include>${docker-plugin.resource.catalina.properties}</include>
+                                    <include>${docker-plugin.resource.manager.xml}</include>
+                                    <include>${docker-plugin.resource.host-manager.xml}</include>
+                                </resource>
+                            </resources>
+                            <serverId>${docker-plugin.serverId}</serverId>
+                            <registryUrl>${docker-plugin.registryUrl}</registryUrl>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>flatten</id>
+            <activation>
+                <property>
+                    <name>revision</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.codehaus.mojo</groupId>
+                        <artifactId>flatten-maven-plugin</artifactId>
+                        <version>1.0.0</version>
+                        <executions>
+                            <execution>
+                                <id>flatten</id>
+                                <phase>process-resources</phase>
+                                <goals>
+                                    <goal>flatten</goal>
+                                </goals>
+                                <configuration>
+                                    <flattenMode>defaults</flattenMode>
+                                    <updatePomFile>true</updatePomFile>
+                                    <pomElements>
+                                        <name>resolve</name>
+                                        <description>resolve</description>
+                                        <dependencies>resolve</dependencies>
+                                    </pomElements>
+                                </configuration>
+                            </execution>
+                            <execution>
+                                <id>flatten.clean</id>
+                                <phase>clean</phase>
+                                <goals>
+                                    <goal>clean</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+</project>
diff --git a/core/webdocker/src/main/assembly/assembly.xml b/core/webdocker/src/main/assembly/assembly.xml
new file mode 100644
index 0000000..a27ada1
--- /dev/null
+++ b/core/webdocker/src/main/assembly/assembly.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+    <id>bin</id>
+    <includeBaseDirectory>false</includeBaseDirectory>
+    <formats>
+        <format>zip</format>
+    </formats>
+    <fileSets>
+        <fileSet>
+            <directory>${project.build.directory}/dependencies/lib</directory>
+            <outputDirectory>lib</outputDirectory>
+            <includes>
+                <include>*.jar</include>
+            </includes>
+        </fileSet>
+    </fileSets>
+</assembly>
\ No newline at end of file
diff --git a/core/webdocker/src/main/resources/catalina_home/conf/Catalina/localhost/host-manager.xml b/core/webdocker/src/main/resources/catalina_home/conf/Catalina/localhost/host-manager.xml
new file mode 100644
index 0000000..c006bf5
--- /dev/null
+++ b/core/webdocker/src/main/resources/catalina_home/conf/Catalina/localhost/host-manager.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<Context privileged="true" antiResourceLocking="false"
+         docBase="${catalina.home}/webapps/host-manager">
+    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
+</Context>
\ No newline at end of file
diff --git a/core/webdocker/src/main/resources/catalina_home/conf/Catalina/localhost/manager.xml b/core/webdocker/src/main/resources/catalina_home/conf/Catalina/localhost/manager.xml
new file mode 100644
index 0000000..b9ee448
--- /dev/null
+++ b/core/webdocker/src/main/resources/catalina_home/conf/Catalina/localhost/manager.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<Context privileged="true" antiResourceLocking="false"
+         docBase="${catalina.home}/webapps/manager">
+    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
+</Context>
\ No newline at end of file
diff --git a/core/webdocker/src/main/resources/catalina_home/conf/catalina.properties b/core/webdocker/src/main/resources/catalina_home/conf/catalina.properties
new file mode 100644
index 0000000..232a65a
--- /dev/null
+++ b/core/webdocker/src/main/resources/catalina_home/conf/catalina.properties
@@ -0,0 +1,148 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageAccess unless the
+# corresponding RuntimePermission ("accessClassInPackage."+package) has
+# been granted.
+package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,org.apache.tomcat.
+#
+# List of comma-separated packages that start with or equal this string
+# will cause a security exception to be thrown when
+# passed to checkPackageDefinition unless the
+# corresponding RuntimePermission ("defineClassInPackage."+package) has
+# been granted.
+#
+# by default, no packages are restricted for definition, and none of
+# the class loaders supplied with the JDK call checkPackageDefinition.
+#
+package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,\
+org.apache.jasper.,org.apache.naming.,org.apache.tomcat.
+
+#
+#
+# List of comma-separated paths defining the contents of the "common"
+# classloader. Prefixes should be used to define what is the repository type.
+# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
+# If left as blank,the JVM system loader will be used as Catalina's "common"
+# loader.
+# Examples:
+#     "foo": Add this folder as a class repository
+#     "foo/*.jar": Add all the JARs of the specified folder as class
+#                  repositories
+#     "foo/bar.jar": Add bar.jar as a class repository
+#
+# Note: Values are enclosed in double quotes ("...") in case either the
+#       ${catalina.base} path or the ${catalina.home} path contains a comma.
+#       Because double quotes are used for quoting, the double quote character
+#       may not appear in a path.
+common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"
+
+#
+# List of comma-separated paths defining the contents of the "server"
+# classloader. Prefixes should be used to define what is the repository type.
+# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute.
+# If left as blank, the "common" loader will be used as Catalina's "server"
+# loader.
+# Examples:
+#     "foo": Add this folder as a class repository
+#     "foo/*.jar": Add all the JARs of the specified folder as class
+#                  repositories
+#     "foo/bar.jar": Add bar.jar as a class repository
+#
+# Note: Values may be enclosed in double quotes ("...") in case either the
+#       ${catalina.base} path or the ${catalina.home} path contains a comma.
+#       Because double quotes are used for quoting, the double quote character
+#       may not appear in a path.
+server.loader=
+
+#
+# List of comma-separated paths defining the contents of the "shared"
+# classloader. Prefixes should be used to define what is the repository type.
+# Path may be relative to the CATALINA_BASE path or absolute. If left as blank,
+# the "common" loader will be used as Catalina's "shared" loader.
+# Examples:
+#     "foo": Add this folder as a class repository
+#     "foo/*.jar": Add all the JARs of the specified folder as class
+#                  repositories
+#     "foo/bar.jar": Add bar.jar as a class repository
+# Please note that for single jars, e.g. bar.jar, you need the URL form
+# starting with file:.
+#
+# Note: Values may be enclosed in double quotes ("...") in case either the
+#       ${catalina.base} path or the ${catalina.home} path contains a comma.
+#       Because double quotes are used for quoting, the double quote character
+#       may not appear in a path.
+shared.loader="${catalina.base}/isis/lib","${catalina.base}/isis/lib/*.jar"
+
+# Default list of JAR files that should not be scanned using the JarScanner
+# functionality. This is typically used to scan JARs for configuration
+# information. JARs that do not contain such information may be excluded from
+# the scan to speed up the scanning process. This is the default list. JARs on
+# this list are excluded from all scans. The list must be a comma separated list
+# of JAR file names.
+# The list of JARs to skip may be over-ridden at a Context level for individual
+# scan types by configuring a JarScanner with a nested JarScanFilter.
+# The JARs listed below include:
+# - Tomcat Bootstrap JARs
+# - Tomcat API JARs
+# - Catalina JARs
+# - Jasper JARs
+# - Tomcat JARs
+# - Common non-Tomcat JARs
+# - Test JARs (JUnit, Cobertura and dependencies)
+tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\
+bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\
+annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,websocket-api.jar,\
+jaspic-api.jar,\
+catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-storeconfig.jar,\
+catalina-tribes.jar,\
+jasper.jar,jasper-el.jar,ecj-*.jar,\
+tomcat-api.jar,tomcat-util.jar,tomcat-util-scan.jar,tomcat-coyote.jar,\
+tomcat-dbcp.jar,tomcat-jni.jar,tomcat-websocket.jar,\
+tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,\
+tomcat-juli-adapters.jar,catalina-jmx-remote.jar,catalina-ws.jar,\
+tomcat-jdbc.jar,\
+tools.jar,\
+commons-beanutils*.jar,commons-codec*.jar,commons-collections*.jar,\
+commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,\
+commons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,\
+commons-math*.jar,commons-pool*.jar,\
+jstl.jar,taglibs-standard-spec-*.jar,\
+geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,\
+ant.jar,ant-junit*.jar,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,\
+jmx-tools.jar,jta*.jar,log4j*.jar,mail*.jar,slf4j*.jar,\
+xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,\
+junit.jar,junit-*.jar,hamcrest-*.jar,easymock-*.jar,cglib-*.jar,\
+objenesis-*.jar,ant-launcher.jar,\
+cobertura-*.jar,asm-*.jar,dom4j-*.jar,icu4j-*.jar,jaxen-*.jar,jdom-*.jar,\
+jetty-*.jar,oro-*.jar,servlet-api-*.jar,tagsoup-*.jar,xmlParserAPIs-*.jar,\
+xom-*.jar
+
+# Default list of JAR files that should be scanned that overrides the default
+# jarsToSkip list above. This is typically used to include a specific JAR that
+# has been excluded by a broad file name pattern in the jarsToSkip list.
+# The list of JARs to scan may be over-ridden at a Context level for individual
+# scan types by configuring a JarScanner with a nested JarScanFilter.
+tomcat.util.scan.StandardJarScanFilter.jarsToScan=\
+log4j-web*.jar,log4j-taglib*.jar,log4javascript*.jar,slf4j-taglib*.jar
+
+# String cache configuration.
+tomcat.util.buf.StringCache.byte.enabled=true
+#tomcat.util.buf.StringCache.char.enabled=true
+#tomcat.util.buf.StringCache.trainThreshold=500000
+#tomcat.util.buf.StringCache.cacheSize=5000
diff --git a/core/webdocker/src/main/resources/catalina_home/conf/tomcat-users.xml b/core/webdocker/src/main/resources/catalina_home/conf/tomcat-users.xml
new file mode 100644
index 0000000..be7599f
--- /dev/null
+++ b/core/webdocker/src/main/resources/catalina_home/conf/tomcat-users.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<tomcat-users xmlns="http://tomcat.apache.org/xml"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
+              version="1.0">
+<!--
+  NOTE:  By default, no user is included in the "manager-gui" role required
+  to operate the "/manager/html" web application.  If you wish to use this app,
+  you must define such a user - the username and password are arbitrary. It is
+  strongly recommended that you do NOT use one of the users in the commented out
+  section below since they are intended for use with the examples web
+  application.
+-->
+<!--
+  NOTE:  The sample user and role entries below are intended for use with the
+  examples web application. They are wrapped in a comment and thus are ignored
+  when reading this file. If you wish to configure these users for use with the
+  examples web application, do not forget to remove the <!.. ..> that surrounds
+  them. You will also need to set the passwords to something appropriate.
+-->
+
+  <role rolename="admin-gui"/>
+  <role rolename="admin-script"/>
+  <role rolename="manager-gui"/>
+  <role rolename="manager-script"/>
+  <user username="admin" password="password" roles="manager-gui,manager-script,admin-gui,admin-script"/>
+
+  <!--
+  <role rolename="role1"/>
+  <user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
+  <user username="role1" password="<must-be-changed>" roles="role1"/>
+  -->
+
+</tomcat-users>
diff --git a/core/webdocker/src/main/resources/docker/Dockerfile b/core/webdocker/src/main/resources/docker/Dockerfile
new file mode 100644
index 0000000..a611d0d
--- /dev/null
+++ b/core/webdocker/src/main/resources/docker/Dockerfile
@@ -0,0 +1,38 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+FROM tomcat:9.0.10-jre8-alpine
+
+RUN rm -rf ${CATALINA_HOME}/webapps/examples
+RUN rm -rf ${CATALINA_HOME}/webapps/docs
+RUN rm -rf ${CATALINA_HOME}/webapps/ROOT
+
+RUN mkdir -p ${CATALINA_HOME}/conf/Catalina/localhost
+
+COPY ${docker-plugin.resource.tomcat-users.xml} ${CATALINA_HOME}/conf/.
+COPY ${docker-plugin.resource.catalina.properties} ${CATALINA_HOME}/conf/.
+# RUN sed -i 's|shared.loader=$|shared.loader="${catalina.base}/isis/lib","${catalina.base}/isis/lib/*.jar"|g' ${CATALINA_HOME}/conf/catalina.properties
+
+COPY ${docker-plugin.resource.manager.xml} ${CATALINA_HOME}/conf/Catalina/localhost/.
+COPY ${docker-plugin.resource.host-manager.xml} ${CATALINA_HOME}/conf/Catalina/localhost/.
+
+RUN mkdir -p ${CATALINA_HOME}/isis/lib
+COPY ${docker-plugin.resource.zip} ${CATALINA_HOME}/isis/${assembly-plugin.finalName}.zip
+RUN unzip ${CATALINA_HOME}/isis/${assembly-plugin.finalName}.zip -d ${CATALINA_HOME}/isis/.
+
+EXPOSE 8080
\ No newline at end of file
diff --git a/example/application/helloworld/pom.xml b/example/application/helloworld/pom.xml
index b30f21b..e1511a1 100644
--- a/example/application/helloworld/pom.xml
+++ b/example/application/helloworld/pom.xml
@@ -186,6 +186,72 @@
                 </plugins>
             </build>
         </profile>
+
+        <profile>
+            <id>skinny-war</id>
+            <activation>
+                <property>
+                    <name>skinny-war</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-war-plugin</artifactId>
+                        <version>${maven-war-plugin.version}</version>
+                        <configuration>
+                            <warName>${maven-war-plugin.warName}</warName>
+                            <packagingExcludes>
+                                %regex[WEB-INF/lib/(?!helloworld).*.jar]
+                            </packagingExcludes>
+                            <archive>
+                                <manifest>
+                                    <addClasspath>false</addClasspath>
+                                </manifest>
+                                <manifestEntries>
+                                    <Build-Time>${maven.build.timestamp}</Build-Time>
+                                    <Build-Host>${agent.name}</Build-Host>
+                                    <Build-User>${user.name}</Build-User>
+                                    <Build-Maven>Maven ${maven.version}</Build-Maven>
+                                    <Build-Java>${java.version}</Build-Java>
+                                    <Build-OS>${os.name}</Build-OS>
+                                    <Build-Label>${project.version}</Build-Label>
+                                </manifestEntries>
+                            </archive>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <!--
+        using:
+        mvn -s .m2/settings.xml -D deploy-to-tomcat tomcat7:deploy-only
+         -->
+        <profile>
+            <id>deploy-to-tomcat</id>
+            <activation>
+                <property>
+                    <name>deploy-to-tomcat</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.tomcat.maven</groupId>
+                        <artifactId>tomcat7-maven-plugin</artifactId>
+                        <version>2.2</version>
+                        <configuration>
+                            <url>http://localhost:8080/manager/text</url>
+                            <server>tomcat-server</server>
+                            <path>/ROOT</path>
+                            <warFile>${project.build.directory}/${maven-war-plugin.warName}.war</warFile>
+                            <update>true</update>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
     </profiles>
 
 </project>
diff --git a/example/application/simpleapp/webapp/pom.xml b/example/application/simpleapp/webapp/pom.xml
index 2ded58a..52850f4 100644
--- a/example/application/simpleapp/webapp/pom.xml
+++ b/example/application/simpleapp/webapp/pom.xml
@@ -235,6 +235,73 @@
                </dependency>
             </dependencies>
         </profile>
+
+        <profile>
+            <id>skinny-war</id>
+            <activation>
+                <property>
+                    <name>skinny-war</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-war-plugin</artifactId>
+                        <version>${maven-war-plugin.version}</version>
+                        <configuration>
+                            <warName>${maven-war-plugin.warName}</warName>
+                            <packagingExcludes>
+                                %regex[WEB-INF/lib/(?!simpleapp-application|simpleapp-module-simple).*.jar]
+                            </packagingExcludes>
+                            <archive>
+                                <manifest>
+                                    <addClasspath>false</addClasspath>
+                                </manifest>
+                                <manifestEntries>
+                                    <Build-Time>${maven.build.timestamp}</Build-Time>
+                                    <Build-Host>${agent.name}</Build-Host>
+                                    <Build-User>${user.name}</Build-User>
+                                    <Build-Maven>Maven ${maven.version}</Build-Maven>
+                                    <Build-Java>${java.version}</Build-Java>
+                                    <Build-OS>${os.name}</Build-OS>
+                                    <Build-Label>${project.version}</Build-Label>
+                                </manifestEntries>
+                            </archive>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <!--
+        using:
+        mvn -pl webapp -s .m2/settings.xml -D deploy-to-tomcat tomcat7:deploy-only
+         -->
+        <profile>
+            <id>deploy-to-tomcat</id>
+            <activation>
+                <property>
+                    <name>deploy-to-tomcat</name>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.tomcat.maven</groupId>
+                        <artifactId>tomcat7-maven-plugin</artifactId>
+                        <version>2.2</version>
+                        <configuration>
+                            <url>http://localhost:8080/manager/text</url>
+                            <server>tomcat-server</server>
+                            <path>/ROOT</path>
+                            <warFile>${project.build.directory}/${maven-war-plugin.warName}.war</warFile>
+                            <update>true</update>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
     </profiles>
 
 </project>


[isis] 02/04: ISIS-1810: updates docs from v2 back to master. Also skip git by default when building

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 634854bb3b2baba0d8d1a81c5b1da2b51c7514cb
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Fri Sep 14 11:44:06 2018 +0100

    ISIS-1810: updates docs from v2 back to master.  Also skip git by default when building
---
 .../src/main/asciidoc/documentation.adoc           |  34 +-
 .../src/main/asciidoc/guides/cgcom/__versions.adoc |   3 +
 .../guides/cgcom/_cgcom_applying-patches.adoc      |   1 +
 .../cgcom/_cgcom_asciidoc-publish-procedure.adoc   | 128 +++--
 .../guides/cgcom/_cgcom_cutting-a-release.adoc     | 514 +++++++++------------
 .../guides/cgcom/_cgcom_key-generation.adoc        |   2 +-
 .../cgcom/_cgcom_post-release-successful.adoc      |  11 +-
 .../cgcom/_cgcom_post-release-unsuccessful.adoc    |   1 +
 ...cgcom_release-process-for-interim-releases.adoc |   5 +-
 .../_cgcom_release-process-for-snapshots.adoc      |   1 +
 .../cgcom/_cgcom_release-process-prereqs.adoc      |   1 +
 .../guides/cgcom/_cgcom_verifying-releases.adoc    |  23 +-
 .../asciidoc/guides/dg/_dg_asciidoc-templates.adoc |   6 +-
 .../main/asciidoc/guides/dg/_dg_ide_intellij.adoc  |   9 +-
 .../guides/rgant/_rgant-Action_command.adoc        |   3 +-
 .../guides/rgant/_rgant-Action_publishing.adoc     |  28 +-
 .../guides/rgant/_rgant-Collection_editing.adoc    |   5 +-
 .../guides/rgant/_rgant-Collection_typeOf.adoc     |   2 +-
 .../main/asciidoc/guides/rgant/_rgant-Column.adoc  |  12 +-
 .../_rgant-DomainObjectLayout_cssClassUiEvent.adoc |  54 +--
 .../_rgant-DomainObjectLayout_describedAs.adoc     |   2 +-
 .../_rgant-DomainObjectLayout_iconUiEvent.adoc     |  49 +-
 .../_rgant-DomainObjectLayout_titleUiEvent.adoc    |  22 +-
 .../guides/rgant/_rgant-DomainObject_auditing.adoc |   8 +-
 ..._rgant-DomainObject_autoCompleteRepository.adoc |  10 +-
 .../_rgant-DomainObject_createdLifecycleEvent.adoc |  50 +-
 .../_rgant-DomainObject_loadedLifecycleEvent.adoc  |  37 +-
 .../rgant/_rgant-DomainObject_objectType.adoc      |   6 +-
 ...rgant-DomainObject_persistedLifecycleEvent.adoc |  24 +-
 ...gant-DomainObject_persistingLifecycleEvent.adoc |  32 +-
 .../rgant/_rgant-DomainObject_publishing.adoc      |   8 +-
 ..._rgant-DomainObject_removingLifecycleEvent.adoc |  25 +-
 .../_rgant-DomainObject_updatedLifecycleEvent.adoc |  16 +-
 ..._rgant-DomainObject_updatingLifecycleEvent.adoc |  17 +-
 .../asciidoc/guides/rgant/_rgant-HomePage.adoc     |   4 +-
 .../main/asciidoc/guides/rgant/_rgant-Inject.adoc  |  48 +-
 .../asciidoc/guides/rgant/_rgant-MinLength.adoc    |   4 +-
 .../rgant/_rgant-ParameterLayout_describedAs.adoc  |  10 +-
 .../guides/rgant/_rgant-PostConstruct.adoc         |  36 +-
 .../asciidoc/guides/rgant/_rgant-PrimaryKey.adoc   |   6 +-
 .../asciidoc/guides/rgant/_rgant-Programmatic.adoc |   2 +-
 .../asciidoc/guides/rgant/_rgant-Property.adoc     |   1 -
 .../rgant/_rgant-PropertyLayout_describedAs.adoc   |   2 +-
 .../guides/rgant/_rgant-Property_editing.adoc      |   6 +-
 .../guides/rgant/_rgant-Property_publishing.adoc   |   8 +-
 .../main/asciidoc/guides/rgant/_rgant-Title.adoc   |   9 +-
 .../guides/rgant/_rgant-ViewModel_objectType.adoc  |   4 +-
 .../main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc |   4 +-
 .../src/main/asciidoc/guides/rgant/rgant.adoc      |   4 +-
 .../guides/rgcfg/_rgcfg_configuring-core.adoc      |   4 +-
 ..._classes_lifecycleevent_ObjectCreatedEvent.adoc |  10 +-
 ...lasses_lifecycleevent_ObjectPersistedEvent.adoc |  10 +-
 ...asses_lifecycleevent_ObjectPersistingEvent.adoc |  11 +-
 ...classes_lifecycleevent_ObjectRemovingEvent.adoc |  10 +-
 ..._classes_lifecycleevent_ObjectUpdatedEvent.adoc |   9 +-
 ...classes_lifecycleevent_ObjectUpdatingEvent.adoc |  10 +-
 .../guides/rgcms/_rgcms_classes_super.adoc         |   2 +-
 .../_rgcms_classes_super_AbstractService.adoc      |   5 +-
 .../_rgcms_classes_super_AbstractViewModel.adoc    |   2 +-
 .../rgcms/_rgcms_classes_super_FixtureScript.adoc  |   3 +-
 .../guides/rgcms/_rgcms_methods_lifecycle.adoc     |  15 +-
 .../rgcms/_rgcms_methods_lifecycle_created.adoc    |   2 +-
 .../rgcms/_rgcms_methods_prefixes_default.adoc     |  16 +-
 .../rgcms/_rgcms_methods_reserved_disable.adoc     |   4 +-
 .../guides/rgcms/_rgcms_schema-common.adoc         |   5 +-
 ..._persistence-layer_AuditingServiceInternal.adoc |  16 +-
 ...stence-layer_ChangedObjectsServiceInternal.adoc |  16 +-
 ...ersistence-layer_PublishingServiceInternal.adoc |  27 +-
 ...esentation-layer_ContentNegotiationService.adoc |  11 +-
 ...s_presentation-layer_RepresentationService.adoc |  31 +-
 ...lication-layer-api_ActionInvocationContext.adoc |  17 +-
 ...vc_application-layer-api_BackgroundService.adoc |   9 +-
 ...rgsvc_application-layer-api_CommandContext.adoc |  63 ++-
 ...svc_application-layer-api_DtoMappingHelper.adoc |   2 +-
 ...c_application-layer-api_InteractionContext.adoc |   7 +
 ...rgsvc_application-layer-api_MessageService.adoc |   1 +
 ...ication-layer-api_SessionManagementService.adoc |   1 +
 .../_rgsvc_application-layer-api_TitleService.adoc |   2 +-
 ...c_application-layer-api_TransactionService.adoc |   1 -
 ...rgsvc_application-layer-api_WrapperFactory.adoc |  35 +-
 ...rgsvc_application-layer-spi_CommandService.adoc |   3 +-
 ...lication-layer-spi_HomePageProviderService.adoc |   1 -
 ...vc_bootstrapping-spi_ClassDiscoveryService.adoc |   6 +-
 .../guides/rgsvc/_rgsvc_core-domain-api.adoc       |   1 +
 .../rgsvc/_rgsvc_core-domain-api_ClockService.adoc |  20 +-
 .../_rgsvc_core-domain-api_EventBusService.adoc    |   3 +
 .../_rgsvc_core-domain-api_FactoryService.adoc     |  12 +-
 .../rgsvc/_rgsvc_core-domain-api_Scratchpad.adoc   |   1 +
 .../_rgsvc_integration-api_BookmarkService.adoc    |   6 +-
 .../rgsvc/_rgsvc_integration-api_JaxbService.adoc  |   5 +-
 .../_rgsvc_integration-api_MementoService.adoc     |   2 +
 .../_rgsvc_integration-api_XmlSnapshotService.adoc |   3 +-
 .../main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc   | 145 +++---
 .../rgsvc/_rgsvc_metadata-api_LayoutService.adoc   |   7 +-
 .../_rgsvc_metadata-api_MetamodelService.adoc      |   3 +-
 .../rgsvc/_rgsvc_metadata-api_ServiceRegistry.adoc |   2 -
 .../rgsvc/_rgsvc_metadata-api_SwaggerService.adoc  |   8 +-
 ...rgsvc_persistence-layer-api_IsisJdoSupport.adoc |   2 +-
 ...rgsvc_persistence-layer-api_MetricsService.adoc |  20 +-
 ...vc_persistence-layer-api_QueryResultsCache.adoc |   1 +
 ...vc_persistence-layer-api_RepositoryService.adoc |   9 +-
 .../guides/rgsvc/_rgsvc_persistence-layer-spi.adoc |   2 +-
 ...rgsvc_persistence-layer-spi_AuditerService.adoc |  61 ++-
 ...svc_persistence-layer-spi_PublisherService.adoc |  78 ++--
 ...sistence-layer-spi_UserRegistrationService.adoc |   2 -
 ...presentation-layer-api_AcceptHeaderService.adoc |   5 +-
 ...svc_presentation-layer-api_DeepLinkService.adoc |   1 -
 ...c_presentation-layer-api_GuiceBeanProvider.adoc |   5 +-
 ...ntation-layer-spi_EmailNotificationService.adoc |   6 +-
 ...esentation-layer-spi_ErrorReportingService.adoc |   2 -
 ...presentation-layer-spi_ExceptionRecognizer.adoc |  34 +-
 .../_rgsvc_presentation-layer-spi_HintStore.adoc   |   1 +
 ...gsvc_presentation-layer-spi_RoutingService.adoc |   9 +-
 ...entation-layer-spi_TableColumnOrderService.adoc |   5 +
 ..._presentation-layer-spi_TranslationService.adoc |   4 +-
 ..._presentation-layer-spi_UrlEncodingService.adoc |  31 +-
 .../rgsvc/_rgsvc_testing_FixtureScripts.adoc       |   2 +-
 .../guides/ugbtb/_ugbtb_deployment_gae.adoc        |   2 +-
 .../ugbtb/_ugbtb_hints-and-tips_are-you-sure.adoc  |   4 +-
 ...d-tips_how-to-handle-void-and-null-results.adoc |   4 +-
 .../_ugbtb_hints-and-tips_persisted-title.adoc     |  10 +-
 ..._replacing-default-service-implementations.adoc |   5 +-
 .../main/asciidoc/guides/ugbtb/_ugbtb_i18n.adoc    |   4 +-
 .../ugbtb/_ugbtb_programming-model_finetuning.adoc |   6 +-
 ...ugfun_building-blocks_events_domain-events.adoc |  12 +-
 .../_ugfun_building-blocks_identifiers_oid.adoc    |   2 +-
 ...building-blocks_identifiers_title-and-icon.adoc |   2 +-
 ...ks_types-of-domain-objects_domain-entities.adoc |   2 +-
 .../_ugfun_core-concepts_apache-isis-vs_cqrs.adoc  |   4 +-
 ...ore-concepts_apache-isis-vs_event-sourcing.adoc |   2 +-
 .../_ugfun_core-concepts_deployment-options.adoc   |   2 +-
 .../main/asciidoc/guides/ugfun/_ugfun_crud.adoc    |   4 -
 .../ugfun/_ugfun_programming-model_actions.adoc    |   8 +-
 ...amming-model_domain-services_contributions.adoc |   2 +-
 .../ugfun/_ugfun_programming-model_mixins.adoc     |   2 +-
 ...amming-model_mixins_contributed-collection.adoc |   2 +-
 ...fun_programming-model_mixins_inferred-name.adoc |   2 +-
 ...rogramming-model_mixins_programmatic-usage.adoc |   8 +-
 .../_ugfun_ui-hints_names-and-descriptions.adoc    |   2 +-
 .../guides/ugsec/_ugsec_api-for-applications.adoc  |  11 +-
 .../src/main/asciidoc/guides/ugsec/ugsec.adoc      |   2 +-
 ..._ugtst_bdd-spec-support_writing-a-bdd-spec.adoc |   2 +-
 .../ugtst/_ugtst_fixture-scripts_sudo-service.adoc |   2 +-
 ...gtst_fixture-scripts_ticking-clock-fixture.adoc |   2 +-
 .../_ugtst_integ-test-support_typical-usage.adoc   |   4 +-
 .../_ugtst_integ-test-support_wrapper-factory.adoc |  32 +-
 .../_ugvw_customisation_tweaking-css-classes.adoc  |   3 +-
 .../guides/ugvw/_ugvw_layout_annotation-based.adoc |   8 +-
 .../guides/ugvw/_ugvw_layout_file-based.adoc       |   2 +-
 .../ugvw/_ugvw_menubars-layout_file-based.adoc     |   2 +-
 adocs/documentation/src/main/asciidoc/index.html   |  87 +++-
 .../_migration-notes_1.10.0-to-1.11.0.adoc         |  18 +-
 .../_migration-notes_1.11.0-to-1.12.0.adoc         |  30 +-
 .../_migration-notes_1.12.0-to-1.13.0.adoc         | 142 +++---
 .../_migration-notes_1.13.0-to-1.14.0.adoc         |   2 +-
 .../_migration-notes_1.14.0-to-1.15.0.adoc         |  20 +-
 .../_migration-notes_1.7.0-to-1.8.0.adoc           |  16 +-
 ...0-to-1.9.0_bootstrapping-using-AppManifest.adoc |   4 +-
 ...-notes_1.8.0-to-1.9.0_exception-recognizer.adoc |   6 +-
 ...9.0_fixture-scripts-specification-provider.adoc |   4 +-
 ...es_1.8.0-to-1.9.0_specify-all-dom-packages.adoc |   6 +-
 ...tion-notes_1.8.0-to-1.9.0_upgrading-to-dn4.adoc |   2 +-
 ...on-notes_1.8.0-to-1.9.0_upgrading-to-java8.adoc |   3 +-
 ...gration-notes_1.8.0-to-1.9.0_war-packaging.adoc |   4 +-
 .../_migration-notes_1.9.0-to-1.10.0.adoc          |   5 +-
 core/pom.xml                                       |   2 +-
 166 files changed, 1267 insertions(+), 1407 deletions(-)

diff --git a/adocs/documentation/src/main/asciidoc/documentation.adoc b/adocs/documentation/src/main/asciidoc/documentation.adoc
index d514a1b..b673e8b 100644
--- a/adocs/documentation/src/main/asciidoc/documentation.adoc
+++ b/adocs/documentation/src/main/asciidoc/documentation.adoc
@@ -8,7 +8,7 @@
 [.documentation-page]
 --
 
-[cols="1a,1a,1a",frame="none", grid="none"]
+[cols="1a,1a,1a",frame="none", grid="none", stripe="none"]
 |===
 
 | *What is Apache Isis?*
@@ -16,7 +16,7 @@
 * *link:pages/isis-in-pictures/isis-in-pictures.html[Apache Isis in pictures^]*
 * link:pages/common-use-cases/common-use-cases.html[Common Use Cases^]
 * link:pages/how-isis-works/how-isis-works.html[How Apache Isis Works^] image:{_imagesdir}tv_show-25.png[width="25px" link="pages/how-isis-works/how-isis-works.html"]
-* Learning more: link:pages/screencasts/screencasts.html[Screencasts^] image:{_imagesdir}tv_show-25.png[width="25px" link="./pages/screencasts/screencasts.html"] + link:pages/tg/tg.html[Tutorials^]
+* Learning more: link:pages/screencasts/screencasts.html[Screencasts^] image:{_imagesdir}tv_show-25.png[width="25px" link="./pages/screencasts/screencasts.html"] & link:pages/tg/tg.html[Tutorials^]
 
 |*Releases:*
 
@@ -26,17 +26,17 @@
 
 |*Developer Resources:*
 
-* *link:pages/cheat-sheet/cheat-sheet.html[Cheat Sheet^]* + *link:guides/htg.html[Hints-n-Tips^]*
-* Getting started: link:guides/ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype[Hello-World archetype^]
-* Getting started+: link:guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype[Simple-App archetype^]
+* *link:pages/cheat-sheet/cheat-sheet.html[Cheat Sheet^]* & *link:guides/htg.html[Hints-n-Tips^]*
+* link:guides/ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype[Hello-World archetype^]
+* link:guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype[Simple-App archetype^]
 * How to get link:pages/icons/icons.html[Icons^]
-* Extension modules: http://platform.incode.org[Incode Platform^] footnoteref:[ASF,Not an Apache Software Foundation project.]
+* Extension modules: http://platform.incode.org[Incode Platform^] footnoteref:[ASF, Not Apache Software Foundation projects.]
 
 
 |===
 
 ***
-[cols="1a,1a,1a",frame="none", grid="none"]
+[cols="1a,1a,1a",frame="none", grid="none", stripes="none"]
 |===
 
 |*User Guides:*
@@ -64,14 +64,16 @@
 |*Get involved!*
 
 * *link:guides/dg/dg.html[Developers' Guide^]*
-** link:guides/dg/dg.html#_dg_ide_intellij[IntelliJ^] + link:guides/dg/dg.html#_dg_ide_eclipse[Eclipse^]
+** link:guides/dg/dg.html#_dg_ide_intellij[IntelliJ^] & link:guides/dg/dg.html#_dg_ide_eclipse[Eclipse^]
 ** link:guides/dg/dg.html#_dg_contributing[Pull requests^]
 ** link:guides/dg/dg.html#_dg_asciidoc-syntax[Asciidoc syntax^]
 
 * link:guides/cgcom/cgcom.html[Committers' Guide^]
-** link:guides/cgcom/cgcom.html#_cgcom_cutting-a-release[Cutting^] + link:guides/cgcom/cgcom.html#_cgcom_verifying-releases[Verifying^]
+** link:guides/cgcom/cgcom.html#_cgcom_cutting-a-release[Cutting^] & link:guides/cgcom/cgcom.html#_cgcom_verifying-releases[Verifying^]
 
-* For bug-reports and feature-requests see: *link:https://issues.apache.org/jira/secure/RapidBoard.jspa?rapidView=87[Kanban board^]* (JIRA)
+* link:guides/ad/ad.html[Architecture & Design^]
+
+3+|For bug reports and feature requests see: *link:https://issues.apache.org/jira/secure/RapidBoard.jspa?rapidView=87[Kanban board^]* (JIRA)
 
 
 |===
@@ -79,7 +81,7 @@
 
 
 ***
-[cols="1a,1a,1a",frame="none", grid="none"]
+[cols="1a,1a,1a",frame="none", grid="none", stripes="none"]
 |===
 
 
@@ -97,10 +99,18 @@
 |*Example Apps:*
 
 * https://github.com/estatio/estatio[Estatio^] footnoteref:[ASF,Not an Apache Software Foundation project.]
+* https://github.com/incodehq/contactapp[ContactApp^] footnoteref:[ASF]
+* https://github.com/incodehq/ecpcrm[ECP CRM^] footnoteref:[ASF]
 * https://github.com/isisaddons/isis-app-todoapp[TodoApp^] footnoteref:[ASF]
 * https://github.com/isisaddons/isis-app-kitchensink[Kitchensink^] footnoteref:[ASF]
-* https://github.com/isisaddons/isis-app-neoapp[Neo4J Example^] footnoteref:[ASF]
+* https://github.com/incodehq/incode-examples[Incode Domain Examples^] footnoteref:[ASF]
+* https://github.com/incodehq/incode-camel[Incode Camel App^] footnoteref:[ASF]
 * https://github.com/isisaddons/isis-app-quickstart[Quickstart^] footnoteref:[ASF]
+* https://github.com/andi-huber/isis-2-demo[Isis 2.x Demo Showcase]footnoteref:[ASF]
+
+*Experiments:*
+
+* https://github.com/isisaddons/isis-app-neoapp[Neo4J Example^] footnoteref:[ASF]
 * https://github.com/isisaddons/isis-app-simpledsl[Isis DSL Example^] footnoteref:[ASF]
 * https://github.com/andi-huber/isis-2-demo[Demo Showcase]footnoteref:[ASF]
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/__versions.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/__versions.adoc
new file mode 100644
index 0000000..e68b825
--- /dev/null
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/__versions.adoc
@@ -0,0 +1,3 @@
+:isisprev: 1.16.2
+:isisrel: 1.16.3
+:isisdev: {isisrel}-SNAPSHOT
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_applying-patches.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_applying-patches.adoc
index a605202..77dae72 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_applying-patches.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_applying-patches.adoc
@@ -4,6 +4,7 @@
 :_basedir: ../../
 :_imagesdir: images/
 :toc: right
+include::__versions.adoc[]
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_asciidoc-publish-procedure.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_asciidoc-publish-procedure.adoc
index 638d004..217f243 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_asciidoc-publish-procedure.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_asciidoc-publish-procedure.adoc
@@ -1,9 +1,9 @@
 [[_cgcom_asciidoc-publish-procedure]]
 = Publishing the Docs
-
 :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 [...]
 :_imagesdir: images/
 :toc: right
+include::__versions.adoc[]
 
 
 Apache Isis' documentation (meaning the website and the users' guide, the reference guide and this contributors' guide) is written using link:http://www.methods.co.nz/asciidoc/[Asciidoc], specifically the link:http://asciidoctor.org/[Asciidoctor] implementation.
@@ -28,72 +28,134 @@ The procedure assumes that two git repos (for https://github.com/apache/isis[isi
 
 [source]
 ----
-/APACHE/
-    isis/                       # checkout of isis.git
-        adocs/
-            documentation/
-                README.adoc     # this file you are reading right now
-                ...
-    isis-site/                  # checkout of isis-site.git
-        content/                # the published website
+/GITHUB/
+  apache/
+    isis/                       # <1>
+      adocs
+        documentation/
+          README.adoc
+          ...
+/ASF/
+  isis/
+    isis-site/                  # <2>
+      content/                  # <3>
 ----
+<1> checkout of isis.git
+<2> checkout of isis-site.git
+<3> the published website
 
-If this isn't the case, then it is possible to override the relative directory by passing in a system property to the mvn goal; see below.
-
-You also need to know that ASF's publishing script work from the 'asf-site' branch, NOT from the 'master' branch. Therefore, in the `isis.git` repo site:
+One oddity; ASF's script to upload the documentation to the web server checks out from the 'asf-site' branch, NOT from the 'master' branch.
+Therefore, in the `isis.git` repo site:
 
 [source,bash]
 ----
 git checkout asf-site
 ----
 
-== Publishing (full build)
 
-Back in the `adocs/documentation` directory of the main `isis-git.repo`, to copy the generated documents to the `isis-site.git` repo, run:
+== Preview
+
+To preview changes (ignoring PDFs), run:
 
 [source,bash]
 ----
-mvn clean package
+sh preview-html.sh
 ----
 
-This deletes the entire content of `contents`, and replaces with the content under `target/site`.  It also fixes up line endings, standardizing on unix-style LFs.
-
-[TIP]
-====
-If you have checked out the `isis-site.git` repo into some other directory (relative to `isis.site.git), then this can be overridden by specifying `-Disis-site.dir=...` when calling `mvn`.
-====
-
+This will update the documentation and start a (Python) webserver so that the documents can be viewed.
 
-To copy and to also commit the generated documents to the `isis-site.git` repo , run:
+If you want to also view the PDFs, use:
 
 [source,bash]
 ----
-sh publish.sh "ISIS-nnnn: a custom commit message"
+sh preview-pdf.sh
 ----
 
-Behind the scenes this just calls `mvn clean install -Dmessage=...`.
+There's generally little point in doing this, however.
+
+
+== Publishing (full build)
 
-It's also possible to omit the message, in which case `publish.sh` will reuse the most recent commit message from the main `isis.git` repo.
+The `content` directory for the published website contains not only the "current version" of the docs, but also has an archive of older versions of the document from earlier releases:
 
-Pushing the commits (in the `isis-site.git` directory, of course) will publishing the changes:
+[source]
+----
+/ASF/
+  isis/
+    isis-site/
+      content/                  # <1>
+        index.html              # <2>
+        *                       # <3>
+        versions/
+          current/              # <4>
+          SNAPSHOT/             # <5>
+          ...                   # <6>
+          latest/               # <7>
+----
+<1> the published website
+<2> home page.
+This has a drop-down to access older versions of the documentation, but most links are through to the "current version"
+<3> documentation for the current release version
+<4> also holds documentation for the current release version
+<5> documentation for the next snapshot version, ie work-in-progress
+<6> other versions, by version number (eg `1.16.2`, `1.16.1`, etc)
+<7> not checked into git, this is a working directory that contains the results of the latest publication build.
+This is an implementation detail actually, so this directory need not be considered further.
+
+The earlier versions of the documentation are (obviously) not recreated when the documentation is published, only the current version is updated.
+
+To publish the current version of the documents, switch to the  `adocs/documentation` directory of the main `isis-git.repo`.
+Then run:
 
 [source,bash]
 ----
-git push
+sh publish.sh "ISIS-nnnn: a custom commit message"
 ----
 
-Double check at http://isis.apache.org[isis.apache.org].
+This does the following:
+
+* deletes everything under `content` (except `content/versions`)
+* generates documentation and copies to `content/versions/SNAPSHOT`
++
+Including fixing up line endings, standardizing on unix-style LFs.
+* copies over current home page (`index.html`)
+* reinstates `content/*` with the contents of `content/versions/current`
+
+In other words, the effect of running `publish.sh` is in essence to overwrite `content/versions/SNAPSHOT` and to overwrite `index.html`, but leave everything else as it is.
+
+[NOTE]
+====
+The version on the header of each generated document is hard-coded in the `adocs/template/document.html.erb` file.
+
+This should therefore be updated whenever working on a new release.
+====
+
+=== New release
 
+When a new release is published, we therefore need to do a little extra work:
 
+* run `publish.sh` a first time
++
+This will  update `content/versions/SNAPSHOT`
+* delete `content/versions/current`
+* rename `content/versions/SNAPSHOT` to `content/versions/current`
+* run `publish.sh` a second time.
++
+This has the effect of "promoting" `content/versions/current` to `content/*`
 
+* (optionally) also copy `content/versions/current` to `content/versions/N.N.N`
++
+where `N.N.N` is the release number
 
-== Publishing (partial build)
+Ensure in doing this that the dropdown for the home page correctly references the versions.
 
-If none of the guides have been changed, and if you have run the full rebuild recently, then you can skip the generation of PDFs using:
+When ready, then stage, commit and push the changes (in the `isis-site.git` directory, of course):
 
 [source,bash]
 ----
-mvn install -Dskip.pdf -D"ISIS-nnnn: a custom commit message"
+git commit -am "ISIS-nnnn: updating docs"
+git push
 ----
 
-The `clean` goal *must not* be included though (else all the guides will disappear from the site content).
+
+
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_cutting-a-release.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_cutting-a-release.adoc
index 3fc0d8d..c207fb5 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_cutting-a-release.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_cutting-a-release.adoc
@@ -4,7 +4,7 @@
 :_basedir: ../../
 :_imagesdir: images/
 :toc: right
-
+include::__versions.adoc[]
 
 The release process consists of:
 
@@ -51,16 +51,15 @@ In most cases a JIRA ticket will have been created at the beginning of the previ
 We use environment variables to parameterize as many of the steps as possible.
 For example:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
-cd core
 export ISISTMP=/c/tmp                               # <1>
-export ISISDEV=2.1.0-SNAPSHOT
-export ISISREL=2.0.0
+export ISISDEV={isisdev}
+export ISISREL={isisrel}
 export ISISRC=RC1
 export ISISBRANCH=release-$ISISREL-$ISISRC
 export ISISJIRA=ISIS-9999                           # <2>
-export CATALINA_HOME=/c/java/apache-tomcat-8.0.30   # <3>
+export CATALINA_HOME=/c/java/apache-tomcat-9.0.10   # <3>
 
 env | grep ISIS | sort
 ----
@@ -73,10 +72,7 @@ Obviously, alter `$ISISDEV` and `$ISISREL` as required, and bump `$ISISRC` for r
 
 [IMPORTANT]
 ====
-Note that the branch name is *not* the same any of the eventual tag names (eg `isis-2.0.0` or `simpleapp-archetype-2.0.0`).
-
-If they did have the same name, then what would happen is that the `maven-release-plugin` would checkout the (HEAD of the) branch and thus upload a SNAPSHOT to the snapshot repository.
-What it should of course do is checkout the tag and then upload that to the release staging repository.
+Note that the branch name is intentionally *not* the same any of the eventual tag names (eg `isis-{isisrel}` or `simpleapp-archetype-{isisrel}`).
 ====
 
 
@@ -88,33 +84,33 @@ Set the HEAD of your local git repo to the commit to be released.
 This will usually be the tip of the origin's `master` branch.
 Then, create a release branch for the version number being released; eg:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 git checkout master
 git pull --ff-only
 git checkout -b $ISISBRANCH
 ----
 
-All release preparation is done locally; if we are successful, this branch will be merged back into master.
+The release is performed on a branch; if we are successful, this branch will be merged back into master.
 
 
 Double check that the version number of the parent pom should reflect the branch name that you are now on (with a `-SNAPSHOT` suffix).
-his will normally have been done already during earlier development; but confirm that it has been updated.
+This will normally have been done already during earlier development; but confirm that it has been updated.
 If it has not, make the change.
 
 Double check that the version number of the core POM (`core/pom.xml`) should reflect the branch name that you are now on.
-For example, if releasing version `2.0.0`, the POM should read:
+For example, if releasing version `{isisrel}`, the POM should read:
 
-[source,xml]
+[source,xml,subs="attributes+"]
 ----
 <groupId>org.apache.isis.core</groupId>
 <artifactId>isis</artifactId>
-<version>2.0.0-SNAPSHOT</version>
+<version>{isisdev}</version>
 ----
 
 Also, check that there are no snapshot dependencies:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 grep SNAPSHOT `/bin/find . -name pom.xml | grep -v target | grep -v mothball | sort`
 ----
@@ -128,13 +124,45 @@ Obviously, don't update Apache Isis' `SNAPSHOT` references; these get updated by
 
 
 
+[[__cgcom_cutting-a-release_bump-revision-to-ISISREL]]
+== Bump `revision` property to `$ISISREL`
+
+Previously we used the `maven-release-plugin` which took responsibility for bumping the `<version>` from -SNAPSHOT to release, and then onto the next -SNAPSHOT.
+However, this plugin does not seem to be compatible with the support for `${revision}` property introduced in Maven 3.5.0 in order https://maven.apache.org/maven-ci-friendly.html[to support CI/CD use cases]; at least we couldn't make it work.
+
+So, instead, we perform the edit of ${revision}` manually before.
+
+In the three `pom.xml` files (for `core` and the two archetypes) the property is defined:
+
+[source,xml,subs="attributes+"]
+----
+<properties>
+    <revision>{isisdev}</revision>
+    ...
+</properties>
+----
+
+Change all of these to the release version, using:
+
+[source,bash,subs="attributes+"]
+----
+sed -i -E "s|<revision>[^<]+<|<revision>${ISISREL}<|g" core/pom.xml
+sed -i -E "s|<revision>[^<]+<|<revision>${ISISREL}<|g" example/application/simpleapp/pom.xml
+sed -i -E "s|<revision>[^<]+<|<revision>${ISISREL}<|g" example/application/helloworld/pom.xml
+git commit -am "${ISISJIRA}: bumps revision property across all pom.xml's to ${ISISREL}"
+----
+
+After release, there is a xref:cgcom.adoc#__cgcom_cutting-a-release_bump-revision-to-ISISDEV[similar step at the end] to update to the next development `SNAPSHOT`.
+
+
+
 [[__cgcom_cutting-a-release_releasing-core]]
 == Releasing Core
 
 First, we release `core`.
 Switch to the appropriate directory:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 cd core
 ----
@@ -144,7 +172,7 @@ cd core
 
 Set additional environment variables for the core "artifact":
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 export ISISART=isis
 export ISISCOR="Y"
@@ -162,7 +190,7 @@ The parent `pom.xml` of each releasable module specifies the RAT Maven plugin, w
 
 To run the RAT tool, use:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 mvn org.apache.rat:apache-rat-plugin:check -D rat.numUnapprovedLicenses=50 -o && \
 for a in `/bin/find . -name rat.txt -print`; do grep '!???' $a; done || \
@@ -208,7 +236,7 @@ This is stored in the `src/main/appended-resources/supplemental-models.xml` file
 
 To capture the missing license information, use:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 mvn license:download-licenses && \
 groovy ../scripts/checkmissinglicenses.groovy
@@ -219,7 +247,7 @@ The script then searches for these `licenses.xml` files, and compares them again
 
 For example, the output could be something like:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 licenses to add to supplemental-models.xml:
 
@@ -241,7 +269,7 @@ If any missing entries are listed or are spurious, then update `supplemental-mod
 
 Commit any changes from the preceding steps:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 git commit -am "$ISISJIRA: updates to pom.xml etc for release"
 ----
@@ -253,158 +281,52 @@ git commit -am "$ISISJIRA: updates to pom.xml etc for release"
 Perform one last sanity check on the codebase.
 Delete all Isis artifacts from your local Maven repo, then build using the `-o` offline flag:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 rm -rf ~/.m2/repository/org/apache/isis
 mvn clean install -o
 ----
 
 
-[[__cgcom_cutting-a-release_releasing-core_release-prepare-dry-run]]
-=== Release prepare "dry run"
-
-Most of the work is done using the `mvn release:prepare` goal.
-Since this makes a lot of changes, we run it first in "dry run" mode; only if that works do we run the goal for real.
-
-Run the dry-run as follows:
-
-[source,bash]
-----
-mvn release:prepare -P apache-release -D dryRun=true \
-    -DreleaseVersion=$ISISREL \
-    -Dtag=$ISISART-$ISISREL \
-    -DdevelopmentVersion=$ISISDEV
-----
-
-You may be prompted for the gpg passphrase.
-
-[NOTE]
-====
-Experiments in using `--batch-mode -Dgpg.passphrase=&quot;...&quot;` to fully automate this didn't work; for more info, see http://maven.apache.org/plugins/maven-gpg-plugin/sign-mojo.html[here] (maven release plugin docs) and http://maven.apache.org/maven-release/maven-release-plugin/examples/non-interactive-release.html[here] (maven gpg plugin docs).
-====
-
-
-
-[[__cgcom_cutting-a-release_releasing-core_release-prepare-proper]]
-=== Release prepare "proper"
-
-Assuming this completes successfully, re-run the command, but without the `dryRun` flag and specifying `resume=false` (to ignore the generated `release.properties` file that gets generated as a side-effect of using `git`).
-You can also set the `skipTests` flag since they would have been run during the previous dry run:
-
-[source,bash]
-----
-mvn release:prepare -P apache-release -D resume=false -DskipTests=true \
-        -DreleaseVersion=$ISISREL \
-        -Dtag=$ISISART-$ISISREL \
-        -DdevelopmentVersion=$ISISDEV
-----
-
-
-[TIP]
-====
-If there are any snags at this stage, then explicitly delete the generated `release.properties` file first before trying again.
-====
-
-
-
+[[__cgcom_cutting-a-release_releasing-core_deploy]]
+=== Deploy
 
-[[__cgcom_cutting-a-release_releasing-core_post-prepare-sanity-check]]
-=== Post-prepare sanity check
+Previously the release procedures used `mvn release:prepare` and `mvn release:perform`.
+These are however not compatible with `${revision}` that we now use https://maven.apache.org/maven-ci-friendly.html[for CI/CD].
 
-You should end up with artifacts in your local repo with the new version (eg `2.0.0-M1`).  This is a good time to do some quick sanity checks; nothing has yet been uploaded:
+We therefore just use `mvn deploy` directly, activating the (inherited) `apache-release` profile that, amongst other things, brings in the `gpg` plugin for code signing.
 
-* unzip the source-release ZIP and check it builds.
-* Inspect the `DEPENDENCIES` file, and check it looks correct.
+To build and deploy and tag, we use:
 
-These steps can be performed using the following script:
-
-[source]
+[source,bash,subs="attributes+"]
 ----
-rm -rf $ISISTMP/$ISISART-$ISISREL
-mkdir $ISISTMP/$ISISART-$ISISREL
-
-if [ "$ISISCOR" == "Y" ]; then
-    ZIPDIR="$M2_REPO/repository/org/apache/isis/core/$ISISART/$ISISREL"
-else
-    ZIPDIR="$M2_REPO/repository/org/apache/isis/$ISISCPT/$ISISART/$ISISREL"
-fi
-echo "cp \"$ZIPDIR/$ISISART-$ISISREL-source-release.zip\" $ISISTMP/$ISISART-$ISISREL/."
-cp "$ZIPDIR/$ISISART-$ISISREL-source-release.zip" $ISISTMP/$ISISART-$ISISREL/.
-
-pushd $ISISTMP/$ISISART-$ISISREL
-unzip $ISISART-$ISISREL-source-release.zip
-
-cd $ISISART-$ISISREL
-mvn clean install
-
-cat DEPENDENCIES
+mvn -P apache-release \
+    clean deploy      \
+    -Dgit \
+    -Dgpg.passphrase="this is not really my passphrase"
 
-popd
+git tag $ISISART-$ISISREL
+git tag $ISISART-$ISISREL-$ISISRC
 ----
 
-
-[[__cgcom_cutting-a-release_releasing-core_release-perform-upload]]
-=== Release perform (Upload)
-
-Once the release has been built locally, it should be uploaded for voting.
-This is done by deploying the Maven artifacts to a staging directory (this includes the source release ZIP file which will be voted upon).
-
-The Apache staging repository runs on Nexus server, hosted at https://repository.apache.org[repository.apache.org].
-The process of uploading will create a staging repository that is associated with the host (IP address) performing the release.
-Once the repository is staged, the newly created staging repository is "closed" in order to make it available to others.
-
-Use:
-
-[source,bash]
-----
-mvn release:perform -P apache-release \
-    -DworkingDirectory=$ISISTMP/$ISISART-$ISISREL/checkout
-----
-
-The custom `workingDirectory` prevents file path issues if releasing on Windows.
-The command checks out the codebase from the tag, then builds the artifacts, then uploads them to the Apache staging repository:
-
-[source,bash]
-----
-...
-[INFO] --- maven-release-plugin:2.3.2:perform (default-cli) @ isis ---
-[INFO] Performing a LOCAL checkout from scm:git:file:///C:\APACHE\isis-git-rw\co
-re
-[INFO] Checking out the project to perform the release ...
-[INFO] Executing: cmd.exe /X /C "git clone --branch release-2.0.0-M1 file:///C:\APACHE\isis-git-rw\core C:\APACHE\isis-git-rw\core\target\checkout"
-[INFO] Working directory: C:\APACHE\isis-git-rw\core\target
-[INFO] Performing a LOCAL checkout from scm:git:file:///C:\APACHE\isis-git-rw
-[INFO] Checking out the project to perform the release ...
-[INFO] Executing: cmd.exe /X /C "git clone --branch release-2.0.0-M1 file:///C:\APACHE\isis-git-rw C:\APACHE\isis-git-rw\core\target\checkout"
-[INFO] Working directory: C:\APACHE\isis-git-rw\core\target
-[INFO] Executing: cmd.exe /X /C "git ls-remote file:///C:\APACHE\isis-git-rw"
-[INFO] Working directory: C:\Users\ADMINI~1\AppData\Local\Temp
-[INFO] Executing: cmd.exe /X /C "git fetch file:///C:\APACHE\isis-git-rw"
-[INFO] Working directory: C:\APACHE\isis-git-rw\core\target\checkout
-[INFO] Executing: cmd.exe /X /C "git checkout release-2.0.0-M1"
-[INFO] Working directory: C:\APACHE\isis-git-rw\core\target\checkout
-[INFO] Executing: cmd.exe /X /C "git ls-files"
-[INFO] Working directory: C:\APACHE\isis-git-rw\core\target\checkout
-[INFO] Invoking perform goals in directory C:\APACHE\isis-git-rw\core\target\checkout\core
-[INFO] Executing goals 'deploy'...
-...
-----
-
-You may (again) be prompted for gpg passphrase.
-All being well this command will complete successfully.
-Given that it is uploading code artifacts, it could take a while to complete.
+using your own GPG passphrase, of course.
 
 
+[IMPORTANT]
+====
+This requires `gpg` v2.1 or later.
+====
 
 
 
-[[__cgcom_cutting-a-release_releasing-the-archetypes]]
-== Releasing the Archetypes
+[[__cgcom_cutting-a-release_releasing-the-simpleapp-archetype]]
+== Releasing `simpleapp` archetype
 
-Apache Isis archetypes are reverse engineered from example applications.
+The Apache Isis archetypes are reverse engineered from example applications.
 Once reverse engineered, the source is checked into git (replacing any earlier version of the archetype) and released.
 
 There are currently two archetypes, `simpleapp` and `helloworld`.
+In this section we release `simpleapp`, in the following xref:cgcom.adoc#__cgcom_cutting-a-release_releasing-the-helloworld-archetype[section] we release `helloworld`.
 
 [NOTE]
 ====
@@ -415,23 +337,19 @@ However, `maven-archetype-plugin:2.4` only uses `mvn.bat`; this causes the `arch
 The fix is simple: just copy `mvn.cmd` to `mvn.bat`.
 ====
 
-
-[[__cgcom_cutting-a-release_releasing-the-archetypes_simpleapp_setup-environment-variables]]
-=== Releasing `simpleapp` archetype
-
 Switch to the directory containing the `simpleapp` example:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 cd ../example/application/simpleapp
 ----
 
-[[__cgcom_cutting-a-release_releasing-the-archetypes_simpleapp_setup-environment-variables]]
-==== Setup environment variables
+[[__cgcom_cutting-a-release_releasing-the-simpleapp-archetype_setup-environment-variables]]
+=== Setup environment variables
 
 Set additional environment variables for the `simpleapp-archetype` artifact:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 export ISISART=simpleapp-archetype
 export ISISPAR=$ISISREL                 # <1>
@@ -445,32 +363,14 @@ env | grep ISIS | sort
 Usually this is the same as `$ISISREL`.
 
 
-[[__cgcom_cutting-a-release_releasing-the-archetypes_simpleapp_check-the-example-app]]
-==== Check the example app
-
-Update the parent `pom.xml` to reference the _released_ version of Apache Isis core, eg:
-
-[source,xml]
-----
-<properties>
-    <isis.version>2.0.0-M1</isis.version>
-    ...
-</properties>
-----
-
-
-[NOTE]
-====
-Previously at this point we used to check for and fix any missing license header notices; however it doesn't make sense for the archetype to include the Apache rat-plugin, so this has been removed.
-====
-
-
+[[__cgcom_cutting-a-release_releasing-the-simpleapp-archetype_check-the-example-app]]
+=== Check the example app
 
-Finally, double check that the app
+Double check that the app:
 
 * builds:
 +
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 mvn clean install
 ----
@@ -482,14 +382,14 @@ mvn clean install
 
 * can be run using the mvn jetty plugin:
 +
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 mvn -pl webapp jetty:run
 ----
 
 * can be packaged and run using the mvn jetty-console plugin:
 +
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 mvn install -Dmavenmixin-jettyconsole
 mvn antrun:run -Dmavenmixin-jettyconsole
@@ -497,7 +397,7 @@ mvn antrun:run -Dmavenmixin-jettyconsole
 
 * can be deployed as a WAR
 +
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 cp webapp/target/simpleapp.war $CATALINA_HOME/webapps/ROOT.war
 pushd $CATALINA_HOME/bin
@@ -515,10 +415,12 @@ popd
 
 * can be packaged and run using Docker:
 +
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 mvn install -Dmavenmixin-docker -D docker-plugin.imageName=test/simpleapp
-docker container run -p 8080:8080 -d test/simpleapp
+docker container run -p 8080:8080 --name simpleapp -d test/simpleapp
+
+#winpty docker exec -it simpleapp bash
 ----
 +
 [NOTE]
@@ -546,15 +448,20 @@ The Kitematic UI tool is handy for viewing and interacting with running containe
 ====
 
 
-In each case, check the about page and confirm has been built against non-SNAPSHOT versions of the Apache Isis jars.
+To tidy up, kill and remove the container:
 
+[source,bash,subs="attributes+"]
+----
+docker container kill simpleapp
+docker container rm simpleapp
+----
 
-[[__cgcom_cutting-a-release_releasing-the-archetypes_simpleapp_create-the-archetype]]
-==== Create the archetype
+[[__cgcom_cutting-a-release_releasing-the-simpleapp-archetype_create-the-archetype]]
+=== Recreate the archetype
 
 Make sure you are in the correct directory and environment variables are correct.
 
-To recreate the *simpleapp* archetype:
+To recreate the *simpleapp* archetype, first ensure in the correct directory:
 
 [source,bash]
 ----
@@ -562,43 +469,25 @@ cd example/application/simpleapp
 env | grep ISIS | sort
 ----
 
-Then, run the script:
+Then, run the script (which also builds the archetype once generated) and switch to the archetype's directory:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 sh ../../../scripts/recreate-archetype.sh $ISISJIRA
+cd `pwd|sed 's/application/archetype/'`
 ----
 
 The script automatically commits changes; if you wish use `git log` and
 `git diff` (or a tool such as SourceTree) to review changes made.
 
 
-[[__cgcom_cutting-a-release_releasing-the-archetypes_simpleapp_release-prepare]]
-=== Release prepare
-
-Switch to the *archetype* directory and execute the `release:prepare`:
-
-[source]
-----
-cd ../../../example/archetype/$ISISCPN
-rm -rf $ISISTMP/checkout
-mvn release:prepare -P apache-release \
-                -DreleaseVersion=$ISISREL \
-                -DdevelopmentVersion=$ISISDEV \
-                -Dtag=$ISISART-$ISISREL
-----
-
-
-
-[[__cgcom_cutting-a-release_releasing-the-archetypes_simpleapp_post-prepare-sanity-check]]
-==== Post-prepare sanity check
-
-This is a good point to test the archetype; nothing has yet been uploaded.
+[[__cgcom_cutting-a-release_releasing-the-simpleapp-archetype_sanity-check]]
+=== Sanity check
 
 _In a different session_, create a new app from the archetype.
 First set up environment variables:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 export ISISTMP=/c/tmp    # or as required
 export ISISCPN=simpleapp
@@ -607,7 +496,7 @@ env | grep ISIS | sort
 
 Then generate a new app from the archetype:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 rm -rf $ISISTMP/test-$ISISCPN
 
@@ -631,39 +520,59 @@ mvn -pl webapp jetty:run              # runs as mvn jetty plugin
 ----
 
 
+[[__cgcom_cutting-a-release_releasing-the-simpleapp-archetype_deploy]]
+=== Deploy
+
+Back in the original session, we upload (deploy) the archetype to the staging repository.
 
-[[__cgcom_cutting-a-release_releasing-the-archetypes_simplapp_release-perform-upload]]
-==== Release Perform (upload)
+[NOTE]
+====
+Previously we used `mvn release:prepare` and `mvn release:perform` to do this.
+However not compatible with `${revision}` that we now use https://maven.apache.org/maven-ci-friendly.html[for CI/CD].
+We therefore now just use `mvn deploy` directly, activating the (inherited) `apache-release` profile that, amongst other things, brings in the `gpg` plugin for code signing.
+====
 
-Back in the original session (in the *archetype* directory, `example/archetype/$ISISCPN`), execute `release:perform`:
+To build and deploy and tag, we use:
 
-[source]
+[source,bash,subs="attributes+"]
 ----
-mvn release:perform -P apache-release \
-                -DworkingDirectory=$ISISTMP/checkout
+mvn -P apache-release \
+    clean deploy      \
+    -Dgpg.passphrase="this is not really my passphrase"
+
+git tag $ISISART-$ISISREL
+git tag $ISISART-$ISISREL-$ISISRC
 ----
 
-This will upload the artifacts to the ASF Nexus repository.
+using your own GPG passphrase, of course.
+
+
+[IMPORTANT]
+====
+This requires `gpg` v2.1 or later.
+====
 
 
-[[__cgcom_cutting-a-release_releasing-the-archetypes_helloworld_setup-environment-variables]]
-=== Releasing `helloworld` archetype
 
-We now repeat the procedure for the `helloworld` example app.
+
+[[__cgcom_cutting-a-release_releasing-the-helloworld-archetype]]
+== Releasing `helloworld` archetype
+
+We now repeat the archetype release procedure, this time for the `helloworld` example app.
 
 Start by switching to the directory containing the `helloworld` example:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 cd ../../../example/application/helloworld
 ----
 
-[[__cgcom_cutting-a-release_releasing-the-archetypes_helloworld_setup-environment-variables]]
-==== Setup environment variables
+[[__cgcom_cutting-a-release_releasing-the-helloworld-archetype_setup-environment-variables]]
+=== Setup environment variables
 
 Update additional environment variables for the `helloworld-archetype` artifact:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 export ISISART=helloworld-archetype
 export ISISPAR=$ISISREL
@@ -675,21 +584,10 @@ env | grep ISIS | sort
 ----
 
 
-[[__cgcom_cutting-a-release_releasing-the-archetypes_helloworld_check-the-example-app]]
-==== Check the example app
-
-Update the parent `pom.xml` to reference the _released_ version of Apache Isis core, eg:
-
-[source,xml]
-----
-<properties>
-    <isis.version>2.0.0-M1</isis.version>
-    ...
-</properties>
-----
+[[__cgcom_cutting-a-release_releasing-the-helloworld-archetype_check-the-example-app]]
+=== Check the example app
 
-
-Finally, double check that the app
+Check that the app:
 
 * builds:
 +
@@ -712,7 +610,7 @@ mvn jetty:run
 
 * can be deployed as a WAR
 +
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 cp target/helloworld.war $CATALINA_HOME/webapps/ROOT.war
 pushd $CATALINA_HOME/bin
@@ -722,7 +620,7 @@ tail -f ../logs/catalina.out
 +
 quit using:
 +
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 sh shutdown.sh
 popd
@@ -733,56 +631,39 @@ This too should be accessed at link:http://localhost:8080[localhost:8080].
 In each case, check the about page and confirm has been built against non-SNAPSHOT versions of the Apache Isis jars.
 
 
-[[__cgcom_cutting-a-release_releasing-the-archetypes_helloworld_create-the-archetype]]
-==== Create the archetype
+[[__cgcom_cutting-a-release_releasing-the-helloworld-archetype_create-the-archetype]]
+=== Recreate the archetype
 
 Make sure you are in the correct directory and environment variables are correct.
 
 To recreate the *helloworld* archetype:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 cd example/application/helloworld
 env | grep ISIS | sort
 ----
 
-Then, run the script:
+Then, run the script (which also builds the archetype once generated) and then switch to the archetype's directory:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 sh ../../../scripts/recreate-archetype.sh $ISISJIRA
+cd `pwd|sed 's/application/archetype/'`
 ----
 
-The script automatically commits changes; if you wish use `git log` and
-`git diff` (or a tool such as SourceTree) to review changes made.
-
-
-[[__cgcom_cutting-a-release_releasing-the-archetypes_helloworld_release-prepare]]
-=== Release prepare
+The script automatically commits its changes.
+If you wish use `git log` and `git diff` (or a tool such as SourceTree) to review changes made.
 
-Switch to the *archetype* directory and execute the `release:prepare`:
-
-[source]
-----
-cd ../../../example/archetype/$ISISCPN
-rm -rf $ISISTMP/checkout
-mvn release:prepare -P apache-release \
-                -DreleaseVersion=$ISISREL \
-                -DdevelopmentVersion=$ISISDEV \
-                -Dtag=$ISISART-$ISISREL
-----
 
 
-
-[[__cgcom_cutting-a-release_releasing-the-archetypes_helloworld_post-prepare-sanity-check]]
-==== Post-prepare sanity check
-
-This is a good point to test the archetype; nothing has yet been uploaded.
+[[__cgcom_cutting-a-release_releasing-the-helloworld-archetype_sanity-check]]
+=== Sanity check
 
 _In a different session_, create a new app from the archetype.
 First set up environment variables:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 export ISISTMP=/c/tmp    # or as required
 export ISISCPN=helloworld
@@ -791,7 +672,7 @@ env | grep ISIS | sort
 
 Then generate a new app from the archetype:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 rm -rf $ISISTMP/test-$ISISCPN
 
@@ -807,33 +688,44 @@ mvn archetype:generate  \
 
 Build the newly generated app and test:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 cd myapp
 mvn clean install -o
 mvn jetty:run
 ----
 
+[[__cgcom_cutting-a-release_releasing-the-helloworld-archetype_deploy]]
+=== Deploy
 
+Back in the original session, we upload (deploy) the archetype to the staging repository.
 
-[[__cgcom_cutting-a-release_releasing-the-archetypes_simplapp_release-perform-upload]]
-==== Release Perform (upload)
-
-Back in the original session (in the *archetype* directory, `example/archetype/$ISISCPN`), execute `release:perform`:
+To build and deploy and tag, we use:
 
-[source]
+[source,bash,subs="attributes+"]
 ----
-mvn release:perform -P apache-release \
-                -DworkingDirectory=$ISISTMP/checkout
+mvn -P apache-release \
+    clean deploy      \
+    -Dgpg.passphrase="this is not really my passphrase"
+
+git tag $ISISART-$ISISREL
+git tag $ISISART-$ISISREL-$ISISRC
 ----
 
-This will upload the artifacts to the ASF Nexus repository.
+using your own GPG passphrase, of course.
+
+
+[IMPORTANT]
+====
+This requires `gpg` v2.1 or later.
+====
+
 
 
 [[__cgcom_cutting-a-release_check-close-staging-repo]]
 == Check/Close Staging Repo
 
-The `mvn release:perform` commands will have put release artifacts for both `core` and the `simpleapp` archetype into a newly created staging repository on the ASF Nexus repository server.
+The `mvn deploy` commands will have uploaded release artifacts for both `core` and the `simpleapp` archetype into a newly created staging repository on the ASF Nexus repository server.
 
 Log onto http://repository.apache.org[repository.apache.org] (using your ASF LDAP account):
 
@@ -878,19 +770,38 @@ Unfortunately, Nexus does not seem to allow subkeys to be used for signing. See
 
 
 
+
+
+[[__cgcom_cutting-a-release_bump-revision-to-ISISDEV]]
+== Bump `revision` property to `$ISISDEV`
+
+At the beginning of the release process we bumped the `revision` property to the release version, ie `${ISISREL}`.
+With the release now deployed we now need to bump the revision up to the next development version, ie `${ISISDEV}`.
+
+In the root of the Apache Isis repo, we do this for all three ``pom.xml``s with:
+
+[source,bash,subs="attributes+"]
+----
+sed -i -E "s|<revision>[^<]+<|<revision>${ISISDEV}<|g" core/pom.xml
+sed -i -E "s|<revision>[^<]+<|<revision>${ISISDEV}<|g" example/application/simpleapp/pom.xml
+sed -i -E "s|<revision>[^<]+<|<revision>${ISISDEV}<|g" example/application/helloworld/pom.xml
+git commit -am "${ISISJIRA}: bumps revision property across all pom.xml's to ${ISISDEV}"
+----
+
+
 [[__cgcom_cutting-a-release_push-branches]]
 == Push branches
 
 Push the release branch to origin:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 git push -u origin $ISISBRANCH
 ----
 
 and also push tags for both core and the archetype:
 
-[source]
+[source,bash,subs="attributes+"]
 ----
 git push origin refs/tags/isis-$ISISREL:refs/tags/isis-$ISISREL-$ISISRC
 git push origin refs/tags/simpleapp-archetype-$ISISREL:refs/tags/simpleapp-archetype-$ISISREL-$ISISRC
@@ -913,36 +824,39 @@ Once the artifacts have been uploaded, you can call a vote.
 In all cases, votes last for 72 hours and require a +3 (binding) vote from members.
 
 [[__cgcom_cutting-a-release_voting-start-voting-thread]]
-=== Start voting thread on link:mailto:&#100;e&#118;&#x40;&#x69;&#x73;&#x69;&#115;&#x2e;&#x61;p&#97;&#x63;&#104;e&#46;&#111;&#114;g[&#100;e&#118;&#x40;&#x69;&#x73;&#x69;&#115;&#x2e;&#x61;p&#97;&#x63;&#104;e&#46;&#111;&#114;g]
+=== Start voting thread on dev mailing list
+
+That is, link:mailto:dev@apache.isis.org[]
 
-The following boilerplate is for a release of the Apache Isis Core. Adapt as required:
+The following boilerplate is for a release of the Apache Isis Core.
+Adapt as required:
 
 Use the following subject, eg:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
-[VOTE] Apache Isis Core release 2.0.0-M1 RC1
+[VOTE] Apache Isis Core release {isisrel} RC1
 ----
 
 And use the following body:
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 I've cut a release for Apache Isis Core and the two archetypes:
 
-* Core 2.0.0-M1
-* HelloWorld Archetype 2.0.0-M1
-* SimpleApp Archetype 2.0.0-M1
+* Core {isisrel}
+* HelloWorld Archetype {isisrel}
+* SimpleApp Archetype {isisrel}
 
 The source code artifacts have been uploaded to staging repositories on repository.apache.org:
 
-* http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/core/isis/2.0.0-M1/isis-2.0.0-M1-source-release.zip
-* http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/archetype/helloworld-archetype/2.0.0-M1/helloworld-archetype-2.0.0-M1-source-release.zip
-* http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/archetype/simpleapp-archetype/2.0.0-M1/simpleapp-archetype-2.0.0-M1-source-release.zip
+* http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/core/isis/{isisrel}/isis-{isisrel}-source-release.zip
+* http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/archetype/helloworld-archetype/{isisrel}/helloworld-archetype-{isisrel}-source-release.zip
+* http://repository.apache.org/content/repositories/orgapacheisis-10xx/org/apache/isis/archetype/simpleapp-archetype/{isisrel}/simpleapp-archetype-{isisrel}-source-release.zip
 
 For each zip there is a corresponding signature file (append .asc to the zip's url).
 
-In the source code repo the code has been tagged as isis-2.0.0-M1-RC1, helloworld-archetype-2.0.0-M1-RC1 and simpleapp-archetype-2.0.0-M1-RC1; see https://github.com/apache/isis/tags
+In the source code repo the code has been tagged as isis-{isisrel}-RC1, helloworld-archetype-{isisrel}-RC1 and simpleapp-archetype-{isisrel}-RC1; see https://github.com/apache/isis/tags
 
 For instructions on how to verify the release (build from binaries and/or use in Maven directly), see https://isis.apache.org/guides/cgcom/cgcom.html#_cgcom_verifying-releases
 
@@ -955,7 +869,7 @@ Please verify the release and cast your vote.  The vote will be open for a minim
 
 Remember to update:
 
-* the version number (`2.0.0-M1` or whatever)
+* the version number (`{isisrel}` or whatever)
 * the release candidate number (`RC1` or whatever)
 * the repository id, as provided by Nexus earlier (`orgapacheisis-10xx` or whatever)
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_key-generation.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_key-generation.adoc
index a7afcf5..2e3260d 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_key-generation.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_key-generation.adoc
@@ -497,7 +497,7 @@ Then, manually add in a `&lt;wot:pubkeyAddress&gt;` element within `&lt;wot:PubK
 </wot:hasKey>
 ----
 
-ie, referencing your publically exported public key
+ie, referencing your publicly exported public key
 
 Finally, commit your changes.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_post-release-successful.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_post-release-successful.adoc
index 85c66a9..a8348f7 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_post-release-successful.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_post-release-successful.adoc
@@ -4,6 +4,7 @@
 :_basedir: ../../
 :_imagesdir: images/
 :toc: right
+include::__versions.adoc[]
 
 
 The release process consists of:
@@ -187,9 +188,9 @@ svn delete $fullname-$old_ver-$zip
 popd
 ----
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
-sh upd.sh 1.16.2 1.16.3
+sh upd.sh {isisprev} {isisrel}
 ----
 
 The script downloads the artifacts from the Nexus release repository, adds the artifacts to subversion and deletes the previous version.
@@ -199,14 +200,14 @@ The script downloads the artifacts from the Nexus release repository, adds the a
 Double check that the files are correct; there is sometimes a small delay in the files becoming available in the release repository.
 It should be sufficient to check just the `md5` or `.asc` files that these look valid (aren't HTML 404 error pages):
 
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 vi `find . -name *.md5`
 ----
 
 Assuming all is good, commit the changes:
 
-[source]
+[source,subs="attributes+"]
 ----
 svn commit -m "publishing isis source releases to dist.apache.org"
 ----
@@ -281,7 +282,7 @@ Now we need to publish the website.
 * locate `template/document.html.erb` file, and remove `-SNAPSHOT` from the navbar:
 
 +
-[source,html]
+[source,html,subs="attributes+"]
 ----
 <p class="nav navbar-text navbar-right small">v2.0.0-M1</p>
 ----
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_post-release-unsuccessful.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_post-release-unsuccessful.adoc
index 2d56862..f440b5e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_post-release-unsuccessful.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_post-release-unsuccessful.adoc
@@ -4,6 +4,7 @@
 :_basedir: ../../
 :_imagesdir: images/
 :toc: right
+include::__versions.adoc[]
 
 
 The release process consists of:
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-interim-releases.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-interim-releases.adoc
index 8f6e891..9abffb9 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-interim-releases.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-interim-releases.adoc
@@ -4,13 +4,14 @@
 :_basedir: ../../
 :_imagesdir: images/
 :toc: right
+include::__versions.adoc[]
 
 
 The intent of an "interim" release is to allow a developer team to release their application based on a `-SNAPSHOT` version of the framework.
 Since `-SNAPSHOT` changes on a day-to-day basis, the idea is to tag a particular revision and to release this, thereby providing stability/traceability for the application being developed.
 
-Whereas xref:../cgcom/cgcom.adoc#_cgcom_cutting-a-release.adoc[formal release]s and xref:../cgcom/cgcom.adoc#_cgcom_release-process-for-snapshots.adoc[snapshot release]s are public (released through the Maven repository maintained by Apache Software Foundation), interim releases are non-public and rely on infrastructure provided by a developer team.
-The tagged release resides _not_ in the xref:../../downloads.adoc#__downloads_source_code[official Apache Isis git repository], but instead in a fork/clone maintained by the developer team.
+Whereas xref:../cgcom/cgcom.adoc#\_cgcom_cutting-a-release.adoc[formal release]s and xref:../cgcom/cgcom.adoc#\_cgcom_release-process-for-snapshots.adoc[snapshot release]s are public (released through the Maven repository maintained by Apache Software Foundation), interim releases are non-public and rely on infrastructure provided by a developer team.
+The tagged release resides __not__ in the xref:../../downloads.adoc#\__downloads_source_code[official Apache Isis git repository], but instead in a fork/clone maintained by the developer team.
 
 [NOTE]
 ====
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-snapshots.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-snapshots.adoc
index eded8d4..af6be3d 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-snapshots.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-for-snapshots.adoc
@@ -4,6 +4,7 @@
 :_basedir: ../../
 :_imagesdir: images/
 :toc: right
+include::__versions.adoc[]
 
 
 Snapshot releases allows the current `-SNAPSHOT` version of the `core` modules  of the framework to be released to the Maven snapshot repository maintained by Apache Software Foundation.
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-prereqs.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-prereqs.adoc
index e54d9de..178b878 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-prereqs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_release-process-prereqs.adoc
@@ -4,6 +4,7 @@
 :_basedir: ../../
 :_imagesdir: images/
 :toc: right
+include::__versions.adoc[]
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_verifying-releases.adoc b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_verifying-releases.adoc
index 38cac73..eed2a8f 100644
--- a/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_verifying-releases.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/cgcom/_cgcom_verifying-releases.adoc
@@ -4,6 +4,7 @@
 :_basedir: ../../
 :_imagesdir: images/
 :toc: right
+include::__versions.adoc[]
 
 
 The release process consists of:
@@ -87,7 +88,7 @@ To build Apache Isis core, first clean out the local repository cache:
 
 [source]
 ----
-rm -rf ~/m2/repository/org/apache/isis
+rm -rf ~/.m2/repository/org/apache/isis
 ----
 
 and then build using:
@@ -229,19 +230,20 @@ Assuming that everything builds ok, then test the archetypes (adjust version as
 
 * First the `helloworld` archetype: +
 +
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
 mvn archetype:generate  \
+    -D archetypeCatalog=local \
     -D archetypeGroupId=org.apache.isis.archetype \
     -D archetypeArtifactId=helloworld-archetype \
-    -D archetypeVersion=2.0.0-M1 \
+    -D archetypeVersion={isisrel} \
     -D groupId=com.mycompany \
-    -D artifactId=myapp \
+    -D artifactId=myhelloworld \
     -D version=1.0-SNAPSHOT \
     -B \
     -o
 
-cd myapp
+cd myhelloworld
 mvn clean install jetty:run -o
 ----
 +
@@ -249,19 +251,22 @@ Adjust the version as necessary.
 
 * Next, the `simpleapp` archetype: +
 +
-[source,bash]
+[source,bash,subs="attributes+"]
 ----
+cd ..
+
 mvn archetype:generate  \
+    -D archetypeCatalog=local \
     -D archetypeGroupId=org.apache.isis.archetype \
     -D archetypeArtifactId=simpleapp-archetype \
-    -D archetypeVersion=2.0.0-M1 \
+    -D archetypeVersion={isisrel} \
     -D groupId=com.mycompany \
-    -D artifactId=myapp \
+    -D artifactId=mysimpleapp \
     -D version=1.0-SNAPSHOT \
     -B \
     -o
 
-cd myapp
+cd mysimpleapp
 mvn clean install -o && mvn -pl webapp jetty:run -o
 ----
 +
diff --git a/adocs/documentation/src/main/asciidoc/guides/dg/_dg_asciidoc-templates.adoc b/adocs/documentation/src/main/asciidoc/guides/dg/_dg_asciidoc-templates.adoc
index e2a10a1..69f3108 100644
--- a/adocs/documentation/src/main/asciidoc/guides/dg/_dg_asciidoc-templates.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/dg/_dg_asciidoc-templates.adoc
@@ -265,13 +265,13 @@ for example:
 
 a hyperlink to the "man page" for an (API) domain service within the reference guide for domain services, where:
 
-* `xxx` is the domain service (eg `DomainObjectContainer`)
+* `xxx` is the domain service (eg `RepositoryService`)
 
 for example:
 
-`\xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]`
+`\xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService`]`
 
-|xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]
+|xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService`]
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_intellij.adoc b/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_intellij.adoc
index fb52b57..607db5b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_intellij.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/dg/_dg_ide_intellij.adoc
@@ -290,10 +290,17 @@ image::{_imagesdir}intellij-idea/110-running-the-app/020-datanucleus-enhancer-go
 
 The `-o` flag in the goal means run off-line; this will run faster.
 
-WARNING: if you forget to set up the enhancer goal, or don't run it on the correct (dom) module, then you will get all sorts of errors when you startup.  These usually manifest themselves as class cast exception in DataNucleus.
+[WARNING]
+====
+If you forget to set up the enhancer goal, or don't run it on the correct (dom) module, then you will get all sorts of errors when you startup.  These usually manifest themselves as class cast exception in DataNucleus.
+====
 
 You should now be able to run the app using `Run > Run Configuration`.  The same configuration can also be used to debug the app if you so need.
 
+[TIP]
+====
+Under windows you may get 'Standard error from the DataNucleus tool + org.datanucleus.enhancer.DataNucleusEnhancer : The command line is too long' although 'fork=false' is set in pom.xml. Can be worked around via setting '-Dfork=false' before or after 'datanucleus:enhance -o'.
+====
 
 [[__dg_ide_intellij_running_unit-tests]]
 === Running the Unit Tests
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_command.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_command.adoc
index f03d9a8..769a34e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_command.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_command.adoc
@@ -280,7 +280,8 @@ If `command` is `DISABLED` or does not otherwise apply due to the action's decla
 
 For persisted commands, the `commandExecuteIn()` attribute determines whether the `Command` should be executed in the foreground (the default) or executed in the background.
 
-Background execution means that the command is not executed immediately, but is available for a configured xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_BackgroundCommandService[`BackgroundCommandService`] to execute, eg by way of an in-memory scheduler such as Quartz.  See xref:../ugbtb/ugbtb.adoc#_ugbtb_headless-access_BackgroundCommandExecution[here] for further information on this topic.
+Background execution means that the command is not executed immediately, but is available for a configured xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_BackgroundCommandService[`BackgroundCommandService`] to execute, eg by way of an in-memory scheduler such as Quartz.
+See xref:../ugbtb/ugbtb.adoc#_ugbtb_headless-access_BackgroundCommandExecution[here] for further information on this topic.
 
 For example:
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_publishing.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_publishing.adoc
index 59e3205..984ff11 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_publishing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Action_publishing.adoc
@@ -7,17 +7,11 @@
 
 
 
-The `publishing()` attribute determines whether and how an action invocation is published via the registered
-implementation of a xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`]) or
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`].  This attribute is also
-supported for xref:../rgant/rgant.adoc#_rgant-DomainObject_publishing[domain objects], where it controls whether changed objects
-are published as events, and for xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`], where it controls
-whether property edits are published as events.
+The `publishing()` attribute determines whether and how an action invocation is published via the registered implementation of a xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`]) or xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`].
+This attribute is also supported for xref:../rgant/rgant.adoc#_rgant-DomainObject_publishing[domain objects], where it controls whether changed objects are published as events, and for xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`], where it controls whether property edits are published as events.
 
 A common use case is to notify external "downstream" systems of changes in the state of the Isis application.
-The default value for the attribute is `AS_CONFIGURED`, meaning that the
-xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.services.publish.actions` is used to determine
-the whether the action is published:
+The default value for the attribute is `AS_CONFIGURED`, meaning that the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.services.publish.actions` is used to determine the whether the action is published:
 
 * `all` +
 +
@@ -33,9 +27,7 @@ no action invocations are published
 
 If there is no configuration property in `isis.properties` then publishing is automatically enabled.
 
-This default can be overridden on an action-by-action basis; if `publishing()` is set to `ENABLED` then the action
-invocation is published irrespective of the configured value; if set to `DISABLED` then the action invocation is
-_not_ published, again irrespective of the configured value.
+This default can be overridden on an action-by-action basis; if `publishing()` is set to `ENABLED` then the action invocation is published irrespective of the configured value; if set to `DISABLED` then the action invocation is _not_ published, again irrespective of the configured value.
 
 For example:
 
@@ -53,17 +45,15 @@ public class Order {
 
 == `publishingPayloadFactory()`
 
-The (optional) related `publishingPayloadFactory()` specifies the class to use to create the (payload of the) event to
-be published by the publishing factory.
+The (optional) related `publishingPayloadFactory()` specifies the class to use to create the (payload of the) event to be published by the publishing factory.
 
-Rather than simply broadcast that the action was invoked, the payload factory allows a "fatter" payload to be
-instantiated that can eagerly push commonly-required information to all subscribers. For at least some subscribers
-this should avoid the necessity to query back for additional information.
+Rather than simply broadcast that the action was invoked, the payload factory allows a "fatter" payload to be instantiated that can eagerly push commonly-required information to all subscribers.
+For at least some subscribers this should avoid the necessity to query back for additional information.
 
 [WARNING]
 ====
-Be aware that this attribute is only honoured by the (deprecated) xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`], so should itself be considered as deprecated.  It
-is ignored by the replacement xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`],
+Be aware that this attribute is only honoured by the (deprecated) xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`], so should itself be considered as deprecated.
+It is ignored by the replacement xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`],
 ====
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc
index c578545..4bef2ef 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_editing.adoc
@@ -21,11 +21,12 @@ Whether a collection is enabled or disabled depends upon these factors:
 
 * whether the domain object has been configured as immutable through the xref:../rgant/rgant.adoc#_rgant-DomainObject_editing[`@DomainObject#editing()`] attribute
 
-* else (that is, if the domain object's editability is specified as being `AS_CONFIGURED`), then the value of the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.objects.editing`.  If set to `false`, then the object's collections (and properties) are *not* editable
+* else (that is, if the domain object's editability is specified as being `AS_CONFIGURED`), then the value of the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.objects.editing`.
+If set to `false`, then the object's collections (and properties) are *not* editable
 
 * else, then the value of the `@Collection(editing=...)` attribute itself.
 
-* else, the result of invoking any supporting xref:../rgcms/rgcms.adoc#_rgcms_methods_prefixes_disable[`disable...()`] supporting methods
+* else, the result of invoking any supporting xref:../rgcms/rgcms.adoc#\_rgcms_methods_prefixes_disable[`disable...()`] supporting methods
 
 
 Thus, to make a collection read-only even if the object would otherwise be editable, use:
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
index 00efb05..ed6e4c2 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Collection_typeOf.adoc
@@ -12,7 +12,7 @@ For example:
 [source,java]
 ----
 public void Customer {
-    @TypeOf(Order.class)
+    @Collection(typeOf=Order.class)
     public SortedSet getOutstandingOrders() { ... }
     ...
 }
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column.adoc
index 08451f0..3691d6a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Column.adoc
@@ -19,7 +19,7 @@ Moreover, while JDO/DataNucleus will recognize annotations on either the field o
 This section identifies which attributes of `@Column` are recognized and used by Apache Isis.
 
 
-
+[[_rgant-Column_allowsNull]]
 == Nullability
 
 The `allowsNull()` attribute is used to specify if a property is mandatory or is optional.
@@ -42,6 +42,7 @@ In the vast majority of cases you should be fine just to add the `@Column#allows
 
 
 
+[[_rgant-Column_length]]
 == Length for ``String``s
 
 The `length()` attribute is used to specify the length of `java.lang.String` property types as they map to `varchar(n)` columns.
@@ -66,6 +67,7 @@ Isis also provides xref:../rgant/rgant.adoc#_rgant-Property_maxLength[`@Property
 
 
 
+[[_rgant-Column_length-scale]]
 == Length/scale for ``BigDecimal``s
 
 
@@ -81,18 +83,21 @@ public class Customer {
     public void setTotalOrdersToDate(BigDecimal totalOrdersToDate) { ... }
 ----
 
-For ``BigDecimal``s it is also possible to specify the xref:../rgant/rgant.adoc#_rgant-Digits[`@Digits`] annotation, whose form is `@Digits(integer, fraction)`.  There is a subtle difference here: while `@Column#scale()` corresponds to `@Digits#fraction()`, the value of `@Column#length()` (ie the precision) is actually the _sum_ of the `@Digits`' `integer()` and `fraction()` parts.
+For ``BigDecimal``s it is also possible to specify the xref:../rgant/rgant.adoc#\_rgant-Digits[`@Digits`] annotation, whose form is `@Digits(integer, fraction)`.
+There is a subtle difference here: while `@Column#scale()` corresponds to `@Digits#fraction()`, the value of `@Column#length()` (ie the precision) is actually the __sum__ of the `@Digits`' `integer()` and `fraction()` parts.
 
 If both are specified, Apache Isis will check when it initializes for any contradictions, and will fail-fast with an appropriate error message in the log if there are.
 
 
 
 
+[[_rgant-Column_hints-and-tips]]
 == Hints and Tips
 
 This seems to be a good place to describe some additional common mappings that use `@Column`.  Unlike the sections above, the attributes specified in these hints and tips aren't actually part of Apache Isis metamodel.
 
 
+[[_rgant-Column_hints-and-tips_mapping-foreign-keys]]
 === Mapping foreign keys
 
 The `name()` attribute can be used to override the name of the column.  References to other objects are generally mapped as foreign key columns.  If there are multiple references to a given type, then you will want to override the name that JDO/DataNucleus would otherwise default.
@@ -114,7 +119,8 @@ public class PartyRelationship {
 
 
 
-== Mapping ``Blob``s and ``Clob``s
+[[_rgant-Column_hints-and-tips_mapping-blobs-and-clobs]]
+=== Mapping ``Blob``s and ``Clob``s
 
 Isis provides custom value types for xref:../rgcms/rgcms.adoc#_rgcms_classes_value-types_Blob[`Blob`]s and xref:../rgcms/rgcms.adoc#_rgcms_classes_value-types_Clob[`Clob`]s.  These value types have multiple internal fields, meaning that they corresponding to multiple columns in the database.  Mapping this correctly requires using  `@Column` within JDO's `@Persistent` annotation.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassUiEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassUiEvent.adoc
index dbaf844..20d5da0 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassUiEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_cssClassUiEvent.adoc
@@ -5,23 +5,21 @@
 :_imagesdir: images/
 
 
-Whenever a domain object is to be rendered, the framework fires off an CSS class UI event to obtain a CSS class to use
-in any wrapping ``<div>``s and ``<span>``s that render the domain object.  This is as an alternative to implementing
-xref:../rgcms/rgcms.adoc#_rgcms_methods_reserved_cssClass[`cssClass()`] reserved method.  (If `cssClass()` is present, then
-it will take precedence).
+Whenever a domain object is to be rendered, the framework fires off an CSS class UI event to obtain a CSS class to use in any wrapping ``<div>``s and ``<span>``s that render the domain object.
+This is as an alternative to implementing xref:../rgcms/rgcms.adoc#_rgcms_methods_reserved_cssClass[`cssClass()`] reserved method.
+(If `cssClass()` is present, then it will take precedence).
 
-Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can
-use obtain a reference to the domain object from the event.  From this they can, if they wish, specify a CSS class for
-the domain object using the event's API.
+Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can use obtain a reference to the domain object from the event.
+From this they can, if they wish, specify a CSS class for the domain object using the event's API.
 
 [NOTE]
 ====
-The feature was originally introduced so that xref:../rgant/rgant.adoc#_rgant-XmlRootElement[`@XmlRootElement`]-annotated
-xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_view-models[view model]s could be kept as minimal as possible, just defining the data.
+The feature was originally introduced so that xref:../rgant/rgant.adoc#_rgant-XmlRootElement[`@XmlRootElement`]-annotated xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_view-models[view model]s could be kept as minimal as possible, just defining the data.
 UI events allow subscribers to provide UI hints, while xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_mixins[mixin]s can be used to provide the behaviour.
 ====
 
-By default the event raised is `CssClassUiEvent.Default`. For example:
+By default the event raised is `CssClassUiEvent.Default`.
+For example:
 
 [source,java]
 ----
@@ -31,8 +29,8 @@ public class ToDoItemDto {
 }
 ----
 
-The purpose of the `cssClassUiEvent()` attribute is to allows a custom subclass to be emitted instead.  A similar
-attribute is available for titles and icons.
+The purpose of the `cssClassUiEvent()` attribute is to allows a custom subclass to be emitted instead.
+A similar attribute is available for titles and icons.
 
 For example:
 
@@ -57,7 +55,8 @@ The benefit is that subscribers can be more targeted as to the events that they
 
 Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API
 or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured)
-using the link:http://www.axonframework.org/[Axon Framework] API.  The examples below use the Guava API.
+using the link:http://www.axonframework.org/[Axon Framework] API.
+The examples below are compatible with both.
 
 Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
 
@@ -65,7 +64,8 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(CssClassUiEvent ev) {
         if(ev.getSource() instanceof ToDoItemDto) { ... }
     }
@@ -78,7 +78,8 @@ or can be fine-grained (by subscribing to specific event subtypes):
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ToDoItemDto.CssClassUiEvent ev) {
         ...
     }
@@ -87,29 +88,20 @@ public class SomeSubscriber extends AbstractSubscriber {
 
 The subscriber should then use `CssClassUiEvent#setCssClass(...)` to actually specify the CSS class to be used.
 
-[TIP]
-====
-If the AxonFramework is being used, replace `@com.google.common.eventbus.Subscribe` with `@org.axonframework.eventhandling.annotation.EventHandler`.
-====
-
 
 
 
 
 == Default, Doop and Noop events
 
-If the `cssClassUiEvent` attribute is not explicitly specified (is left as its default value, `CssClassUiEvent.Default`),
-then the framework will, by default, post an event.
+If the `cssClassUiEvent` attribute is not explicitly specified (is left as its default value, `CssClassUiEvent.Default`), then the framework will, by default, post an event.
 
-If this is not required, then the `isis.reflector.facet.domainObjectLayoutAnnotation.cssClassUiEvent.postForDefault`
-configuration property can be set to "false"; this will disable posting.
+If this is not required, then the `isis.reflector.facet.domainObjectLayoutAnnotation.cssClassUiEvent.postForDefault` configuration property can be set to "false"; this will disable posting.
 
 On the other hand, if the `cssClassUiEvent` has been explicitly specified to some subclass, then an event will be posted.
-The framework provides `CssClassUiEvent.Doop` as such a subclass, so setting the `cssClassUiEvent` attribute to this class
-will ensure that the event to be posted, irrespective of the configuration property setting.
+The framework provides `CssClassUiEvent.Doop` as such a subclass, so setting the `cssClassUiEvent` attribute to this class will ensure that the event to be posted, irrespective of the configuration property setting.
 
-And, conversely, the framework also provides `CssClassUiEvent.Noop`; if `cssClassUiEvent` attribute is set to this class,
-then no event will be posted.
+And, conversely, the framework also provides `CssClassUiEvent.Noop`; if `cssClassUiEvent` attribute is set to this class, then no event will be posted.
 
 
 
@@ -118,9 +110,7 @@ then no event will be posted.
 
 == Raising events programmatically
 
-Normally events are only raised for interactions through the UI. However, events can be raised programmatically either
-by calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] API directly, or as a result
-of calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s
-`cssClassOf(...)` method.
+Normally events are only raised for interactions through the UI.
+However, events can be raised programmatically either by calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] API directly, or as a result of calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s `cssClassOf(...)` method.
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_describedAs.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_describedAs.adoc
index 23c1650..ac6b00a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_describedAs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_describedAs.adoc
@@ -11,7 +11,7 @@ For example:
 
 [source,java]
 ----
-@DescribedAs("A customer who may have originally become known to us via " +
+@DomainObjectLayout(describedAs="A customer who may have originally become known to us via " +
              "the marketing system or who may have contacted us directly.")
 public class ProspectiveSale {
    ...
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_iconUiEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_iconUiEvent.adoc
index 8a60a28..15a4eac 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_iconUiEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_iconUiEvent.adoc
@@ -5,24 +5,22 @@
 :_imagesdir: images/
 
 
-Whenever a domain object is to be rendered, the framework fires off an icon UI event to obtain an icon (name) for the
-object (if possible). This is as an alternative to implementing
-xref:../rgcms/rgcms.adoc#_rgcms_methods_reserved_iconName[`iconName()`] reserved method.  (If `iconName()` is present, then
-it will take precedence).
+Whenever a domain object is to be rendered, the framework fires off an icon UI event to obtain an icon (name) for the object (if possible).
+This is as an alternative to implementing xref:../rgcms/rgcms.adoc#_rgcms_methods_reserved_iconName[`iconName()`] reserved method.
+(If `iconName()` is present, then it will take precedence).
 
-Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can
-use obtain a reference to the domain object from the event.  From this they can, if they wish, specify an icon name for
-the domain object using the event's API.
+Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can use obtain a reference to the domain object from the event.
+From this they can, if they wish, specify an icon name for the domain object using the event's API.
 
 
 [NOTE]
 ====
-The feature was originally introduced so that xref:../rgant/rgant.adoc#_rgant-XmlRootElement[`@XmlRootElement`]-annotated
-xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_view-models[view model]s could be kept as minimal as possible, just defining the data.
+The feature was originally introduced so that xref:../rgant/rgant.adoc#_rgant-XmlRootElement[`@XmlRootElement`]-annotated xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_view-models[view model]s could be kept as minimal as possible, just defining the data.
 UI events allow subscribers to provide UI hints, while xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_mixins[mixin]s can be used to provide the behaviour.
 ====
 
-By default the event raised is `IconUiEvent.Default`. For example:
+By default the event raised is `IconUiEvent.Default`.
+For example:
 
 [source,java]
 ----
@@ -32,8 +30,8 @@ public class ToDoItemDto {
 }
 ----
 
-The purpose of the `iconUiEvent()` attribute is to allows a custom subclass to be emitted instead.  A similar
-attribute is available for titles and CSS classes.
+The purpose of the `iconUiEvent()` attribute is to allows a custom subclass to be emitted instead.
+A similar attribute is available for titles and CSS classes.
 
 For example:
 
@@ -56,9 +54,8 @@ The benefit is that subscribers can be more targeted as to the events that they
 
 == Subscribers
 
-Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API
-or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured)
-using the link:http://www.axonframework.org/[Axon Framework] API.  The examples below use the Guava API.
+Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured) using the link:http://www.axonframework.org/[Axon Framework] API.
+The examples below are compatible with both.
 
 Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
 
@@ -66,7 +63,8 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(IconUiEvent ev) {
         if(ev.getSource() instanceof ToDoItemDto) { ... }
     }
@@ -79,7 +77,8 @@ or can be fine-grained (by subscribing to specific event subtypes):
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ToDoItemDto.IconUiEvent ev) {
         ...
     }
@@ -88,20 +87,14 @@ public class SomeSubscriber extends AbstractSubscriber {
 
 The subscriber should then use `IconUiEvent#setIconName(...)` to actually specify the icon name to be used.
 
-[TIP]
-====
-If the AxonFramework is being used, replace `@com.google.common.eventbus.Subscribe` with `@org.axonframework.eventhandling.annotation.EventHandler`.
-====
 
 
 
 == Default, Doop and Noop events
 
-If the `iconUiEvent` attribute is not explicitly specified (is left as its default value, `IconUiEvent.Default`),
-then the framework will, by default, post an event.
+If the `iconUiEvent` attribute is not explicitly specified (is left as its default value, `IconUiEvent.Default`), then the framework will, by default, post an event.
 
-If this is not required, then the `isis.reflector.facet.domainObjectLayoutAnnotation.iconUiEvent.postForDefault`
-configuration property can be set to "false"; this will disable posting.
+If this is not required, then the `isis.reflector.facet.domainObjectLayoutAnnotation.iconUiEvent.postForDefault` configuration property can be set to "false"; this will disable posting.
 
 On the other hand, if the `iconUiEvent` has been explicitly specified to some subclass, then an event will be posted.
 The framework provides `IconUiEvent.Doop` as such a subclass, so setting the `iconUiEvent` attribute to this class
@@ -114,9 +107,7 @@ then no event will be posted.
 
 == Raising events programmatically
 
-Normally events are only raised for interactions through the UI. However, events can be raised programmatically either
-by calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] API directly, or as a result
-of calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s
-`iconNameOf(...)` method.
+Normally events are only raised for interactions through the UI.
+However, events can be raised programmatically either by calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] API directly, or as a result of calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s `iconNameOf(...)` method.
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_titleUiEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_titleUiEvent.adoc
index 9b27de4..bc405f4 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_titleUiEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObjectLayout_titleUiEvent.adoc
@@ -55,9 +55,8 @@ The benefit is that subscribers can be more targeted as to the events that they
 
 == Subscribers
 
-Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API
-or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured)
-using the link:http://www.axonframework.org/[Axon Framework] API.  The examples below use the Guava API.
+Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured) using the link:http://www.axonframework.org/[Axon Framework] API.
+The examples below are compatible with both.
 
 Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
 
@@ -65,7 +64,8 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(TitleUiEvent ev) {
         if(ev.getSource() instanceof ToDoItemDto) { ... }
     }
@@ -78,7 +78,8 @@ or can be fine-grained (by subscribing to specific event subtypes):
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ToDoItemDto.TitleUiEvent ev) {
         ...
     }
@@ -89,11 +90,6 @@ The subscriber should then use either `TitleUiEvent#setTranslatableTitle(...)` o
 actually specify the title to be used.
 
 
-[TIP]
-====
-If the AxonFramework is being used, replace `@com.google.common.eventbus.Subscribe` with `@org.axonframework.eventhandling.annotation.EventHandler`.
-====
-
 
 
 == Default, Doop and Noop events
@@ -114,7 +110,5 @@ thn no event will be posted.
 
 == Raising events programmatically
 
-Normally events are only raised for interactions through the UI. However, events can be raised programmatically either
-by calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] API directly, or as a result
-of calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s
-`titleOf(...)` method.
+Normally events are only raised for interactions through the UI.
+However, events can be raised programmatically either by calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] API directly, or as a result of calling the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s `titleOf(...)` method.
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_auditing.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_auditing.adoc
index f9610a8..2f6674a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_auditing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_auditing.adoc
@@ -5,13 +5,9 @@
 :_imagesdir: images/
 
 
-The `auditing()` attribute indicates that if the object is modified, then each of its changed properties should be
-submitted to the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] (if one has been configured), or to
-any
+The `auditing()` attribute indicates that if the object is modified, then each of its changed properties should be submitted to the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] (if one has been configured).
 
-The default value for the attribute is `AS_CONFIGURED`, meaning that the
-xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.services.audit.objects` is used to determine the
-whether the action is audited:
+The default value for the attribute is `AS_CONFIGURED`, meaning that the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.services.audit.objects` is used to determine the whether the action is audited:
 
 * `all` +
 +
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_autoCompleteRepository.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_autoCompleteRepository.adoc
index 938086a..a221a92 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_autoCompleteRepository.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_autoCompleteRepository.adoc
@@ -6,10 +6,10 @@
 
 
 
-The `autoCompleteRepository()` attribute nominates a single method on a domain service as the fallback means for
-looking up instances of the domain object using a simple string.
+The `autoCompleteRepository()` attribute nominates a single method on a domain service as the fallback means for looking up instances of the domain object using a simple string.
 
-For example, this might search for a customer by their name or number.  Or it could search for a country based on its ISO-3 code or user-friendly name.
+For example, this might search for a customer by their name or number.
+Or it could search for a country based on its ISO-3 code or user-friendly name.
 
 
 [TIP]
@@ -70,7 +70,7 @@ where in this case `findByName` might be an existing action already defined:
 public class Customers {
     @Action(semantics=SemanticsOf.SAFE)
     public List<Customer> findByName(
-        @Parameter(minLength=3)             // <1>
+        @MinLength(3)                       // <1>
         @ParameterLayout(named="name")
         String name);
     ...
@@ -86,7 +86,7 @@ The autocomplete action can also be a regular method, annotated using xref:../rg
 public class Customers {
     @Programmatic
     public List<Customer> findByName(
-        @Parameter(minLength=3)
+        @MinLength(3)
         String name);
     ...
 }
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_createdLifecycleEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_createdLifecycleEvent.adoc
index f3a58e7..edd8d91 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_createdLifecycleEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_createdLifecycleEvent.adoc
@@ -5,16 +5,21 @@
 :_imagesdir: images/
 
 
-Whenever a domain object is instantiated or otherwise becomes known to the framework, a "created" lifecycle event is fired.  This is typically when the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer_object-creation-api[`newTransientInstance()`] is called;
-it will also happen if the object is simply instantiated with `new(...)`, and then the container's
-xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer_services-api[`injectServicesInto(...)`] method is called.
+Whenever a domain object is instantiated or otherwise becomes known to the framework, a "created" lifecycle event is fired.
+This is typically when the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryService`]'s `instantiate()` method is called.
 
-Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can
-use the event to obtain a reference to the object just created.  The subscriber could then, for example, update the
-object, eg looking up state from some external datastore.
+Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can use the event to obtain a reference to the object just created.
+The subscriber could then, for example, update the object, eg looking up state from some external datastore.
 
+[TIP]
+====
+It's possible to instantiate objects without firing this lifecycle; just instantiate using its regular constructor, and then use the ``ServiceRegistry``'s
+xref:../rgsvc/rgsvc.adoc#_rgsvc_metadata-api_ServiceRegistry[`injectServicesInto(...)`] to manually inject any required domain services.
+====
 
-By default the event raised is `ObjectCreatedEvent.Default`. For example:
+
+By default the event raised is `ObjectCreatedEvent.Default`.
+For example:
 
 [source,java]
 ----
@@ -24,8 +29,8 @@ public class ToDoItemDto {
 }
 ----
 
-The purpose of the `createdLifecycleEvent()` attribute is to allows a custom subclass to be emitted instead.  A similar
-attribute is available for other lifecycle events.
+The purpose of the `createdLifecycleEvent()` attribute is to allows a custom subclass to be emitted instead.
+A similar attribute is available for other lifecycle events.
 
 For example:
 
@@ -48,9 +53,8 @@ The benefit is that subscribers can be more targeted as to the events that they
 
 == Subscribers
 
-Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API
-or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured)
-using the link:http://www.axonframework.org/[Axon Framework] API.  The examples below use the Guava API.
+Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured) using the link:http://www.axonframework.org/[Axon Framework] API.
+The examples below are compatible with both.
 
 Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
 
@@ -58,7 +62,8 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ObjectCreatedEvent ev) {
         if(ev.getSource() instanceof ToDoItem) { ... }
     }
@@ -71,7 +76,8 @@ or can be fine-grained (by subscribing to specific event subtypes):
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ToDoItem.ObjectCreatedEvent ev) {
         ...
     }
@@ -79,29 +85,19 @@ public class SomeSubscriber extends AbstractSubscriber {
 ----
 
 
-[TIP]
-====
-If the AxonFramework is being used, replace `@com.google.common.eventbus.Subscribe` with `@org.axonframework.eventhandling.annotation.EventHandler`.
-====
-
-
-
 
 
 == Default, Doop and Noop events
 
-If the `createdLifecycleEvent` attribute is not explicitly specified (is left as its default value, `ObjectCreatedEvent.Default`),
-then the framework will, by default, post an event.
+If the `createdLifecycleEvent` attribute is not explicitly specified (is left as its default value, `ObjectCreatedEvent.Default`), then the framework will, by default, post an event.
 
-If this is not required, then the `isis.reflector.facet.domainObjectAnnotation.createdLifecycleEvent.postForDefault`
-configuration property can be set to "false"; this will disable posting.
+If this is not required, then the `isis.reflector.facet.domainObjectAnnotation.createdLifecycleEvent.postForDefault` configuration property can be set to "false"; this will disable posting.
 
 On the other hand, if the `createdLifecycleEvent` has been explicitly specified to some subclass, then an event will be posted.
 The framework provides `ObjectCreatedEvent.Doop` as such a subclass, so setting the `createdLifecycleEvent` attribute to this class
 will ensure that the event to be posted, irrespective of the configuration property setting.
 
-And, conversely, the framework also provides `ObjectCreatedEvent.Noop`; if `createdLifecycleEvent` attribute is set to this class,
-then no event will be posted.
+And, conversely, the framework also provides `ObjectCreatedEvent.Noop`; if `createdLifecycleEvent` attribute is set to this class, then no event will be posted.
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_loadedLifecycleEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_loadedLifecycleEvent.adoc
index d064997..7d180f9 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_loadedLifecycleEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_loadedLifecycleEvent.adoc
@@ -7,9 +7,8 @@
 
 Whenever a persistent domain object is loaded from the database, a "loaded" lifecycle event is fired.
 
-Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can
-use the event to obtain a reference to the domain object just loaded.  The subscriber could then, for example, update
-or default values on the object (eg to support on-the-fly migration scenarios).
+Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can use the event to obtain a reference to the domain object just loaded.
+The subscriber could then, for example, update or default values on the object (eg to support on-the-fly migration scenarios).
 
 By default the event raised is `ObjectLoadedEvent.Default`. For example:
 
@@ -21,8 +20,8 @@ public class ToDoItemDto {
 }
 ----
 
-The purpose of the `loadedLifecycleEvent()` attribute is to allows a custom subclass to be emitted instead.  A similar
-attribute is available for other lifecycle events.
+The purpose of the `loadedLifecycleEvent()` attribute is to allows a custom subclass to be emitted instead.
+A similar attribute is available for other lifecycle events.
 
 For example:
 
@@ -45,9 +44,8 @@ The benefit is that subscribers can be more targeted as to the events that they
 
 == Subscribers
 
-Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API
-or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured)
-using the link:http://www.axonframework.org/[Axon Framework] API.  The examples below use the Guava API.
+Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured) using the link:http://www.axonframework.org/[Axon Framework] API.
+The examples below support both.
 
 Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
 
@@ -55,7 +53,8 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ObjectLoadedEvent ev) {
         if(ev.getSource() instanceof ToDoItem) { ... }
     }
@@ -68,7 +67,8 @@ or can be fine-grained (by subscribing to specific event subtypes):
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ToDoItem.ObjectLoadedEvent ev) {
         ...
     }
@@ -76,29 +76,20 @@ public class SomeSubscriber extends AbstractSubscriber {
 ----
 
 
-[TIP]
-====
-If the AxonFramework is being used, replace `@com.google.common.eventbus.Subscribe` with `@org.axonframework.eventhandling.annotation.EventHandler`.
-====
-
 
 
 
 
 == Default, Doop and Noop events
 
-If the `loadedLifecycleEvent` attribute is not explicitly specified (is left as its default value, `ObjectLoadedEvent.Default`),
-then the framework will, by default, post an event.
+If the `loadedLifecycleEvent` attribute is not explicitly specified (is left as its default value, `ObjectLoadedEvent.Default`), then the framework will, by default, post an event.
 
-If this is not required, then the `isis.reflector.facet.domainObjectAnnotation.loadedLifecycleEvent.postForDefault`
-configuration property can be set to "false"; this will disable posting.
+If this is not required, then the `isis.reflector.facet.domainObjectAnnotation.loadedLifecycleEvent.postForDefault` configuration property can be set to "false"; this will disable posting.
 
 On the other hand, if the `loadedLifecycleEvent` has been explicitly specified to some subclass, then an event will be posted.
-The framework provides `ObjectLoadedEvent.Doop` as such a subclass, so setting the `loadedLifecycleEvent` attribute to this class
-will ensure that the event to be posted, irrespective of the configuration property setting.
+The framework provides `ObjectLoadedEvent.Doop` as such a subclass, so setting the `loadedLifecycleEvent` attribute to this class will ensure that the event to be posted, irrespective of the configuration property setting.
 
-And, conversely, the framework also provides `ObjectLoadedEvent.Noop`; if `loadedLifecycleEvent` attribute is set to this class,
-then no event will be posted.
+And, conversely, the framework also provides `ObjectLoadedEvent.Noop`; if `loadedLifecycleEvent` attribute is set to this class, then no event will be posted.
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_objectType.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_objectType.adoc
index 50f2b6c..3da1e25 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_objectType.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_objectType.adoc
@@ -12,7 +12,7 @@ This can appear in several contexts, including:
 
 * as the value of `Bookmark#getObjectType()` and in the `toString()` value of `Bookmark`
  (see xref:../rgsvc/rgsvc.adoc#_rgsvc_integration-api_BookmarkService[`BookmarkService`])
- ** and thus in the "table-of-two-halves" pattern, as per the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s poly module
+** and thus in the "table-of-two-halves" pattern, as per the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s poly module
 * in the serialization of `OidDto` in the xref:../rgcms/rgcms.adoc#_rgcms_schema-cmd[command] and xref:../rgcms/rgcms.adoc#_rgcms_schema-ixn[interaction] schemas
 * in the URLs of the xref:../ugvro/ugvro.adoc#[RestfulObjects viewer]
 * in the URLs of the xref:../ugvw/ugvw.adoc#[Wicket viewer] (in general and in particular if xref:../ugvw/ugvw.adoc#_ugvw_features_hints-and-copy-url[copying URLs])
@@ -39,9 +39,9 @@ public class Order {
 
 The rules of precedence are:
 
-1. xref:../rgant/rgant.adoc#_rgant-Discriminator[`@Discriminator`]
+1. xref:../rgant/rgant.adoc#_rgant_Discriminator[`@Discriminator`]
 2. `@DomainObject#objectType`, or xref:../rgant/rgant.adoc#_rgant_aaa_deprecated[`@ObjectType`] (deprecated)
-3. xref:../rgant/rgant.adoc#_rgant-PersistenceCapable[`@PersistenceCapable`], if at least the `schema` attribute is defined.  +
+3. xref:../rgant/rgant.adoc#_rgant_PersistenceCapable[`@PersistenceCapable`], if at least the `schema` attribute is defined.
 +
 If both `schema` and `table` are defined, then the value is "`schema.table`".
 If only `schema` is defined, then the value is "`schema.className`".
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_persistedLifecycleEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_persistedLifecycleEvent.adoc
index ce3b0ea..5046ee8 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_persistedLifecycleEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_persistedLifecycleEvent.adoc
@@ -8,9 +8,8 @@
 Whenever a (just created, still transient) domain object has been saved (INSERTed in)to the database, a "persisted" lifecycle
 event is fired.
 
-Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can
-use the event to obtain a reference to the domain object.  The subscriber could then, for example, maintain an
-external datastore.
+Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can use the event to obtain a reference to the domain object.
+The subscriber could then, for example, maintain an external datastore.
 
 [WARNING]
 ====
@@ -27,8 +26,8 @@ public class ToDoItemDto {
 }
 ----
 
-The purpose of the `persistedLifecycleEvent()` attribute is to allows a custom subclass to be emitted instead.  A similar
-attribute is available for other lifecycle events.
+The purpose of the `persistedLifecycleEvent()` attribute is to allows a custom subclass to be emitted instead.
+A similar attribute is available for other lifecycle events.
 
 For example:
 
@@ -51,9 +50,8 @@ The benefit is that subscribers can be more targeted as to the events that they
 
 == Subscribers
 
-Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API
-or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured)
-using the link:http://www.axonframework.org/[Axon Framework] API.  The examples below use the Guava API.
+Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured) using the link:http://www.axonframework.org/[Axon Framework] API.
+The examples below are compatible with both.
 
 Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
 
@@ -61,7 +59,8 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ObjectPersistedEvent ev) {
         if(ev.getSource() instanceof ToDoItem) { ... }
     }
@@ -74,7 +73,8 @@ or can be fine-grained (by subscribing to specific event subtypes):
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ToDoItem.ObjectPersistedEvent ev) {
         ...
     }
@@ -82,10 +82,6 @@ public class SomeSubscriber extends AbstractSubscriber {
 ----
 
 
-[TIP]
-====
-If the AxonFramework is being used, replace `@com.google.common.eventbus.Subscribe` with `@org.axonframework.eventhandling.annotation.EventHandler`.
-====
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_persistingLifecycleEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_persistingLifecycleEvent.adoc
index 9d0b89d..928d55b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_persistingLifecycleEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_persistingLifecycleEvent.adoc
@@ -5,19 +5,16 @@
 :_imagesdir: images/
 
 
-Whenever a (just created, still transient) domain object is about to be saved (INSERTed in)to the database, a "persisting" lifecycle
-event is fired.
+Whenever a (just created, still transient) domain object is about to be saved (INSERTed in)to the database, a "persisting" lifecycle event is fired.
 
-Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can
-use the event to obtain a reference to the domain object.  The subscriber could then, for example, update the object,
-or it could use it maintain an external datastore.  One possible application is to maintain a full-text search database using
-link:https://lucene.apache.org/[Apache Lucene] or similar.
+Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can use the event to obtain a reference to the domain object.
+The subscriber could then, for example, update the object, or it could use it maintain an external datastore.
+One possible application is to maintain a full-text search database using link:https://lucene.apache.org/[Apache Lucene] or similar.
 
 [NOTE]
 ====
-Another use case is to maintain "last updated by"/"last updated at" properties.  While you can roll your own, note that
-the framework provides built-in support for this use case through the
-xref:../rgcms/rgcms.adoc#_rgcms_classes_roles_Timestampable[`Timestampable`] role interface.
+Another use case is to maintain "last updated by"/"last updated at" properties.
+While you can roll your own, note that the framework provides built-in support for this use case through the xref:../rgcms/rgcms.adoc#_rgcms_classes_roles_Timestampable[`Timestampable`] role interface.
 ====
 
 By default the event raised is `ObjectPersistingEvent.Default`. For example:
@@ -30,8 +27,8 @@ public class ToDoItemDto {
 }
 ----
 
-The purpose of the `persistingLifecycleEvent()` attribute is to allows a custom subclass to be emitted instead.  A similar
-attribute is available for other lifecycle events.
+The purpose of the `persistingLifecycleEvent()` attribute is to allows a custom subclass to be emitted instead.
+A similar attribute is available for other lifecycle events.
 
 For example:
 
@@ -54,9 +51,8 @@ The benefit is that subscribers can be more targeted as to the events that they
 
 == Subscribers
 
-Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API
-or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured)
-using the link:http://www.axonframework.org/[Axon Framework] API.  The examples below use the Guava API.
+Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured) using the link:http://www.axonframework.org/[Axon Framework] API.
+The examples below are compatible with both.
 
 Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
 
@@ -77,7 +73,8 @@ or can be fine-grained (by subscribing to specific event subtypes):
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ToDoItem.ObjectPersistingEvent ev) {
         ...
     }
@@ -85,11 +82,6 @@ public class SomeSubscriber extends AbstractSubscriber {
 ----
 
 
-[TIP]
-====
-If the AxonFramework is being used, replace `@com.google.common.eventbus.Subscribe` with `@org.axonframework.eventhandling.annotation.EventHandler`.
-====
-
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_publishing.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_publishing.adoc
index 11ed8ba..7f6833f 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_publishing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_publishing.adoc
@@ -6,12 +6,8 @@
 
 
 
-The `publishing()` attribute determines whether and how a modified object instance is published via the registered
-implementation of a xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`]) or
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`].  This attribute is also supported
-for xref:../rgant/rgant.adoc#_rgant-Action_publishing[actions], where it controls whether action invocations are published as
-events, and for xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`], where it controls whether
-property edits are published as events.
+The `publishing()` attribute determines whether and how a modified object instance is published via the registered implementation of a xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`]) or xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`].
+This attribute is also supported for xref:../rgant/rgant.adoc#_rgant-Action_publishing[actions], where it controls whether action invocations are published as events, and for xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`], where it controls whether property edits are published as events.
 
 A common use case is to notify external "downstream" systems of changes in the state of the Isis application.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_removingLifecycleEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_removingLifecycleEvent.adoc
index 8482838..e39e162 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_removingLifecycleEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_removingLifecycleEvent.adoc
@@ -5,13 +5,11 @@
 :_imagesdir: images/
 
 
-Whenever a (persistent) domain object is about to be removed (DELETEd) from the database, a "removing"
-lifecycle event is fired.
+Whenever a (persistent) domain object is about to be removed (DELETEd) from the database, a "removing" lifecycle event is fired.
 
-Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can
-use the event to obtain a reference to the domain object.  The subscriber could then, for example, could use it
-maintain an external datastore.  One possible application is to maintain a full-text search database
-using link:https://lucene.apache.org/[Apache Lucene] or similar.
+Subscribers subscribe through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and can use the event to obtain a reference to the domain object.
+The subscriber could then, for example, could use it maintain an external datastore.
+One possible application is to maintain a full-text search database using link:https://lucene.apache.org/[Apache Lucene] or similar.
 
 [NOTE]
 ====
@@ -54,9 +52,8 @@ The benefit is that subscribers can be more targeted as to the events that they
 
 == Subscribers
 
-Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API
-or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured)
-using the link:http://www.axonframework.org/[Axon Framework] API.  The examples below use the Guava API.
+Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured) using the link:http://www.axonframework.org/[Axon Framework] API.
+The examples below are compatible with both.
 
 Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
 
@@ -64,7 +61,8 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ObjectRemovingEvent ev) {
         if(ev.getSource() instanceof ToDoItem) { ... }
     }
@@ -77,7 +75,8 @@ or can be fine-grained (by subscribing to specific event subtypes):
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ToDoItem.ObjectRemovingEvent ev) {
         ...
     }
@@ -85,10 +84,6 @@ public class SomeSubscriber extends AbstractSubscriber {
 ----
 
 
-[TIP]
-====
-If the AxonFramework is being used, replace `@com.google.common.eventbus.Subscribe` with `@org.axonframework.eventhandling.annotation.EventHandler`.
-====
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_updatedLifecycleEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_updatedLifecycleEvent.adoc
index 899d5f8..0271fe4 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_updatedLifecycleEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_updatedLifecycleEvent.adoc
@@ -50,9 +50,8 @@ The benefit is that subscribers can be more targeted as to the events that they
 
 == Subscribers
 
-Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API
-or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured)
-using the link:http://www.axonframework.org/[Axon Framework] API.  The examples below use the Guava API.
+Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured) using the link:http://www.axonframework.org/[Axon Framework] API.
+The examples below are compatible with both.
 
 Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
 
@@ -60,7 +59,8 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ObjectUpdatedEvent ev) {
         if(ev.getSource() instanceof ToDoItem) { ... }
     }
@@ -73,7 +73,8 @@ or can be fine-grained (by subscribing to specific event subtypes):
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ToDoItem.ObjectUpdatedEvent ev) {
         ...
     }
@@ -81,10 +82,7 @@ public class SomeSubscriber extends AbstractSubscriber {
 ----
 
 
-[TIP]
-====
-If the AxonFramework is being used, replace `@com.google.common.eventbus.Subscribe` with `@org.axonframework.eventhandling.annotation.EventHandler`.
-====
+
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_updatingLifecycleEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_updatingLifecycleEvent.adoc
index cdd82a0..d2b74dc 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_updatingLifecycleEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-DomainObject_updatingLifecycleEvent.adoc
@@ -54,9 +54,8 @@ The benefit is that subscribers can be more targeted as to the events that they
 
 == Subscribers
 
-Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API
-or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured)
-using the link:http://www.axonframework.org/[Axon Framework] API.  The examples below use the Guava API.
+Subscribers (which must be domain services) subscribe using either the link:https://github.com/google/guava[Guava] API or (if the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] has been appropriately configured) using the link:http://www.axonframework.org/[Axon Framework] API.
+The examples below are compatible with both.
 
 Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
 
@@ -64,7 +63,8 @@ Subscribers can be either coarse-grained (if they subscribe to the top-level eve
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ObjectUpdatingEvent ev) {
         if(ev.getSource() instanceof ToDoItem) { ... }
     }
@@ -77,7 +77,8 @@ or can be fine-grained (by subscribing to specific event subtypes):
 ----
 @DomainService(nature=NatureOfService.DOMAIN)
 public class SomeSubscriber extends AbstractSubscriber {
-    @com.google.common.eventbus.Subscribe
+    @org.axonframework.eventhandling.annotation.EventHandler // if using axon
+    @com.google.common.eventbus.Subscribe                    // if using guava
     public void on(ToDoItem.ObjectUpdatingEvent ev) {
         ...
     }
@@ -85,12 +86,6 @@ public class SomeSubscriber extends AbstractSubscriber {
 ----
 
 
-[TIP]
-====
-If the AxonFramework is being used, replace `@com.google.common.eventbus.Subscribe` with `@org.axonframework.eventhandling.annotation.EventHandler`.
-====
-
-
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-HomePage.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-HomePage.adoc
index aa08e8a..e069443 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-HomePage.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-HomePage.adoc
@@ -24,10 +24,10 @@ public class ToDoAppDashboardService  {
     )
     @HomePage
     public ToDoAppDashboard lookup() {
-        return container.injectServicesInto(new ToDoAppDashboard());
+        return serviceRegistry.injectServicesInto(new ToDoAppDashboard());
     }
     @Inject
-    private DomainObjectContainer container;
+    ServiceRegistry serviceRegistry;
 }
 ----
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Inject.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Inject.adoc
index c994540..d30022c 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Inject.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Inject.adoc
@@ -6,14 +6,16 @@
 
 
 
-Apache Isis automatically injects domain services into other domain services and also into domain objects and view models.  In fact, it also injects domain services into xref:../ugtst/ugtst.adoc#_ugtst_integ-test-support[integration tests] and xref:../ugtst/ugtst.adoc#_ugtst_fixture-scripts[fixture scripts].
+Apache Isis automatically injects domain services into other domain services and also into domain objects and view models.
+In fact, it also injects domain services into xref:../ugtst/ugtst.adoc#_ugtst_integ-test-support[integration tests] and xref:../ugtst/ugtst.adoc#_ugtst_fixture-scripts[fixture scripts].
 
 [NOTE]
 ====
 One omission: Apache Isis (currently) does not inject services into `o.a.i.applib.spec.Specification` instances (as used by xref:../rgant/rgant.adoc#_rgant-Property_mustSatisfy[`@Property#mustSatisfy()`] and xref:../rgant/rgant.adoc#_rgant-Parameter_mustSatisfy[`@Parameter#mustSatisfy()`] annotations.
 ====
 
-Isis supports several syntaxes for injecting domain services.  The simplest uses the `@javax.inject.Inject` annotation on the field, as defined in link:https://jcp.org/en/jsr/detail?id=330[JSR-330].
+Apache Isis supports several syntaxes for injecting domain services.
+The simplest uses the `@javax.inject.Inject` annotation on the field, as defined in link:https://jcp.org/en/jsr/detail?id=330[JSR-330].
 
 For example:
 
@@ -34,7 +36,7 @@ public class Customer {
 
 == Alternative syntaxes
 
-Isis also supports setter-based injection:
+Apache Isis also supports setter-based injection:
 
 [source,java]
 ----
@@ -60,9 +62,9 @@ Generally we recommend using `@javax.inject.Inject`; it involves less code, and
 
 == Injecting collection of services
 
-It can sometimes be useful to have declared multiple implementations of a particular domain service.  For example,
-you may have a module that defines an SPI service, where multiple other modules might provide implementations of that SPI
- (akin to the chain of responsibility pattern).  To support these scenarios, it is possible to annotate a `List` or `Collection`.
+It can sometimes be useful to have declared multiple implementations of a particular domain service.
+For example, you may have a module that defines an SPI service, where multiple other modules might provide implementations of that SPI (akin to the chain of responsibility pattern).
+To support these scenarios, it is possible to annotate a `List` or `Collection`.
 
 For example, suppose that we provide an SPI service to veto the placing of ``Order``s for certain ``Customer``s:
 
@@ -94,8 +96,7 @@ public class Customer {
 
 [NOTE]
 ====
-An alternative and almost equivalent design would be to publish an event using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and implement the domain services as subscribers to
-the event.
+An alternative and almost equivalent design would be to publish an event using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] and implement the domain services as subscribers to the event.
 This alternative design is used in the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s poly module, for example.
 ====
 
@@ -105,51 +106,42 @@ This alternative design is used in the (non-ASF) link:http://platform.incode.org
 
 == Manually injecting services
 
-Isis performs dependency injection when domain entities are recreated.  It will also perform dependency injection if an object is created through the `DomainObjectContainer`.
+Apache Isis performs dependency injection when domain entities are recreated.
+It will also perform dependency injection if an object is created through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryService`] or xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService`].
 
 For example, to create a new (transient) domain object, the idiom is:
 
 [source,java]
 ----
-Customer cust = container.newTransientInstance(Customer.class);  <1>
+Customer cust = repositoryService.instantiate(Customer.class);  <1>
 // initialize state of "cust"
-container.persist(cust);
+repositoryService.persist(cust);
 ----
-<1> where `container` is an instance of xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`].
 
-View models are created similarly:
+View models are created identically:
 
 [source,java]
 ----
-ToDoAppDashboard dashboard = container.newViewModelInstance(ToDoAppDashboard.class);
+ToDoAppDashboard dashboard = repositoryService.instantiate(ToDoAppDashboard.class);
 ----
 
 
-If you prefer, though, you can simply instantiate domain objects using "new" and then inject domain services manually:
+If you prefer, though, you can simply instantiate domain objects using "new" and then inject domain services manually using xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_ServiceRegistry[`ServiceRegistry`]:
 
 
 [source,java]
 ----
 Customer cust = new Customer();
-container.injectServicesInto(cust);
+serviceRegistry.injectServicesInto(cust);
 // initialize state of "cust"
-container.persist(cust);
+repositoryService.persist(cust);
 ----
 
 
-or if you prefer:
-
-[source,java]
-----
-Customer cust = container.injectServicesInto(new Customer());
-// initialize state of "cust"
-container.persist(cust);
-----
-
 
 [NOTE]
 ====
-There is one subtle difference between using `DomainObjectContainer#newTransientInstance(...)` and `DomainObjectContainer#injectServicesInto(...)`, in that with the former Apache Isis will automatically initialize all fields to their default values.
+Note that using either `FactoryService#instantiate(...)` or `RepositoryService#instantiate(...)` will also automatically initialize all fields to their default values, and will also fire a "created" lifecycle event.
 
-This isn't a particular useful feature (and indeed can sometimes be rather confusing) so you may well wish to standardize on using `injectServicesInto(...)` throughout.
+Neither of these are particularly useful (and indeed can sometimes be rather confusing) so you may well wish to standardize on using `injectServicesInto(...)` throughout.
 ====
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-MinLength.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-MinLength.adoc
index d38ad65..3a1ff72 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-MinLength.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-MinLength.adoc
@@ -13,8 +13,7 @@ For example:
 [source,java]
 ----
 public ToDoItem add(
-        @TypicalLength(20)
-        final ToDoItem toDoItem) {
+    final ToDoItem toDoItem) {
     getDependencies().add(toDoItem);
     return this;
 }
@@ -29,4 +28,3 @@ public List<ToDoItem> autoComplete0Add(
 ----
 
 
-The `@Parameter(minLength=...)`e can also be used (even though strictly speaking the search argument is not a parameter of the action).
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_describedAs.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_describedAs.adoc
index a25df4a..ea731b7 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_describedAs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ParameterLayout_describedAs.adoc
@@ -7,15 +7,9 @@
 
 The `describedAs()` attribute is used to provide a short description of the action parameter to the user.  In the xref:../ugvw/ugvw.adoc#[Wicket viewer] it is displayed as a 'tool tip'.  The `describedAs()` attribute can also be specified for xref:../rgant/rgant.adoc#_rgant-CollectionLayout_describedAs[collections],  xref:../rgant/rgant.adoc#_rgant-PropertyLayout_describedAs[properties], xref:../rgant/rgant.adoc#_rgant-ActionLayout_describedAs[actions], xref:../rgant/rgant.adoc#_rgant-Do [...]
 
-Descriptions may be provided for objects, members (properties,
-collections and actions), and for individual parameters within an action
-method. `@DescribedAs` therefore works in a very similar manner to
-`@Named` <!--(see ?)-->.
+Descriptions may be provided for objects, members (properties, collections and actions), and for individual parameters within an action method.
 
-
-To provide a description for an individual action parameter, use the
-`@DescribedAs` annotation in-line i.e. immediately before the parameter
-declaration.
+To provide a description for an individual action parameter, use the `describedAs` attribute in-line i.e. immediately before the parameter declaration.
 
 For example:
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PostConstruct.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PostConstruct.adoc
index 6717df7..b8db0d3 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PostConstruct.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PostConstruct.adoc
@@ -21,7 +21,8 @@ public void init() { ... }     <2>
 <1> It is not necessary to annotate the method with xref:../rgant/rgant.adoc#_rgant-Programmatic[`@Programmatic`]; it will be automatically excluded from the Apache Isis metamodel.
 <2> the method can have any name, but must have `public` visibility.
 
-In the form shown above the method accepts no arguments.  Alternatively - for domain services only, not view models - the method can accept a parameter of type `Map<String,String>`:
+In the form shown above the method accepts no arguments.
+Alternatively - for domain services only, not view models - the method can accept a parameter of type `Map<String,String>`:
 
 [source,java]
 ----
@@ -29,40 +30,15 @@ In the form shown above the method accepts no arguments.  Alternatively - for do
 @Programmatic
 public void init(Map<String,String> properties) { ... }
 ----
-Isis uses argument to pass in the configuration properties read from all xref:../rgcfg/rgcfg.adoc#_rgcfg_configuration-files[configuration files]:
+Apache Isis uses argument to pass in the configuration properties read from all xref:../rgcfg/rgcfg.adoc#_rgcfg_configuration-files[configuration files]:
 
 [TIP]
 ====
-Alternatively, you could inject xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`] into the service and read configuration properties using `DomainObjectContainer#getProperty(...)` and related methods.  Note that when using this latter API only those configuration properties prefixes `application.` key are provided.
+Alternatively, you could inject xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_ConfigurationService[`ConfigurationService`] into the service and read configuration properties using `ConfigurationService#getProperty(...)` and related methods.
+However, be aware when using this latter API that only those configuration properties keys with an `application.` prefix are provided.
 ====
 
-A common use case is for domain services that interact with the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`].  For example:
-
-[source,java]
-----
-@DomainService(nature=NatureOfService.DOMAIN)
-public class MySubscribingService {
-    @PostConstruct
-    public void postConstruct() {
-        eventBusService.register(this);
-    }
-    @PreDestroy
-    public void preDestroy() {
-        eventBusService.unregister(this);
-    }
-    ...
-    @javax.inject.Inject
-    EventBusService eventBusService;
-}
-----
-
-[TIP]
-====
-In this particular use case, it is generally simpler to just subclass from xref:../rgcms/rgcms.adoc#_rgcms_classes_super_AbstractSubscriber[`AbstractSubscriber`].
-====
-
-
-Other use cases include obtaining connections to external datasources, eg subscribing to an ActiveMQ router, say, or initializing/cleaning up a background scheduler such as Quartz.
+Use cases include obtaining connections to external datasources, eg subscribing to an ActiveMQ router, say, or initializing/cleaning up a background scheduler such as Quartz.
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PrimaryKey.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PrimaryKey.adoc
index 064c8dc..cd7e51b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PrimaryKey.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PrimaryKey.adoc
@@ -12,8 +12,10 @@ Apache Isis also uses this annotation in a very minimal way: to ensure that the
 
 [NOTE]
 ====
-Isis parses the `@NotPersistent` annotation from the Java source code; it does not query the JDO metamodel.  This means that it the `@NotPersistent` annotation must be used rather than the equivalent `<field>` link:http://www.datanucleus.org/products/accessplatform_4_0/jdo/application_identity.html[XML metadata].
+Apache Isis parses the `@NotPersistent` annotation from the Java source code; it does not query the JDO metamodel.
+This means that it the `@NotPersistent` annotation must be used rather than the equivalent `<field>` link:http://www.datanucleus.org/products/accessplatform_4_0/jdo/application_identity.html[XML metadata].
 
-Moreover, while JDO/DataNucleus will recognize annotations on either the field or the getter method, Apache Isis (currently) only inspects the getter method.  Therefore ensure that the annotation is placed there.
+Moreover, while JDO/DataNucleus will recognize annotations on either the field or the getter method, Apache Isis (currently) only inspects the getter method.
+Therefore ensure that the annotation is placed there.
 ====
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Programmatic.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Programmatic.adoc
index a41d364..cf60710 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Programmatic.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Programmatic.adoc
@@ -22,6 +22,6 @@ public class Customer implements Comparable<Customer> {
 ----
 
 
-Note that `@Programmatic` does not simply imply `@Hidden`; it actually means that the class member will not be part of the Apache Isis metamodel.
+Note that `@Programmatic` is not the same as `@Action(hidden=Where.EVERYWHERE)` or `@Property(hidden=Where.EVERYWHERE)` etc; it actually means that the class member will not be part of the Apache Isis metamodel.
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property.adoc
index 2fb9f1a..1dd8755 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property.adoc
@@ -132,7 +132,6 @@ public class Customer {
     @javax.jdo.annotations.Column(allowsNull="true")                // <2>
     @Property(
         maxLength=30,
-        minLength=5,
         mustSatisfy=EmailSpecification.class,
         regexPattern = "(\\w+\\.)*\\w+@(\\w+\\.)+[A-Za-z]+",
         regexPatternFlags=Pattern.CASE_INSENSITIVE
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc
index 410f7ea..1e65f56 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-PropertyLayout_describedAs.adoc
@@ -13,7 +13,7 @@ For example:
 [source,java]
 ----
 public class Customer {
-    @DescribedAs("The name that the customer has indicated that they wish to be " +
+    @PropertyLayout(describedAs="The name that the customer has indicated that they wish to be " +
                  "addressed as (e.g. Johnny rather than Jonathan)")
     public String getFirstName() { ... }
 }
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc
index 2740d17..e565f7e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_editing.adoc
@@ -11,13 +11,13 @@ The related `editingDisabledReason()` attribute specifies the a hard-coded reaso
 
 Whether a property is enabled or disabled depends upon these factors:
 
-* whether the domain object has been configured as immutable through the xref:../rgant/rgant.adoc#_rgant-DomainObject_editing[`@DomainObject#editing()`] attribute
+* whether the domain object has been configured as immutable through the xref:../rgant/rgant.adoc#\_rgant-DomainObject_editing[`@DomainObject#editing()`] attribute
 
-* else (that is, if the domain object's editability is specified as being `AS_CONFIGURED`), then the value of the xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.objects.editing`.  If set to `false`, then the object's properties (and collections) are _not_ editable
+* else (that is, if the domain object's editability is specified as being `AS_CONFIGURED`), then the value of the xref:../rgcfg/rgcfg.adoc#\_rgcfg_configuring-core[configuration property] `isis.objects.editing`.  If set to `false`, then the object's properties (and collections) are __not__ editable
 
 * else, then the value of the `@Property(editing=...)` attribute itself
 
-* else, the result of invoking any supporting xref:../rgcms/rgcms.adoc#_rgcms_methods_prefixes_disable[`disable...()`] supporting methods
+* else, the result of invoking any supporting xref:../rgcms/rgcms.adoc#\_rgcms_methods_prefixes_disable[`disable...()`] supporting methods
 
 
 Thus, to make a property read-only even if the object would otherwise be editable, use:
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_publishing.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_publishing.adoc
index 6cbf9fa..5f9506b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_publishing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Property_publishing.adoc
@@ -7,12 +7,8 @@
 
 
 
-The `publishing()` attribute determines whether and how a property edit is published via the registered implementation
-of a xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`]) or
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`].  This attribute is also supported
-for xref:../rgant/rgant.adoc#_rgant-DomainObject_publishing[domain objects], where it controls whether changed objects are
-published as events, and for xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`], where it controls
-whether property edits are published as events.
+The `publishing()` attribute determines whether and how a property edit is published via the registered implementation of a xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`]) or xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`].
+This attribute is also supported for xref:../rgant/rgant.adoc#_rgant-DomainObject_publishing[domain objects], where it controls whether changed objects are published as events, and for xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`], where it controls whether property edits are published as events.
 
 A common use case is to notify external "downstream" systems of changes in the state of the Isis application.
 The default value for the attribute is `AS_CONFIGURED`, meaning that the
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Title.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Title.adoc
index 0abf793..a72e824 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Title.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-Title.adoc
@@ -31,12 +31,9 @@ It is also possible to annotate reference properties; in this case the
 title will return the title of the referenced object (rather than, say,
 its string representation).
 
-An additional convention for `@Title` properties is that they are hidden
-in tables (in other words, it implies `@Hidden(where=Where.ALL_TABLES)`.
-For viewers that support this annotation (for example, the Wicket
-viewer), this convention excludes any properties whose value is already
-present in the title column. This convention can be overridden using
-`@Hidden(where=Where.NOWHERE)`.
+An additional convention for `@Title` properties is that they are hidden in tables (in other words, it implies `@Property(where=Where.ALL_TABLES)`.
+For viewers that support this annotation (for example, the Wicket viewer), this convention excludes any properties whose value is already present in the title column.
+This convention can be overridden using `@Property(where=Where.NOWHERE)`.
 
 == Lombok support
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModel_objectType.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModel_objectType.adoc
index 1b02e7e..c2b6263 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModel_objectType.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant-ViewModel_objectType.adoc
@@ -39,9 +39,9 @@ public class Order {
 
 The rules of precedence are:
 
-1. xref:../rgant/rgant.adoc#_rgant-Discriminator[`@Discriminator`]
+1. xref:../rgant/rgant.adoc#_rgant_Discriminator[`@Discriminator`]
 2. `@DomainObject#objectType`, or xref:../rgant/rgant.adoc#_rgant-ViewModel_objectType[`@ViewModel#objectType()`], or xref:../rgant/rgant.adoc#_rgant_aaa_deprecated[`@ObjectType`] (deprecated)
-3. xref:../rgant/rgant.adoc#_rgant-PersistenceCapable[`@PersistenceCapable`], if at least the `schema` attribute is defined.  +
+3. xref:../rgant/rgant.adoc#_rgant_PersistenceCapable[`@PersistenceCapable`], if at least the `schema` attribute is defined.
 +
 If both `schema` and `table` are defined, then the value is "`schema.table`".
 If only `schema` is defined, then the value is "`schema.className`".
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc
index 2b8ea74..806fd46 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_jdo.adoc
@@ -56,13 +56,13 @@ Note that the discriminator overrides the object type that may otherwise be infe
 `PersistenceCapable`]
 |Used to build Apache Isis' own internal identifier for objects. +
 
-If the `schema()` attribute is specified (and if xref:../rgant/rgant.adoc#_rgant-Discriminator[`@Discriminator`] _hasn't_ been specified), is also used to derive the object type, as used in `Bookmark`s, URLs for xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] and elsewhere.
+If the `schema()` attribute is specified (and if xref:../rgant/rgant.adoc#\_rgant-Discriminator[`@Discriminator`] __hasn't__ been specified), is also used to derive the object type, as used in `Bookmark`s, URLs for xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] and elsewhere.
 
 |Domain / persistence
 |Class
 
 
-|xref:../rgant/rgant.adoc#_rgant-PrimaryKey[`@javax.jdo.annotations.` +
+|xref:../rgant/rgant.adoc#\_rgant-PrimaryKey[`@javax.jdo.annotations.` +
 `PrimaryKey`]
 |Used to ensure Apache Isis does not overwrite application-defined primary keys, and to ensure is read-only in the UI.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/rgant.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/rgant.adoc
index 59df0de..f80ddfe 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/rgant.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/rgant.adoc
@@ -56,7 +56,7 @@ To give just a few examples of annotations supported by Apache Isis:
 
 Some annotations act as UI hints, for example:
 
-* if a collection should be rendered "open" rather than collapsed, it can be annotated using `@CollectionLayout(render=RenderType.EAGERLY)`
+* if a collection should be rendered "open" rather than collapsed, it can be annotated using `@CollectionLayout(defaultView="table")`
 * if an action has a tooltip, it can be annotated using `@ActionLayout(describedAs=...)`
 * if a domain object is bookmarkable, it can be annotated using `@DomainObjectLayout(bookmarking=BookmarkPolicy.AS_ROOT`).
 
@@ -82,8 +82,8 @@ include::_rgant-Inject.adoc[leveloffset=+1]
 include::_rgant-MemberGroupLayout.adoc[leveloffset=+1]
 include::_rgant-MemberOrder.adoc[leveloffset=+1]
 include::_rgant-Mixin.adoc[leveloffset=+1]
-include::_rgant-Nullable.adoc[leveloffset=+1]
 include::_rgant-NotPersistent.adoc[leveloffset=+1]
+include::_rgant-Nullable.adoc[leveloffset=+1]
 include::_rgant-MinLength.adoc[leveloffset=+1]
 include::_rgant-Parameter.adoc[leveloffset=+1]
 include::_rgant-ParameterLayout.adoc[leveloffset=+1]
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
index 13714e6..f4fadc3 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcfg/_rgcfg_configuring-core.adoc
@@ -479,14 +479,14 @@ To be safe, we recommend that you first run your application using `isis.reflect
 |`isis.reflector.facet.` +
 `cssClass.patterns`
 |regex:css1, regex2:css2,...
-|Comma separated list of key:value pairs, where the key is a regex matching action names (eg `delete.*`) and the value is a link:http://getbootstrap.com/css/[Bootstrap] CSS button class (eg `btn-warning) to be applied (as per `@CssClass()`) to all action members matching the regex. +
+|Comma separated list of key:value pairs, where the key is a regex matching action names (eg `delete.*`) and the value is a link:http://getbootstrap.com/css/[Bootstrap] CSS button class (eg `btn-warning) to be applied (as per `@PropertyLayout(cssClass=...)` etc) to all action members matching the regex. +
 
 See xref:../ugfun/ugfun.adoc#_ugfun_ui-hints_action-icons-and-css[UI hints] for more details.
 
 |`isis.reflector.facet.` +
 `cssClassFa.patterns`
 |regex:fa-icon,regex2:fa-icon2,...
-|Comma separated list of key:value pairs, where the key is a regex matching action names (eg `create.*`) and the value is a link:http://fortawesome.github.io/Font-Awesome/icons/[font-awesome] icon name (eg `fa-plus`) to be applied (as per `@CssClassFa()`) to all action members matching the regex. +
+|Comma separated list of key:value pairs, where the key is a regex matching action names (eg `create.*`) and the value is a link:http://fortawesome.github.io/Font-Awesome/icons/[font-awesome] icon name (eg `fa-plus`) to be applied (as per `@Propertyayout(cssClassFa=...)` etc) to all action members matching the regex. +
 
 See xref:../ugfun/ugfun.adoc#_ugfun_ui-hints_action-icons-and-css[UI hints] for more details.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectCreatedEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectCreatedEvent.adoc
index 402f8a2..24dbeef 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectCreatedEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectCreatedEvent.adoc
@@ -6,13 +6,9 @@
 
 
 
-Subclass of xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent_AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast when an object is first instantiated using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer_object-creation-api[`DomainObjectContainer`]'s
-`#newTransientInstance(...)` method.
+Subclass of xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent_AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast when an object is first instantiated using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryServuce`]'s `#instantiate(...)` method.
+
+`ObjectCreatedEvent.Default` is the implementation that is used by default, but this can be overridden using xref:../rgant/rgant.adoc#_rgant_DomainObject_createdLifecycleEvent[`@DomainObject#createdLifecycleEvent()`].
 
-`ObjectCreatedEvent.Default` is the concrete implementation that is used.
 
-[NOTE]
-====
-In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
-====
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectPersistedEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectPersistedEvent.adoc
index 0d902c4..25c845d 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectPersistedEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectPersistedEvent.adoc
@@ -5,13 +5,7 @@
 :_imagesdir: images/
 
 
-Subclass of xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent_AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast when an object is first saved (inserted) into the database using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
-`#persist(...)` method.
+Subclass of xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent_AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast when an object is first saved (inserted) into the database using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService`]'s `#persist(...)` method.
 
 
-`ObjectPersistedEvent.Default` is the concrete implementation that is used.
-
-[NOTE]
-====
-In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
-====
+`ObjectPersistedEvent.Default` is the implementation that is used by default, but this can be overridden using xref:../rgant/rgant.adoc#_rgant_DomainObject_persistedLifecycleEvent[`@DomainObject#persistedLifecycleEvent()`].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectPersistingEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectPersistingEvent.adoc
index 8788715..3f09109 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectPersistingEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectPersistingEvent.adoc
@@ -5,15 +5,8 @@
 :_imagesdir: images/
 
 
-Subclass of xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent_AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast when an object is about to be saved (inserted) into the database using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
-`#persist(...)` method.
+Subclass of xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent_AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast when an object is about to be saved (inserted) into the database using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService`]'s `#persist(...)` method.
 
 
-`ObjectPersistingEvent.Default` is the concrete implementation that is used.
-
-[NOTE]
-====
-In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
-====
-
+`ObjectPersistingEvent.Default` is the implementation that is used by default, but this can be overridden using xref:../rgant/rgant.adoc#_rgant_DomainObject_persistingLifecycleEvent[`@DomainObject#persistingLifecycleEvent()`].
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectRemovingEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectRemovingEvent.adoc
index 8449260..fbd5a13 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectRemovingEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectRemovingEvent.adoc
@@ -5,14 +5,8 @@
 :_imagesdir: images/
 
 
-Subclass of xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent_AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast when an object is about to be deleted from the database using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s
-`#remove(...)` method.
+Subclass of xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent_AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast when an object is about to be deleted from the database using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService`]'s `#remove(...)` method.
 
 
-`ObjectRemovingEvent.Default` is the concrete implementation that is used.
-
-[NOTE]
-====
-In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
-====
+`ObjectRemovingEvent.Default` is the implementation that is used by default, but this can be overridden using xref:../rgant/rgant.adoc#_rgant_DomainObject_removingLifecycleEvent[`@DomainObject#removingLifecycleEvent()`].
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectUpdatedEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectUpdatedEvent.adoc
index dc91cbf..8fd1759 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectUpdatedEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectUpdatedEvent.adoc
@@ -7,12 +7,7 @@
 
 
 Subclass of xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent_AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast when an object has just been updated in the database.
-This is done either explicitly when the current transaction is flushed using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s `#flush(...)` method, else is done implicitly when the transaction commits at the end of the user request.
+This is done either explicitly when the current transaction is flushed using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService`]'s `#flush(...)` method, else is done implicitly when the transaction commits at the end of the user request.
 
-`ObjectUpdatedEvent.Default` is the concrete implementation that is used.
-
-[NOTE]
-====
-In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
-====
+`ObjectUpdatedEvent.Default` is the implementation that is used by default, but this can be overridden using xref:../rgant/rgant.adoc#_rgant_DomainObject_updatedLifecycleEvent[`@DomainObject#updatedLifecycleEvent()`].
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectUpdatingEvent.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectUpdatingEvent.adoc
index 2d46dba..ed59756 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectUpdatingEvent.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_lifecycleevent_ObjectUpdatingEvent.adoc
@@ -7,13 +7,7 @@
 
 
 Subclass of xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent_AbstractLifecycleEvent[`AbstractLifecycleEvent`], broadcast when an object is about to be updated in the database.
-This is done either explicitly when the current transaction is flushed using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer_object-persistence-api[`DomainObjectContainer`]'s `#flush(...)` method, else is done implicitly when the transaction commits at the end of the user request.
+This is done either explicitly when the current transaction is flushed using the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService`]'s `#flush(...)` method, else is done implicitly when the transaction commits at the end of the user request.
 
 
-`ObjectUpdatingEvent.Default` is the concrete implementation that is used.
-
-[NOTE]
-====
-In the future this may be generalized to allow arbitrary subclasses to be broadcast, see ISIS-803.
-====
-
+`ObjectUpdatingEvent.Default` is the implementation that is used by default, but this can be overridden using xref:../rgant/rgant.adoc#_rgant_DomainObject_updatingLifecycleEvent[`@DomainObject#updatingLifecycleEvent()`].
\ No newline at end of file
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super.adoc
index e8e231c..e55ae1b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super.adoc
@@ -83,7 +83,7 @@ Impl'n (g: a:)
 |``o.a.i.core`` +
 ``isis-core-applib``
 |(abstract class). +
-`FixtureScriptsDefault` is a default implementation that is used when the alternative xref:../rgsvc/rgsvc.adoc#_rgsvc_api_FixtureScriptsSpecificationProvider[`FixtureScriptsSpecificationProvider`] is provided
+`FixtureScriptsDefault` is a default implementation that is used when the alternative xref:../rgsvc/rgsvc.adoc#_rgsvc_testing_FixtureScriptsSpecificationProvider[`FixtureScriptsSpecificationProvider`] is provided
   (and no other implementation of `FixtureScripts` was found).
 |depends on: +
 `ClassDiscoveryService`
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_AbstractService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_AbstractService.adoc
index 85bb95a..9d1c35e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_AbstractService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_AbstractService.adoc
@@ -4,6 +4,7 @@
 :_basedir: ../../
 :_imagesdir: images/
 
-This class extends xref:../rgcms/rgcms.adoc#_rgcms_classes_super_AbstractContainedObject[`AbstractContainedObject`], adding in an implementation of `getId()` based upon the classes name.
+This class provides an implementation of the optional `getId()` method for domain services, based upon the classes name.
 
-In practice there is little to gain from subclassing; simply inject xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`] for broadly equivalent functionality.
+In practice there is little to gain from subclassing.
+Instead annotate with xref:../rgant/rgant.adoc#_rgant_DomainService[`@DomainService`] and specify its xref:../rgant/rgant.adoc#_rgant_DomainService_objectType[`#objectType()`]
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_AbstractViewModel.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_AbstractViewModel.adoc
index 5655d9f..e439465 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_AbstractViewModel.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_AbstractViewModel.adoc
@@ -11,6 +11,6 @@ In and of itself it provides no new behaviour.
 
 [TIP]
 ====
-As an alternative, consider simply annotating the view model class with {@link org.apache.isis.applib.annotation.ViewModel}.
+As an alternative, consider simply annotating the view model class with the {@link org.apache.isis.applib.annotation.ViewModel} annotation.
 ====
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_FixtureScript.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_FixtureScript.adoc
index 9ff7a49..bdef596 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_FixtureScript.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_classes_super_FixtureScript.adoc
@@ -14,8 +14,7 @@ The primary method that subclasses must implement is:
 protected abstract void execute(final ExecutionContext executionContext);
 ----
 
-In this method the fixture script can in theory do anything, but in practice it is recommended that it uses injected
-domain services to set up data.
+In this method the fixture script can in theory do anything, but in practice it is recommended that it uses injected domain services to set up data.
 The provided `ExecutionContext` is used to invoke child fixture scripts, and alsocan be used to store references to any created objects (so that the calling test can access these objects/so that they are rendered in the view model).
 
 See the see the xref:../ugtst/ugtst.adoc#_ugtst_fixture-scripts[user guide's testing chapter] for further discussion on the use of fixture scripts, in particular xref:../ugtst/ugtst.adoc#_ugtst_fixture-scripts_api-and-usage[fixture scripts' API and usage].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_lifecycle.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_lifecycle.adoc
index 82d8235..7739e7e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_lifecycle.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_lifecycle.adoc
@@ -7,19 +7,16 @@
 
 
 
-The lifecycle callback methods notify a domain entity about its interaction within the persistence lifecycle.  For example, the entity is notified immediately prior to being persisted, or when it is about to be updated.
+The lifecycle callback methods notify a domain entity about its interaction within the persistence lifecycle.
+For example, the entity is notified immediately prior to being persisted, or when it is about to be updated.
 
 [WARNING]
 ====
-Note that these callbacks are fired by Apache Isis rather than JDO.  In the future we may deprecate them because there are better mechanisms available using listeners/subscribers:
-
-* in Isis 1.9.0 and earlier, you may therefore want to consider using the JDO API directly to set up a lifecycle
-listener; see xref:../rgcms/rgcms.adoc#_rgcms_methods_lifecycle_jdo-api[here] for further discussion.
-
-* alternatively, you can use a subscriber for the xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent[lifecycle event]s fired in Isis.
+Note that these callbacks are fired by Apache Isis rather than JDO.
+In the future we may deprecate them because there are better mechanisms available using a subscriber for the xref:../rgcms/rgcms.adoc#_rgcms_classes_lifecycleevent[lifecycle event]s.
 ====
 
-The lifecycle callback methods supported by Isis are:
+The lifecycle callback methods supported by Apache Isis are:
 
 .Lifecycle methods (partial support)
 [cols="1,4a", options="header"]
@@ -29,7 +26,7 @@ The lifecycle callback methods supported by Isis are:
 |Description
 
 |xref:../rgcms/rgcms.adoc#_rgcms_methods_lifecycle_created[`created()`]
-|called when an object has just been created using xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`newTransientInstance()`]
+|called when an object has just been created using xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryService#instantiate(..)`] or xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService#instantiate(...)`]
 
 |xref:../rgcms/rgcms.adoc#_rgcms_methods_lifecycle_loaded[`loaded()`]
 |called when a (persistent) object has just been loaded from the object store.
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_lifecycle_created.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_lifecycle_created.adoc
index 8edafb6..b4dfd26 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_lifecycle_created.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_lifecycle_created.adoc
@@ -5,7 +5,7 @@
 :_imagesdir: images/
 
 
-The `created()` lifecycle callback method is called when an object has just been created using xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`newTransientInstance()`]
+The `created()` lifecycle callback method is called when an object has just been created using xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService#instantiate(...)`] or xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryService#instantiate(...)`]
 
 
 [TIP]
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_prefixes_default.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_prefixes_default.adoc
index ff06a8d..145d4fa 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_prefixes_default.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_prefixes_default.adoc
@@ -6,9 +6,12 @@
 
 
 
-The `default...()` supporting method is called for action parameters to return the initial argument value.  This may be some sensible default (eg today's date, or 0 or 1), or -- for an action that is modifying the state of an object -- might default to the current value of a corresponding property.
+The `default...()` supporting method is called for action parameters to return the initial argument value.
+This may be some sensible default (eg today's date, or 0 or 1), or -- for an action that is modifying the state of an object -- might default to the current value of a corresponding property.
 
-The method is _also_ called for properties in the case when an object is newly instantiated using xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer#newTransientInstance(...)`].  This is a much less common use case.  If a default is not specified then properties are initialized to a default based on their type (eg 0 or `false`).
+The method is _also_ called for properties in the case when an object is newly instantiated using xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService#instantiate(...)`] or xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryService#instantiate(...)`].
+This is a much less common use case.
+If a default is not specified then properties are initialized to a default based on their type (eg 0 or `false`).
 
 The signature of the supporting method depends on whether it is for an action parameter or a property.
 
@@ -58,7 +61,8 @@ public class ShoppingCartItem {
 
 
 
-Defaults are also supported (of course) for xref:../ugfun/ugfun.adoc#_ugfun_how-tos_contributed-members[contributed actions].  For example, here is a contributed action for updating category/subcategory of the (non-ASF) http://github.com/isisaddons/isis-app-todoapp[Isis addons' todoapp]:
+Defaults are also supported (of course) for xref:../ugfun/ugfun.adoc#_ugfun_how-tos_contributed-members[contributed actions].
+For example, here is a contributed action for updating category/subcategory of the (non-ASF) http://github.com/isisaddons/isis-app-todoapp[Isis addons' todoapp]:
 
 [source,java]
 ----
@@ -123,7 +127,9 @@ public class ShoppingCartItem {
 
 There are, in fact, two other ways to set properties of a newly instantiated object to default values.
 
-The first is to use the xref:../rgcms/rgcms.adoc#_rgcms_methods_lifecycle_created[`created()`] callback, called by the framework when xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer#newTransientInstance(...)`] is called.  This method is called after any dependencies have been injected into the service.
+The first is to use the xref:../rgcms/rgcms.adoc#_rgcms_methods_lifecycle_created[`created()`] callback, called by the framework when xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService#instantiate(...)`] or xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryService#instantiate(...)`] is called.
+This method is called after any services have been injected into the domain object.
 
-The second is more straightforward: simply initialize properties in the constructor.  However, this cannot use any injected services as they will not have been initialized.
+The second is more straightforward: simply initialize properties in the constructor.
+However, this cannot use any injected services as they will not have been initialized.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_reserved_disable.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_reserved_disable.adoc
index 5a65cb3..2796ce3 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_reserved_disable.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_methods_reserved_disable.adoc
@@ -38,7 +38,9 @@ See also the similar methods to xref:../rgcms/rgcms.adoc#_rgcms_methods_reserved
 
 An alternative design -- and one that could be easily argued is actually more flexible -- is to leverage domain events with vetoing subscribers.
 
-With this approach we define, for a given domain class, a base `PropertyDomainEvent`, `CollectionDomainEvent` and `ActionDomainEvent`.  A good pattern is to make these nested static classes.  For example:
+With this approach we define, for a given domain class, a base `PropertyDomainEvent`, `CollectionDomainEvent` and `ActionDomainEvent`.
+A good pattern is to make these nested static classes.
+For example:
 
 [source,java]
 ----
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_schema-common.adoc b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_schema-common.adoc
index 1bda81c..b5c8175 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_schema-common.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgcms/_rgcms_schema-common.adoc
@@ -158,9 +158,8 @@ The common schema also defines two types representing values: the `valueDto` com
 Used for the return value of action invocations, and for the new value in property edits.
 
 
-These type definitions are just building blocks, also used within the xref:../rgcms/rgcms.adoc#_rgcms_schema-aim[action iInvocation memento] schema.
-The first, `valueDto` is The second, `valueType`, enumerates the different types of vales, eg of a
-formal parameter to an action.
+These type definitions are just building blocks.
+The first, `valueDto` is The second, `valueType`, enumerates the different types of vales, eg of a formal parameter to an action.
 
 
 [IMPORTANT]
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_AuditingServiceInternal.adoc b/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_AuditingServiceInternal.adoc
index ca025c3..1ad0768 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_AuditingServiceInternal.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_AuditingServiceInternal.adoc
@@ -5,11 +5,8 @@
 :_imagesdir: images/
 
 
-The (internal) `AuditingServiceInternal` domain service acts as an internal facade to any
-configured xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] and
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`] services.  It is responsible for obtaining the details
-of all changes to domain objects within an interaction, and then to call the configured `AuditingService` to actually
-create audit entries of those changes.
+The (internal) `AuditingServiceInternal` domain service acts as an internal facade to any configured xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] and xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`] services.
+It is responsible for obtaining the details of all changes to domain objects within an interaction, and then to call the configured `AuditingService` to actually create audit entries of those changes.
 
 [NOTE]
 ====
@@ -30,9 +27,7 @@ public class AuditingServiceInternal {
     public void audit();                    // <2>
 }
 ----
-<1> minor performance optimization as to whether any auditing services are actually enabled; checks to see if
-any xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] has been configured, also if any
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditService`] are enabled.
+<1> minor performance optimization as to whether any auditing services are actually enabled; checks to see if any xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] has been configured, also if any xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditService`] are enabled.
 <2> uses the xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_ChangedObjectsServiceInternal[`ChangedObjectsServiceInternal`] to obtain details of the changed properties, then call the configured xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`].
 
 The service implementation is `o.a.i.c.r.s.auditing.AuditingServiceInternal`.
@@ -41,10 +36,7 @@ The service implementation is `o.a.i.c.r.s.auditing.AuditingServiceInternal`.
 
 == Registering the Service
 
-Assuming that the `configuration-and-annotation` services installer is configured (implicit if using the
-`AppManifest` to xref:../rgcms/rgcms.adoc#_rgcms_classes_AppManifest-bootstrapping[bootstrap the app]) then Apache Isis' default
-implementation of `AuditingServiceInternal` class is automatically registered (it is annotated with `@DomainService`)
-so no further configuration is required.
+Apache Isis' default implementation of `AuditingServiceInternal` class is automatically registered (it is annotated with `@DomainService`) so no further configuration is required.
 
 
 == Related Classes
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_ChangedObjectsServiceInternal.adoc b/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_ChangedObjectsServiceInternal.adoc
index 660e6d0..71a60fe 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_ChangedObjectsServiceInternal.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_ChangedObjectsServiceInternal.adoc
@@ -5,11 +5,8 @@
 :_imagesdir: images/
 
 
-The `ChangedObjectsServiceInternal` class is an (internal) request-scoped domain service that is
-responsible for collecting the details of all changes to domain objects within an interaction.  This is then used by
-various other  (internal) domain services, notably
-xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_AuditingServiceInternal[`AuditingServiceInternal`] and
-xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_PublishingServiceInternal[`PublishingServiceInternal`].
+The `ChangedObjectsServiceInternal` class is an (internal) request-scoped domain service that is responsible for collecting the details of all changes to domain objects within an interaction.
+This is then used by various other  (internal) domain services, notably xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_AuditingServiceInternal[`AuditingServiceInternal`] and xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_PublishingServiceInternal[`PublishingServiceInternal`].
 
 
 
@@ -55,15 +52,10 @@ The service implementation is `o.a.i.c.r.s.changes.ChangedObjectsServiceInternal
 
 == Registering the Service
 
-Assuming that the `configuration-and-annotation` services installer is configured (implicit if using the
-`AppManifest` to xref:../rgcms/rgcms.adoc#_rgcms_classes_AppManifest-bootstrapping[bootstrap the app]) then Apache Isis' default
-implementation of `ChangedObjectsServiceInternal` class is automatically registered (it is annotated with `@DomainService`)
-so no further configuration is required.
+Apache Isis' default implementation of `ChangedObjectsServiceInternal` class is automatically registered (it is annotated with `@DomainService`) so no further configuration is required.
 
 
 
 == Related Classes
 
-Both the xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_AuditingServiceInternal[`AuditingServiceInternal`] and
-xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_PublishingServiceInternal[`PublishingServiceInternal`] (internal) domain services query
-this object.
+Both the xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_AuditingServiceInternal[`AuditingServiceInternal`] and xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_PublishingServiceInternal[`PublishingServiceInternal`] (internal) domain services query this object.
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_PublishingServiceInternal.adoc b/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_PublishingServiceInternal.adoc
index fe1266b..c67f5b1 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_PublishingServiceInternal.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_persistence-layer_PublishingServiceInternal.adoc
@@ -5,18 +5,11 @@
 :_imagesdir: images/
 
 
-The (internal) `PublishingServiceInternal` domain service acts as an internal facade to any
-configured xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] or (deprecated)
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`] domain services.
+The (internal) `PublishingServiceInternal` domain service acts as an internal facade to any configured xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] or (deprecated) xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`] domain services.
 
 For published action invocations/ property edits, it provides an API for those member executions to call.
 
-For published objects, it provides an API for the framework to call at the end of the interaction; it obtains details
-of the changed objects (from the
-xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_ChangedObjectsServiceInternal[`ChangedObjectsServiceInternal`]) and filters them to just
-those objects that are to be published; these are then passed through to any configured `PublisherService` or
-`PublishingService` implementations.
-
+For published objects, it provides an API for the framework to call at the end of the interaction; it obtains details of the changed objects (from the xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_ChangedObjectsServiceInternal[`ChangedObjectsServiceInternal`]) and filters them to just those objects that are to be published; these are then passed through to any configured `PublisherService` or `PublishingService` implementations.
 
 
 == SPI and Implementation
@@ -58,19 +51,13 @@ The service implementation is `o.a.i.c.m.s.publishing.PublishingServiceInternal`
 
 == Registering the Service
 
-Assuming that the `configuration-and-annotation` services installer is configured (implicit if using the
-`AppManifest` to xref:../rgcms/rgcms.adoc#_rgcms_classes_AppManifest-bootstrapping[bootstrap the app]) then Apache Isis' default
-implementation of `PublishingServiceInternal` class is automatically registered (it is annotated with `@DomainService`)
-so no further configuration is required.
+Apache Isis' default implementation of `PublishingServiceInternal` class is automatically registered (it is annotated with `@DomainService`) so no further configuration is required.
+
+To use an alternative implementation, use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 
 
 == Related Classes
 
-The service delegates between the (internal)
-xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_ChangedObjectsServiceInternal[`ChangedObjectsServiceInternal`] domain service to the
-configured xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] and
- xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`].
+The service delegates between the (internal) xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_ChangedObjectsServiceInternal[`ChangedObjectsServiceInternal`] domain service to the configured xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] and  xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`].
 
-The (internal) xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_AuditingServiceInternal[`AuditingServiceInternal`] performs a similar
-function for the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`], also collating details of the
-changed objects from `ChangedObjectsServiceInternal`.
+The (internal) xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_AuditingServiceInternal[`AuditingServiceInternal`] performs a similar function for the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`], also collating details of the changed objects from `ChangedObjectsServiceInternal`.
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_presentation-layer_ContentNegotiationService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_presentation-layer_ContentNegotiationService.adoc
index e3d98de..da13dad 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_presentation-layer_ContentNegotiationService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_presentation-layer_ContentNegotiationService.adoc
@@ -194,14 +194,9 @@ If the property is not set, then the default depends on the xref:../rgcfg/rgcfg.
 
 == Registering the Services
 
-Assuming that the `configuration-and-annotation` services installer is configured (implicit if using the
-`AppManifest` to xref:../rgcms/rgcms.adoc#_rgcms_classes_AppManifest-bootstrapping[bootstrap the app]) then Apache Isis' default
-implementations of `ContentNegotiationService` service are automatically registered and injected (it is annotated with
-`@DomainService`) so no further configuration is required.
-
-To use an alternative implementation, use
-xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained
-in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+Apache Isis' default implementations of `ContentNegotiationService` service are automatically registered and injected (it is annotated with `@DomainService`) so no further configuration is required.
+
+To use an alternative implementation, use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_presentation-layer_RepresentationService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_presentation-layer_RepresentationService.adoc
index 0eb19f9..3854684 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_presentation-layer_RepresentationService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgfis/_rgfis_presentation-layer_RepresentationService.adoc
@@ -9,15 +9,17 @@
 
 The `RepresentationService` is the main plug-in point for the xref:../ugvro/ugvro.adoc#[RestfulObjects viewer] to generate representations.
 
-The default implementation generates representations according to the link:http://restfulobjects.org[Restful Objects spec] v1.0.  However, it also delegates to the xref:../rgfis/rgfis.adoc#_rgfis_presentation-layer_ContentNegotiationService[`ContentNegotiationService`] which provides a mechanism for altering representations according to the HTTP `Accept` header.
-
-The principal motivation is to allow more flexible representations to be generated for REST clients that (perhaps through their use of a certain Javascript library, say) expect, or at least works best with, a certain style of representation.
+The default implementations generate representations according to the link:http://restfulobjects.org[Restful Objects spec] v1.0.
+However, it also delegates to the xref:../rgfis/rgfis.adoc#_rgfis_presentation-layer_ContentNegotiationService[`ContentNegotiationService`] which provides a mechanism for altering representations according to the HTTP `Accept` header.
+This allows more flexible representations to be generated for REST clients that (perhaps through their use of a certain Javascript library, say) expect, or at least works best with, a certain style of representation.
 
 In all there are three domain services that can influence the representations generated: this service, xref:../rgfis/rgfis.adoc#_rgfis_presentation-layer_ContentNegotiationService[`ContentNegotiationService`]and the xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_ContentMappingService[`ContentMappingService`].  The diagram below shows how these collaborate:
 
 image::{_imagesdir}RepresentationService/service-collaborations.png[width="700px",link="{_imagesdir}RepresentationService/service-collaborations.png"]
 
-The `RepresentationServiceForRestfulObjects` is the default implementation of this service; likewise `ContentNegotiationServiceXRoDomainType` is the default implementation of the `ContentNegotiationService`.  If you inspect the source code you'll see that the default implementation of this service's primary responsibility is to generate the default Restful Objects representations.  Therefore, if you what you want to do is to generate a _different _representation then in many cases replac [...]
+The `RepresentationServiceContentNegotiator` is the default implementation of the top-level `RepresentationService`, and it delegates to list of injecting `ContentNegotiationService` services.
+Using a chain of responsibility pattern, it returns the first non-null representation.
+For their part, the implementations of `ContentNegotiationService` use the HTTP Accept header to determine if they should render any representation or just return null.
 
 
 == SPI
@@ -50,11 +52,11 @@ public interface RepresentationService {
     }
 }
 ----
-<1> representation of a single object, as per section 14.4 of the RO spec, v1.0
-<2> representation of a single property of an object, as per section 16.4 of the RO spec v1.0
-<3> representation of a single collection of an object, as per section 17.5 of the RO spec v1.0
-<4> representation of a single action (prompt) of an object, as per section 18.2 of the RO spec v1.0
-<5> representation of the results of a single action invocation, as per section 19.5 of the RO spec v1.0
+<1> representation of a single object, eg as per section 14.4 of the RO spec, v1.0
+<2> representation of a single property of an object, eg as per section 16.4 of the RO spec v1.0
+<3> representation of a single collection of an object, eg as per section 17.5 of the RO spec v1.0
+<4> representation of a single action (prompt) of an object, eg as per section 18.2 of the RO spec v1.0
+<5> representation of the results of a single action invocation, eg as per section 19.5 of the RO spec v1.0
 
 These methods provide:
 
@@ -75,18 +77,15 @@ ie `MemberReprMode`
 
 == Implementation
 
-As discussed in the introduction, the framework provides a default implementation, `o.a.i.v.ro.rendering.service.RepresentationServiceContentNegotiator`.   This delegates to xref:../rgfis/rgfis.adoc#_rgfis_presentation-layer_ContentNegotiationService[`ContentNegotiationService`] to generate an alternative representation; but if none is provided then it falls back on generating the representations as defined in the link:http://restfulobjects.org[Restful Objects spec] v1.0.
+As discussed in the introduction, the framework provides a default implementation, `o.a.i.v.ro.rendering.service.RepresentationServiceContentNegotiator`.
+This delegates to xref:../rgfis/rgfis.adoc#_rgfis_presentation-layer_ContentNegotiationService[`ContentNegotiationService`] to generate an alternative representation; but if none is provided then it falls back on generating the representations as defined in the link:http://restfulobjects.org[Restful Objects spec] v1.0.
 
-To use an alternative implementation, use
-xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained
-in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+To use an alternative implementation, use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 
 
 == Registering the Services
 
-Assuming that the `configuration-and-annotation` services installer is configured (implicit if using the
-`AppManifest` to xref:../rgcms/rgcms.adoc#_rgcms_classes_AppManifest-bootstrapping[bootstrap the app]) then Apache Isis' default implementation of `RepresentationService` service is automatically registered and injected (it is annotated with `@DomainService`) so no further configuration is required.
-
+Apache Isis' default implementation of `RepresentationService` service is automatically registered and injected (it is annotated with `@DomainService`) so no further configuration is required.
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_ActionInvocationContext.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_ActionInvocationContext.adoc
index 9df3e19..75d5e06 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_ActionInvocationContext.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_ActionInvocationContext.adoc
@@ -5,9 +5,11 @@
 :_imagesdir: images/
 
 
-The `ActionInvocationContext` domain service is a xref:../rgant/rgant.adoc#_rgant-RequestScoped[`@RequestScoped`] service intended to support the implementation of "bulk" actions annotated with xref:../rgant/rgant.adoc#_rgant-Action_invokeOn[`@Action#invokeOn()`].  This allows the user to select multiple objects in a table and then invoke the same action against all of them.
+The `ActionInvocationContext` domain service is a xref:../rgant/rgant.adoc#_rgant-RequestScoped[`@RequestScoped`] service intended to support the implementation of "bulk" actions annotated with xref:../rgant/rgant.adoc#_rgant-Action_invokeOn[`@Action#invokeOn()`].
+This allows the user to select multiple objects in a table and then invoke the same action against all of them.
 
-When an action is invoked in this way, this service allows each object instance to "know where it is" in the collection; it acts a little like an iterator.  In particular, an object can determine if it is the last object to be called, and so can perform special processing, eg to return a summary calculated result.
+When an action is invoked in this way, this service allows each object instance to "know where it is" in the collection; it acts a little like an iterator.
+In particular, an object can determine if it is the last object to be called, and so can perform special processing, eg to return a summary calculated result.
 
 [WARNING]
 ====
@@ -39,14 +41,19 @@ public static class ActionInvocationContext {
 <4> is the 0-based index to the object being acted upon.
 
 
+To provide an alternative implementation, subclass and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+
 
 == Usage
 
-For actions that are void or that return null, Apache Isis will return to the list once executed. But for bulk actions that are non-void, Apache Isis will render the returned object/value from the last object invoked (and simply discards the object/value of all actions except the last).
+For actions that are void or that return null, Apache Isis will return to the list once executed.
+But for bulk actions that are non-void, Apache Isis will render the returned object/value from the last object invoked (and simply discards the object/value of all actions except the last).
 
-One idiom is for the domain objects to also use the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_Scratchpad[`Scratchpad`] service to share information, for example to aggregate values. The `ActionInvocationContext#isLast()` method can then be used to determine if all the information has been gathered, and then do something with it (eg derive variance across a range of values, render a graph etc).
+One idiom is for the domain objects to also use the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_Scratchpad[`Scratchpad`] service to share information, for example to aggregate values.
+The `ActionInvocationContext#isLast()` method can then be used to determine if all the information has been gathered, and then do something with it (eg derive variance across a range of values, render a graph etc).
 
-More prosaically, the `ActionInvocationContext` can be used to ensure that the action behaves appropriately depending on how it has been invoked (on a single object and/or a collection) whether it is called in bulk mode or regular mode. Here's a snippet of code from the bulk action in the Isis addon example https://github.com/isisaddons/isis-app-todoapp/[todoapp] (not ASF):
+More prosaically, the `ActionInvocationContext` can be used to ensure that the action behaves appropriately depending on how it has been invoked (on a single object and/or a collection) whether it is called in bulk mode or regular mode.
+Here's a snippet of code from the bulk action in the Isis addon example https://github.com/isisaddons/isis-app-todoapp/[todoapp] (not ASF):
 
 [source,java]
 ----
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_BackgroundService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_BackgroundService.adoc
index cf00a3f..318f5c0 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_BackgroundService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_BackgroundService.adoc
@@ -5,21 +5,19 @@
 :_imagesdir: images/
 
 
-The `BackgroundService2` domain service (and its various supertypes), and also the companion
-xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_BackgroundCommandService[`BackgroundCommandService2`] SPI service, enable commands to be persisted such that they may be invoked in the background.
+The `BackgroundService2` domain service (and its various supertypes), and also the companion xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_BackgroundCommandService[`BackgroundCommandService2`] SPI service, enable commands to be persisted such that they may be invoked in the background.
 
 The `BackgroundService2` is responsible for capturing a memento representing the command in a typesafe way, and persisting it rather than executing it directly.
 
 The default `BackgroundServiceDefault` implementation works by using a proxy wrapper around the target so that it can capture the action to invoke and its arguments.
+
 This is done using xref:../rgfis/rgfis.adoc#_rgfis_application-layer_CommandDtoServiceInternal[`CommandDtoServiceInternal`].
 
 The persistence delegates the persistence of the memento to an appropriate implementation of the companion `BackgroundCommandService2`.
 One such implementation of `BackgroundCommandService` is provided by (non-ASF) http://github.com/isisaddons/isis-module-command[Isis addons' command] module.
 
 The persisting of commands is only half the story; there needs to be a separate process to read the commands and execute them.
-The `BackgroundCommandExecution` abstract class (discussed
-xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_BackgroundService_BackgroundCommandExecution[below]) provides infrastructure to do this;
-the concrete implementation of this class depends on the configured `BackgroundCommandService` (in order to query for the persisted (background) ``Command``s.
+The `BackgroundCommandExecution` abstract class (discussed xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_BackgroundService_BackgroundCommandExecution[below]) provides infrastructure to do this; the concrete implementation of this class depends on the configured `BackgroundCommandService` (in order to query for the persisted (background) ``Command``s.
 
 
 
@@ -39,6 +37,7 @@ public interface BackgroundService2 {
 
 The default implementation is provided by core (`o.a.i.core.runtime.services.background.BackgroundServiceDefault`).
 
+To provide an alternative implementation, subclass and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 
 
 == Usage
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_CommandContext.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_CommandContext.adoc
index 2449256..412d29b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_CommandContext.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_CommandContext.adoc
@@ -8,8 +8,9 @@
 
 The `CommandContext` service is a xref:../rgant/rgant.adoc#_rgant-RequestScoped[request-scoped] service that reifies the invocation of an action on a domain object into an object itself. This reified information is encapsulated within the `Command` object.
 
-By default, the `Command` is held in-memory only; once the action invocation has completed, the `Command` object is gone. The optional
- supporting xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] enables the implementation of `Command` to be pluggable. With an appropriate implementation (eg as provided by the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s command module's xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`]) the `Command` may then be persisted.
+By default, the `Command` is held in-memory only; once the action invocation has completed, the `Command` object is gone.
+The optional supporting xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] enables the implementation of `Command` to be pluggable.
+With an appropriate implementation (eg as provided by the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s command module's xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`]) the `Command` may then be persisted.
 
 The primary use case for persistent ``Command``s is in support of background commands; they act as a parent to any background commands that can be persisted either explicitly using the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_BackgroundService[`BackgroundService`], or implicitly by way of the xref:../rgant/rgant.adoc#_rgant-Action_command[`@Action#command()`] annotation.
 
@@ -19,9 +20,7 @@ There are a number of related use cases:
 * if a xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] or xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`] (the latter now deprecated) is configured, they provide better traceability as the `Command` is also correlated with any published events, again through the unique `transactionId` GUID
 * if a xref:../rgsvc/rgsvc.adoc#_rgsvc_spi_AuderService[`AuditerService`] or xref:../rgsvc/rgsvc.adoc#_rgsvc_spi_AuditService[`AuditingService`] (the latter now deprecated) is configured, they provide better audit information, since the `Command` (the 'cause' of an action) can be correlated to the audit records (the "effect" of the action) through the `transactionId` GUID
 
-However, while persistent ``Command``s _can_ be used for these use cases, it is recommended instead to use the
-xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] service and persistent implementations of the
-``Interaction`` object, eg as provided by the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s publishmq module.
+However, while persistent ``Command``s _can_ be used for these use cases, it is recommended instead to use the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] service and persistent implementations of the ``Interaction`` object, eg as provided by the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s publishmq module.
 
 
 
@@ -31,7 +30,8 @@ xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`Intera
 == Screencast
 
 
-The link:https://www.youtube.com/watch?v=tqXUZkPB3EI[screencast] provides a run-through of the command (profiling) service, auditing service, publishing service. It also shows how commands can be run in the background either explicitly by scheduling through the background service or implicitly by way of a framework annotation.
+The link:https://www.youtube.com/watch?v=tqXUZkPB3EI[screencast] provides a run-through of the command (profiling) service, auditing service, publishing service (note: auditing service has since been replaced by `AuditerService`, and publishing service by `PublisherService`).
+It also shows how commands can be run in the background either explicitly by scheduling through the background service or implicitly by way of a framework annotation.
 
 
 [NOTE]
@@ -55,7 +55,11 @@ public class CommandContext {
 }
 ----
 
-This class (`o.a.i.applib.services.CommandContext`) is also the default implementation.  Under normal circumstances there shouldn't be any need to replace this implementation with another.
+This class (`o.a.i.applib.services.CommandContext`) is also the default implementation.
+
+Under normal circumstances there shouldn't be any need to replace this implementation with another.
+But if you do need to for some reason, then subclass and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+
 
 The `Command` type referenced above is in fact an interface, defined as:
 
@@ -139,7 +143,7 @@ The xref:../rgant/rgant.adoc#_rgant-Action_command[`@Action#command()`] annotati
 [source,java]
 ----
 public class ToDoItem ... {
-    @Command(executeIn=ExecuteIn.BACKGROUND)
+    @Action(commandExecuteIn=CommandExecuteIn.BACKGROUND)
     public ToDoItem scheduleImplicitly() {
         completeSlowly(3000);
         return this;
@@ -149,19 +153,20 @@ public class ToDoItem ... {
 
 When a background command is invoked, the user is returned the command object itself (to provide a handle to the command being invoked).
 
-This requires that an implementation of xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] that persists the commands (such as the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s command module's `CommandService`) is configured. It also requires that a scheduler is configured to execute the background commands, see xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_BackgroundCommandService[`BackgroundCommandService`]).
+This requires that an implementation of xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] that persists the commands (such as the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s command module's `CommandService`) is configured.
+It also requires that a scheduler is configured to execute the background commands, see xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_BackgroundCommandService[`BackgroundCommandService`]).
 
 
 
 == Interacting with the services
 
-Typically domain objects will have little need to interact with the `CommandContext` and `Command` directly; what is
-more useful is that these are persisted in support of the various use cases identified above.
+Typically domain objects will have little need to interact with the `CommandContext` and `Command` directly; what is more useful is that these are persisted in support of the various use cases identified above.
 
-One case however where a domain object might want to obtain the `Command` is to determine whether it has been invoked in the foreground, or in the background. It can do this using the `getExecutedIn()` method:
+One case however where a domain object might want to obtain the `Command` is to determine whether it has been invoked in the foreground, or in the background.
+It can do this using the `getExecutedIn()` method:
 
-Although not often needed, this then allows the domain object to access the `Command` object through the
-`CommandContext` service.  To expand th above example:
+Although not often needed, this then allows the domain object to access the `Command` object through the `CommandContext` service.
+To expand the above example:
 
 
 [source,java]
@@ -184,7 +189,8 @@ public class ToDoItem ... {
 
 If run in the background, it might then notify the user (eg by email) if all work is done.
 
-This leads us onto a related point, distinguishing the current effective user vs the originating "real" user. When running in the foreground, the current user can be obtained from the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_UserService[`UserService`], using:
+This leads us onto a related point, distinguishing the current effective user vs the originating "real" user.
+When running in the foreground, the current user can be obtained from the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_UserService[`UserService`], using:
 
 [source,java]
 ----
@@ -206,21 +212,12 @@ String user = commandContext.getCommand().getUser();
 
 == Related Services
 
-The xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_CommandContext[`CommandContext`] service is very similar in nature to the xref:../rgsvc/rgsvc.adoc#_rgsvc_api_InteactionContext[`InteactionContext`], in that the
-`Command` object accessed through it is very similar to the `Interaction` object obtained from the `InteractionContext`.
-The principle distinction is that while `Command` represents the __intention__ to invoke an action or edit a property,
-the `Interaction` (and contained ``Execution``s) represents the actual execution.
-
-Most of the time a `Command` will be followed directly by its corresponding `Interaction`.  However, if the `Command`
-is annotated to run in the background (using xref:../rgant/rgant.adoc#_rgant-Action_command[`@Action#commandExecuteIn()`], or
-is explicitly created through the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_BackgroundService[`BackgroundService`], then the actual
-interaction/execution is deferred until some other mechanism invokes the command (eg as described
-xref:../ugbtb/ugbtb.adoc#_ugbtb_headless-access_BackgroundCommandExecution[here]).  The persistence of background commands
-requires a configured xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_BackgroundCommandService[`BackgroundCommandService`]) to actually
-persist such commands for execution.
-
-``Command``s - even if executed in the foreground - can also be persisted by way of the
-xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`].  Implementations of `CommandService` and
-`BackgroundCommandService` are intended to go together, so that child ``Command``s persistent (to be executed in the
-background) can be associated with their parent ``Command``s (executed in the foreground, with the background `Command`
-created explicitly through the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_BackgroundService[`BackgroundService`]).
+The xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_CommandContext[`CommandContext`] service is very similar in nature to the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`], in that the `Command` object accessed through it is very similar to the `Interaction` object obtained from the `InteractionContext`.
+The principle distinction is that while `Command` represents the __intention__ to invoke an action or edit a property, the `Interaction` (and contained ``Execution``s) represents the actual execution.
+
+Most of the time a `Command` will be followed directly by its corresponding `Interaction`.
+However, if the `Command` is annotated to run in the background (using xref:../rgant/rgant.adoc#_rgant-Action_command[`@Action#commandExecuteIn()`], or is explicitly created through the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_BackgroundService[`BackgroundService`], then the actual interaction/execution is deferred until some other mechanism invokes the command (eg as described xref:../ugbtb/ugbtb.adoc#_ugbtb_headless-access_BackgroundCommandExecution[here]).
+The persistence of background commands requires a configured xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_BackgroundCommandService[`BackgroundCommandService`]) to actually persist such commands for execution.
+
+``Command``s - even if executed in the foreground - can also be persisted by way of the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`].
+Implementations of `CommandService` and `BackgroundCommandService` are intended to go together, so that child ``Command``s persistent (to be executed in the background) can be associated with their parent ``Command``s (executed in the foreground, with the background `Command` created explicitly through the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_BackgroundService[`BackgroundService`]).
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_DtoMappingHelper.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_DtoMappingHelper.adoc
index a52b7b3..6d8f615 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_DtoMappingHelper.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_DtoMappingHelper.adoc
@@ -19,7 +19,7 @@ public class DtoMappingHelper {
     public OidDto oidDtoFor(final Object object) { ... }    // <1>
 }
 ----
-<1> Uses the xref:../rgsvc/rgsvc.adoc#_rgsvc_api_BookmarkService[`BookmarkService`] to convert the domain object's internal identifier into a serializable `OidDto`.
+<1> Uses the xref:../rgsvc/rgsvc.adoc#_rgsvc_integration-api_BookmarkService[`BookmarkService`] to convert the domain object's internal identifier into a serializable `OidDto`.
 
 This class (`o.a.i.applib.services.dto.DtoMappingHelper`) is also the implementation.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_InteractionContext.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_InteractionContext.adoc
index bc170e8..14e7351 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_InteractionContext.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_InteractionContext.adoc
@@ -167,6 +167,13 @@ public class PropertyEdit extends Execution {
 <1> The object used as the new value of the property.  Could be `null` if the property is being cleared.
 
 
+=== Alternate Implementations
+
+Apache Isis' default implementation of `InteractionContext` class is automatically registered (it is annotated with `@DomainService`).
+
+
+
+
 
 == Interacting with the services
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_MessageService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_MessageService.adoc
index e7d8413..03877df 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_MessageService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_MessageService.adoc
@@ -61,4 +61,5 @@ public Order addItem(Product product, @ParameterLayout(named="Quantity") int qua
 
 The core framework provides a default implementation of this service, `o.a.i.core.runtime.services.message.MessageServiceDefault`.
 
+To use an alternative implementation, implement the `MessageService` interface and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_SessionManagementService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_SessionManagementService.adoc
index 923013d..db5d975 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_SessionManagementService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_SessionManagementService.adoc
@@ -43,4 +43,5 @@ Any domain objects that were created in the "previous" session are no longer usa
 The core framework provides a default implementation of this service (`o.a.i.core.runtime.services.xactn.SessionManagementServiceDefault`).
 
 
+To use an alternative implementation, implement the `SessionManagementService` interface and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_TitleService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_TitleService.adoc
index eeea15c..458691f 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_TitleService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_TitleService.adoc
@@ -20,7 +20,7 @@ The API of `TitleService` is:
 
 [source,java]
 ----
-public interface PresentationService {
+public interface TitleService {
     String titleOf(Object domainObject);                // <1>
     String iconNameOf(Object domainObject);             // <2>
 }
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_TransactionService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_TransactionService.adoc
index 0320657..0d61f2e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_TransactionService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_TransactionService.adoc
@@ -120,4 +120,3 @@ try {
 The core framework provides a default implementation of this service, `o.a.i.core.metamodel.services.xactn.TransactionServiceDefault`.
 
 
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_WrapperFactory.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_WrapperFactory.adoc
index 82f7f52..9887775 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_WrapperFactory.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-api_WrapperFactory.adoc
@@ -7,16 +7,18 @@
 
 
 
-The `WrapperFactory` provides the ability to enforce business rules for programmatic interactions between domain objects.  If there is a (lack-of-) trust boundary between the caller and callee -- eg if they reside in different modules -- then the wrapper factory is a useful mechanism to ensure that any business constraints defined by the callee are honoured.
+The `WrapperFactory` provides the ability to enforce business rules for programmatic interactions between domain objects.
+If there is a (lack-of-) trust boundary between the caller and callee -- eg if they reside in different modules -- then the wrapper factory is a useful mechanism to ensure that any business constraints defined by the callee are honoured.
 
-For example, if the calling object attempts to modify an unmodifiable property on the target object, then an exception will be thrown.  Said another way: interactions are performed "as if" they are through the viewer.
+For example, if the calling object attempts to modify an unmodifiable property on the target object, then an exception will be thrown.
+Said another way: interactions are performed "as if" they are through the viewer.
 
 [NOTE]
 ====
 For a discussion of the use of the `WrapperFactory` within integration tests (the primary or at least original use case for this service) can be found xref:../ugtst/ugtst.adoc#_ugtst_integ-test-support_wrapper-factory[here]
 ====
 
-This capability goes beyond enforcing the (imperative) constraints within the `hideXxx()`, `disableXxx()` and `validateXxx()` supporting methods; it also enforces (declarative) constraints such as those represented by annotations, eg `@MaxLength` or `@Regex`.
+This capability goes beyond enforcing the (imperative) constraints within the `hideXxx()`, `disableXxx()` and `validateXxx()` supporting methods; it also enforces (declarative) constraints such as those represented by annotations, eg `@Parameter(maxLength=...)` or `@Property(mustSatisfy=...)`.
 
 This capability is frequently used within xref:../ugtst/ugtst.adoc#_ugtst_integ-test-support[integration tests], but can also be used in production code. (There are analogies that can be drawn here with the way that JEE beans can interact through an EJB local interface).
 
@@ -51,8 +53,10 @@ public interface WrapperFactory {
     ...
  }
 ----
-<1> wraps the underlying domain object.  If it is already wrapped, returns the object back unchanged.
-<2> Obtains the underlying domain object, if wrapped.  If the object is not wrapped, returns back unchanged.
+<1> wraps the underlying domain object.
+If it is already wrapped, returns the object back unchanged.
+<2> Obtains the underlying domain object, if wrapped.
+If the object is not wrapped, returns back unchanged.
 <3> whether the supplied object has been wrapped.
 <4> enumerates how the wrapper interacts with the underlying domain object.
 <5> validate all business rules and then execute.
@@ -63,14 +67,17 @@ public interface WrapperFactory {
 
 
 
-The service works by returning a "wrapper" around a supplied domain object (a link:http://www.javassist.org[javassist] proxy), and it is this wrapper that ensures that the hide/disable/validate rules implies by the Apache Isis programming model are enforced. The wrapper can be interacted with as follows:
+The service works by returning a "wrapper" around a supplied domain object (a link:http://www.javassist.org[javassist] proxy), and it is this wrapper that ensures that the hide/disable/validate rules implies by the Apache Isis programming model are enforced.
+The wrapper can be interacted with as follows:
 
 * a `get...()` method for properties or collections
 * a `set...()` method for properties
 * an `addTo...()` or `removeFrom...()` method for collections
 * any action
 
-Calling any of the above methods may result in a (subclass of) `InteractionException` if the object disallows it. For example, if a property is annotated with `@Hidden` then a `HiddenException` will be thrown. Similarly if an action has a `validateXxx()` method and the supplied arguments are invalid then an `InvalidException` will be thrown.
+Calling any of the above methods may result in a (subclass of) `InteractionException` if the object disallows it.
+For example, if a property is annotated with `@Hidden` then a `HiddenException` will be thrown.
+Similarly if an action has a `validateXxx()` method and the supplied arguments are invalid then an `InvalidException` will be thrown.
 
 In addition, the following methods may also be called:
 
@@ -98,7 +105,7 @@ public class CustomerAgent {
         try {
             wrappedOrder.refund();
         } catch(InteractionException ex) {          // <1>
-            container.raiseError(ex.getMessage());  // <2>
+            messageService.raiseError(ex.getMessage());  // <2>
             return;
         }
     }
@@ -106,7 +113,7 @@ public class CustomerAgent {
     @Inject
     WrapperFactory wrapperFactory;
     @Inject
-    DomainObjectContainer container;
+    MessageService messageService;
 }
 ----
 <1> if any constraints on the `Order`'s `refund()` action would be violated, then ...
@@ -114,7 +121,8 @@ public class CustomerAgent {
 
 [NOTE]
 ====
-It ought to be possible to implement an xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_ExceptionRecognizer[`ExceptionRecognizer`]s that would allow the above boilerplate to be removed.  This recognizer service would recognize the `InteractionException` and convert to a suitable message.
+It ought to be possible to implement an xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_ExceptionRecognizer[`ExceptionRecognizer`]s that would allow the above boilerplate to be removed.
+This recognizer service would recognize the `InteractionException` and convert to a suitable message.
 
 At the time of writing Apache Isis does not provide an out-of-the-box implementation of such an `ExceptionRecognizer`; but it should be simple enough to write one…
 ====
@@ -141,12 +149,15 @@ public interface WrapperFactory {
 }
 ----
 <1> all ``InteractionListener``s that have been registered.
-<2> registers an `InteractionListener`, to be notified of interactions on all wrappers.  The listener will be notified of interactions even on wrappers created before the listener was installed. (From an implementation perspective this is because the wrappers delegate back to the container to fire the events).
+<2> registers an `InteractionListener`, to be notified of interactions on all wrappers.
+The listener will be notified of interactions even on wrappers created before the listener was installed.
+(From an implementation perspective this is because the wrappers delegate back to the container to fire the events).
 <3> remove an `InteractionListener`, to no longer be notified of interactions on wrappers.
 <4> used by the framework itself
 
-The original intent of this API was to enable test transcripts to be captured (in a BDD-like fashion) from integration tests.  No such feature has yet been implemented however.  Also, the capabilities have by and large been superceded by Apache Isis' support for domain events.  We may therefore deprecate this API in the future.
 
+One possible use case for this API is to enable test transcripts to be captured (in a BDD-like fashion) from integration tests.
+As the time of writing, no such feature has yet been implemented.
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-spi_CommandService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-spi_CommandService.adoc
index ce1e550..4c5d576 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-spi_CommandService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-spi_CommandService.adoc
@@ -82,7 +82,6 @@ The typical way to indicate that an action should be reified into a `Command` is
 
 
 
-
 == Alternative Implementations
 
 The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s command module provides an implementation of this service (`CommandService`), and also provides a number of related domain services (`CommandJdoRepository` and `CommandServiceJdoContributions`).
@@ -101,7 +100,7 @@ This is closely related to the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer
 The implementations of `CommandService` and `BackgroundCommandService` are intended to go together, so that persistent parent `Command`s can be associated with their child background `Command`s.
 
 The services provided by this module combines very well with the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`].
-The `CommandService` captures the _cause_ of an interaction (an action was invoked, a property was edited), while the `AuditingService3` captures the _effect_ of that interaction in terms of changed state.
+The `CommandService` captures the __cause__ of an interaction (an action was invoked, a property was edited), while the `AuditingService3` captures the __effect__ of that interaction in terms of changed state.
 
 You may also want to configure the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`].
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-spi_HomePageProviderService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-spi_HomePageProviderService.adoc
index 595c916..1fbe341 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-spi_HomePageProviderService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_application-layer-spi_HomePageProviderService.adoc
@@ -27,4 +27,3 @@ public interface HomePageProviderService {
 The default implementation is provided by `o.a.i.core.runtime.services.homepage.HomePageProviderServiceDefault`.
 
 
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_bootstrapping-spi_ClassDiscoveryService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_bootstrapping-spi_ClassDiscoveryService.adoc
index 372a582..9f43c87 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_bootstrapping-spi_ClassDiscoveryService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_bootstrapping-spi_ClassDiscoveryService.adoc
@@ -33,7 +33,7 @@ public interface ClassDiscoveryService2  {
 
 == Implementation
 
-Isis provides an implementation of this service, namely `o.a.i.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections`.
+Apache Isis provides an implementation of this service, namely `o.a.i.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections`.
 
 [NOTE]
 ====
@@ -41,6 +41,10 @@ This implementation is also used to discover domain services annotated with xref
 Currently this logic uses the implementation directly, so is not pluggable.
 ====
 
+To use an alternative implementation, implement the `ClassDiscoveryService` interface and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+
+
+
 
 
 == Related Services
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api.adoc
index 374d593..aa4e361 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api.adoc
@@ -154,6 +154,7 @@ Key:
 
 
 
+
 include::_rgsvc_core-domain-api_ClockService.adoc[leveloffset=+1]
 include::_rgsvc_core-domain-api_ConfigurationService.adoc[leveloffset=+1]
 include::_rgsvc_core-domain-api_DomainObjectContainer.adoc[leveloffset=+1]
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_ClockService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_ClockService.adoc
index 913195a..dfcff58 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_ClockService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_ClockService.adoc
@@ -49,14 +49,21 @@ This class (`o.a.i.applib.services.clock.ClockService`) is also the default impl
 
 == Testing Support
 
-The default `ClockService` implementation in fact simply delegates to another class defined in the API, namely the `o.a.i.applib.clock.Clock`, an abstract singleton class.  It is not recommended that your code use the `Clock` directly, but you should understand how this all works:
+The default `ClockService` implementation in fact simply delegates to another class defined in the API, namely the `o.a.i.applib.clock.Clock`, an abstract singleton class.
+It is not recommended that your code use the `Clock` directly, but it's worth understanding how this all works.
 
-* there are two subclasses implementations `Clock`, namely `SystemClock` and `FixtureClock`.
-* the first implementation that is instantiated registers itself as the singleton.
-* if running in xref:../rgcfg/rgcfg.adoc#_rgcfg_deployment-types[production] (server) mode, then (unless another implementation has beaten it to the punch) the framework will instantiate the ``SystemClock`.  Once instantiated this cannot be replaced.
-* if running in xref:../rgcfg/rgcfg.adoc#_rgcfg_deployment-types[prototype] mode, then the framework will instead instantiate `FixtureClock`.  This _can_ be replaced if required.
+If running in xref:../rgcfg/rgcfg.adoc#_rgcfg_deployment-types[production] (server) mode, then the framework will (lazily) instantiate the ``SystemClock` when first required.
+This is a read-only clock that reads from the system time.
+The instance registers itself as the singleton and cannot be replaced.
+
+If running in xref:../rgcfg/rgcfg.adoc#_rgcfg_deployment-types[prototype] mode, though, then the framework will instead instantiate `FixtureClock`.
+This is a read-write clock that will behave as the system clock, unless it is explicitly set using eg, `FixtureClock#setDate(...)` or `FixtureClock#setTime(...)` etc.
+
+Moreover, `FixtureClock` singleton can be replaced with another implementation.
+And, it is sometimes useful to replace it using `TickingFixtureClock`, a subclass that is very similar to `FixtureClock` (in that the time can be changed) but which will continue to tick once set.
+
+To use `TickingFixtureClock` instead of `FixtureClock`, use the `TickingClockFixture` fixture script.
 
-The `FixtureClock` will behave as the system clock, unless its is explicitly set using `FixtureClock#setDate(...)` or `FixtureClock#setTime(...)` and so forth.
 
 
 
@@ -95,4 +102,3 @@ public class NntpClockServiceInitializer  {
 
 
 
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_EventBusService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_EventBusService.adoc
index b747cfc..01978c1 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_EventBusService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_EventBusService.adoc
@@ -47,6 +47,8 @@ public abstract class EventBusService {
 
 
 
+To use an alternative implementation, implement the `EventBusService` domain service and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+
 
 
 
@@ -394,6 +396,7 @@ isis.services.eventbus.implementation=com.mycompany.isis.MyEventBusServiceImplem
 
 
 
+
 == Related Services
 
 The `EventBusService` is intended for fine-grained publish/subscribe for object-to-object interactions within an Apache Isis domain object model. The event propagation is strictly in-memory, and there are no restrictions on the object acting as the event (it need not be serializable, for example).
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_FactoryService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_FactoryService.adoc
index 94a27fa..151b8ef 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_FactoryService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_FactoryService.adoc
@@ -20,12 +20,14 @@ The API of `FactoryService` is:
 [source,java]
 ----
 public interface FactoryService {
-    <T> T instantiate(final Class<T> ofType);       // <1>
-    <T> T mixin();                                  // <2>
+    <T> T instantiate(Class<T> domainClass);           // <1>
+    <T> T mixin(Class<T> mixinClass, Object mixedIn);  // <2>
 }
 ----
 <1> create a new non-persisted domain entity.  Any services will be automatically injected into the service.
-<2> programmatically instantiate a mixin, as annotated with xref:../rgant/rgant.adoc#_rgant-Mixin[`@Mixin`] or xref:../rgant/rgant.adoc#_rgant-DomainObject_nature[`@DomainObject#nature()`].
+The class must have a no-arg constructor.
+<2> programmatically instantiate a mixin, for example as annotated with xref:../rgant/rgant.adoc#_rgant-Mixin[`@Mixin`].
+The class must have a 1-arg constructor of the appropriate type.
 
 
 The object is created in memory, but is not persisted.  The benefits of using this method (instead of simply using the Java `new` keyword) are:
@@ -62,6 +64,4 @@ The core framework provides a default implementation of this service (`o.a.i.cor
 
 The xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-api_RepositoryService[`RepositoryService`] is often used in conjunction with the `FactoryService`, to persist domain objects after they have been instantiated and populated.
 
-An alternative to using the factory service is to simply instantiate the object ("new is the new new") and then use the
-xref:../rgsvc/rgsvc.adoc#_rgsvc_metadata-api_ServiceRegistry[`ServiceRegistry`] service to inject other domain services into the
-instantiated object.
\ No newline at end of file
+An alternative to using the factory service is to simply instantiate the object ("new is the new new") and then use the xref:../rgsvc/rgsvc.adoc#_rgsvc_metadata-api_ServiceRegistry[`ServiceRegistry`] service to inject other domain services into the instantiated object.
\ No newline at end of file
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_Scratchpad.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_Scratchpad.adoc
index 86287d9..8740fe3 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_Scratchpad.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_core-domain-api_Scratchpad.adoc
@@ -32,6 +32,7 @@ This class (`o.a.i.applib.services.scratchpad.Scratchpad`) is also the implement
 And, as you can see, the service is just a request-scoped wrapper around a `java.util.Map`.
 
 
+To use an alternative implementation, subclass and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_BookmarkService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_BookmarkService.adoc
index f8ca522..3ac9b83 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_BookmarkService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_BookmarkService.adoc
@@ -57,6 +57,10 @@ public interface BookmarkService2 {
 
 The core framework provides a default implementation of this API, namely `o.a.i.core.metamodel.services.bookmarks.BookmarkServiceInternalDefault`
 
+To use an alternative implementation, implement `BookmarkService` interface and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+
+
+
 
 == `BookmarkHolder`
 
@@ -97,7 +101,7 @@ A more sophisticated implementation could look inside the passed `ev` argument a
 
 == Usage by other services
 
-Bookmarks are used by the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s command module's implementation of  xref:../rgsvc/rgsvc.adoc#_rgsvc_api_BackgroundCommandService[`BackgroundCommandService`], which uses a bookmark to capture the target object on which an action will be invoked subsequently.
+Bookmarks are used by the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s command module's implementation of  xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_BackgroundCommandService[`BackgroundCommandService`], which uses a bookmark to capture the target object on which an action will be invoked subsequently.
 
 Bookmarks are also used by the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s auditing module's implementation of
 xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`].
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_JaxbService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_JaxbService.adoc
index 6545b19..f89ce9b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_JaxbService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_JaxbService.adoc
@@ -42,7 +42,9 @@ reference multiple other XSD schemas.  In particular, many JAXB domain objects w
 xref:../rgcms/rgcms.adoc#_rgcms_schema[common Isis schemas] (for example the `OidDto` class that represents a reference to
 a persistent entity).  The enum indicates whether these schemas should be included or excluded from the map.
 
-Isis provides a default implementation of the service, `o.a.i.schema.services.jaxb.JaxbServiceDefault`.
+Apache Isis provides a default implementation of the service, `o.a.i.schema.services.jaxb.JaxbServiceDefault`.
+
+To use an alternative implementation, implement `JaxbService` interface and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 
 
 
@@ -54,4 +56,3 @@ xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_view-mod
 exposed in the UI through mixins to xref:../rgcms/rgcms.adoc#_rgcms_classes_mixins_Dto[`Dto`] interface.
 
 
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_MementoService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_MementoService.adoc
index 2ce86dc..97e32a2 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_MementoService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_MementoService.adoc
@@ -51,6 +51,8 @@ In fact, the `MementoServiceDefault` implementation does provide a mechanism to
 not part of the `MementoService` public API. Note also that the encoding method is not pluggable.
 ====
 
+To use an alternative implementation, implement `MementoService` interface and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+
 The types of objects that are supported by the `MementoService` are implementation-specific, but would typically
 include all the usual value types as well as Apache Isis' `Bookmark` class (to represent references to arbitrary
 entities). Nulls can also be set.
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_XmlSnapshotService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_XmlSnapshotService.adoc
index 8afedff..883e3ac 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_XmlSnapshotService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_integration-api_XmlSnapshotService.adoc
@@ -14,7 +14,6 @@ Another use case is to grab raw data such that it could be merged into a report
 
 The service offers a basic API to create a snapshot of a single object, and an more flexible API that allows the size of the graph to be customized.
 
-The core framework provides an implementation of this service (`o.a.i.core.runtime.services.xmlsnapshot.XmlSnapshotServiceDefault`).
 
 
 
@@ -189,7 +188,9 @@ public interface XmlSnapshotService {
 
 
 
+== Implementation
 
+The core framework provides an implementation of this service (`o.a.i.core.runtime.services.xmlsnapshot.XmlSnapshotServiceDefault`).
 
 
 == Related Services
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc
index c63386f..87f3be7 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_intro.adoc
@@ -10,40 +10,35 @@
 [[__rgsvc_intro_types-of-domain-services]]
 == Types of Domain Service
 
-The domain services also group into various broad categories.  Many support functionality of the various layers of the
-system (presentation layer, application layer, core domain, persistence layer); others exist to allow the domain objects
-to integrate with other bounded contexts, or provide various metadata (eg for development-time tooling).  The diagram
-below shows these categories:
+The domain services also group into various broad categories.
+Many support functionality of the various layers of the system (presentation layer, application layer, core domain, persistence layer); others exist to allow the domain objects to integrate with other bounded contexts, or provide various metadata (eg for development-time tooling).
+The diagram below shows these categories:
 
 image::{_imagesdir}reference-services/categories.png[width="600px",link="{_imagesdir}reference-services/categories.png"]
 
 
-A small number of domain services can be considered both API and SPI; a good example is the xref:../rgsvc/rgsvc.adoc#_rgsvc_integration-api_EmailService[`EmailService`] that is of direct use for domain objects wishing to send out emails,
-but is also used by the framework to support the xref:../ugvw/ugvw.adoc#_ugvw_features_user-registration[user registration]
-functionality supported by the xref:../ugvw/ugvw.adoc#[Wicket viewer].   The same is true of the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`]; this can be used by domain objects to broadcast arbitrary events,
-but is also used by the framework to automatically emit events for
+A small number of domain services can be considered both API and SPI; a good example is the xref:../rgsvc/rgsvc.adoc#_rgsvc_integration-api_EmailService[`EmailService`] that is of direct use for domain objects wishing to send out emails, but is also used by the framework to support the xref:../ugvw/ugvw.adoc#_ugvw_features_user-registration[user registration] functionality supported by the xref:../ugvw/ugvw.adoc#[Wicket viewer].
+The same is true of the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`]; this can be used by domain objects to broadcast arbitrary events, but is also used by the framework to automatically emit events for
 xref:../rgant/rgant.adoc#_rgant-Action_domainEvent[`@Action#domainEvent()`] etc.
 
-For these hybrid services we have categorized the service as an "API" service.  This chapter therefore contains only
-the strictly SPI services.
+For these hybrid services we have categorized the service as an "API" service.
+This chapter therefore contains only the strictly SPI services.
 
-This rest of this guide is broken out into several chapters, one for each of the various types/categories of domain
-service.
+This rest of this guide is broken out into several chapters, one for each of the various types/categories of domain service.
 
 
 
 [[__rgsvc_intro_public-api]]
 == Public API vs Internal Services
 
-The vast majority of Apache Isis' domain services are defined in Apache Isis' applib (`o.a.i.core:isis-core-applib`
-module) as stable, public classes.  Importantly, this also minimizes the coupling between your code and Apache Isis,
-allowing you to easily mock out these services in your unit tests.
+The vast majority of Apache Isis' domain services are defined in Apache Isis' applib (`o.a.i.core:isis-core-applib` module) as stable, public classes.
+Importantly, this also minimizes the coupling between your code and Apache Isis, allowing you to easily mock out these services in your unit tests.
 
 
-The framework also defines a number of "internal" services.  These are not part of the framework's formal API, in that
-they use classes that are outside of the applib.  These internal framework services should be thought of as part of the
-internal design of the framework, and are liable to change from release to release.  The internal framework services 
-are documented in the xref:../rgfis/rgfis.adoc#[Framework Internal Services] guide.
+The framework also defines a number of "internal" services.
+These are not part of the framework's formal API, in that they use classes that are outside of the applib.
+These internal framework services should be thought of as part of the internal design of the framework, and are liable to change from release to release.
+The internal framework services are documented in the xref:../rgfis/rgfis.adoc#[Framework Internal Services] guide.
 
 
 
@@ -51,8 +46,7 @@ are documented in the xref:../rgfis/rgfis.adoc#[Framework Internal Services] gui
 [[__rgsvc_intro_using-the-services]]
 == Using the services
 
-Apache Isis includes an extensive number of domain services for your domain objects to use; simply define the service
-as an annotated field and Apache Isis will inject the service into your object.
+Apache Isis includes an extensive number of domain services for your domain objects to use; simply define the service as an annotated field and Apache Isis will inject the service into your object.
 
 For example:
 
@@ -78,13 +72,9 @@ public class Customer {
 For objects that are already persisted, the service is automatically injected just after the object is rehydrated by
 JDO/DataNucleus.
 
-For transient objects (instantiated programmatically), the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryService`]'s
-``instantiate()`` method (or the deprecated xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s
-``newTransientInstance()`` method) will automatically inject the services.
+For transient objects (instantiated programmatically), the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryService#instantiate(...)`] or the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService#instantiate(...)`]'s will automatically inject the services.
 
-Alternatively the object can be instantiated simply using `new`, then services injected using
-xref:../rgsvc/rgsvc.adoc#_rgsvc_metadata-api_ServiceRegistry[`ServiceRegistry`]'s ``injectServicesInto(...)`` method (or the deprecated
-xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s ``injectServicesInto(...)`` method).
+Alternatively the object can be instantiated simply using `new`, then services injected using xref:../rgsvc/rgsvc.adoc#_rgsvc_metadata-api_ServiceRegistry[`ServiceRegistry`]'s ``injectServicesInto(...)`` method (or the deprecated xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]'s ``injectServicesInto(...)`` method).
 
 
 
@@ -92,23 +82,23 @@ xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObj
 [[__rgsvc_intro_overriding-the-services]]
 == Overriding the services
 
-The framework provides default implementations for many of the domain services.  This is convenient, but sometimes you
-will want to replace the default implementation with your own service implementation.
+The framework provides default implementations for many of the domain services.
+This is convenient, but sometimes you will want to replace the default implementation with your own service implementation.
 
 The trick is to use the xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`]
 attribute, specifying a low number (typically `"1"`).
 
 [NOTE]
 ====
-For a small number of domain services, all implementations are used (following the chain-of-responsibility pattern),
-not just the first one.  The services in question are:
+For a small number of domain services, all implementations are used (following the chain-of-responsibility pattern), not just the first one.
+The services in question are:
 xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_ContentMappingService[`ContentMappingService`],
 xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_GridSystemService[`GridSystemService`], and
 xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_RoutingService[`RoutingService`].
 ====
 
-For example, suppose you wanted to provide your own implementation of
-xref:../rgsvc/rgsvc.adoc#_rgsvc_api_LocaleProvider[`LocaleProvider`].  Here's how:
+For example, suppose you wanted to provide your own implementation of xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_LocaleProvider[`LocaleProvider`].
+Here's how:
 
 [source,java]
 ----
@@ -128,9 +118,8 @@ public class MyLocaleProvider implements LocaleProvider {
 <1> takes precedence over the default implementation.
 
 
-It's also quite common to want to decorate the existing implementation (ie have your own implementation delegate to the
-default); this is also possible and quite easy (if using `1.10.0` or later).  The idea is to have the framework
-inject all implementations of the service, and then to delegate to the first one that isn't "this" one:
+It's also quite common to want to decorate the existing implementation (ie have your own implementation delegate to the default); this is also possible and quite easy.
+The idea is to have the framework inject all implementations of the service, and then to delegate to the first one that isn't "this" one:
 
 [source,java]
 ----
@@ -162,14 +151,11 @@ The above code could be improved by caching the delegateLocaleProvider once loca
 [[__rgsvc_intro_commands-and-events]]
 == Command and Events
 
-A good number of the domain services manage the execution of action invocations/property edits, along with the state
-of domain objects that are modified as a result of these.  These services capture information which can then be used
-for various purposes, most notably for auditing or for publishing events, or for deferring execution such that the
-execution be performed in the background at some later date.
+A good number of the domain services manage the execution of action invocations/property edits, along with the state of domain objects that are modified as a result of these.
+These services capture information which can then be used for various purposes, most notably for auditing or for publishing events, or for deferring execution such that the execution be performed in the background at some later date.
 
-The diagram below shows how these services fit together.  The outline boxes are services while the coloured boxes
-represent data structures - defined in the applib and therefore accessible to domain applications - which hold various
-information about the executions.
+The diagram below shows how these services fit together.
+The outline boxes are services while the coloured boxes represent data structures - defined in the applib and therefore accessible to domain applications - which hold various information about the executions.
 
 image::{_imagesdir}reference-services/commands-and-events.png[width="960px",link="{_imagesdir}reference-services/commands-and-events.png"]
 
@@ -179,70 +165,47 @@ To explain:
 * the (request-scoped) xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_CommandContext[`CommandContext`] captures the user's intention to
 invoke an action or edit a property; this is held by the `Command` object.
 
-* if a xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] has been configured, then this will be used to
-create the `Command` object implementation, generally so that it can then also be persisted. +
+* if a xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] has been configured, then this will be used to create the `Command` object implementation, generally so that it can then also be persisted.
 +
-If the action or property is annotated to be invoked in the background (using
-xref:../rgant/rgant.adoc#_rgant-Action_command[`@Action#command...()`] or
-xref:../rgant/rgant.adoc#_rgant-Property_command[`@Property#command...()`]) then no further work is done. But,
-if the action/property is to be executed in the foreground, then the interaction continues.
-
-* the (request-scoped) xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] domain service acts as a
-factory for the ``Interaction`` object, which keeps track of the call-graph of executions (``Interaction.Execution``)
-of either action invocations or property edits.  In the majority of cases there is likely to be just a single top-level
-node of this graph, but for applications that use the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_WrapperFactory[`WrapperFactory`]
-extensively each successive call results in a new child execution.
-
-* before and after each action invocation/property edit, a xref:../rgcms/rgcms.adoc#_rgcms_classes_domainevent[domain event] is
-may be broadcast to all subscribers.  Whether this occurs depends on whether the action/property has been annotated
-(using xref:../rgant/rgant.adoc#_rgant-Action_domainEvent[`@Action#domainEvent()`] or
-xref:../rgant/rgant.adoc#_rgant-Property_domainEvent[`@Property#domainEvent()`]). +
+If the action or property is annotated to be invoked in the background (using xref:../rgant/rgant.adoc#_rgant-Action_command[`@Action#command...()`] or xref:../rgant/rgant.adoc#_rgant-Property_command[`@Property#command...()`]) then no further work is done.
+But, if the action/property is to be executed in the foreground, then the interaction continues.
+
+* the (request-scoped) xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] domain service acts as a factory for the ``Interaction`` object, which keeps track of the call-graph of executions (``Interaction.Execution``) of either action invocations or property edits.
+In the majority of cases there is likely to be just a single top-level node of this graph, but for applications that use the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_WrapperFactory[`WrapperFactory`] extensively each successive call results in a new child execution.
+
+* before and after each action invocation/property edit, a xref:../rgcms/rgcms.adoc#_rgcms_classes_domainevent[domain event] is may be broadcast to all subscribers.
+Whether this occurs depends on whether the action/property has been annotated (using xref:../rgant/rgant.adoc#_rgant-Action_domainEvent[`@Action#domainEvent()`] or xref:../rgant/rgant.adoc#_rgant-Property_domainEvent[`@Property#domainEvent()`]).
 +
 (Note that susbcribers will also receive events for vetoing the action/property; this is not shown on the diagram).
 
-* As each execution progresses, and objects that are modified are "enlisted" into the (internal)
-xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_ChangedObjectsServiceInternal[`ChangedObjectsServiceInternal`] domain service.  Metrics as
-to which objects are merely loaded into memory are also captured using the
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-api_MetricsService[`MetricsService`] (not shown on the diagram).
+* As each execution progresses, and objects that are modified are "enlisted" into the (internal) xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_ChangedObjectsServiceInternal[`ChangedObjectsServiceInternal`] domain service.
+Metrics as to which objects are merely loaded into memory are also captured using the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-api_MetricsService[`MetricsService`] (not shown on the diagram).
 
 * At the end of each execution, details of that execution are published through the (internal)
-xref:../rgfis/rgfis.adoc#_rgfis_spi_PublisherServiceInternal[`PublisherServiceInternal`] domain service.  This is only done for
-actions/properties annotated appropriate (with xref:../rgant/rgant.adoc#_rgant-Action_publishing[`@Action#publishing()`] or
-xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`]).  +
+xref:../rgfis/rgfis.adoc#_rgfis_spi_PublisherServiceInternal[`PublisherServiceInternal`] domain service.  This is only done for actions/properties annotated appropriate (with xref:../rgant/rgant.adoc#_rgant-Action_publishing[`@Action#publishing()`] or xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`]).
 +
-The internal service delegates in turn to any registered
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`] (deprecated) and also to any
-registered xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`]s (there may be more than one).
-
-* At the end of each transaction, details of all changed objects are published, again through the (internal)
-xref:../rgfis/rgfis.adoc#_rgfis_spi_PublisherServiceInternal[`PublisherServiceInternal`] to any registered `PublishingService`
-or `PublisherService` implementations.  Only domain objects specified to be published with
-xref:../rgant/rgant.adoc#_rgant-DomainObject_publishing[`@DomainObject#publishing()`] are published. +
+The internal service delegates in turn to any registered xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`]s (there may be more than one).
+
+* At the end of each transaction, details of all changed objects are published, again through the (internal) xref:../rgfis/rgfis.adoc#_rgfis_spi_PublisherServiceInternal[`PublisherServiceInternal`] to any registered `PublishingService` or `PublisherService` implementations.
+Only domain objects specified to be published with xref:../rgant/rgant.adoc#_rgant-DomainObject_publishing[`@DomainObject#publishing()`] are published. +
 +
 [NOTE]
 ====
-Note that it's possible for there to be more than one transaction per top-level interaction, by virtue of the
-xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_TransactionService[`TransactionService`].
+Note that it's possible for there to be more than one transaction per top-level interaction, by virtue of the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_TransactionService[`TransactionService`].
 ====
 
-* Also at the end of each transaction, details of all changed properties are passed to any registered
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`] or
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] (the latter deprecated) by way of the (internal)
-xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_AuditingServiceInternal[`AuditingServiceInternal`] domain service.
+* Also at the end of each transaction, details of all changed properties are passed to any registered xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`] or xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] (the latter deprecated) by way of the (internal) xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_AuditingServiceInternal[`AuditingServiceInternal`] domain service.
 
-Implementations of xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] can use the `Command#getMemento()`
-method to obtain a XML equivalent of that `Command`, reified using the xref:../rgcms/rgcms.adoc#_rgcms_schema-cmd[`cmd.xsd`]
-schema. This can be converted back into a `CommandDto` using the `CommandDtoUtils` utility class (part of the applib).
+Implementations of xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] can use the `Command#getMemento()` method to obtain a XML equivalent of that `Command`, reified using the xref:../rgcms/rgcms.adoc#_rgcms_schema-cmd[`cmd.xsd`] schema.
+This can be converted back into a `CommandDto` using the `CommandDtoUtils` utility class (part of the applib).
 
-Similarly, implementations of xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] can use the
-`InteractionDtoUtils` utility class to obtain a `InteractionDto` representing the interaction, either just for a single
-execution or for the entire call-graph.  This can be converted into XML in a similar fashion.
+Similarly, implementations of xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] can use the `InteractionDtoUtils` utility class to obtain a `InteractionDto` representing the interaction, either just for a single execution or for the entire call-graph.
+This can be converted into XML in a similar fashion.
 
-Likewise, the `PublishedObjects` class passed to the `PublisherService` at the end of the interaction provides the
-`PublishedObjects#getDto()` method which returns a `ChangesDto` instance.  This can be converted into XML using the
-`ChangesDtoUtils` utility class.
+Likewise, the `PublishedObjects` class passed to the `PublisherService` at the end of the interaction provides the `PublishedObjects#getDto()` method which returns a `ChangesDto` instance.
+This can be converted into XML using the `ChangesDtoUtils` utility class.
 
 One final point: multiple xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] implementations are supported because different implementations may have different responsibilities.
 For example, the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s publishmq module is responsible for publishing messages onto an ActiveMQ event bus, for inter-system communication.
 However, the SPI can also be used for profiling; each execution within the call-graph contains metrics of the number of objects loaded or modified as a result of that execution, and thus could be used for application profiling.
-The framework provides a default `PublisherServiceLogging` implementation that logs this using SLF4J.
+The framework provides a default `PublisherServiceLogging` implementation that logs this using SLF4J.
\ No newline at end of file
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_LayoutService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_LayoutService.adoc
index 689aca1..cf6f417 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_LayoutService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_LayoutService.adoc
@@ -38,10 +38,9 @@ enum Style {
 }
 ----
 
-The `CURRENT` style corresponds to the layout already loaded for the domain class, typically from an already persisted
-`layout.xml` file.  The other three styles allow the developer to choose how much metadata is to be specified in the
-XML, and how much (if any) will be obtained elsewhere, typically from annotations in the metamodel (but also from
-`.layout.json` file if present).  The table below summarises the choices:
+The `CURRENT` style corresponds to the layout already loaded for the domain class, typically from an already persisted `layout.xml` file.
+The other three styles allow the developer to choose how much metadata is to be specified in the XML, and how much (if any) will be obtained elsewhere, typically from annotations in the metamodel (but also from `.layout.json` file if present).
+The table below summarises the choices:
 
 .Table caption
 [cols="<.>,^.>,^.>,^.>", options="header"]
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_MetamodelService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_MetamodelService.adoc
index 222e67e..a68730d 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_MetamodelService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_MetamodelService.adoc
@@ -9,7 +9,6 @@
 The `MetaModelService5` service (and its various supertypes) provides access to a number of aspects of Apache Isis' internal metamodel.
 
 
-
 [[_rgsvc_metadata-api_MetamodelService_api]]
 == API
 
@@ -18,7 +17,7 @@ The API defined by the service is:
 
 [source,java]
 ----
-public interface MetaModelService4 {
+public interface MetaModelService5 {
     Class<?> fromObjectType(String objectType);         // <1>
     String toObjectType(Class<?> domainType);           // <2>
     void rebuild(Class<?> domainType);                  // <3>
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_ServiceRegistry.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_ServiceRegistry.adoc
index c8bc229..44feb0d 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_ServiceRegistry.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_ServiceRegistry.adoc
@@ -59,5 +59,3 @@ The alternative is to use the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_Fa
 The core framework provides a default implementation of this service (`o.a.i.core.runtime.services.registry.ServiceRegistryDefault`).
 
 
-
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_SwaggerService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_SwaggerService.adoc
index dda2f69..fb5ac0a 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_SwaggerService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_metadata-api_SwaggerService.adoc
@@ -18,7 +18,7 @@ Not all of the REST API exposed by the xref:../ugvro/ugvro.adoc#[Restful Objects
 
 
 [[__rgsvc_metadata-api_SwaggerService_api-and-implementation]]
-== API & Implementation
+== API
 
 The API defined by `SwaggerService` is:
 
@@ -43,7 +43,11 @@ xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_view-mod
 <3> Generate a Swagger spec that is the same as private case (above), but also including any xref:../rgant/rgant.adoc#_rgant-Action_restrictTo[prototype] actions.
 <4> Swagger specs can be written either in JSON or YAML format.
 
-Isis provides a default implementation of the service, `o.a.i.core.metamodel.services.swagger.SwaggerServiceDefault`.
+
+
+== Implementation
+
+Apache Isis provides a default implementation of the service, `o.a.i.core.metamodel.services.swagger.SwaggerServiceDefault`.
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_IsisJdoSupport.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_IsisJdoSupport.adoc
index 42f1aa2..afe7500 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_IsisJdoSupport.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_IsisJdoSupport.adoc
@@ -6,7 +6,7 @@
 
 
 The `IsisJdoSupport` service provides a number of general purpose methods for working with the JDO/DataNucleus objectstore.
-In general these act at a lower-level of abstraction than the APIs normally used (specifically, those of xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]), but nevertheless deal with some of the most common use cases.
+In general these act at a lower-level of abstraction than the APIs normally used (specifically, those of xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_RepositoryService[`RepositoryService`]), but nevertheless deal with some of the most common use cases.
 For service also provides access to the underlying JDO `PersistenceManager` for full control.
 
 The following sections discuss the functionality provided by the service, broken out into categories.
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_MetricsService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_MetricsService.adoc
index d27cc1c..9d79c21 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_MetricsService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_MetricsService.adoc
@@ -6,11 +6,9 @@
 
 
 
-The `MetricsService` is a request-scoped domain service that hooks into the JDO/DataNucleus
-ObjectStore to provide a number of counters relating to numbers of object loaded, dirtied etc.
+The `MetricsService` is a request-scoped domain service that hooks into the JDO/DataNucleus ObjectStore to provide a number of counters relating to numbers of object loaded, dirtied etc.
 
-The service is used by the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] domain service (to populate the DTO held by the `Interaction.Execution`) and also by the (internal) xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_PublishingServiceInternal[`PublishingServiceInternal`] domain service (to populate
-the `PublishedObjects` class.
+The service is used by the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] domain service (to populate the DTO held by the `Interaction.Execution`) and also by the (internal) xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_PublishingServiceInternal[`PublishingServiceInternal`] domain service (to populate the `PublishedObjects` class.
 
 
 == API & Implementation
@@ -26,11 +24,12 @@ public interface MetricsService {
     int numberObjectPropertiesModified();   // <3>
 }
 ----
-<1> The number of objects that have, so far in this request, been loaded from the database. Corresponds to the number of times that `javax.jdo.listener.LoadLifecycleListener#postLoad(InstanceLifecycleEvent)` is fired.
-<2> The number of objects that have, so far in this request, been dirtied/will need updating in the database); a good measure of the footprint of the interaction.  Corresponds to the number of times that `javax.jdo.listener.DirtyLifecycleListener#preDirty(InstanceLifecycleEvent)` callback is fired.
-<3> The number of individual properties of objects that were modified; a good measure of the amount of work being done in the interaction.  Corresponds to the number of times that the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`]'s (or
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`]'s) `audit(...)` method will be called as the transaction
-completes.
+<1> The number of objects that have, so far in this request, been loaded from the database.
+Corresponds to the number of times that `javax.jdo.listener.LoadLifecycleListener#postLoad(InstanceLifecycleEvent)` is fired.
+<2> The number of objects that have, so far in this request, been dirtied/will need updating in the database); a good measure of the footprint of the interaction.
+Corresponds to the number of times that `javax.jdo.listener.DirtyLifecycleListener#preDirty(InstanceLifecycleEvent)` callback is fired.
+<3> The number of individual properties of objects that were modified; a good measure of the amount of work being done in the interaction.
+Corresponds to the number of times that the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`]'s (or xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`]'s) `audit(...)` method will be called as the transaction completes.
 
 The framework provides a default implementation of this API, namely `o.a.i.c.r.s.metrics.MetricsServiceDefault`.
 
@@ -38,5 +37,4 @@ The framework provides a default implementation of this API, namely `o.a.i.c.r.s
 
 == Related Services
 
-The xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] also captures the metrics gathered by the
-`MetricsService` and publishes them as part of the `PublishedObjects` class (part of its SPI).
+The xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] also captures the metrics gathered by the `MetricsService` and publishes them as part of the `PublishedObjects` class (part of its SPI).
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_QueryResultsCache.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_QueryResultsCache.adoc
index f23e49c..c33d3ce 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_QueryResultsCache.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_QueryResultsCache.adoc
@@ -57,6 +57,7 @@ public class QueryResultsCache {
 
 This class (`o.a.i.applib.services.queryresultscache.QueryResultsCache`) is also the implementation.
 
+To use an alternative implementation, subclass `QueryResultsCache` and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_RepositoryService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_RepositoryService.adoc
index 51236d1..b9cef66 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_RepositoryService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-api_RepositoryService.adoc
@@ -100,7 +100,7 @@ You should be aware that by default Apache Isis queues up calls to `#persist()`
 These are then executed either when the request completes (and the transaction commits), or if the queue is flushed.
 This can be done either implicitly by the framework, or as the result of a direct call to `#flush()`.
 
-By default the framework itself will cause `#flush()` to be called whenever a query is executed by way of `#allMatches(Query)`, as documented xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer_generic-repository-api[above].
+By default the framework itself will cause `#flush()` to be called whenever a query is executed by way of `#allMatches(Query)`.
 However, this behaviour can be disabled using the  xref:../rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.services.container.disableAutoFlush`.
 
 
@@ -214,7 +214,7 @@ This JDO query definitions are used in the `ToDoItemRepositoryImplUsingJdoql` se
 public class ToDoItemRepositoryImplUsingJdoql implements ToDoItemRepositoryImpl {
     @Programmatic
     public List<ToDoItem> findByAtPathAndCategory(final String atPath, final Category category) {
-        return container.allMatches(
+        return repositoryService.allMatches(
                 new QueryDefault<>(ToDoItem.class,
                         "findByAtPathAndCategory",                              // <1>
                         "atPath", atPath,                                       // <2>
@@ -222,13 +222,14 @@ public class ToDoItemRepositoryImplUsingJdoql implements ToDoItemRepositoryImpl
     }
     ...
     @javax.inject.Inject
-    DomainObjectContainer container;
+    RepositoryService repositoryService;
 }
 ----
 <1> corresponds to the "findByAtPathAndCategory" JDO named query
 <2> provide argument for the `atPath` parameter.
 The pattern is parameter, argument, parameter, argument, ... and so on.
-<3> provide argument for the `category` parameter.  The pattern is parameter, argument, parameter, argument, ... and so on.
+<3> provide argument for the `category` parameter.
+The pattern is parameter, argument, parameter, argument, ... and so on.
 
 Other JDOQL named queries (not shown) follow the exact same pattern.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi.adoc
index 3234c27..9223fcc 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi.adoc
@@ -24,7 +24,7 @@ It also lists their corresponding implementation, either a default implementatio
 
 
 
-|xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`o.a.i.applib.` +
+|xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`o.a.i.applib.` +
 `services.audit` +
 `AuditerService`]
 |Create an audit record for every changed property of every changed object within a transaction.
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_AuditerService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_AuditerService.adoc
index 3b66a78..8211d7f 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_AuditerService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_AuditerService.adoc
@@ -7,7 +7,8 @@
 
 
 
-The `AuditerService` auditing service provides a simple mechanism to capture changes to data. It is called for each property that has changed on any domain object, as a set of pre- and post-values.
+The `AuditerService` auditing service provides a simple mechanism to capture changes to data.
+It is called for each property that has changed on any domain object, as a set of pre- and post-values.
 
 [NOTE]
 ====
@@ -34,15 +35,15 @@ public interface AuditerService {
             String user, java.sql.Timestamp timestamp);     // <6>
   }
 ----
-<1> whether this implementation is enabled.  If all configured implementations are disabled, then auditing is
-suppressed (a minor performance optimization).
+<1> whether this implementation is enabled.
+If all configured implementations are disabled, then auditing is suppressed (a minor performance optimization).
 <2> together the `transactionId` (misnamed; really is the request/interaction Id) and the `sequence` uniquely identify
 the transaction in which the object was changed.
 <3> identifies the object that has changed
-<4> the property of the object that has changed.  The combination of the `transactionId`, `sequence`, `target` and
-`propertyName` is unique.
-<5> the before and after values of the property (in string format).  If the object was created then "[NEW]" is used
-as the pre-value; if the object was deleted then "[DELETED]" is used as the post-value.
+<4> the property of the object that has changed.
+The combination of the `transactionId`, `sequence`, `target` and `propertyName` is unique.
+<5> the before and after values of the property (in string format).
+If the object was created then "[NEW]" is used as the pre-value; if the object was deleted then "[DELETED]" is used as the post-value.
 <6> the user that changed the object, and the date/time that this occurred.
 
 The framework will call this for each and every domain object property that is modified within a transaction.
@@ -51,8 +52,8 @@ The framework will call this for each and every domain object property that is m
 
 == Implementations
 
-The framework allows multiple implementations of this service to be registered; all will be called.  The framework
-provides one implementation of its own, `AuditerServiceLogging` (in `o.a.i.applib.services.audit` package); this
+The framework allows multiple implementations of this service to be registered; all will be called.
+The framework provides one implementation of its own, `AuditerServiceLogging` (in `o.a.i.applib.services.audit` package); this
 logs simple messages to an SLF4J logger.
 
 
@@ -71,35 +72,33 @@ log4j.additivity.org.apache.isis.applib.services.audit.AuditerServiceLogging=fal
 ----
 
 
-The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s audit module also provides an implementation, `org.isisaddons.module.audit.dom.AuditerServiceUsingJdo`.
-This creates an audit record for each changed property (ie every time that `AuditerService#audit(...)` is called.
 
-The module also provides:
-
-* `AuditingServiceMenu` service which provides actions to search for ``AuditEntry``s, underneath an 'Activity' menu on
-the secondary menu bar.
 
-* `AuditingServiceRepository` service to to search for persisted `AuditEntry``s.  None of its actions are visible in
-the user interface (they are all `@Programmatic`).
+== Usage
 
-* `AuditingServiceContributions` which contrbutes collections to the
-xref:../rgcms/rgcms.adoc#_rgcms_classes_mixins_HasTransactionId[ `HasTransactionId`] interface. This will therefore display all
-audit entries that occurred in a given request/transaction, in other words whenever a command, a published event or
-another audit entry is displayed.
+The typical way to indicate that an object should be audited is to annotate it with the xref:../rgant/rgant.adoc#_rgant-DomainObject_auditing[`@DomainObject#auditing()`] annotation.
 
 
+== Alternative Implementations
 
+The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s audit module provides an implementation of this service (`AuditerService`), and also provides a number of related domain services (`AuditingServiceMenu`, `AuditingServiceRepository` and `AuditingServiceContributions`).
 
-== Usage
+The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s audit module also provides an implementation, `org.isisaddons.module.audit.dom.AuditerServiceUsingJdo`.
+This creates an audit record for each changed property (ie every time that `AuditerService#audit(...)` is called.
 
-The typical way to indicate that an object should be audited is to annotate it with the xref:../rgant/rgant.adoc#_rgant-DomainObject_auditing[`@DomainObject#auditing()`] annotation.
+The module also provides:
 
+* `AuditingServiceMenu` service which provides actions to search for ``AuditEntry``s, underneath an 'Activity' menu on
+the secondary menu bar.
 
+* `AuditingServiceRepository` service to to search for persisted `AuditEntry``s.
+None of its actions are visible in the user interface (they are all `@Programmatic`).
 
+* `AuditingServiceContributions` which contributes collections to the xref:../rgcms/rgcms.adoc#_rgcms_classes_mixins_HasTransactionId[ `HasTransactionId`] interface.
+This will therefore display all audit entries that occurred in a given request/transaction, in other words whenever a command, a published event or another audit entry is displayed.
 
-== Alternative Implementations
 
-The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s audit module provides an implementation of this service (`AuditerService`), and also provides a number of related domain services (`AuditingServiceMenu`, `AuditingServiceRepository` and `AuditingServiceContributions`).
+These services can be activated by updating the `pom.xml` and updating the `AppManifest#getModules()` method.
 
 If menu items or contributions are not required in the UI, these can be suppressed either using security or by implementing a xref:../ugbtb/ugbtb.adoc#_ugbtb_hints-and-tips_vetoing-visibility[vetoing subscriber].
 
@@ -107,16 +106,10 @@ If menu items or contributions are not required in the UI, these can be suppress
 
 == Related Services
 
-The auditing service works very well with implementations of
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] that persist the ``Interaction.Execution`` objects
-obtained from the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] service.  The interaction
-execution captures the _cause_ of an interaction (an action was invoked, a property was edited), while the
-`AuditerService` audit entries capture the _effect_ of that interaction in terms of changed state.
+The auditing service works very well with implementations of xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`] that persist the ``Interaction.Execution`` objects obtained from the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] service.
+The interaction execution captures the _cause_ of an interaction (an action was invoked, a property was edited), while the `AuditerService` audit entries capture the _effect_ of that interaction in terms of changed state.
 
 The xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] can also be combined with the auditer service, however
 ``Command``s are primarily concerned with capture the _intent_ of an action, not the actual action invocation itself.
 
-The `AuditerService` is intended to replace the (now-deprecated)
-xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService3[`AuditingService3`], as the latter does not support the concept of multiple
-transactions within a single interaction.
-
+The `AuditerService` is intended to replace the (now-deprecated) xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService3[`AuditingService3`], as the latter does not support the concept of multiple transactions within a single interaction.
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_PublisherService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_PublisherService.adoc
index 84b5e49..777e0b9 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_PublisherService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_PublisherService.adoc
@@ -6,20 +6,15 @@
 
 
 
-The `PublisherService` API is intended for coarse-grained publish/subscribe for system-to-system interactions, from Apache Isis to some other system.  Events that can be published are action invocations/property
-edits, and changed objects. A typical use case is to publish onto a pub/sub bus such as
-link:http://activemq.apache.org/[ActiveMQ] with link:http://camel.apache.org[Camel] to keep other systems up to date.
+The `PublisherService` API is intended for coarse-grained publish/subscribe for system-to-system interactions, from Apache Isis to some other system.
+Events that can be published are action invocations/property edits, and changed objects.
+A typical use case is to publish onto a pub/sub bus such as link:http://activemq.apache.org/[ActiveMQ] with link:http://camel.apache.org[Camel] to keep other systems up to date.
 
-An alternative use is for profiling: for each execution (action invocation/property edit) the framework captures
-metrics of the number of objects loaded or dirtied as the result of that execution.  If the
-xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_WrapperFactory[`WrapperFactory`] is used to call other objects then the metrics are captured
-for each sub-execution.  The framework provides a default implementation, `PublisherServiceLogging`, that will log
-these execution graphs (in XML form, per the xref:../rgcms/rgcms.adoc#_rgcms_schema-ixn["ixn" schema]) to an SLF4J logger.
+An alternative use is for profiling: for each execution (action invocation/property edit) the framework captures metrics of the number of objects loaded or dirtied as the result of that execution.
+If the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_WrapperFactory[`WrapperFactory`] is used to call other objects then the metrics are captured for each sub-execution.
+The framework provides a default implementation, `PublisherServiceLogging`, that will log these execution graphs (in XML form, per the xref:../rgcms/rgcms.adoc#_rgcms_schema-ixn["ixn" schema]) to an SLF4J logger.
 
-Only actions/properties/domain objects annotated for publishing (using
-xref:../rgant/rgant.adoc#_rgant-Action_publishing[`@Action#publishing()`],
-xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`] or
-xref:../rgant/rgant.adoc#_rgant-DomainObject_publishing[`@DomainObject#publishing()`]) are published.
+Only actions/properties/domain objects annotated for publishing (using xref:../rgant/rgant.adoc#_rgant-Action_publishing[`@Action#publishing()`], xref:../rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`] or xref:../rgant/rgant.adoc#_rgant-DomainObject_publishing[`@DomainObject#publishing()`]) are published.
 
 
 == SPI
@@ -36,12 +31,9 @@ public interface PublisherService {
 <1> to publish an individual action invocation or property edit, as captured within an `Interaction.Execution`.
 <2> to publish a set of changed objects.
 
-Each `Interaction.Execution` has an owning `Interaction`; this is the same object obtainable from
-xref:../rgsvc/rgsvc.adoc#_rgsvc_spi_InteractionContext[`InteractionContext`].  Implementations that publish member executions
-can use `Interaction.Execution#getDto()` method to return a DTO (as per the
-xref:../rgcms/rgcms.adoc#_rgcms_schema-ixn["ixn" schema]) which can be converted into a serializable XML representation using
-the `InteractionDtoUtils` utility class.  The XML can either serialize a single execution, or can be a "deep"
- serialization of an execution and all sub-executions.
+Each `Interaction.Execution` has an owning `Interaction`; this is the same object obtainable from xref:../rgsvc/rgsvc.adoc#_rgsvc_spi_InteractionContext[`InteractionContext`].
+Implementations that publish member executions can use `Interaction.Execution#getDto()` method to return a DTO (as per the xref:../rgcms/rgcms.adoc#_rgcms_schema-ixn["ixn" schema]) which can be converted into a serializable XML representation using the `InteractionDtoUtils` utility class.
+The XML can either serialize a single execution, or can be a "deep" serialization of an execution and all sub-executions.
 
 The full API of `PublishedObjects` itself is:
 
@@ -60,20 +52,17 @@ public interface PublishedObjects extends HasTransactionId, HasUsername {
     int getNumberPropertiesModified();
 }
 ----
-<1> inherited from `HasTransactionId`, correlates back to the unique identifier of the transaction in which these
-objects were changed.
+<1> inherited from `HasTransactionId`, correlates back to the unique identifier of the transaction in which these objects were changed.
 <2> inherited from `HasUsername`, is the user that initiated the transaction causing these objects to change
 <3> the time that this set of objects was collated (just before the completion of the transaction completes)..
-<4> returns a DTO (as per the xref:../rgcms/rgcms.adoc#_rgcms_schema-chg["chg" schema]) which can be converted into a
-serializable XML representation can be obtained using the `ChangesDtoUtils` utility class.
+<4> returns a DTO (as per the xref:../rgcms/rgcms.adoc#_rgcms_schema-chg["chg" schema]) which can be converted into a serializable XML representation can be obtained using the `ChangesDtoUtils` utility class.
 <5> metrics as to the number of objects loaded, created, updated or deleted and the number of object properties modified (in other words the "size" or "weight" of the transaction).
 
 
 == Implementations
 
-The framework allows multiple implementations of this service to be registered; all will be called.  The framework
-provides one implementation of its own, `PublisherServiceLogging` (in `o.a.i.applib.services.publish` package); this
-logs "deep" serializations to an SLF4J logger.
+The framework allows multiple implementations of this service to be registered; all will be called.
+The framework provides one implementation of its own, `PublisherServiceLogging` (in `o.a.i.applib.services.publish` package); this logs "deep" serializations to an SLF4J logger.
 
 For example, this can be configured to write to a separate log file by adding the following to `logging.properties`:
 
@@ -90,10 +79,6 @@ log4j.additivity.org.apache.isis.applib.services.publish.PublisherServiceLogging
 ----
 
 
-The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s publishmq module also provides an implementation (`o.ia.m.publishmq.dom.servicespi.PublishingServiceUsingActiveMq`).
-This implementation publishes each member execution as an event on an link:http://activemq.apache.org[ActiveMQ] message queue.
-It also persists each execution as a `PublishedEvent` entity, allowing the event to be republished if necessary.
-The implementation also provides the ability to log additional `StatusMessage` entities, correlated on the transactionId, useful for diagnosing and monitoring the activity of subscribers of said message queues.
 
 
 == Usage
@@ -108,7 +93,15 @@ To indicate that a changed object should be published is to annotate it with the
 
 == Alternative Implementations
 
-The (non-ASF) link:http://platform.incode.org[Incode Platform^];s publishmq module provides an implementation of this service.
+The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s publishmq module also provides an implementation (`o.ia.m.publishmq.dom.servicespi.PublisherServiceUsingActiveMq`).
+This implementation:
+
+* publishes each member execution as an event on an link:http://activemq.apache.org[ActiveMQ] message queue.
+* persists each execution as a `PublishedEvent` entity, allowing the event to be republished if necessary.
+* provides the ability to log additional `StatusMessage` entities, correlated on the transactionId, useful for diagnosing and monitoring the activity of subscribers of said message queues.
+
+
+This service can be activated by updating the `pom.xml` and updating the `AppManifest#getModules()` method.
 
 The module also provide services that contribute to the UI.
 If contributions are not required in the UI, these can be suppressed either using security or by implementing a xref:../ugbtb/ugbtb.adoc#_ugbtb_hints-and-tips_vetoing-visibility[vetoing subscriber].
@@ -120,7 +113,7 @@ If contributions are not required in the UI, these can be suppressed either usin
 
 This service supports two main use cases:
 
-* coarse-grained publish/subscribe for system-to-system interactions, from Apache Isis to some other system. +
+* coarse-grained publish/subscribe for system-to-system interactions, from Apache Isis to some other system.
 +
 [NOTE]
 ====
@@ -133,24 +126,15 @@ is deprecated: the `PublisherService` is intended as a replacement for `Publishi
 
 To support these use cases several other services are involved:
 
-* the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] is used to obtain the `Interaction` from which
-the member executions are published.
+* the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] is used to obtain the `Interaction` from which the member executions are published.
 
-* the (internal) xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_ChangedObjectsServiceInternal[`ChangedObjectsServiceInternal`] domain
-service is used to obtain the set of objects modified throughout the transaction
+* the (internal) xref:../rgfis/rgfis.adoc#_rgfis_persistence-layer_ChangedObjectsServiceInternal[`ChangedObjectsServiceInternal`] domain service is used to obtain the set of objects modified throughout the transaction
 
-* the (internal) xref:../rgfis/rgfis.adoc#_rgfis_spi_PublisherServiceInternal[`PublisherServiceInternal`] domain service filters
-these down to those changed objects that are also published (as per
-xref:../rgant/rgant.adoc#_rgant-DomainObject_publishing[`@DomainObject#publishing()`]) and delegates to the `PublisherService`.
+* the (internal) xref:../rgfis/rgfis.adoc#_rgfis_spi_PublisherServiceInternal[`PublisherServiceInternal`] domain service filters these down to those changed objects that are also published (as per xref:../rgant/rgant.adoc#_rgant-DomainObject_publishing[`@DomainObject#publishing()`]) and delegates to the `PublisherService`.
 
-* the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-api_MetricsService[`MetricsService`] is used to obtain the objects that are loaded
-throughout the transaction; this info is used in order to instantiate the `PublishedObjects` object passed through to
-the `PublisherService`.
+* the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-api_MetricsService[`MetricsService`] is used to obtain the objects that are loaded throughout the transaction; this info is used in order to instantiate the `PublishedObjects` object passed through to the `PublisherService`.
 
-The xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] differs from the `PublisherService` in that it is
-intended for fine-grained publish/subscribe for object-to-object interactions within an Apache Isis domain object
-model. The event propagation is strictly in-memory, and there are no restrictions on the object acting as the event;
-it need not be serializable, for example.  That said, it is possible to obtain a serialization of the action
-invocation/property edit causing the current event to be raised using
-xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] domain service.
+The xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`] differs from the `PublisherService` in that it is intended for fine-grained publish/subscribe for object-to-object interactions within an Apache Isis domain object model.
+The event propagation is strictly in-memory, and there are no restrictions on the object acting as the event; it need not be serializable, for example.
+That said, it is possible to obtain a serialization of the action invocation/property edit causing the current event to be raised using xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] domain service.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_UserRegistrationService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_UserRegistrationService.adoc
index 88842ef..41d7d46 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_UserRegistrationService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_persistence-layer-spi_UserRegistrationService.adoc
@@ -74,8 +74,6 @@ public class AppUserRegistrationService extends SecurityModuleAppUserRegistratio
 This is needed so that the self-registered users are assigned automatically to your application role(s) and be able to use the application. Without any role such user will be able only to see/use the logout link of the application.
 
 
-
-
 == Related Services
 
 The most common use case is to allow users to sign-up through Apache Isis' Wicket viewer. Because the process requires email to be sent, the following services must be configured:
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_AcceptHeaderService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_AcceptHeaderService.adoc
index 24b1ed6..c911f7b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_AcceptHeaderService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_AcceptHeaderService.adoc
@@ -38,6 +38,10 @@ The default implementation is provided by `o.a.i.v.ro.rendering.service.accepthe
 Note that the service will only return a list when the request is initiated through the xref:../ugvro/ugvro.adoc#[Restful Objects viewer].  Otherwise the service will return `null`.
 ====
 
+To use an alternative implementation, use
+xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained
+in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+
 
 == Usage
 
@@ -66,4 +70,3 @@ map domain objects to view models/DTOs.
 
 
 
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_DeepLinkService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_DeepLinkService.adoc
index 1e7a7ef..a272dbb 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_DeepLinkService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_DeepLinkService.adoc
@@ -36,4 +36,3 @@ The xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_EmailNotificationServ
 
 
 
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_GuiceBeanProvider.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_GuiceBeanProvider.adoc
index 08f5b1d..8bc1931 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_GuiceBeanProvider.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-api_GuiceBeanProvider.adoc
@@ -29,7 +29,10 @@ public interface GuiceBeanProvider {
 }
 ----
 
-The xref:../ugvw/ugvw.adoc#[Wicket viewer] this provides an implementation of this service.
+The xref:../ugvw/ugvw.adoc#[Wicket viewer] this provides a default implementation of this service.
+
+To use an alternative implementation, implement the `GuideBeanProvider` interface and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_EmailNotificationService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_EmailNotificationService.adoc
index b53479a..71c5a83 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_EmailNotificationService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_EmailNotificationService.adoc
@@ -55,11 +55,9 @@ If you wish to write an alternative implementation of this service, note that (u
 This implies a couple of additional constraints:
 
 * first, implementation class should also be annotated with `@com.google.inject.Singleton`
-* second, there may not be any Apache Isis session running. (If necessary, one can be created on the fly using `IsisContext.doInSession(...)`)
-
-To ensure that your alternative implementation takes the place of the default implementation, register it explicitly in `isis.properties`.
-
 
+* second, there may not be any Apache Isis session running.
+(If necessary, one can be created on the fly using `IsisContext.doInSession(...)`)
 
 
 == Related Services
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_ErrorReportingService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_ErrorReportingService.adoc
index 18d7c26..a7daccf 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_ErrorReportingService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_ErrorReportingService.adoc
@@ -103,5 +103,3 @@ which is rendered as:
 image::{_imagesdir}reference-services-spi/ErrorReportingService/kitchensink-example.png[width="860px",link="{_imagesdir}reference-services-spi/ErrorReportingService/kitchensink-example.png"]
 
 
-
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_ExceptionRecognizer.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_ExceptionRecognizer.adoc
index 357ded8..b448eda 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_ExceptionRecognizer.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_ExceptionRecognizer.adoc
@@ -5,11 +5,14 @@
 :_imagesdir: images/
 
 
-The `ExceptionRecognizer` service provides the mechanism for both the domain programmer and also for components to be able to recognize and handle certain exceptions that may be thrown by the system.  Rather than display an obscure error to the end-user, the application can instead display a user-friendly message.
+The `ExceptionRecognizer` service provides the mechanism for both the domain programmer and also for components to be able to recognize and handle certain exceptions that may be thrown by the system.
+Rather than display an obscure error to the end-user, the application can instead display a user-friendly message.
 
-For example, the JDO/DataNucleus Objectstore provides a set of recognizers to recognize and handle SQL constraint exceptions such as uniqueness violations. These can then be rendered back to the user as expected errors, rather than fatal stacktraces.
+For example, the JDO/DataNucleus Objectstore provides a set of recognizers to recognize and handle SQL constraint exceptions such as uniqueness violations.
+These can then be rendered back to the user as expected errors, rather than fatal stacktraces.
 
-It is also possible to provide additional implementations, registered in `isis.properties`.  Unlike other services, where any service registered in `isis.properties` replaces any default implementations, in the case of this service all implementations registered are "consulted" to see if they recognize an exception (the chain-of-responsibility pattern).
+It is also possible to provide additional implementations, registered in `isis.properties`.
+Unlike other services, where any service registered in `isis.properties` replaces any default implementations, in the case of this service all implementations registered are "consulted" to see if they recognize an exception (the chain-of-responsibility pattern).
 
 
 
@@ -41,7 +44,8 @@ public interface ExceptionRecognizer2 ... {
 <1> an enumeration of varies categories of exceptions that are recognised
 <2> represents the fact that an exception has been recognized as has been converted into a user-friendy message, and has been categorized
 <3> the main API, to attempt to recognize an exception
-<4> deprecated API which converted exceptions into strings (reasons), ie without any categorization.  This is no longer called.
+<4> deprecated API which converted exceptions into strings (reasons), ie without any categorization.
+This is no longer called.
 
 
 The categories are:
@@ -69,10 +73,16 @@ public interface ExceptionRecognizer2 ... {
 <6> recognized, but uncategorized (typically: a recognizer of the original `ExceptionRecognizer` API).
 
 
-In essence, if an exception is recognized then it is also categorized.  This lets the viewer act accordingly.  For example, if an exception is raised from the loading of an individual object, then this is passed by the registered ``ExceptionRecognizer``s. If any of these recognize the exception as representing a not-found exception, then an Apache Isis `ObjectNotFoundException` is raised. Both the viewers interprets this correctly (the xref:../ugvw/ugvw.adoc#[Wicket viewer] as a suitable [...]
+In essence, if an exception is recognized then it is also categorized.
+This lets the viewer act accordingly.
+For example, if an exception is raised from the loading of an individual object, then this is passed by the registered ``ExceptionRecognizer``s.
+If any of these recognize the exception as representing a not-found exception, then an Apache Isis `ObjectNotFoundException` is raised.
+Both the viewers interprets this correctly (the xref:../ugvw/ugvw.adoc#[Wicket viewer] as a suitable error page, the xref:../ugvro/ugvro.adoc#[Restful Objects viewer] as a 404 status return code).
 
 
-If the implementation recognizes the exception then it returns a user-friendly message to be rendered (by the viewer) back to the user; otherwise it returns `null`. There is no need for the implementation to check for exception causes; the casual chain is unwrapped by Apache Isis core and each exception in the chain will also be passed through to the recognizer (from most specific to least). The recognizer implementation can therefore be as fine-grained or as coarse-grained as it wishes.
+If the implementation recognizes the exception then it returns a user-friendly message to be rendered (by the viewer) back to the user; otherwise it returns `null`.
+There is no need for the implementation to check for exception causes; the casual chain is unwrapped by Apache Isis core and each exception in the chain will also be passed through to the recognizer (from most specific to least).
+The recognizer implementation can therefore be as fine-grained or as coarse-grained as it wishes.
 
 
 
@@ -81,15 +91,21 @@ If the implementation recognizes the exception then it returns a user-friendly m
 
 The framework provides two default implementations:
 
-* `o.a.i.core.metamodel.services.container.DomainObjectContainerDefault` provided by Apache Isis core is itself an `ExceptionRecognizer`, and will handle ``ConcurrencyException``s.  It will also handle any application exceptions raised by the system (subclasses of `o.a.i.applib.RecoverableException`).
+* `o.a.i.core.metamodel.services.container.DomainObjectContainerDefault` provided by Apache Isis core is itself an `ExceptionRecognizer`, and will handle ``ConcurrencyException``s.
++
+It will also handle any application exceptions raised by the system (subclasses of `o.a.i.applib.RecoverableException`).
 
-* `o.a.i.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore` bundles up a number of more fine-grained implementations:
+* `o.a.i.objectstore.jdo.applib.service.exceprecog.ExceptionRecognizerCompositeForJdoObjectStore`
++
+which bundles up a number of more fine-grained implementations:
++
 ** `ExceptionRecognizerForSQLIntegrityConstraintViolationUniqueOrIndexException`
 ** `ExceptionRecognizerForJDOObjectNotFoundException`
 ** `ExceptionRecognizerForJDODataStoreException`
 
 
-If you want to recognize and handle additional exceptions (for example to capture error messages specific to the JDBC driver you might be using), then create a fine-grained implementation of `ExceptionRecognizer2` for the particular error message (there are some convenience implementations of the interface that you can subclass from if required) and register in `isis.properties`.
+If you want to recognize and handle additional exceptions (for example to capture error messages specific to the JDBC driver you might be using), then create a fine-grained implementation of `ExceptionRecognizer` for the particular error message (there are some convenience implementations of the interface that you can subclass from if required) and annotated with `@DomainService` in the usual way.
+Make sure that the service resides under a module registered in `AppManifest`.
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_HintStore.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_HintStore.adoc
index e7efebc..45cabbf 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_HintStore.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_HintStore.adoc
@@ -42,6 +42,7 @@ per the xref:../rgsvc/rgsvc.adoc#_rgsvc_integration-api_BookmarkService[`Bookmar
 
 The core framework provides a default implementation of this service (`org.apache.isis.viewer.wicket.viewer.services.HintStoreUsingWicketSession`).
 
+To use an alternative implementation, implement the `HintStore` interface and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 
 
 == View models
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_RoutingService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_RoutingService.adoc
index 65550ba..02ef214 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_RoutingService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_RoutingService.adoc
@@ -54,12 +54,11 @@ public interface RoutingService {
 
 == Implementation
 
-The framework provides a default implementation - `RoutingServiceDefault` - which will always return the original object provided, or the home page
-if a `null` or `void` was provided.  It uses the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_HomePageProviderService[`HomePageProviderService`].
+The framework provides a default implementation - `RoutingServiceDefault` - which will always return the original object provided, or the home page if a `null` or `void` was provided.
+It uses the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_HomePageProviderService[`HomePageProviderService`].
 
-There can be multiple implementations of `RoutingService` registered.  These are checked in turn (chain of responsibility
-pattern), ordered according to xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`]
-(as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+There can be multiple implementations of `RoutingService` registered.
+These are checked in turn (chain of responsibility pattern), ordered according to xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 The route from the first service that returns `true` from its `canRoute(...)` method will be used.
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_TableColumnOrderService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_TableColumnOrderService.adoc
index 2a71d03..e406b02 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_TableColumnOrderService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_TableColumnOrderService.adoc
@@ -39,4 +39,9 @@ If all provided implementations return `null`, then the framework will fallback
 
 The framework provides a fallback implementation of this service, namely `TableColumnOrderService.Default`.
 
+There can be multiple implementations of `TableColumnOrderService registered.
+These are checked in turn (chain of responsibility pattern), ordered according to xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+The order from the first service that returns a non null value will be used.
+
+
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_TranslationService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_TranslationService.adoc
index eeba5d9..a846227 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_TranslationService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_TranslationService.adoc
@@ -49,7 +49,8 @@ If in write mode, then the implementation is saving translation keys, and will a
 
 == Implementation
 
-The Apache Isis framework provides a default implementation (`TranslationServicePo`) that uses the GNU `.pot` and `.po` files for translations.  It relies on the `LocaleProvider` service (to return the `Locale` of the current user) and also the `TranslationsResolver` service (to read existing translations).
+The Apache Isis framework provides a default implementation (`TranslationServicePo`) that uses the GNU `.pot` and `.po` files for translations.
+It relies on the `LocaleProvider` service (to return the `Locale` of the current user) and also the `TranslationsResolver` service (to read existing translations).
 
 The framework also provides a supporting `TranslationServicePoMenu` provides menu items under the "Prototyping" secondary menu for controlling this service and downloading `.pot` files for translation.
 
@@ -58,6 +59,7 @@ If the menu items are not required then these can be suppressed either using sec
 For more details on the implementation, see xref:../ugbtb/ugbtb.adoc#_ugbtb_i18n[i18n support].
 
 
+If the menu items are not required then these can be suppressed either using security or by implementing a xref:../ugbtb/ugbtb.adoc#_ugbtb_hints-and-tips_vetoing-visibility[vetoing subscriber].
 
 === Configuration Properties
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_UrlEncodingService.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_UrlEncodingService.adoc
index 5e77af5..517a071 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_UrlEncodingService.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_presentation-layer-spi_UrlEncodingService.adoc
@@ -6,26 +6,20 @@
 
 
 
-The `UrlEncodingService` defines a consistent way to convert strings to/from a form safe for use
-within a URL.  The service is used by the framework to map xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_view-models[view model]
-mementos (derived from the state of the view model itself) into a form that can be used as a view model.  When the
-framework needs to recreate the view model (for example to invoke an action on it), this URL is converted back into a
-view model memento, from which the view model can then be hydrated.
+The `UrlEncodingService` defines a consistent way to convert strings to/from a form safe for use within a URL.
+The service is used by the framework to map xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_view-models[view model] mementos (derived from the state of the view model itself) into a form that can be used as a view model.
+When the framework needs to recreate the view model (for example to invoke an action on it), this URL is converted back into a view model memento, from which the view model can then be hydrated.
 
 Defining this functionality as an SPI has two use cases:
 
-* first, (though some browsers support longer strings), there is a limit of 2083 characters for URLs.  For view model
-mementos that correspond to large strings (as might occur when serializing a JAXB
-xref:../rgant/rgant.adoc#_rgant-XmlRootElement[`@XmlRootElement`]-annotated view model), the service provides a
-hook.  +
+* first, (though some browsers support longer strings), there is a limit of 2083 characters for URLs.
+For view model mementos that correspond to large strings (as might occur when serializing a JAXB xref:../rgant/rgant.adoc#_rgant-XmlRootElement[`@XmlRootElement`]-annotated view model), the service provides a hook.
 +
 For example, each memento string could be mapped to a GUID held in some cluster-aware cache.
 
-* the service provides the ability, to encrypt the string in order to avoid leakage of potentially sensitive
-state within the URL.
+* the service provides the ability, to encrypt the string in order to avoid leakage of potentially sensitive state within the URL.
 
-The framework provides a default implementation of this service, `UrlEncodingServiceUsingBaseEncoding` (also in the
-applib) that uses `base-64` encoding to `UTF-8` charset.
+The framework provides a default implementation of this service, `UrlEncodingServiceUsingBaseEncoding` (also in the applib) that uses `base-64` encoding to `UTF-8` charset.
 
 
 == SPI
@@ -48,12 +42,9 @@ public interface UrlEncodingService {
 
 == Implementation
 
-The framework provides a default implementation (`UrlEncodingServiceUsingBaseEncoding`) that simply converts the string
-using base-64 encoding and UTF-8 character set.  As already noted, be aware that the maximum length of a URL should not
-exceed 2083 characters.  For large view models, there's the possibility that this limit could be exceeded; in such
-cases register an alternative implementation of this service.
+The framework provides a default implementation -- `UrlEncodingServiceUsingBaseEncoding` -- that simply converts the string using base-64 encoding and UTF-8 character set.
+As already noted, be aware that the maximum length of a URL should not exceed 2083 characters.
+For large view models, there's the possibility that this limit could be exceeded; in such cases register an alternative implementation of this service.
 
-To use an alternative implementation, use
-xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained
-in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
+To use an alternative implementation, implement the `UrlEncodingService` interface and use xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`] (as explained in the xref:../rgsvc/rgsvc.adoc#__rgsvc_intro_overriding-the-services[introduction] to this guide).
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_testing_FixtureScripts.adoc b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_testing_FixtureScripts.adoc
index 4507407..9fa023e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_testing_FixtureScripts.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgsvc/_rgsvc_testing_FixtureScripts.adoc
@@ -6,7 +6,7 @@
 
 
 
-The `FixtureScripts` service provides the ability to execute xref:../ugtst/ugtst.adoc#_ugtst_fixture-scripts_api-and-usage[fixture scripts] .
+The `FixtureScripts` service provides the ability to execute xref:../ugtst/ugtst.adoc#_ugtst_fixture-scripts_api-and-usage[fixture scripts].
 
 The default implementation of this service, `FixtureScriptsDefault`, uses the associated xref:../rgsvc/rgsvc.adoc#_rgsvc_testing_FixtureScriptsSpecificationProvider[`FixtureScriptsSpecificationProvider`] to obtain a `FixtureScriptsSpecification`.
 This configures this service, for example telling it which package to search for `FixtureScript` classes, how to execute those classes, and hints that influence the UI.
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_deployment_gae.adoc b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_deployment_gae.adoc
index 5773ce1..4489dc1 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_deployment_gae.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_deployment_gae.adoc
@@ -17,7 +17,7 @@ All entities must have a `@PrimaryKey`. Within GAE, the type of this key matters
 
 For an entity to be an aggregate root, (ie a root of an GAE entity group), its key must be a `Long`, eg:
 
-Any collection that holds this entity type (eg `ToDoItem#dependencies` holding a collection of `ToDoItem`s) should then be annotated with `@Unowned` (a GAE annotation).
+Any collection that holds this entity type (eg `ToDoItem#dependencies` holding a collection of ``ToDoItem``s) should then be annotated with `@Unowned` (a GAE annotation).
 
 If on the other hand you want the object to be owned (through a 1:m relationship somewhere) by some other root, then use a String:
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_are-you-sure.adoc b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_are-you-sure.adoc
index f2d8ed0..268a9bc 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_are-you-sure.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_are-you-sure.adoc
@@ -5,8 +5,8 @@
 :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 [...]
 
 
-Sometimes an action might perform irreversible changes.  In such a case it's probably a good idea for the UI to require that the
-end-user explicitly confirms that they intended to invoke the action.
+Sometimes an action might perform irreversible changes.
+In such a case it's probably a good idea for the UI to require that the end-user explicitly confirms that they intended to invoke the action.
 
 == Using action semantics
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_how-to-handle-void-and-null-results.adoc b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_how-to-handle-void-and-null-results.adoc
index 0025a7c..eed1999 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_how-to-handle-void-and-null-results.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_how-to-handle-void-and-null-results.adoc
@@ -36,7 +36,7 @@ public class RoutingServiceUsingBreadcrumbs extends RoutingServiceDefault {
         if(original != null) {                                                  // <2>
             return original;
         }
-        container.flush();                                                      // <3>
+        repositoryService.flush();                                              // <3>
 
         final BreadcrumbModelProvider wicketSession =                           // <4>
             (BreadcrumbModelProvider) AuthenticatedWebSession.get();
@@ -62,7 +62,7 @@ public class RoutingServiceUsingBreadcrumbs extends RoutingServiceDefault {
     @Inject
     HomePageProviderService homePageProviderService;
     @Inject
-    DomainObjectContainer container;
+    RepositoryService repositoryService;
 }
 ----
 <1> override the default imlpementation
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_persisted-title.adoc b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_persisted-title.adoc
index 75f7faa..fa17a9e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_persisted-title.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_persisted-title.adoc
@@ -38,11 +38,11 @@ public class TitlingService extends AbstractSubscriber {
         if(persistentInstance instanceof ObjectWithPersistedTitle) {
             final ObjectWithPersistedTitle objectWithPersistedTitle =
                 (ObjectWithPersistedTitle) persistentInstance;
-            objectWithPersistedTitle.setTitle(container.titleOf(objectWithPersistedTitle));
+            objectWithPersistedTitle.setTitle(titleService.titleOf(objectWithPersistedTitle));
         }
     }
     @Inject
-    private DomainObjectContainer container;
+    TitleService titleService;
 }
 ----
 
@@ -63,7 +63,7 @@ public class TitlingService {
                     if(persistentInstance instanceof ObjectWithPersistedTitle) {
                         final ObjectWithPersistedTitle objectWithPersistedTitle =
                             (ObjectWithPersistedTitle) persistentInstance;
-                        objectWithPersistedTitle.setTitle(container.titleOf(objectWithPersistedTitle));
+                        objectWithPersistedTitle.setTitle(titleService.titleOf(objectWithPersistedTitle));
                     }
                 }
                 @Override
@@ -72,9 +72,9 @@ public class TitlingService {
             }, null);
     }
     @Inject
-    private IsisJdoSupport isisJdoSupport;
+    IsisJdoSupport isisJdoSupport;
     @Inject
-    private DomainObjectContainer container;
+    TitleService titleService;
 }
 ----
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_replacing-default-service-implementations.adoc b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_replacing-default-service-implementations.adoc
index e5a866e..645c2a6 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_replacing-default-service-implementations.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_hints-and-tips_replacing-default-service-implementations.adoc
@@ -6,9 +6,10 @@
 
 
 
-The framework provides default implementations for many of the xref:../rgsvc/rgsvc.adoc#[domain services].  This is convenient, but sometimes you will want to replace the default implementation with your own service implementation.
+The framework provides default implementations for many of the xref:../rgsvc/rgsvc.adoc#[domain services].
+This is convenient, but sometimes you will want to replace the default implementation with your own service implementation.
 
-For example, suppose you wanted to provide your own implementation of xref:../rgsvc/rgsvc.adoc#_rgsvc_api_LocaleProvider[`LocaleProvider`].
+For example, suppose you wanted to provide your own implementation of xref:../rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_LocaleProvider[`LocaleProvider`].
 The trick is to use the xref:../rgant/rgant.adoc#_rgant-DomainService_menuOrder[`@DomainService#menuOrder()`] attribute, specifying a low number (typically `"1"`).
 
 Here's how:
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_i18n.adoc b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_i18n.adoc
index 475f34d..6db178b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_i18n.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_i18n.adoc
@@ -197,13 +197,13 @@ msgstr "Ich heisse {firstName} {lastName}."
 then the translation would be: "Ich heisse James Bond".
 
 
-The same class is used in xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`] so that you can raise translatable info, warning and error messages; each of the relevant methods are overloaded.
+The same class is used in xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_MessageService[`MessageService`] so that you can raise translatable info, warning and error messages; each of the relevant methods are overloaded.
 
 For example:
 
 [source,java]
 ----
-public interface DomainObjectContainer {
+public interface MessageService {
     void informUser(String message);
     void informUser(
         TranslatableMessage message,
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_programming-model_finetuning.adoc b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_programming-model_finetuning.adoc
index c7e8333..15e6b6d 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_programming-model_finetuning.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugbtb/_ugbtb_programming-model_finetuning.adoc
@@ -40,11 +40,13 @@ Let's see how this is done.
 
 === Including or excluding facets
 
-Suppose that you wanted to completely remove support for the (already deprecated) `@ActionOrder` annotation. This would be done using:
+Suppose that you wanted to completely remove support for some existing facet, eg to support the "persisting()" and "persisted()" callback methods.
+This would be done using:
 
 [source,ini]
 ----
-isis.reflector.facets.exclude=org.apache.isis.core.metamodel.facets.object.actionorder.annotation.ActionOrderFacetAnnotationFactory
+isis.reflector.facets.exclude=\
+    org.apache.isis.core.metamodel.facets.object.callbacks.PersistCallbackFacetFactory
 ----
 
 Or, suppose you wanted to use add some custom facet factory of your own, use:
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_events_domain-events.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_events_domain-events.adoc
index 31089f3..652ac05 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_events_domain-events.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_events_domain-events.adoc
@@ -14,21 +14,21 @@ In fact, each event can be fired up to five times, with the event's `getEventPha
 
 * *hide* phase allows the subscriber to hide the member
 
-* *disable* phase allows the subscriber to disable the member. +
-
+* *disable* phase allows the subscriber to disable the member.
++
 For a property this makes it read-only; for an action this makes it "greyed out".
 (Collections are implicitly read-only).
 
 * *validate* phase allows the subscriber to validate the proposed change.
-
++
 For a property this means validating the proposed new value of the property; for an action this means validating the action parameter arguments.
 For example, a referential integrity restrict could be implemented here.
 
-* *executing* phase is prior to the actual property edit/action invocation, allowing the subscriber to perform side-effects. +
-
+* *executing* phase is prior to the actual property edit/action invocation, allowing the subscriber to perform side-effects.
++
 For example, a cascade delete could be implemented here.
 
-* *executed* phase is after the actual property edit/action invocation. +
+* *executed* phase is after the actual property edit/action invocation.
 +
 For example, a business audit event could be implemented here.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_identifiers_oid.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_identifiers_oid.adoc
index 0d5fb4d..e1b3399 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_identifiers_oid.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_identifiers_oid.adoc
@@ -25,7 +25,7 @@ Some examples:
 * the information within an OID could be converted into a barcode, and stamped onto a PDF form.
 When the PDF is scanned by the mail room, the barcode could be read to attach the correspondence to the relevant domain object.
 
-* as a handle to any object in an audit record, as used by xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`] or xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] (the latter deprecated);
+* as a handle to any object in an audit record, as used by xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`];
 
 * similarly within implementations of xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] to persist `Command`
 objects
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_identifiers_title-and-icon.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_identifiers_title-and-icon.adoc
index f9446ff..522558e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_identifiers_title-and-icon.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_identifiers_title-and-icon.adoc
@@ -19,7 +19,7 @@ The title is usually just a simple string, but the framework also allows for the
 == Icon
 
 Sometimes it's helpful for the icon to represent more than just the object's type; it might also indicate the state of an object.
-For example, a shipped `Order` might have a slightly different icon to a yet-to-be-shipped `Order`; or an overdue `Loan` might be distinguished separately from a
+For example, a shipped `Order` might have a slightly different icon to a yet-to-be-shipped `Order`; or a library book that is `loaned out` might be distinguished from one that is `available`.
 
 == CSS Class
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_types-of-domain-objects_domain-entities.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_types-of-domain-objects_domain-entities.adoc
index e2bb0a7..fe20292 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_types-of-domain-objects_domain-entities.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_building-blocks_types-of-domain-objects_domain-entities.adoc
@@ -15,7 +15,7 @@ From the end-users' perspective, when they talk of "order" they almost always me
 Eric Evans' link:http://books.google.com/books/about/Domain_Driven_Design.html?id=hHBf4YxMnWMC[Domain Driven Design] has a lot to say about aggregate roots and their responsibilities: in particular that it is the responsibility of the aggregate root to maintain the invariants of its component pieces, and that roots may only reference other roots.
 There's good logic here: requiring only root-to-root relationships reduces the number of moving parts that the developer has to think about.
 
-On the other hand, this constraint can substantially complicate matters when mapping domain layer to the persistenec layer.
+On the other hand, this constraint can substantially complicate matters when mapping domain layer to the persistence layer.
 DDD tends to de-emphasise such matters: it aims to be completely agnostic about the persistence layer, with the responsibilities for managing relationships moved (pretty much by definition) into the domain layer.
 
 As a framework though Apache Isis is less dogmatic about such things.
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_apache-isis-vs_cqrs.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_apache-isis-vs_cqrs.adoc
index 00f85f4..b4ddeca 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_apache-isis-vs_cqrs.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_apache-isis-vs_cqrs.adoc
@@ -5,7 +5,7 @@
 :_imagesdir: images/
 
 
-The CQRS architectural pattern (it stands for "Command Query Responsbility Separation") is the idea that the domain objects that mutate the state of the system - to which commands are sent and which then execute - should be separated from the mechanism by which the state of the system is queried (rendered).
+The CQRS architectural pattern (it stands for "Command Query Responsibility Separation") is the idea that the domain objects that mutate the state of the system - to which commands are sent and which then execute - should be separated from the mechanism by which the state of the system is queried (rendered).
 The former are sometimes called the "write (domain) model", the latter the "read model".
 
 In the canonical version of this pattern there are separate datastores.
@@ -31,7 +31,7 @@ There are other reasons though why a separate read model might make sense, such
 In these cases Apache Isis can often provide a reasonable alternative, namely to map domain entities against RDBMS views, either materialized views or dynamic.
 In such cases there is still only a single physical datastore, and so transactional integrity is retained.
 
-Or, the CQRS architecture can be more fully implemented with Apache Isis by introducing a separate read model, synchronized using the xref:../rgsvc/rgsvc.adoc#_rgsvc_api_PublishingService[`PublishingService`], or using xref:../rgcms/rgcms.adoc#_rgcms_classes_super_AbstractSubscriber[subscribers]  on the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`].
+Or, the CQRS architecture can be more fully implemented with Apache Isis by introducing a separate read model, synchronized using the xref:../rgsvc/rgsvc.adoc#_rgsvc_spi_PublisherService[`PublisherService`], or using xref:../rgcms/rgcms.adoc#_rgcms_classes_super_AbstractSubscriber[subscribers]  on the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`].
 One can then use xref:../ugfun/ugfun.adoc#_ugfun_building-blocks_types-of-domain-objects_view-models[view models] to surface the data in the external read datastore.
 
 With respect to commands, Apache Isis does of course support the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] which allows each business action to be reified into a `Command`.
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_apache-isis-vs_event-sourcing.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_apache-isis-vs_event-sourcing.adoc
index ef5660f..6130cde 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_apache-isis-vs_event-sourcing.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_apache-isis-vs_event-sourcing.adoc
@@ -22,7 +22,7 @@ Note that the event might be dispatched and consumed in-process or alternatively
 If the latter, then the subscriber will operate within a separate transaction, meaning the usual eventual consistency concerns and also compensating actions if a rollback is required.
 CQRS/event sourcing advocates point out -- correctly -- that this is just how things are in the "real world" too.
 
-In Apache Isis every business action (and indeed, property and collection) emits domain events through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`], and can optionally also be published through the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`].
+In Apache Isis every business action (and indeed, property and collection) emits domain events through the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_EventBusService[`EventBusService`], and can optionally also be published through the xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`].
 The former are dispatched and consumed in-process and within the same transaction, and for this reason the xref:../rgcms/rgcms.adoc#_rgcms_classes_super_AbstractSubscriber[subscribers] can also veto the events.
 The latter are intended for out-of-process consumption; the (obsolete) http://github.com/isisaddons-legacy/isis-module-publishing[Isis addons' publishing] and the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s publishmq modules provide implementations for dispatching either through a RDBMS database table, or directly through to an link:http://camel.apache.org[ActiveMQ] message queue (eg wired up to link:http://camel.apache.org[Apache Camel] event bus).
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_deployment-options.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_deployment-options.adoc
index ed4046b..1664275 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_deployment-options.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_core-concepts_deployment-options.adoc
@@ -46,7 +46,7 @@ Once you've sketched out your domain model, you can then "start-over" using your
 == Deploy on your own platform
 
 The programming model defined by Apache Isis deliberately minimizes the dependencies on the rest of the framework.
-In fact, the only hard dependency that the domain model classes have on Apache Isis is through the `org.apache.isis.applib` classes, mostly to pick up annotations such as `@Disabled`.
+In fact, the only hard dependency that the domain model classes have on Apache Isis is through the `org.apache.isis.applib` classes, mostly to pick up annotations such as `@Action` and `@Property`.
 So, if you have used Apache Isis for prototyping (discussed above), then note that it's quite feasible to take your domain model a the basis of your actual development effort; Apache Isis' annotations and programming conventions will help ensure that any subtle semantics you might have captured in your prototyping are not lost.
 
 If you go this route, your deployment platform will of course need to provide similar capabilities to Apache Isis.
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_crud.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_crud.adoc
index f9e3df9..1da733b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_crud.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_crud.adoc
@@ -17,13 +17,9 @@ These (and some other services) replace the now deprecated xref:../rgsvc/rgsvc.a
 
 
 include::_ugfun_crud_instantiating.adoc[leveloffset=+1]
-
 include::_ugfun_crud_persisting.adoc[leveloffset=+1]
-
 include::_ugfun_crud_finding.adoc[leveloffset=+1]
-
 include::_ugfun_crud_updating.adoc[leveloffset=+1]
-
 include::_ugfun_crud_deleting.adoc[leveloffset=+1]
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_actions.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_actions.adoc
index b48ab06..f90b9fa 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_actions.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_actions.adoc
@@ -236,8 +236,8 @@ See also xref:../ugfun/ugfun.adoc#_ugfun_programming-model_properties-vs-paramet
 [[__ugfun_programming-model_actions_bigdecimal-parameters]]
 == ``BigDecimal``s (Precision)
 
-Whereas the xref:../ugfun/ugfun.adoc#__ugfun_programming-model_properties_datatypes_bigdecimals[precision of BigDecimal properties] is defined using xref:../rgant/rgant.adoc#_rgant-Column_scale[`@javax.jdo.annotations.Column#scale()`], that JDO annotation cannot be applied to parameter types.
-Instead, the xref:../rgant/rgant.adoc#_rgant-Digits_fraction[`@javax.validation.constraints.Digits#fraction()`] annotation/attribute is used.
+Whereas the xref:../ugfun/ugfun.adoc#__ugfun_programming-model_properties_datatypes_bigdecimals[precision of BigDecimal properties] is defined using xref:../rgant/rgant.adoc#_rgant_Column_scale[`@javax.jdo.annotations.Column#scale()`], that JDO annotation cannot be applied to parameter types.
+Instead, the xref:../rgant/rgant.adoc#_rgant-Digits[`@javax.validation.constraints.Digits#fraction()`] annotation/attribute is used.
 
 For example:
 
@@ -255,8 +255,8 @@ public Order updateDiscount(
     return this;
 }
 ----
-<1> Specifies the property precision using xref:../rgant/rgant.adoc#_rgant-Column_scale[`@Column#scale()`]
-<2> Specifies the corresponding parameter precision using xref:../rgant/rgant.adoc#_rgant-Digits_fraction[`@Digits#fraction()`].
+<1> Specifies the property precision using xref:../rgant/rgant.adoc#_rgant_Column_scale[`@Column#scale()`]
+<2> Specifies the corresponding parameter precision using xref:../rgant/rgant.adoc#_rgant-Digits[`@Digits#fraction()`].
 
 See also xref:../ugfun/ugfun.adoc#_ugfun_programming-model_properties-vs-parameters[properties vs parameters].
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_contributions.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_contributions.adoc
index a3126d0..f43c5c2 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_contributions.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_domain-services_contributions.adoc
@@ -28,7 +28,7 @@ We suggest naming such classes `XxxContributions`, eg:
 public class OrderContributions {
     @Action(semantics=SemanticsOf.SAFE)
     @ActionLayout(contributed=Contributed.AS_ASSOCIATION)       // <2>
-    @CollectionLayout(render=RenderType.EAGERLY)
+    @CollectionLayout(defaultView="table")
     public List<Order> orders(Customer customer) {              // <3>
         return container.allMatches(...);
     }
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins.adoc
index 77ad831..6c501ec 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins.adoc
@@ -23,7 +23,7 @@ public class Customer_orders {                              // <2>
 
     @Action(semantics=SemanticsOf.SAFE)                     // <4>
     @ActionLayout(contributed=Contributed.AS_ASSOCIATION)   // <4>
-    @CollectionLayout(render=RenderType.EAGERLY)
+    @CollectionLayout(defaultView="table")
     public List<Order> coll() {                             // <1>
         return repositoryService.findOrdersFor(customer);
     }
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_contributed-collection.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_contributed-collection.adoc
index d92f5d7..2d0282e 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_contributed-collection.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_contributed-collection.adoc
@@ -19,7 +19,7 @@ public class DocumentHolder_documents {
 
     @Action(semantics=SemanticsOf.SAFE)                         // <1>
     @ActionLayout(contributed = Contributed.AS_ASSOCIATION)     // <2>
-    @CollectionLayout(render = RenderType.EAGERLY)
+    @CollectionLayout(defaultView="table")
     public List<Document> coll() {                              // <3>
         ...
     }
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_inferred-name.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_inferred-name.adoc
index d0cc08f..e46ad86 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_inferred-name.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_inferred-name.adoc
@@ -24,7 +24,7 @@ public class DocumentHolder_documents {
 
     @Action(semantics=SemanticsOf.SAFE)
     @ActionLayout(contributed = Contributed.AS_ASSOCIATION)
-    @CollectionLayout(render = RenderType.EAGERLY)
+    @CollectionLayout(defaultView="table")
     public List<Document> act() {
         ...
     }
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_programmatic-usage.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_programmatic-usage.adoc
index 5ed96f3..afee7b0 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_programmatic-usage.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_mixins_programmatic-usage.adoc
@@ -10,17 +10,13 @@
 When a domain object is rendered, the framework will automatically instantiate all required mixins and delegate to them dynamically.
 If writing integration tests or fixtures, or (sometimes) just regular domain logic, then you may need to instantiate mixins directly.
 
-For this you can use the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer_object-creation-api[`DomainObjectContainer#mixin(...)` method.
+For this you can use the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_FactoryService[`FactoryService#mixin(...)` method.
 
 For example:
 
 [source,java]
 ----
-DocumentHolder_documents mixin = container.mixin(DocumentHolder_documents.class, customer);
+DocumentHolder_documents mixin = factoryService.mixin(DocumentHolder_documents.class, customer);
 ----
 
 The xref:../ugtst/ugtst.adoc#__ugtst_integ-test-support_bootstrapping_IntegrationTestAbstract[`IntegrationTestAbstract`] and xref:../rgcms/rgcms.adoc#_rgcms_classes_super_FixtureScript[`FixtureScript`] classes both provide a `mixin(...)` convenience method.
-
-
-
-
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_ui-hints_names-and-descriptions.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_ui-hints_names-and-descriptions.adoc
index 48f8680..cc35e8b 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_ui-hints_names-and-descriptions.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_ui-hints_names-and-descriptions.adoc
@@ -56,4 +56,4 @@ If you're running on Java 8, then note that it's possible to write Isis applicat
 
 
 The framework also supports i18n: locale-specific names and descriptions.
-for more information, see the xref:../ugbtb/ugbtb.adoc#_ugbtb_i18n[beyond-the-basics] guide.
+For more information, see the xref:../ugbtb/ugbtb.adoc#_ugbtb_i18n[beyond-the-basics] guide.
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugsec/_ugsec_api-for-applications.adoc b/adocs/documentation/src/main/asciidoc/guides/ugsec/_ugsec_api-for-applications.adoc
index 73416c1..fd90eeb 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugsec/_ugsec_api-for-applications.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugsec/_ugsec_api-for-applications.adoc
@@ -8,16 +8,16 @@
 
 Generally speaking your domain objects (or more generally your application) should be agnostic of the user/roles that are interacting with them; applying security permissions is the responsibility of the framework.
 
-Still, on very rare occasion you may have a need, in which case you can either use Apache Isis' `DomainObjectContainer` API or you can reach further down the stack and use the JEE Servlet API.
+Still, on very rare occasion you may have a need, in which case you can either use Apache Isis' `UserService` API or you can reach further down the stack and use the JEE Servlet API.
 
 
-== `DomainObjectContainer` API
+== `UserService` API
 
-The xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`] service exposes the following API:
+The xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_UserService[`UserService`] service exposes the following API:
 
 [source,java]
 ----
-final UserMemento user = container.getUser();
+final UserMemento user = userService.getUser();
 final List<RoleMemento> roles = user.getRoles();
 for (RoleMemento role : roles) {
     String roleName = role.getName();
@@ -44,7 +44,8 @@ If using the Wicket viewer, then note there will also be another role which is u
 
 == Servlet API
 
-On occasion you may find it necessary to reach below Isis and to the underlying servlet API.  For example, the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s togglz module (non-ASF) has a requirement to do this in order to expose its embedded togglz web console.  (
+On occasion you may find it necessary to reach below Apache Isis and to the underlying servlet API.
+For example, the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s togglz module (non-ASF) has a requirement to do this in order to expose its embedded togglz web console.  (
 
 [TIP]
 ====
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugsec/ugsec.adoc b/adocs/documentation/src/main/asciidoc/guides/ugsec/ugsec.adoc
index 9f1a12f..0fcd1a8 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugsec/ugsec.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugsec/ugsec.adoc
@@ -82,7 +82,7 @@ When ``Interaction``s are persisted (eg by way of (non-ASF) link:http://platform
 traceability.
 The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s audit module provides an implementation of the `AuditerService`.
 
-For earlier versions of the framework the xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] can be used to capture actions, while the (deprecated) xref:../rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] used to capture data modified.
+For xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] can be also be used to capture actions.
 ====
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_bdd-spec-support_writing-a-bdd-spec.adoc b/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_bdd-spec-support_writing-a-bdd-spec.adoc
index 3c60d3d..b647ee8 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_bdd-spec-support_writing-a-bdd-spec.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_bdd-spec-support_writing-a-bdd-spec.adoc
@@ -147,7 +147,7 @@ public class SimpleObjectMenuGlue extends CukeGlueAbstract2 {
 
 [TIP]
 ====
-The xref:../rgsvc/rgsvc.adoc#_rgsvc_api_Scratchpad[`Scratchpad`] domain service is one way in which glue classes can pass state between each other.
+The xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_Scratchpad[`Scratchpad`] domain service is one way in which glue classes can pass state between each other.
 Or, for more type safety, you could develop your own custom domain services for each scenario, and inject these in as regular services.
 See link:http://www.thinkcode.se/blog/2017/04/01/sharing-state-between-steps-in-cucumberjvm-using-picocontainer[this blog] post for more details.
 ====
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_fixture-scripts_sudo-service.adoc b/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_fixture-scripts_sudo-service.adoc
index c9b746e..a1dc135 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_fixture-scripts_sudo-service.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_fixture-scripts_sudo-service.adoc
@@ -57,5 +57,5 @@ toDoItem = sudoService.sudo(username,
         });
 ----
 
-Behind the scenes the `SudoService` simply talks to the `DomainObjectContainer` to override the user returned by the `getUser()` API.
+Behind the scenes the `SudoService` simply talks to the `UserService` to override the user returned by the `getUser()` API.
 It is possible to override both users and roles.
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_fixture-scripts_ticking-clock-fixture.adoc b/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_fixture-scripts_ticking-clock-fixture.adoc
index 3778270..d9af995 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_fixture-scripts_ticking-clock-fixture.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_fixture-scripts_ticking-clock-fixture.adoc
@@ -6,7 +6,7 @@
 
 
 
-The `TickingClockFixture` is a pre-built fixture script that resets the date/time returned by the xref:../rgsvc/rgsvc.adoc#_rgsvc_api_ClockService[`ClockService`] to a known value.
+The `TickingClockFixture` is a pre-built fixture script that resets the date/time returned by the xref:../rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_ClockService[`ClockService`] to a known value.
 
 Thereafter the time returned continues to tick forward (as would the real clock) until reset once more.
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_integ-test-support_typical-usage.adoc b/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_integ-test-support_typical-usage.adoc
index 6c68689..ee243ad 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_integ-test-support_typical-usage.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_integ-test-support_typical-usage.adoc
@@ -108,7 +108,9 @@ What about when a todo item is already completed?  The `disableCompleted()` meth
 <2> the expectedExceptions link:http://junit.org/junit4/javadoc/latest/org/junit/rules/ExpectedException.html[JUnit rule] (defined by a superclass) verifies that the appropiate exception is indeed thrown (in the "when")
 
 
-And what about the fact that the underlying "complete" property is disabled (the `@Disabled` annotation?).  If the `ToDoItem` is put into edit mode in the UI, the complete checkbox should remain read-only.  Here's a verify similar test that verifies this also:
+And what about the fact that the underlying "complete" property is annotated as being disabled?
+If the `ToDoItem` is put into edit mode in the UI, the complete checkbox should remain read-only.
+Here's a verify similar test that verifies this also:
 
 [source,java]
 ----
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_integ-test-support_wrapper-factory.adoc b/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_integ-test-support_wrapper-factory.adoc
index dbb26a1..95f9e03 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_integ-test-support_wrapper-factory.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugtst/_ugtst_integ-test-support_wrapper-factory.adoc
@@ -5,7 +5,8 @@
 :_imagesdir: images/
 
 
-The xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_WrapperFactory[`WrapperFactory`] service is responsible for wrapping a domain object in a dynamic proxy, of the same type as the object being proxied.  And the role of this wrapper is to simulate the UI.
+The xref:../rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_WrapperFactory[`WrapperFactory`] service is responsible for wrapping a domain object in a dynamic proxy, of the same type as the object being proxied.
+And the role of this wrapper is to simulate the UI.
 
 [NOTE]
 ====
@@ -18,7 +19,8 @@ It does this by allowing through method invocations that would be allowed if the
 
 The mechanics are as follows:
 
-. the integration test calls the `WrapperFactory` to obtain a wrapper for the domain object under test.  This is usually done in the test's `setUp()` method.
+. the integration test calls the `WrapperFactory` to obtain a wrapper for the domain object under test.
+This is usually done in the test's `setUp()` method.
 
 . the test calls the methods on the wrapper rather than the domain object itself
 
@@ -26,9 +28,11 @@ The mechanics are as follows:
 
 . (like a viewer), the wrapper then performs the "see it/use it/do it" checks, checking that the member is visible, that it is enabled and (if there are arguments) that the arguments are valid
 
-. if the business rule checks pass, then the underlying member is invoked.  Otherwise an exception is thrown.
+. if the business rule checks pass, then the underlying member is invoked.
+Otherwise an exception is thrown.
 
-The type of exception depends upon what sort of check failed.  It's straightforward enough: if the member is invisible then a `HiddenException` is thrown; if it's not usable then you'll get a `DisabledException`, if the args are not valid then catch an `InvalidException`.
+The type of exception depends upon what sort of check failed.
+It's straightforward enough: if the member is invisible then a `HiddenException` is thrown; if it's not usable then you'll get a `DisabledException`, if the args are not valid then catch an `InvalidException`.
 
 image::{_imagesdir}testing/wrapper-factory.png[width="600px",link="{_imagesdir}testing/wrapper-factory.png"]
 
@@ -76,13 +80,15 @@ We're not sure that's any easier (in fact we're certain it looks rather obscure)
 
 == Using the wrapper
 
-As the wrapper is intended to simulate the UI, only those methods that correspond to the "primary" methods of the domain object's members are allowed to be called.  That means:
+As the wrapper is intended to simulate the UI, only those methods that correspond to the "primary" methods of the domain object's members are allowed to be called.
+That means:
 
 * for *_object properties_* the test can call the getter or setter method
 
-* for *_object collections_* the test can call the getter.  +
+* for *_object collections_* the test can call the getter.
 +
-If there is a supporting `addTo...()` or `removeFrom...()` method, then these can be called.  It can also call `add(...)` or `remove(...)` on the collection (returned by the gettter) itself. +
+If there is a supporting `addTo...()` or `removeFrom...()` method, then these can be called.
+It can also call `add(...)` or `remove(...)` on the collection (returned by the gettter) itself.
 +
 [NOTE]
 ====
@@ -91,11 +97,14 @@ In this respect the wrapper is more functional than the xref:../ugvw/ugvw.adoc#[
 
 * for *_object actions_* the test can call the action method itself.
 
-As a convenience, we also allow the test to call any `default...()`,`choices...()` or `autoComplete...()` method.  These are often useful for obtaining a valid value to use.
+As a convenience, we also allow the test to call any `default...()`,`choices...()` or `autoComplete...()` method.
+These are often useful for obtaining a valid value to use.
 
-What the test can't call is any of the remaining supporting methods, such as `hide...()`, `disable...()` or `validate...()`.  That's because their value is implied by the exception being thrown.
+What the test can't call is any of the remaining supporting methods, such as `hide...()`, `disable...()` or `validate...()`.
+That's because their value is implied by the exception being thrown.
 
-The wrapper _does_ also allow the object's `title()` method or its  `toString()` , however this is little use for objects whose title is built up using the `@Title` annotation.  Instead, we recommend that your test verifies an object's title by calling `DomainObjectContainer#titleOf(...)` method.
+The wrapper _does_ also allow the object's `title()` method or its  `toString()` , however this is little use for objects whose title is built up using the `@Title` annotation.
+Instead, we recommend that your test verifies an object's title by calling `TitleService#titleOf(...)` method.
 
 
 
@@ -118,7 +127,8 @@ public class ToDoItem ... {
 }
 ----
 
-then invoking the action through the proxy will cause the event (`CompletedEvent` above) to be fired to any subscribers.  A test might therefore look like:
+then invoking the action through the proxy will cause the event (`CompletedEvent` above) to be fired to any subscribers.
+A test might therefore look like:
 
 [source,java]
 ----
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_customisation_tweaking-css-classes.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_customisation_tweaking-css-classes.adoc
index 14921f4..07c2050 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_customisation_tweaking-css-classes.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_customisation_tweaking-css-classes.adoc
@@ -60,7 +60,8 @@ You can use a similar approach for collections and actions.
 
 == Custom CSS styles
 
-The above technique works well if you know the class member to target, but you might instead want to apply a custom style to a set of members. For this, you can use the `@CssClass`.
+The above technique works well if you know the class member to target, but you might instead want to apply a custom style to a set of members.
+For this, you can use the `@PropertyLayout(cssClass=...)`.
 
 For example, in the `ToDoItem` class the following annotation (indicating that this is a key, important, property) :
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_layout_annotation-based.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_layout_annotation-based.adoc
index edd952a..1bad670 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_layout_annotation-based.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_layout_annotation-based.adoc
@@ -174,4 +174,10 @@ image::{_imagesdir}reference-layout/4-0-8-0.png[width="720px",link="{_imagesdir}
 
 == Other Annotations
 
-All the layout annotations (eg `@Regex` and `@Named`) have been deprecated, instead replaced by the various `XxxLayout` annotations: xref:../rgant/rgant.adoc#_rgant-ActionLayout, [`@ActionLayout`] xref:../rgant/rgant.adoc#_rgant-CollectionLayout[`@CollectionLayout`],  xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout[`@DomainObjectLayout`],  xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout[`@DomainServiceLayout`],  xref:../rgant/rgant.adoc#_rgant-ParameterLayout[`@ParameterLayout`],  [...]
+All the layout annotations (eg `@Regex` and `@Named`) have been deprecated, instead replaced by the various `XxxLayout` annotations:
+
+* for domain services: xref:../rgant/rgant.adoc#_rgant-DomainServiceLayout[`@DomainServiceLayout`]
+* for domain objects: xref:../rgant/rgant.adoc#_rgant-DomainObjectLayout[`@DomainObjectLayout`] and xref:../rgant/rgant.adoc#_rgant-ViewModelLayout[`@ViewModelLayout`]
+* for actions: xref:../rgant/rgant.adoc#_rgant-ActionLayout, [`@ActionLayout`] and xref:../rgant/rgant.adoc#_rgant-ParameterLayout[`@ParameterLayout`]
+* for properties: xref:../rgant/rgant.adoc#_rgant-PropertyLayout[`@PropertyLayout`]
+* for collections: xref:../rgant/rgant.adoc#_rgant-CollectionLayout[`@CollectionLayout`]
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_layout_file-based.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_layout_file-based.adoc
index 3a30493..c7fa049 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_layout_file-based.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_layout_file-based.adoc
@@ -374,7 +374,7 @@ There are four "styles":
 * minimal
 
 
-Ignorig the "current" style (which merely downloads the currently cached layout), the other three styles allow the developer to choose how much metadata is to be specified in the XML, and how much (if any) will be obtained elsewhere, either from annotations in the metamodel or from an earlier `.layout.json` file if present.
+Ignoring the "current" style (which merely downloads the currently cached layout), the other three styles allow the developer to choose how much metadata is to be specified in the XML, and how much (if any) will be obtained from annotations in the metamodel.
 The table below summarises the choices:
 
 .Table caption
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_menubars-layout_file-based.adoc b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_menubars-layout_file-based.adoc
index 3a21146..75b9395 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_menubars-layout_file-based.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugvw/_ugvw_menubars-layout_file-based.adoc
@@ -6,7 +6,7 @@
 
 
 The domain service actions can be arranged across menu items using the `menubars.layout.xml` file.
-Not only is this easier to work with, it also can be reloaded dynamically (if in prototype mode), substantially redu.
+Not only is this easier to work with, it also can be reloaded dynamically (if in prototype mode), substantially reducing the edit compile run cycle.
 
 As for xref:ugvw.adoc#_ugvw_layout_file-based[file-based object layouts], this offers a number of benefits:
 
diff --git a/adocs/documentation/src/main/asciidoc/index.html b/adocs/documentation/src/main/asciidoc/index.html
index 64a863a..53e9685 100644
--- a/adocs/documentation/src/main/asciidoc/index.html
+++ b/adocs/documentation/src/main/asciidoc/index.html
@@ -254,10 +254,16 @@ table.CodeRay td.code>pre{padding:0}
     <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Versions<span class="caret"></span></a>
      <ul class="dropdown-menu">
       <li><a href="documentation.html">1.16.2 (current)</a></li>
+      <!--
       <li role="separator" class="divider"></li>
-      <li><a href="versions/SNAPSHOT/documentation.html">1.16.3-M1-SNAPSHOT</a></li>
+      <li><a href="versions/SNAPSHOT/documentation.html">2.0.0-M2-SNAPSHOT</a></li>
+      -->
+      <li role="separator" class="divider"></li>
+      <li class="dropdown-header">2.0.0 Milestones</li>
+      <li><a href="versions/2.0.0-M1/documentation.html">2.0.0-M1</a></li>
       <li role="separator" class="divider"></li>
       <li class="dropdown-header">Archive</li>
+      <li><a href="versions/1.16.2/documentation.html">1.16.2</a></li>
       <li><a href="versions/1.16.1/documentation.html">1.16.1</a></li>
       <li><a href="versions/1.16.0/documentation.html">1.16.0</a></li>
       <li><a href="versions/1.15.1/documentation.html">1.15.1</a></li>
@@ -628,11 +634,19 @@ table.CodeRay td.code>pre{padding:0}
         <div class="col-sm-12">
          <h4>Getting started</h4>
          <br/>
-         <p>Start developing your own Apache Isis application using either the minimal <a href="guides/ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype">helloworld archetype</a> or alternatively with the more structured <a href="guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">simpleapp archetype</a>.  With the *nix bash shell, use:</p>
+         <p>Start developing your own Apache Isis application using either the minimal <a href="guides/ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype">helloworld archetype</a> or alternatively with the more structured <a href="guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype">simpleapp archetype</a>.
+          </p>
+        </div>
+       </div>
+       <div class="row">
+        <div class="col-sm-12">
+          To use the current production 1.x version (from a *nix bash shell):
+         <br/>
+         <br/>
         </div>
        </div>
        <div class="row">
-        <div class="col-sm-6">
+        <div class="col-sm-5">
          <div class=panel>
                 <pre>
 mvn archetype:generate  \
@@ -645,7 +659,10 @@ mvn archetype:generate  \
     -B</pre>
          </div>
         </div>
-        <div class="col-sm-6">
+        <div class="col-sm-1">
+         <p>or</p>
+        </div>
+        <div class="col-sm-5">
          <div class=panel>
                 <pre>
 mvn archetype:generate  \
@@ -658,10 +675,52 @@ mvn archetype:generate  \
     -B</pre>
          </div>
         </div>
+        <div class="col-sm-1">
+        </div>
+       </div>
+       <div class="row">
+        <div class="col-sm-12">
+         To use the beta 2.x milestone release, use:
+         <br/>
+         <br/>
+        </div>
+       </div>
+       <div class="row">
+        <div class="col-sm-5">
+         <div class=panel>
+                <pre>
+mvn archetype:generate  \
+    -D archetypeGroupId=org.apache.isis.archetype \
+    -D archetypeArtifactId=helloworld-archetype \
+    -D archetypeVersion=2.0.0-M1 \
+    -D groupId=com.mycompany \
+    -D artifactId=myapp \
+    -D version=1.0-SNAPSHOT \
+    -B</pre>
+         </div>
+        </div>
+        <div class="col-sm-1">
+         <p>or</p>
+        </div>
+        <div class="col-sm-5">
+         <div class=panel>
+                <pre>
+mvn archetype:generate  \
+    -D archetypeGroupId=org.apache.isis.archetype \
+    -D archetypeArtifactId=simpleapp-archetype \
+    -D archetypeVersion=2.0.0-M1 \
+    -D groupId=com.mycompany \
+    -D artifactId=myapp \
+    -D version=1.0-SNAPSHOT \
+    -B</pre>
+         </div>
+        </div>
+        <div class="col-sm-1">
+        </div>
        </div>
        <div class="row">
         <div class="col-sm-12">
-          <p>Adjust as necessary if using Windows `cmd.exe` or Powershell.</p>
+          <p>Adjust as necessary if using Windows.</p>
         </div>
        </div>
 
@@ -685,31 +744,31 @@ mvn archetype:generate  \
          <div class="tutorial-carousel">
 
           <div>
-           <img src="images/index-screenshots/010-sign-in.png"></img>
+           <img src="images/index-screenshots/010-sign-in.png"/>
           </div>
           <div>
-           <img src="images/index-screenshots/020-object-layout.png"></img>
+           <img src="images/index-screenshots/020-object-layout.png"/>
           </div>
           <div>
-           <img src="images/index-screenshots/030-declarative-business-rules.png"></img>
+           <img src="images/index-screenshots/030-declarative-business-rules.png"/>
           </div>
           <div>
-           <img src="images/index-screenshots/040-imperative-business-rules.png"></img>
+           <img src="images/index-screenshots/040-imperative-business-rules.png"/>
           </div>
           <div>
-           <img src="images/index-screenshots/050-action-with-args.png"></img>
+           <img src="images/index-screenshots/050-action-with-args.png"/>
           </div>
           <div>
-           <img src="images/index-screenshots/060-action-with-args-autocomplete.png"></img>
+           <img src="images/index-screenshots/060-action-with-args-autocomplete.png"/>
           </div>
           <div>
-           <img src="images/index-screenshots/070-jdo.png"></img>
+           <img src="images/index-screenshots/070-jdo.png"/>
           </div>
           <div>
-           <img src="images/index-screenshots/080-rest-api.png"></img>
+           <img src="images/index-screenshots/080-rest-api.png"/>
           </div>
           <div>
-           <img src="images/index-screenshots/090-integtesting.png"></img>
+           <img src="images/index-screenshots/090-integtesting.png"/>
           </div>
          </div>
          <div>
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.10.0-to-1.11.0.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.10.0-to-1.11.0.adoc
index 4d50e96..ac9f772 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.10.0-to-1.11.0.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.10.0-to-1.11.0.adoc
@@ -6,16 +6,16 @@
 
 
 Existing projects written against v1.10.0 should run against v1.11.0 with few if any changes.
-If you *do* encounter any difficulties then let us know via the xref:../support.adoc#[users mailing list], so we can support you and document issues here.
+If you *do* encounter any difficulties then let us know via the link:https://isis.apache.org/versions/1.11.0/support.html[users mailing list], so we can support you and document issues here.
 
 
 
 == Swagger UI
 
-The new xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_metadata-api_SwaggerService[`SwaggerService`] allows link:http://swagger.io[Swagger] spec files to be generated from the Apache Isis metamodel.
+The new link:https://isis.apache.org/versions/1.11.0/guides/rgsvc/rgsvc.html#_rgsvc_metadata-api_SwaggerService[`SwaggerService`] allows link:http://swagger.io[Swagger] spec files to be generated from the Apache Isis metamodel.
 These can be downloaded directly through the `SwaggerResource` (mapped to `/restful/swagger/public` and `/restful/swagger/private`) as well as from the Wicket UI through the `SwaggerServiceMenu`.
 
-In addition, the xref:../guides/ugfun/ugfun.adoc#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype] now bundles link:https://github.com/swagger-api/swagger-ui[Swagger UI], which documents the main features of the REST API and allows it to be explored.
+In addition, the link:https://isis.apache.org/versions/1.11.0/guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype] now bundles link:https://github.com/swagger-api/swagger-ui[Swagger UI], which documents the main features of the REST API and allows it to be explored.
 
 To enable this in your application, first update the `web.xml`:
 
@@ -53,21 +53,21 @@ To enable this in your application, first update the `web.xml`:
 <3> provides access to the RESTful resource that generates the Swagger spec.
 
 There is also an HTML page to load the Swagger UI itself; this resides in `src/main/webapp/swagger-ui/index.html`.
-Copy the link:https://github.com/apache/isis/blob/master/example/application/simpleapp/webapp/src/main/webapp/swagger-ui/index.html[file from Apache Isis' repo], or from the app generated by the xref:../guides/ugfun/ugfun.adoc#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype].
+Copy the link:https://github.com/apache/isis/blob/master/example/application/simpleapp/webapp/src/main/webapp/swagger-ui/index.html[file from Apache Isis' repo], or from the app generated by the link:https://isis.apache.org/versions/1.11.0/guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype].
 
 The text of the simple app's `about/index.html` has also changed (the `<li`> for the `/restful` URL has been replaced with a `/swagger-ui` URL).
 If you use link:https://github.com/apache/isis/blob/master/example/application/simpleapp/webapp/src/main/webapp/about/index.html[this file], then update it.
 
-If your application is bootstrapped using an `AppManifest` (recommended; xref:../guides/rgcms/rgcms.adoc#_rgcms_classes_AppManifest-bootstrapping[here]) then the default implementation of the `SwaggerService` will automatically be discovered and registered.
+If your application is bootstrapped using an `AppManifest` (recommended; link:https://isis.apache.org/versions/1.11.0/guides/rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping[here]) then the default implementation of the `SwaggerService` will automatically be discovered and registered.
 However, if you are still using the older `isis.properties` configuration file to explicitly register services then you will need to add in this service.
 
 
 
 == `RoutingService`
 
-The new xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_RoutingService[`RoutingService`] SPI service provides a plugin point to the xref:../guides/ugvw/ugvw.adoc#[Wicket viewer] so that a different object than that returned from an action invocation can be rendered.
+The new link:https://isis.apache.org/versions/1.11.0/guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_RoutingService[`RoutingService`] SPI service provides a plugin point to the link:https://isis.apache.org/versions/1.11.0/guides/ugvw/ugvw.html[Wicket viewer] so that a different object than that returned from an action invocation can be rendered.
 
-The framework provides a default implementation of this service that will - instead of a void or a `null` result - render the home page (as per the xref:../guides/rgant/rgant.adoc#_rgant-HomePage[`@HomePage`] annotation) if there is one.
+The framework provides a default implementation of this service that will - instead of a void or a `null` result - render the home page (as per the link:https://isis.apache.org/versions/1.11.0/guides/rgant/rgant.html#_rgant-HomePage[`@HomePage`] annotation) if there is one.
 This is therefore a subtle change in the UI.
 If you wish to retain the original behaviour (to return the "no results" page instead), then you should implement your own no-op implementation of this service:
 
@@ -84,10 +84,10 @@ public class IdentityRoutingService implements RoutingService {
 
 == Wicket Viewer i18n
 
-The xref:../guides/ugvw/ugvw.adoc#[Wicket viewer] (its labels, buttons, messages etc) can now be internationalized using the xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_TranslationService[`TranslationService`].
+The link:https://isis.apache.org/versions/1.11.0/guides/ugvw/html.adoc#[Wicket viewer] (its labels, buttons, messages etc) can now be internationalized using the link:https://isis.apache.org/versions/1.11.0/guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_TranslationService[`TranslationService`].
 
 To enable this, new ``msgId``s and corresponding translations must be added to the `translations.po` file.
-Full details of these ``msgId``s can be found in xref:../guides/ugbtb/ugbtb.adoc#__ugbtb_i18n_wicket-viewer[i18n] section of the "beyond the basics" guide.
+Full details of these ``msgId``s can be found in link:https://isis.apache.org/versions/1.11.0/guides/ugbtb/ugbtb.html#__ugbtb_i18n_wicket-viewer[i18n] section of the "beyond the basics" guide.
 
 If no translations are available, then the fallback is to use the previous mechanism, ie Wicket's original resource bundles.
 This feature can therefore be considered as optional.
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.11.0-to-1.12.0.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.11.0-to-1.12.0.adoc
index 4928c28..6787d95 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.11.0-to-1.12.0.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.11.0-to-1.12.0.adoc
@@ -7,15 +7,15 @@
 
 
 Existing projects written against v1.11.x should run against v1.12.0 with few if any changes.
-If you *do* encounter any difficulties then let us know via the xref:../support.adoc#[users mailing list], so we can support you and document issues here.
+If you *do* encounter any difficulties then let us know via the link:https://isis.apache.org/versions/1.12.0/support.html#[users mailing list], so we can support you and document issues here.
 
 
 
 == Dynamic XML Layouts
 
-The major new feature in 1.12.0 is xref:../guides/ugvw/ugvw.adoc#_ugvw_layout_file-based[dynamic XML layouts], providing much enhanced support for custom layouts.
+The major new feature in 1.12.0 is link:https://isis.apache.org/versions/1.12.0/guides/ugvw/ugvw.html#_ugvw_layout_file-based[dynamic XML layouts], providing much enhanced support for custom layouts.
 
-The new `Xxx.layout.xml` file is optional; without it domain objects will continue to be rendered as before, using metadata from annotations (xref:../guides/rgant/rgant.adoc#_rgant-DomainObjectLayout[`@DomainObjectLayout`], xref:../guides/rgant/rgant.adoc#_rgant-PropertyLayout[`@PropertyLayout`], xref:../guides/rgant/rgant.adoc#_rgant-CollectionLayout[`@CollectionLayout`], xref:../guides/rgant/rgant.adoc#_rgant-ActionLayout[`@ActionLayout`], xref:../guides/rgant/rgant.adoc#_rgant-MemberO [...]
+The new `Xxx.layout.xml` file is optional; without it domain objects will continue to be rendered as before, using metadata from annotations (link:https://isis.apache.org/versions/1.12.0/guides/rgant/rgant.html#_rgant-DomainObjectLayout[`@DomainObjectLayout`], link:https://isis.apache.org/versions/1.12.0/guides/rgant/rgant.html#_rgant-PropertyLayout[`@PropertyLayout`], link:https://isis.apache.org/versions/1.12.0/guides/rgant/rgant.html#_rgant-CollectionLayout[`@CollectionLayout`], link: [...]
 There is therefore no requirement to move to the new more flexible XML-based layout.
 
 If you do want to start using the new format, then you will find that 1.12.0 provides a mixin action (available in prototype mode only) called "download XML layout".
@@ -31,44 +31,44 @@ This can then be unzipped into the `src/main/java` directory.
 
 (As mentioned above), 1.12.0 provides a number of new mixin actions and properties:
 
-* xref:../guides/rgcms/rgcms.adoc#__rgcms_classes_mixins_Object_clearHints[clear hints] action
+* link:https://isis.apache.org/versions/1.12.0/guides/rgcms/rgcms.html#__rgcms_classes_mixins_Object_clearHints[clear hints] action
 
-* xref:../guides/rgcms/rgcms.adoc#__rgcms_classes_mixins_Object_downloadLayoutXml[download Layout XML] action (prototype mode)
+* link:https://isis.apache.org/versions/1.12.0/guides/rgcms/rgcms.html#__rgcms_classes_mixins_Object_downloadLayoutXml[download Layout XML] action (prototype mode)
 
-* xref:../guides/rgcms/rgcms.adoc#__rgcms_classes_mixins_Object_rebuildMetamodel[rebuild metamodel] action (prototype mode)
+* link:https://isis.apache.org/versions/1.12.0/guides/rgcms/rgcms.html#__rgcms_classes_mixins_Object_rebuildMetamodel[rebuild metamodel] action (prototype mode)
 
-* xref:../guides/rgcms/rgcms.adoc#__rgcms_classes_mixins_Persistable_datanucleusXxx[id and version] properties (for domain entities only)
+* link:https://isis.apache.org/versions/1.12.0/guides/rgcms/rgcms.html#__rgcms_classes_mixins_Persistable_datanucleusXxx[id and version] properties (for domain entities only)
 
-These are in addition to the xref:../guides/rgcms/rgcms.adoc#__rgcms_classes_mixins_Persistable_downloadJdoMetadata[download JDO metadata] mixin action (prototype mode) provided in earlier versions of the framework.
+These are in addition to the link:https://isis.apache.org/versions/1.12.0/guides/rgcms/rgcms.html#__rgcms_classes_mixins_Persistable_downloadJdoMetadata[download JDO metadata] mixin action (prototype mode) provided in earlier versions of the framework.
 
 The properties are grouped in a "metadata" fieldset, and the mixin actions associated with that fieldset.
 If the domain object is a view model rather than an entity (that is, has no id or version) then the actions will instead be rendered as top-level actions.
 
 Most of these mixin object members are visible only in prototype mode, though some are visible in production mode and so potentially visible to end-users.
-If you wish to suppress these members from the view, you can either use xref:../guides/ugsec/ugsec.adoc#[security], or alternatively you can write xref:../guides/rgcms/rgcms.adoc#_rgcms_classes_super_AbstractSubscriber[subscriber]s to veto the visibility of these members by subscribing to their respective domain events.
+If you wish to suppress these members from the view, you can either use link:https://isis.apache.org/versions/1.12.0/guides/ugsec/ugsec.html#[security], or alternatively you can write link:https://isis.apache.org/versions/1.12.0/guides/rgcms/rgcms.html#_rgcms_classes_super_AbstractSubscriber[subscriber]s to veto the visibility of these members by subscribing to their respective domain events.
 
 
 
 == JAXB view models are editable
 
-All xref:../guides/rgant/rgant.adoc#_rgant-XmlRootElement[`@XmlRootElement`] view models are now implicitly editable.
-Therefore any view models that should be read-only should have editing attribute disabled using xref:../guides/rgant/rgant.adoc#_rgant-DomainObject_editing[`@DomainObject#editing()`] (or use a xref:../guides/rgcms/rgcms.adoc#_rgcms_classes_super_AbstractSubscriber[subscriber] to veto editability).
+All link:https://isis.apache.org/versions/1.12.0/guides/rgant/rgant.html#_rgant-XmlRootElement[`@XmlRootElement`] view models are now implicitly editable.
+Therefore any view models that should be read-only should have editing attribute disabled using link:https://isis.apache.org/versions/1.12.0/guides/rgant/rgant.html#_rgant-DomainObject_editing[`@DomainObject#editing()`] (or use a link:https://isis.apache.org/versions/1.12.0/guides/rgcms/rgcms.html#_rgcms_classes_super_AbstractSubscriber[subscriber] to veto editability).
 
 
 == `DomainObjectContainer` domain service
 
-The xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]domain service has been deprecated, with its methods moved to a new set of more fine-grained domain services, such as xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-api_RepositoryService[`RepositoryService`] and
-xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_MessageService[`MessageService`].
+The link:https://isis.apache.org/versions/1.12.0/guides/rgsvc/rgsvc.html#_rgsvc_core-domain-api_DomainObjectContainer[`DomainObjectContainer`]domain service has been deprecated, with its methods moved to a new set of more fine-grained domain services, such as link:https://isis.apache.org/versions/1.12.0/guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-api_RepositoryService[`RepositoryService`] and
+link:https://isis.apache.org/versions/1.12.0/guides/rgsvc/rgsvc.html#_rgsvc_application-layer-api_MessageService[`MessageService`].
 
 The `DomainObjectContainer` service will continue to be supported until Apache Isis v2.0.0, but in the meantime, consider changing existing application code to use these new domain services.
 
-Please note that when migrating from _rgsvc_core-domain-api_DomainObjectContainer_object-persistence-api.adoc#_rgsvc_core-domain-api_DomainObjectContainer_object-persistence-api[`DomainObjectContainer#persist()`] to xref:../../guides/rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-api_RepositoryService[`RepositoryService#persist()`], no exception will be thrown if the Domain Object is already persisted, so the behavior of xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-api_RepositoryS [...]
+Please note that when migrating from _rgsvc_core-domain-api_DomainObjectContainer_object-persistence-api.adoc#_rgsvc_core-domain-api_DomainObjectContainer_object-persistence-api[`DomainObjectContainer#persist()`] to link:https://isis.apache.org/versions/1.12.0/../guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-api_RepositoryService[`RepositoryService#persist()`], no exception will be thrown if the Domain Object is already persisted, so the behavior of link:https://isis.apache.org/versio [...]
 
 
 
 == Removal of the `self-host` profile
 
-The `self-host` profile has been removed from the xref:../guides/ugfun/ugfun.adoc#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype].
+The `self-host` profile has been removed from the link:https://isis.apache.org/versions/1.12.0/guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype].
 Instead, run the application using either the `org.apache.isis.WebServer` main class, or `mvn jetty:run`, or build the WAR and deploy to a servlet container such as Tomcat.
 
 
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.12.0-to-1.13.0.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.12.0-to-1.13.0.adoc
index 8f87ba6..65d7084 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.12.0-to-1.13.0.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.12.0-to-1.13.0.adoc
@@ -6,103 +6,80 @@
 
 
 
-Most applications written against v1.12.x should run against v1.13.0 with few if any changes.  That said, this release
-has removed a small number of features that were dependent on internal APIs, and some configuration properties are
-now removed/unsupported.  We therefore do recommend that you read and keep in mind these notes when you upgrade your app.
+Most applications written against v1.12.x should run against v1.13.0 with few if any changes.
+That said, this release has removed a small number of features that were dependent on internal APIs, and some configuration properties are
+now removed/unsupported.
+We therefore do recommend that you read and keep in mind these notes when you upgrade your app.
 
-If you *do* encounter any difficulties then let us know via the xref:../support.adoc#[users mailing list], so we can
+If you *do* encounter any difficulties then let us know via the link:https://isis.apache.org/versions/1.13.0/support.html#[users mailing list], so we can
 support you and document issues here.
 
 
 == Command changes
 
-The main feature in `1.13.0` is the xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] domain service
-to represent an action invocation/property edit, with the re-positioning of
-xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_CommandContext[`CommandContext`] to represent the _intention_ to invoke an action/edit a
-property.  You can read more about this design in the reference guide on domain services, in the
-xref:../guides/rgsvc/rgsvc.adoc#__rgsvc_intro_commands-and-events[commands and events] section.
-
-This refactoring completely overhauls the structure of the XML mementos passed to
-xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_CommandService[`CommandService`] (to persist) and to
-xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_application-layer-spi_BackgroundCommandService[`BackgroundCommandService`] (to invoke persisted commands in the
-background).  If you are using these services then ensure that there are no pending commands at the point at which you
-cut-over.  If you have any code that makes assumptions on the format of the XML, it will also need to be rewritten.
-Note that the XML which is persisted henceforth is well-defined and any future changes to it will be backward
-compatible; see xref:../guides/rgcms/rgcms.adoc#_rgcms_schema[schema reference guide].  In fact, there are three schema: for commands
-(`cmd.xsd`), inteactions (`ixn.xsd`) and for changes (`chg.xsd`).  These replace the earlier `aim.xsd` schema (which
-was an amalgam of `cmd.xsd` and `ixn.xsd`).
+The main feature in `1.13.0` is the link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] domain service to represent an action invocation/property edit, with the re-positioning of link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#_rgsvc_application-layer-api_CommandContext[`CommandContext`] to represent the _intention_ to invoke an action/edit a property.
+You can read more about this design in the reference guide on domain services, in the link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#__rgsvc_intro_commands-and-events[commands and events] section.
+
+This refactoring completely overhauls the structure of the XML mementos passed to link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#_rgsvc_application-layer-spi_CommandService[`CommandService`] (to persist) and to link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#_rgsvc_application-layer-spi_BackgroundCommandService[`BackgroundCommandService`] (to invoke persisted commands in the background).
+If you are using these services then ensure that there are no pending commands at the point at which you cut-over.
+If you have any code that makes assumptions on the format of the XML, it will also need to be rewritten.
+Note that the XML which is persisted henceforth is well-defined and any future changes to it will be backward compatible; see link:https://isis.apache.org/versions/1.13.0/guides/rgcms/rgcms.html#_rgcms_schema[schema reference guide].
+In fact, there are three schema: for commands (`cmd.xsd`), inteactions (`ixn.xsd`) and for changes (`chg.xsd`).
+These replace the earlier `aim.xsd` schema (which was an amalgam of `cmd.xsd` and `ixn.xsd`).
 
 The reworked `CommandService` now properly supports property edits in the exact same way as action invocations.
 
 As a side-effect of this work, note also that:
 
 * the `CommandService#startTransaction(...)` SPI is *NO LONGER CALLED* by the framework.
-
-* the `BackgroundService#asActionInvocationMemento(...)` (not formally part of the API) is also no longer called by the
-framework; moreover the default implementation now throws an exception to this effect.
+* the `BackgroundService#asActionInvocationMemento(...)` (not formally part of the API) is also no longer called by the framework; moreover the default implementation now throws an exception to this effect.
 
 
 == Auditing
 
-The xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] SPI service has been deprecated, instead replaced
-by the xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`].
+The link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_AuditingService[`AuditingService`] SPI service has been deprecated, instead replaced by the link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_AuditerService[`AuditerService`].
 
-There can be more than one implementation of this new SPI, and a framework-provided implementation
-(`AuditerServiceLogging`) will log to a file.  The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s audit module also implements the new SPI.
+There can be more than one implementation of this new SPI, and a framework-provided implementation (`AuditerServiceLogging`) will log to a file.
+The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s audit module also implements the new SPI.
 
 
 == Publishing
 
-The xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`] SPI service and its supporting
-xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_EventSerializer[`EventSerializer`] domain service, have both deprecated, instead
-replaced by the xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_persistence-layer-spi_PublisherService[`PublisherService`].
+The link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublishingService[`PublishingService`] SPI service and its supporting link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_EventSerializer[`EventSerializer`] domain service, have both deprecated, instead replaced by the link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#_rgsvc_persistence-layer-spi_PublisherService[`Publisher [...]
 
-There can be more than one implementation of this new SPI, and a framework-provided implementation
-(`PublisherServiceLogging`) will log to a file.  The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s publishmq module also implements the new SPI.
+There can be more than one implementation of this new SPI, and a framework-provided implementation (`PublisherServiceLogging`) will log to a file.
+The (non-ASF) link:http://platform.incode.org[Incode Platform^]'s publishmq module also implements the new SPI.
 
-The new service also supports the notion of published property edits; the new
-xref:../guides/rgant/rgant.adoc#_rgant-Property_publishing[`@Property#publishing()`] annotation attribute can be used to specify.  The `
-isis.services.publish.properties` configuration property can be used to specify a fallback default for properties where
-the attribute is not set explicitly.
+The new service also supports the notion of published property edits; the new link:https://isis.apache.org/versions/1.13.0/guides/rgant/rgant.html#_rgant-Property_publishing[`@Property#publishing()`] annotation attribute can be used to specify.
+The ` isis.services.publish.properties` configuration property can be used to specify a fallback default for properties where the attribute is not set explicitly.
 
-Conversely, neither the xref:../guides/rgant/rgant.adoc#_rgant-Action_publishingPayloadFactory[`@Action#publishingPayloadFactory()`]
-nor the xref:../guides/rgant/rgant.adoc#_rgant-DomainObject_publishingPayloadFactory[`@DomainObject#publishingPayloadFactory()`] are
-supported by `PublisherService`; instead the consumers of the events are expected to callback for any additional
-information, eg using xref:../guides/ugvro/ugvro.adoc#[Resful Objects] viewer.
+Conversely, neither the link:https://isis.apache.org/versions/1.13.0/guides/rgant/rgant.html#_rgant-Action_publishingPayloadFactory[`@Action#publishingPayloadFactory()`] nor the link:https://isis.apache.org/versions/1.13.0/guides/rgant/rgant.html#_rgant-DomainObject_publishingPayloadFactory[`@DomainObject#publishingPayloadFactory()`] are supported by `PublisherService`; instead the consumers of the events are expected to callback for any additional information, eg using link:https://isis [...]
 
 
 == Auto-logout
 
-The new configuration property `isis.authentication.shiro.autoLogoutIfAlreadyAuthenticated` (documented more fully in
-the  xref:../guides/ugsec/ugsec.adoc#_ugsec_configuring-isis-to-use-shiro[security guide]) is by default set to false, thereby
-disabling auto-logout behaviour that is believed to be the root cause of some exceptions thrown by the
-xref:../guides/ugvro/ugvro.adoc#[Restful Objects viewer] during a race condition.  The *previous behaviour can be re-enabled* by setting
-to `true`.
+The new configuration property `isis.authentication.shiro.autoLogoutIfAlreadyAuthenticated` (documented more fully in the  link:https://isis.apache.org/versions/1.13.0/guides/ugsec/ugsec.html#_ugsec_configuring-isis-to-use-shiro[security guide]) is by default set to false, thereby disabling auto-logout behaviour that is believed to be the root cause of some exceptions thrown by the link:https://isis.apache.org/versions/1.13.0/guides/ugvro/ugvro.html#[Restful Objects viewer] during a race [...]
+The *previous behaviour can be re-enabled* by setting to `true`.
 
 
 == Safe 'rememberMe' cookies
 
-Apache Isis leverages link:http://wicket.apache.org[Apache Wicket]'s rememberMe support which holds remembered
-user/passwords in an encrypted cookie.
+Apache Isis leverages link:http://wicket.apache.org[Apache Wicket]'s rememberMe support which holds remembered user/passwords in an encrypted cookie.
 
-If a hard-coded and publicly known value were to be used (as was the case prior to `1.13.0`), then it would be
-possible for rememberMe user/password to be intercepted and decrypted, possibly compromising access.  The
-`isis.viewer.wicket.rememberMe.encryptionKey` configuration property therefore allows a private key to be specified,
-baked into the application.
+If a hard-coded and publicly known value were to be used (as was the case prior to `1.13.0`), then it would be possible for rememberMe user/password to be intercepted and decrypted, possibly compromising access.
+The `isis.viewer.wicket.rememberMe.encryptionKey` configuration property therefore allows a private key to be specified, baked into the application.
 
-If no value is set then (for safety) a random UUID will be used as the encryption key.  (The net effect of this
-fallback behaviour is that 'rememberMe' will work, but only until the webapp is restarted (after which the end-user
-will have to log in again).
+If no value is set then (for safety) a random UUID will be used as the encryption key.
+(The net effect of this fallback behaviour is that 'rememberMe' will work, but only until the webapp is restarted (after which the end-user will have to log in again).
 
-Related, the `isis.viewer.wicket.suppressRememberMe` configuration property has been replaced by
-`isis.viewer.wicket.rememberMe.suppress` (though the old configuration property is still supported).
+Related, the `isis.viewer.wicket.suppressRememberMe` configuration property has been replaced by `isis.viewer.wicket.rememberMe.suppress` (though the old configuration property is still supported).
 
 
 == Custom programming models
 
 In previous releases the `isis.reflector.facets` configuration property could be used to specify a new implementation
 of the (internal) `ProgrammingModel` API.  This configuration property is no longer supported.  See the
-xref:../guides/ugbtb/ugbtb.adoc#_ugbtb_programming-model_finetuning[beyond the basics] guide for an alternative broadly equivalent
+link:https://isis.apache.org/versions/1.13.0/guides/ugbtb/ugbtb.html#_ugbtb_programming-model_finetuning[beyond the basics] guide for an alternative broadly equivalent
 approach.
 
 
@@ -110,7 +87,7 @@ approach.
 == injectXxx() no longer supported
 
 Apache Isis automatically injects domain services into other domain objects, supporting the
-xref:../guides/rgant/rgant.adoc#_rgant-Inject[`@Inject`] annotation, also injection to `set...()` setter methods and finally injection
+link:https://isis.apache.org/versions/1.13.0/guides/rgant/rgant.html#_rgant-Inject[`@Inject`] annotation, also injection to `set...()` setter methods and finally injection
 into `inject...()` methods.  This last method is now no longer supported by default.  It can be re-enabled if necessary
 using the `isis.services.injector.injectPrefix` configuration property.
 
@@ -135,7 +112,7 @@ in use, then the app will fail-fast and refuse to start.
 == ApplicationFeatureRepository
 
 The `isis.services.applicationFeatures.init` configuration property is used to control whether the
-xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_metadata-api_ApplicationFeatureRepository[`ApplicationFeatureRepository`] domain service lazily or
+link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#_rgsvc_metadata-api_ApplicationFeatureRepository[`ApplicationFeatureRepository`] domain service lazily or
 eagerly initializes itself based on the framework's internal metamodel.
 
 Previously this service eagerly initialized itself, causing the framework to have to traverse the domain object
@@ -150,7 +127,7 @@ There are two sets of changes relating to integration tests.
 
 === Builder
 
-The `IsisSystemForTest.Builder` class is used to xref:../guides/ugtst/ugtst.adoc#_ugtst_integ-test-support_bootstrapping[bootstrap integration tests].
+The `IsisSystemForTest.Builder` class is used to link:https://isis.apache.org/versions/1.13.0/guides/ugtst/ugtst.html#_ugtst_integ-test-support_bootstrapping[bootstrap integration tests].
 
 A number of the clauses within this class have been removed:
 
@@ -161,11 +138,11 @@ so this builder method is redundant.
 
 * `with(ProgrammingModel programmingModel)` +
 +
-Instead, use `AppManifest#getConfiguration()` to xref:../guides/ugbtb/ugbtb.adoc#_ugbtb_programming-model_finetuning[include/exclude facets]
+Instead, use `AppManifest#getConfiguration()` to link:https://isis.apache.org/versions/1.13.0/guides/ugbtb/ugbtb.html#_ugbtb_programming-model_finetuning[include/exclude facets]
 
 * `with(MetaModelValidator metaModelValidator)` +
 +
-Instead, use `AppManifest#getConfiguration()` to specify a xref:../guides/ugbtb/ugbtb.adoc#_ugbtb_programming-model_custom-validator[custom validator].
+Instead, use `AppManifest#getConfiguration()` to specify a link:https://isis.apache.org/versions/1.13.0/guides/ugbtb/ugbtb.html#_ugbtb_programming-model_custom-validator[custom validator].
 
 * `withServicesIn(String... packagePrefixes)` and `withServices(Object... services)` +
 +
@@ -215,50 +192,41 @@ public class DomainAppSystemInitializer {
 
 == web.xml
 
-In the xref:../guides/ugbtb/ugbtb.adoc#_ugbtb_web-xml[`web.xml`], the "isis.viewers" context-param is now ignored.  Instead the
-`viewer_wicket.properties` and `viewer_restfulobjects.properties` will both be loaded if present (but neither need be present).
+In the link:https://isis.apache.org/versions/1.13.0/guides/ugbtb/ugbtb.html#_ugbtb_web-xml[`web.xml`], the "isis.viewers" context-param is now ignored.
+Instead the `viewer_wicket.properties` and `viewer_restfulobjects.properties` will both be loaded if present (but neither need be present).
 
 
 
 == `HasTransactionId` mixin
 
-The xref:../guides/rgcms/rgcms.adoc#_rgcms_classes_mixins_HasTransactionId[`HasTransactionId`] mixin interface has subtly changed its
-meaning (and is now somewhat mis-named).  Prior to `1.13.0`, this identifier was the GUID of the Isis transaction in
-which the object was created.  As of `1.13.0`, this identifier actually is for the request/interaction (as per the new
-xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_application-layer-api_InteractionContext[`InteractionContext`] service) in which the object was created.
+The link:https://isis.apache.org/versions/1.13.0/guides/rgcms/rgcms.html#_rgcms_classes_mixins_HasTransactionId[`HasTransactionId`] mixin interface has subtly changed its meaning (and is now somewhat mis-named).  Prior to `1.13.0`, this identifier was the GUID of the Isis transaction in which the object was created.  As of `1.13.0`, this identifier actually is for the request/interaction (as per the new link:https://isis.apache.org/versions/1.13.0/guides/rgsvc/rgsvc.html#_rgsvc_applicati [...]
 
 
 
 == Notable new features
 
-The following are new features so do not impact in themselves impact any migration effort, but you may wish to start
-taking advantage of once you have upgraded.
+The following are new features so do not impact in themselves impact any migration effort, but you may wish to start taking advantage of once you have upgraded.
 
-* `@Nullable` annotation +
+* `@Nullable` annotation
 +
-The xref:../guides/rgant/rgant.adoc#_rgant-Nullable[`@Nullable`] annotation can now be used to specify the optionality of properties
-and parameters.
+The link:https://isis.apache.org/versions/1.13.0/guides/rgant/rgant.html#_rgant-Nullable[`@Nullable`] annotation can now be used to specify the optionality of properties and parameters.
 
-* `ActionDomainEvent` for mixins +
+* `ActionDomainEvent` for mixins
 +
-Previously it was not possible to discover the mixed-in domain object when an `ActionDomainEvent` was raised by a
-mixin action.  This is now possible, through the xref:../guides/rgcms/rgcms.adoc#_rgcms_classes_domainevent_ActionDomainEvent[`mixedIn()`] method.
+Previously it was not possible to discover the mixed-in domain object when an `ActionDomainEvent` was raised by a mixin action.
+This is now possible, through the link:https://isis.apache.org/versions/1.13.0/guides/rgcms/rgcms.html#_rgcms_classes_domainevent_ActionDomainEvent[`mixedIn()`] method.
 
-* `Blob` and `Clob` file types +
+* `Blob` and `Clob` file types
 +
-The xref:../guides/rgant/rgant.adoc#_rgant-Property_fileAccept[`@Property#fileAccept()`] and
-xref:../guides/rgant/rgant.adoc#_rgant-Parameter-fileAccept[`@Parameter#fileAccept()`] annotation attributes can be used to hint at
-the file type to upload for a blob or clob.
+The link:https://isis.apache.org/versions/1.13.0/guides/rgant/rgant.html#_rgant-Property_fileAccept[`@Property#fileAccept()`] and link:https://isis.apache.org/versions/1.13.0/guides/rgant/rgant.html#_rgant-Parameter-fileAccept[`@Parameter#fileAccept()`] annotation attributes can be used to hint at the file type to upload for a blob or clob.
 
-* Live reloading +
+* Live reloading
 +
-The `isis.viewer.wicket.liveReloadUrl` configuration property allows live reloading of objects if the layout is updated,
-reducing feedback times.  Further guidance on setting this up can be found
-xref:../guides/dg/dg.adoc#__dg_ide_intellij_advanced_gradle-liveReload[here].
+The `isis.viewer.wicket.liveReloadUrl` configuration property allows live reloading of objects if the layout is updated, reducing feedback times.
+Further guidance on setting this up can be found link:https://isis.apache.org/versions/1.13.0/guides/dg/dg.html#__dg_ide_intellij_advanced_gradle-liveReload[here].
 
-* Docker support +
+* Docker support
 +
-The `overrides.properties` configuration file, if present, is loaded last as the configuration property file, with
-its contents overriding any previously defined configuration properties.  This simple idea makes it easy to create Docker
-container images; see xref:../guides/ugbtb/ugbtb.adoc#_ugbtb_deployment_docker[here] for further discussion.
+The `overrides.properties` configuration file, if present, is loaded last as the configuration property file, with its contents overriding any previously defined configuration properties.
+This simple idea makes it easy to create Docker container images; see link:https://isis.apache.org/versions/1.13.0/guides/ugbtb/ugbtb.html#_ugbtb_deployment_docker[here] for further discussion.
 
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.13.0-to-1.14.0.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.13.0-to-1.14.0.adoc
index 6f3b756..d14a055 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.13.0-to-1.14.0.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.13.0-to-1.14.0.adoc
@@ -32,7 +32,7 @@ This is disabled by default; if enabled, this configuration property will treat
 
 * `isis.reflector.validator.noParamsOnly` +
 +
-When searching for  xref:../guides/rgcms/rgcms.adoc#_rgcms_methods_prefixes_disable[`disableXxx()`] or xref:../guides/rgcms/rgcms.adoc#_rgcms_methods_prefixes_hide[`hideXxx()`] supporting methods, whether to search only for the no-param version (or also for supporting methods that match the parameter types of the action). +
+When searching for  link:https://isis.apache.org/versions/1.14.0/guides/rgcms/rgcms.html#_rgcms_methods_prefixes_disable[`disableXxx()`] or link:https://isis.apache.org/versions/1.14.0/guides/rgcms/rgcms.html#_rgcms_methods_prefixes_hide[`hideXxx()`] supporting methods, whether to search only for the no-param version (or also for supporting methods that match the parameter types of the action). +
 +
 This is disabled by default; if enabled then this makes for a simpler programming model.
 
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.14.0-to-1.15.0.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.14.0-to-1.15.0.adoc
index 53ea7f9..bc9251d 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.14.0-to-1.15.0.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.14.0-to-1.15.0.adoc
@@ -27,13 +27,13 @@ aggregates dependencies for running as a webapp
 brings in a dependency on `isis-core-webserver` (to run the application from the command line using `org.apache.isis.WebServer`).
 This is defined in a profile which is actived only when running under the Intellij IDE.
 
-The xref:../ugfun/ugfun.adoc#_ugfun_getting-started_helloworld-archetype[HelloWorld] and xref:../ugfun/ugfun.adoc#_ugfun_getting-started_simpleapp-archetype[SimpleApp] archetypes both make use of these new aggregators.
+The link:https://isis.apache.org/versions/1.15.0/ugfun/ugfun.html#_ugfun_getting-started_helloworld-archetype[HelloWorld] and link:https://isis.apache.org/versions/1.15.0/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype[SimpleApp] archetypes both make use of these new aggregators.
 
 
 [[_migration-notes_1.14.0-to-1.15.0_ISIS-1528]]
 == Rename of isis-viewer-wicket artifacts (link:https://issues.apache.org/jira/browse/ISIS-1528[ISIS-1528])
 
-The `<groupId>` and `<artifactId>` of the xref:../guides/ugvw/ugvw.adoc#[Wicket viewer] have been made consistent with other artifacts:
+The `<groupId>` and `<artifactId>` of the link:https://isis.apache.org/versions/1.15.0/guides/ugvw/ugvw.html#[Wicket viewer] have been made consistent with other artifacts:
 
 * the `<groupId>` has been changed from `org.apache.isis.viewer` to `org.apache.isis.core`
 * the `<artifactId>` has been changed from `isis-viewer-wicket-???` to `isis-core-viewer-wicket-???`
@@ -66,8 +66,8 @@ Domain services fall into three categories:
 * framework services: defined within the applib with a default implementation provided by the framework itself.
 
 As described
-xref:../guides/ugbtb/ugbtb.adoc#_ugbtb_hints-and-tips_replacing-default-service-implementations[here], it is possible to override framework services so that the framework uses the replacement implementation.
-Previously this required explicitly setting either xref:../guides/rgant/rgant.adoc#_rgant-DomainService_menuOrder[`@DomainService#menuOrder()`] or xref:../guides/rgant/rgant.adoc#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`].
+link:https://isis.apache.org/versions/1.15.0/guides/ugbtb/ugbtb.html#_ugbtb_hints-and-tips_replacing-default-service-implementations[here], it is possible to override framework services so that the framework uses the replacement implementation.
+Previously this required explicitly setting either link:https://isis.apache.org/versions/1.15.0/guides/rgant/rgant.html#_rgant-DomainService_menuOrder[`@DomainService#menuOrder()`] or link:https://isis.apache.org/versions/1.15.0/guides/rgant/rgant.html#_rgant-DomainServiceLayout_menuOrder[`@DomainServiceLayout#menuOrder()`].
 
 In 1.15.0, the default value for `menuOrder` has been set to a value lower than that of the framework-provided implementations, and so will a custom implementation will always take precedence over the framework implementations without having to remember to also set `menuOrder`.
 
@@ -78,18 +78,18 @@ A small change (made in (link:https://issues.apache.org/jira/browse/ISIS-1688[IS
 [[_migration-notes_1.14.0-to-1.15.0_ISIS-1504]]
 == Metamodel validators (link:https://issues.apache.org/jira/browse/ISIS-1504[ISIS-1504], link:https://issues.apache.org/jira/browse/ISIS-1622[ISIS-1622], link:https://issues.apache.org/jira/browse/ISIS-1669[ISIS-1669])
 
-The metamodel validator has been extended with several new checks relating to xref:../ugfun.adoc#_ugfun_programming-model_view-models_jaxb[JAXB view models]:
+The metamodel validator has been extended with several new checks relating to link:https://isis.apache.org/versions/1.15.0/ugfun.html#_ugfun_programming-model_view-models_jaxb[JAXB view models]:
 
 * that the view model can be instantiated:
 ** has a public, no-arg constructor
 ** is not abstract
 ** is not a member inner class (nested static class is ok)
-* that JODA datetimes are annotated with the xref:../ugfun/ugfun.adoc#_ugfun_programming-model_view-models_jaxb_joda-datatypes[appropriate implementation] of a JAXB `XmlAdapter`
-* that for references to persistent entities, that those persistent entities are annotated to use xref:../ugfun/ugfun.adoc#_ugfun_programming-model_view-models_jaxb_referencing-domain-entities[`PersistentEntityAdapter`] as their JAXB adapter.
+* that JODA datetimes are annotated with the link:https://isis.apache.org/versions/1.15.0/ugfun/ugfun.html#_ugfun_programming-model_view-models_jaxb_joda-datatypes[appropriate implementation] of a JAXB `XmlAdapter`
+* that for references to persistent entities, that those persistent entities are annotated to use link:https://isis.apache.org/versions/1.15.0/ugfun/ugfun.html#_ugfun_programming-model_view-models_jaxb_referencing-domain-entities[`PersistentEntityAdapter`] as their JAXB adapter.
 
 \... in other words, that the view model can be instantiated.
 
-These checks are enabled by default but can be disabled with a xref:../rgcfg.adoc#__rgcfg_configuring-core_metamodel-validation[configuration property] if required.
+These checks are enabled by default but can be disabled with a link:https://isis.apache.org/versions/1.15.0/rgcfg.html#__rgcfg_configuring-core_metamodel-validation[configuration property] if required.
 
 
 [[_migration-notes_1.14.0-to-1.15.0_ISIS-1613]]
@@ -115,7 +115,7 @@ log4j.additivity.org.apache.wicket.page.XmlPartialPageUpdate=false
 
 Bootstrapping the application can now be accomplished with less boilerplate, both for the regular webapp and in integration tests.
 
-For more information, see the xref:../ugtst/ugtst.adoc#_ugtst_integ-test-support_bootstrapping[testing guide] and xref:../rgcms/rgcms.adoc#__rgcms_classes_AppManifest-bootstrapping_bootstrapping_AppManifestAbstract[reference guide for classes/methods/schema].
+For more information, see the link:https://isis.apache.org/versions/1.15.0/ugtst/ugtst.html#_ugtst_integ-test-support_bootstrapping[testing guide] and link:https://isis.apache.org/versions/1.15.0/rgcms/rgcms.html#__rgcms_classes_AppManifest-bootstrapping_bootstrapping_AppManifestAbstract[reference guide for classes/methods/schema].
 
 
 
@@ -134,7 +134,7 @@ You should therefore inspect all properties of your view models and ensure that
 [[_migration-notes_1.14.0-to-1.15.0_ISIS-1595]]
 == Fix to config variable (link:https://issues.apache.org/jira/browse/ISIS-1595[ISIS-1595])
 
-The configuration property xref:../guides/rgcfg/rgcfg.adoc#__rgcfg_configuring-core_metamodel-validation[ `isis.reflector.validator.jdoqlVariablesClause`] was incorrectly named `variablesClause`.
+The configuration property link:https://isis.apache.org/versions/1.15.0/guides/rgcfg/rgcfg.html#__rgcfg_configuring-core_metamodel-validation[ `isis.reflector.validator.jdoqlVariablesClause`] was incorrectly named `variablesClause`.
 This has now been corrected.
 
 Any applications that used this configuration property should be updated.
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.7.0-to-1.8.0.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.7.0-to-1.8.0.adoc
index a3c3a51..5f728c4 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.7.0-to-1.8.0.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.7.0-to-1.8.0.adoc
@@ -7,20 +7,18 @@
 
 
 
-Existing projects written against v1.7.0 should run against v1.8.0 without any changes.  In particular (unlike 1.6.0 and
- 1.7.0) there should be no need to update `pom.xml` files of existing projects.  If you *do* encounter any difficulties
-then let us know via the xref:../support.adoc#[users mailing list], so we can support you and document issues here.
+Existing projects written against v1.7.0 should run against v1.8.0 without any changes.
+In particular (unlike 1.6.0 and 1.7.0) there should be no need to update `pom.xml` files of existing projects.
+If you *do* encounter any difficulties then let us know via the link:https://isis.apache.org/versions/2.0.0-M1/support.html#[users mailing list], so we can support you and document issues here.
 
-That said, many of the existing annotations have been deprecated in 1.8.0, replaced with a simplified and rationalized
- set of annotations; see xref:../guides/rgant/rgant.adoc#[here].  To help you migrate your application
- over to the new annotations, there is a new configuration property that can be set in `isis.properties`:
+That said, many of the existing annotations have been deprecated in 1.8.0, replaced with a simplified and rationalized  set of annotations; see link:https://isis.apache.org/versions/2.0.0-M1/guides/rgant/rgant.html#[here].
+To help you migrate your application over to the new annotations, there is a new configuration property that can be set in `isis.properties`:
 
 [source,ini]
 ----
 isis.reflector.validator.allowDeprecated=false
 ----
 
-If this flag is present and set to false, then metamodel validation errors will be thrown on startup if any deprecated
-annotations are encountered.  These can be viewed either in the console or by browsing to the app (an error page will
-be displayed).
+If this flag is present and set to false, then metamodel validation errors will be thrown on startup if any deprecated annotations are encountered.
+These can be viewed either in the console or by browsing to the app (an error page will be displayed).
 
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_bootstrapping-using-AppManifest.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_bootstrapping-using-AppManifest.adoc
index 88e7a6c..133217e 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_bootstrapping-using-AppManifest.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_bootstrapping-using-AppManifest.adoc
@@ -9,7 +9,7 @@
 Apache Isis 1.9.0 provides a simplified programmatic way of bootstrapping the application, that also unifies bootstrapping for integration tests.
 
 For now this new bootstrapping mechanism is optional (you don't have to change your code), but it may become mandatory in future releases.
-The xref:../guides/ugfun/ugfun.adoc#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype] has been updated to use this new mechanism.
+The link:https://isis.apache.org/versions/1.9.0/guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype] has been updated to use this new mechanism.
 
 The instructions below assume that your application is structured as per the simpleapp archetype.  Adjust accordingly.
 
@@ -129,7 +129,7 @@ For example, the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s s
 
 [TIP]
 ====
-For details of the usages of the other methods in this interface, see the xref:../guides/rgcms/rgcms.adoc#_rgcms_classes_AppManifest-bootstrapping[reference guide] documentation.
+For details of the usages of the other methods in this interface, see the link:https://isis.apache.org/versions/1.9.0/guides/rgcms/rgcms.html#_rgcms_classes_AppManifest-bootstrapping[reference guide] documentation.
 ====
 
 
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_exception-recognizer.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_exception-recognizer.adoc
index 1d0cd5e..7dc1895 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_exception-recognizer.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_exception-recognizer.adoc
@@ -6,9 +6,9 @@
 
 
 
-The `ExceptionRecognizerCompositeForJdoObjectStore` service (an implementation of the xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_presentation-layer-spi_ExceptionRecognizer[`ExceptionRecognizer`] SPI) recognizes certain expected exceptions thrown by the JDO objectstore (for example, violations of uniqueness) and converts them into meaningful messages for the end-user.
+The `ExceptionRecognizerCompositeForJdoObjectStore` service (an implementation of the link:https://isis.apache.org/versions/1.9.0/guides/rgsvc/rgsvc.html#_rgsvc_presentation-layer-spi_ExceptionRecognizer[`ExceptionRecognizer`] SPI) recognizes certain expected exceptions thrown by the JDO objectstore (for example, violations of uniqueness) and converts them into meaningful messages for the end-user.
 
-Prior to 1.9.0 this implementation was _not_ annotated with xref:../guides/rgant/rgant.adoc#_rgant-DomainService[`@DomainService`] and thus needed to be explicitly registered in `isis.properties`.
+Prior to 1.9.0 this implementation was _not_ annotated with link:https://isis.apache.org/versions/1.9.0/guides/rgant/rgant.html#_rgant-DomainService[`@DomainService`] and thus needed to be explicitly registered in `isis.properties`.
 
 In 1.9.0 the service has been annotated with `@DomainService` meaning that:
 
@@ -32,7 +32,7 @@ public class EstatioIntegTestBuilder extends IsisSystemForTest.Builder {
 
 If you fail to do this you will get an exception to the effect of duplicate service Ids being registered.
 
-Now that the `ExceptionRecognizerCompositeForJdoObjectStore` no longer needs to be explicitly registered, you might (very rarely) require the opposite situation, namely to disable the service.  As this can't be done by just removing it from `isis.properties`, you instead can set a new xref:../guides/rgcfg/rgcfg.adoc#_rgcfg_configuring-core[configuration property] `isis.services.ExceptionRecognizerCompositeForJdoObjectStore.disable`:
+Now that the `ExceptionRecognizerCompositeForJdoObjectStore` no longer needs to be explicitly registered, you might (very rarely) require the opposite situation, namely to disable the service.  As this can't be done by just removing it from `isis.properties`, you instead can set a new link:https://isis.apache.org/versions/1.9.0/guides/rgcfg/rgcfg.html#_rgcfg_configuring-core[configuration property] `isis.services.ExceptionRecognizerCompositeForJdoObjectStore.disable`:
 
 [source,ini]
 ----
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_fixture-scripts-specification-provider.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_fixture-scripts-specification-provider.adoc
index 161baab..c66837d 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_fixture-scripts-specification-provider.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_fixture-scripts-specification-provider.adoc
@@ -6,8 +6,8 @@
 
 
 
-The `FixtureScriptsSpecificationProvider` SPI service is an alternative to subclassing the xref:../guides/rgcms/rgcms.adoc#_rgcms_classes_super_FixtureScripts[`FixtureScripts`] domain service.  The logic that would normally be in the subclass moves to the provider service instead, and the framework instantiates a fallback default instance, xref:../guides/rgsvc/rgsvc.adoc#_rgsvc_testing_FixtureScripts[`FixtureScriptsDefault`].
+The `FixtureScriptsSpecificationProvider` SPI service is an alternative to subclassing the link:https://isis.apache.org/versions/1.9.0/guides/rgcms/rgcms.html#_rgcms_classes_super_FixtureScripts[`FixtureScripts`] domain service.  The logic that would normally be in the subclass moves to the provider service instead, and the framework instantiates a fallback default instance, link:https://isis.apache.org/versions/1.9.0/guides/rgsvc/rgsvc.html#_rgsvc_testing_FixtureScripts[`FixtureScriptsD [...]
 
 This new design is optional; if you continue to provide your own subclass then everything will continue as before.  However the new design is more flexible and involves less code.
 
-See xref:../guides/ugtst/ugtst.adoc#_ugtst_fixture-scripts_api-and-usage[user guide] for further discussion.
\ No newline at end of file
+See link:https://isis.apache.org/versions/1.9.0/guides/ugtst/ugtst.html#_ugtst_fixture-scripts_api-and-usage[user guide] for further discussion.
\ No newline at end of file
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_specify-all-dom-packages.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_specify-all-dom-packages.adoc
index 1780889..0524d61 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_specify-all-dom-packages.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_specify-all-dom-packages.adoc
@@ -8,11 +8,11 @@
 
 Apache Isis automatically scans for certain classes on the classpath in order to configure itself.  Specifically these are:
 
-* searching for classes annotated with xref:../guides/rgant/rgant.adoc#_rgant-DomainService[`@DomainService`].
+* searching for classes annotated with link:https://isis.apache.org/versions/1.9.0/guides/rgant/rgant.html#_rgant-DomainService[`@DomainService`].
 
-* searching for classes extending xref:../guides/rgcms/rgcms.adoc#_rgcms_classes_super_FixtureScript[`FixtureScript`]
+* searching for classes extending link:https://isis.apache.org/versions/1.9.0/guides/rgcms/rgcms.html#_rgcms_classes_super_FixtureScript[`FixtureScript`]
 
-* searching for classes annotated with xref:../guides/rgant/rgant.adoc#_rgant-PersistenceCapable[`@PersistenceCapable`].
+* searching for classes annotated with link:https://isis.apache.org/versions/1.9.0/guides/rgant/rgant.html#_rgant-PersistenceCapable[`@PersistenceCapable`].
 
 For the last of these we have tightened up the validation, to ensure that each package specified in the `isis.persistor.datanucleus.RegisterEntities.packagePrefix` key does indeed include at least one annotated entity.  This should include any domain classes for addon modules.
 
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_upgrading-to-dn4.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_upgrading-to-dn4.adoc
index 79daf9b..806af18 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_upgrading-to-dn4.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_upgrading-to-dn4.adoc
@@ -8,7 +8,7 @@
 
 Apache Isis 1.9.0 updates to DataNucleus 4.0.0, which requires some changes (simplifications) to the Maven configuration.
 
-If you starting a new app then you can start from the xref:../guides/ugfun/ugfun.adoc#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype]; its Maven configuration has been updated.
+If you starting a new app then you can start from the link:https://isis.apache.org/versions/1.9.0/guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype]; its Maven configuration has been updated.
 
 If you have an existing Apache Isis app that you want to upgrade, then you'll need to make some changes.
 
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_upgrading-to-java8.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_upgrading-to-java8.adoc
index 3db6e19..ed59ea9 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_upgrading-to-java8.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_upgrading-to-java8.adoc
@@ -40,7 +40,8 @@ under `build/pluginManagement/plugins`, add (or update) `maven-compiler-plugin`:
 
 [TIP]
 ====
-The `-parameters` argument causes the Java compiler to capture the names of method parameters in the `.class` files.  Apache Isis can be configured to use this, thereby avoiding the requirement to annotate every parameter with `@ParameterLayout(named=...)` or `@Named()`.  The necessary configuration is provided in the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s paraname8 metamodel extension.
+The `-parameters` argument causes the Java compiler to capture the names of method parameters in the `.class` files.  Apache Isis can be configured to use this, thereby avoiding the requirement to annotate every parameter with `@ParameterLayout(named=...)`.  The necessary configuration is provided in the (non-ASF) link:http://platform.incode.org[Incode Platform^]'s paraname8 metamodel extension.
+
 ====
 
 We also recommend that you add the `maven-enforcer-plugin` (if not used already).  Again, this resides under `<build>/<pluginManagement>/<plugins>`:
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_war-packaging.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_war-packaging.adoc
index 91c6f80..cee688f 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_war-packaging.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.8.0-to-1.9.0_war-packaging.adoc
@@ -6,7 +6,7 @@
 
 
 
-As discussed in xref:../guides/ugfun/ugfun.adoc#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype] and elsewhere, the `org.apache.isis.WebServer` provides the ability to run your app from an embedded jetty.
+As discussed in link:https://isis.apache.org/versions/1.9.0/guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype] and elsewhere, the `org.apache.isis.WebServer` provides the ability to run your app from an embedded jetty.
 This is great for prototyping.
 The class resides in the `isis-core-webserver` module, which also has the dependency on jetty.
 
@@ -37,4 +37,4 @@ To do this, locate the `maven-war-plugin` module definition (under `<build>/<plu
 ----
 
 
-For future projects the xref:../guides/ugfun/ugfun.adoc#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype] has been updated with this change.
+For future projects the link:https://isis.apache.org/versions/1.9.0/guides/ugfun/ugfun.html#_ugfun_getting-started_simpleapp-archetype[SimpleApp archetype] has been updated with this change.
diff --git a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.9.0-to-1.10.0.adoc b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.9.0-to-1.10.0.adoc
index b148315..54fe54f 100644
--- a/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.9.0-to-1.10.0.adoc
+++ b/adocs/documentation/src/main/asciidoc/migration-notes/_migration-notes_1.9.0-to-1.10.0.adoc
@@ -5,9 +5,8 @@
 :_imagesdir: images/
 
 
-Existing projects written against v1.9.0 should run against v1.10.0 with only a few minor changes.  If you *do* encounter
-any difficulties then let us know via the xref:../support.adoc#[users mailing list], so we can support you and document
-issues here.
+Existing projects written against v1.9.0 should run against v1.10.0 with only a few minor changes.
+If you *do* encounter any difficulties then let us know via the link:https://isis.apache.org/versions/1.10.0/support.html#[users mailing list], so we can support you and document issues here.
 
 
 == Remove references to `isis-viewer-wicket` parent pom.
diff --git a/core/pom.xml b/core/pom.xml
index 4681a92..6e9e138 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -2339,7 +2339,7 @@ ${license.additional-notes}
             <id>git</id>
             <activation>
                 <property>
-                    <name>!skip.git</name>
+                    <name>git</name>
                 </property>
             </activation>
             <build>