You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2023/03/30 10:20:15 UTC

[causeway] branch CAUSEWAY-2485 updated (1e3a1f6cb9 -> 2c81c3ae4b)

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

danhaywood pushed a change to branch CAUSEWAY-2485
in repository https://gitbox.apache.org/repos/asf/causeway.git


    from 1e3a1f6cb9 CAUSEWAY-2485: wip for @DomainObject#mixinMethod
     add f452420d2f CAUSEWAY-2485: completes @DomainObject#mixinMethod
     add cfb994d281 CAUSEWAY-2485: polishes a tiny bit; optimize imports
     new 2c81c3ae4b CAUSEWAY-2485: wip - @DomainObject#nature

The 1 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:
 .../src/main/java/demoapp/dom/DemoModuleJpa.java   |   5 +-
 .../objects/DomainObject/DomainObjectMenu.java     |  73 ++++-----
 .../DomainObject/aliased/DomainObjectAliased.java  |   6 +-
 ...oc => DomainObjectAliasedPage-description.adoc} |   4 +-
 ...AliasedVm.java => DomainObjectAliasedPage.java} |   6 +-
 ...yout.xml => DomainObjectAliasedPage.layout.xml} |   0
 ...up.java => DomainObjectAliasedPage_lookup.java} |   9 +-
 ...s.java => DomainObjectAliasedPage_objects.java} |  10 +-
 .../aliased/DomainObjectAliasedRepository.java     |   6 -
 ... DomainObjectAutoCompletePage-description.adoc} |   7 +-
 ...teVm.java => DomainObjectAutoCompletePage.java} |   6 +-
 ...xml => DomainObjectAutoCompletePage.layout.xml} |   0
 ...java => DomainObjectAutoCompletePage_find.java} |   4 +-
 ...a => DomainObjectAutoCompletePage_objects.java} |  11 +-
 .../DomainObject/bounded/DomainObjectBounding.java |   3 -
 ...c => DomainObjectBoundingPage-description.adoc} |   4 +-
 ...undingVm.java => DomainObjectBoundingPage.java} |   6 +-
 ...out.xml => DomainObjectBoundingPage.layout.xml} |   0
 ....java => DomainObjectBoundingPage_objects.java} |   6 +-
 ...ind.java => DomainObjectBoundingPage_find.java} |   7 +-
 .../DomainObject/editing/DomainObjectEditing.java  |   1 -
 ...oc => DomainObjectEditingPage-description.adoc} |   2 +-
 ...EditingVm.java => DomainObjectEditingPage.java} |   6 +-
 ...yout.xml => DomainObjectEditingPage.layout.xml} |   0
 ...s.java => DomainObjectEditingPage_objects.java} |   5 +-
 .../DomainObjectEntityChangePublishingEntity.java  |   7 +-
 ...PublishingEntity_updatePropertyUsingAction.java |   6 +-
 .../DomainObjectEntityChangePublishingSeeding.java |   6 +-
 ...ObjectEntityChangePublishingVm-description.adoc |   2 +-
 .../DomainObjectEntityChangePublishingVm.java      |   6 +-
 ...omainObjectEntityChangePublishingVm_modify.java |   1 -
 ...mainObjectEntityChangePublishingVm_objects.java |   6 +-
 .../jdo/DomainObjectEntityChangePublishingJdo.java |   5 +-
 ...ainObjectEntityChangePublishingJdoEntities.java |   4 +-
 .../jpa/DomainObjectEntityChangePublishingJpa.java |   5 +-
 ...ainObjectEntityChangePublishingJpaEntities.java |   4 +-
 ...DomainObjectIntrospectionPage-description.adoc} |   8 +-
 ...nVm.java => DomainObjectIntrospectionPage.java} |   2 +-
 ...ml => DomainObjectIntrospectionPage.layout.xml} |   0
 ...bjectIntrospectionPage_annotationOptional.java} |   5 +-
 ...bjectIntrospectionPage_annotationRequired.java} |   4 +-
 .../DomainObjectIntrospectionAnnotOpt.java         |   5 -
 .../jpa/DomainObjectIntrospectionAnnotOptJpa.java  |   2 -
 .../DomainObjectIntrospectionAnnotReqd.java        |   5 -
 .../jpa/DomainObjectIntrospectionAnnotReqdJpa.java |   3 -
 .../DomainObjectIntrospectionEncapsulated.java     |   6 -
 .../DomainObjectIntrospectionEncapsulatedJpa.java  |   2 -
 ...ObjectIntrospectionVm_encapsulationEnabled.java |   6 +-
 .../mixinMethod/DomainObjectMixinMethod.java       |   6 +-
 ...> DomainObjectMixinMethodPage-description.adoc} |  12 +-
 ...hodVm.java => DomainObjectMixinMethodPage.java} |  12 +-
 ....xml => DomainObjectMixinMethodPage.layout.xml} |   0
 ...va => DomainObjectMixinMethodPage_objects.java} |   7 +-
 ...=> DomainObjectMixinMethodPage_updateName.java} |  15 +-
 .../DomainObjectMixinMethod_initialCharacter.java  |   5 -
 .../DomainObjectMixinMethod_updateName.java        |  16 +-
 .../DomainObjectMixinMethodJpa-description.adoc    |  21 ++-
 .../jpa/DomainObjectMixinMethodJpa.java            |   2 -
 .../nature/DomainObjectNaturePage-description.adoc |  41 ++++++
 .../DomainObjectNaturePage.java}                   |  27 ++--
 ...ayout.xml => DomainObjectNaturePage.layout.xml} |   2 +-
 .../nature/DomainObjectNaturePage_entities.java    |  31 ++++
 .../nature/DomainObjectNaturePage_viewModels.java  |  40 +++++
 .../entity/DomainObjectNatureEntity.java}          |  11 +-
 .../entity/DomainObjectNatureEntity.layout.xml}    |   0
 .../DomainObjectNatureEntitySeeding.java}          |  12 +-
 .../jdo/DomainObjectNatureJdo.java}                |  45 +++---
 .../jdo/DomainObjectNatureJdoEntities.java}        |  18 +--
 .../jpa/DomainObjectNatureJpa.java}                |  44 +++---
 .../jpa/DomainObjectNatureJpaEntities.java}        |  18 +--
 .../DomainObjectNatureViewModel-description.adoc}  |   0
 .../viewmodel/DomainObjectNatureViewModel.java     |  77 ++++++++++
 .../DomainObjectNatureViewModel.layout.xml}        |   0
 .../viewmodels/jaxbrefentity/JaxbRefEntity.java    |  50 -------
 .../jaxbrefentity/StatefulVmJaxbRefsEntity.java    | 163 ---------------------
 .../usingjaxb/StatefulVmUsingJaxb-description.adoc |  48 ------
 .../viewmodels/usingjaxb/StatefulVmUsingJaxb.java  | 113 --------------
 .../xxxDomainEvent/DomainObjectDomainEventsVm.java |   4 +-
 .../DomainObjectLifecyleEventsVm.java              |   4 +-
 .../DomainObjectLayout/DomainObjectLayoutMenu.java |  18 +--
 .../DomainObjectLayoutBookmarkingNestedVm.java     |  20 +--
 .../DomainObjectLayoutBookmarkingVm.java           |  11 +-
 .../cssClass/DomainObjectLayoutCssClassVm.java     |   4 +-
 .../cssClassFa/DomainObjectLayoutCssClassFaVm.java |   4 +-
 .../DomainObjectLayoutDescribedAsVm.java           |   4 +-
 .../named/DomainObjectLayoutNamedVm.java           |   4 +-
 .../paged/DomainObjectLayoutPagedVm.java           |  22 +--
 .../DomainObjectLayoutTableDecoratorVm.java        |  24 +--
 .../DomainObjectLayoutXxxUiEventService.java       |   6 +-
 .../xxxUiEvent/DomainObjectLayoutXxxUiEventVm.java |  19 +--
 .../objects/other/embedded/EmbeddedTypeMenu.java   |  10 +-
 .../objects/other/embedded/EmbeddedTypeVm.java     |   8 +-
 .../other/embedded/jdo/ComplexNumberJdo.java       |   8 +-
 .../jdo/ComplexNumberJdoValueSemantics.java        |  10 +-
 .../other/embedded/jdo/NumberConstantJdo.java      |  20 +--
 .../embedded/jdo/NumberConstantJdoRepository.java  |   6 +-
 .../jdo/NumberConstantJdo_updateNumber.java        |   5 +-
 .../other/embedded/jpa/ComplexNumberJpa.java       |   8 +-
 .../jpa/ComplexNumberJpaValueSemantics.java        |  12 +-
 .../other/embedded/jpa/NumberConstantJpa.java      |  21 +--
 .../embedded/jpa/NumberConstantJpaRepository.java  |   6 +-
 .../jpa/NumberConstantJpa_updateNumber.java        |   5 +-
 .../embedded/persistence/NumberConstantEntity.java |   8 +-
 .../persistence/NumberConstantSeeding.java         |   8 +-
 .../embedded/samples/ComplexNumberSamples.java     |   6 +-
 .../other/mixins/CountHolder_explanation.java      |   4 +-
 .../mixins/CountHolder_fibonacciSequence.java      |   6 +-
 .../other/mixins/CountHolder_updateCount.java      |   4 +-
 .../objects/other/mixins/FibonacciNumberVm.java    |  13 +-
 .../other/mixins/FibonacciNumberVm.layout.xml      |   6 +-
 .../dom/domain/objects/other/mixins/MixinMenu.java |  10 +-
 .../dom/domain/objects/other/mixins/MixinVm.java   |  14 +-
 .../domain/objects/other/mixins/MixinVm.layout.xml |   2 +-
 113 files changed, 559 insertions(+), 908 deletions(-)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/{DomainObjectAliasedVm-description.adoc => DomainObjectAliasedPage-description.adoc} (97%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/{DomainObjectAliasedVm.java => DomainObjectAliasedPage.java} (95%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/{DomainObjectAliasedVm.layout.xml => DomainObjectAliasedPage.layout.xml} (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/{DomainObjectAliasedVm_lookup.java => DomainObjectAliasedPage_lookup.java} (81%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/{DomainObjectAliasedVm_objects.java => DomainObjectAliasedPage_objects.java} (65%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/{DomainObjectAutoCompleteVm-description.adoc => DomainObjectAutoCompletePage-description.adoc} (83%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/{DomainObjectAutoCompleteVm.java => DomainObjectAutoCompletePage.java} (95%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/{DomainObjectAutoCompleteVm.layout.xml => DomainObjectAutoCompletePage.layout.xml} (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/{DomainObjectAutoCompleteVm_find.java => DomainObjectAutoCompletePage_find.java} (84%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/{DomainObjectAutoCompleteVm_objects.java => DomainObjectAutoCompletePage_objects.java} (59%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/{DomainObjectBoundingVm-description.adoc => DomainObjectBoundingPage-description.adoc} (95%)
 copy examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/{DomainObjectBoundingVm.java => DomainObjectBoundingPage.java} (95%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/{DomainObjectBoundingVm.layout.xml => DomainObjectBoundingPage.layout.xml} (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/{DomainObjectBoundingVm_objects.java => DomainObjectBoundingPage_objects.java} (72%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/jpa/{DomainObjectBoundingVm_find.java => DomainObjectBoundingPage_find.java} (79%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/{DomainObjectEditingVm-description.adoc => DomainObjectEditingPage-description.adoc} (91%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/{DomainObjectEditingVm.java => DomainObjectEditingPage.java} (95%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/{DomainObjectEditingVm.layout.xml => DomainObjectEditingPage.layout.xml} (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/{DomainObjectEditingVm_objects.java => DomainObjectEditingPage_objects.java} (80%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/{DomainObjectIntrospectionVm-description.adoc => DomainObjectIntrospectionPage-description.adoc} (76%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/{DomainObjectIntrospectionVm.java => DomainObjectIntrospectionPage.java} (95%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/{DomainObjectIntrospectionVm.layout.xml => DomainObjectIntrospectionPage.layout.xml} (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/{DomainObjectIntrospectionVm_annotationOptional.java => DomainObjectIntrospectionPage_annotationOptional.java} (88%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/{DomainObjectIntrospectionVm_annotationRequired.java => DomainObjectIntrospectionPage_annotationRequired.java} (93%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/{DomainObjectMixinMethodVm-description.adoc => DomainObjectMixinMethodPage-description.adoc} (92%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/{DomainObjectMixinMethodVm.java => DomainObjectMixinMethodPage.java} (89%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/{DomainObjectMixinMethodVm.layout.xml => DomainObjectMixinMethodPage.layout.xml} (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/{DomainObjectMixinMethodVm_objects.java => DomainObjectMixinMethodPage_objects.java} (74%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/{DomainObjectMixinMethodVm_updateName.java => DomainObjectMixinMethodPage_updateName.java} (67%)
 create mode 100644 examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage-description.adoc
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/{bounded/DomainObjectBoundingVm.java => nature/DomainObjectNaturePage.java} (74%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/{viewmodels/usingjaxb/StatefulVmUsingJaxb.layout.xml => DomainObjectNaturePage.layout.xml} (97%)
 create mode 100644 examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage_entities.java
 create mode 100644 examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage_viewModels.java
 copy examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/{bounded/DomainObjectBounding.java => nature/entity/DomainObjectNatureEntity.java} (82%)
 copy examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/{editing/DomainObjectEditing.layout.xml => nature/entity/DomainObjectNatureEntity.layout.xml} (100%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/{viewmodels/jaxbrefentity/JaxbRefSeeding.java => entity/DomainObjectNatureEntitySeeding.java} (82%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/{viewmodels/jaxbrefentity/jdo/JaxbRefJdo.java => entity/jdo/DomainObjectNatureJdo.java} (65%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/{viewmodels/jaxbrefentity/jdo/JaxbRefJdoEntities.java => entity/jdo/DomainObjectNatureJdoEntities.java} (73%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/{viewmodels/jaxbrefentity/jpa/JaxbRefJpa.java => entity/jpa/DomainObjectNatureJpa.java} (72%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/{viewmodels/jaxbrefentity/jpa/JaxbRefJpaEntities.java => entity/jpa/DomainObjectNatureJpaEntities.java} (73%)
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/{viewmodels/jaxbrefentity/StatefulVmJaxbRefsEntity-description.adoc => viewmodel/DomainObjectNatureViewModel-description.adoc} (100%)
 create mode 100644 examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodel/DomainObjectNatureViewModel.java
 rename examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/{viewmodels/jaxbrefentity/StatefulVmJaxbRefsEntity.layout.xml => viewmodel/DomainObjectNatureViewModel.layout.xml} (100%)
 delete mode 100644 examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java
 delete mode 100644 examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/StatefulVmJaxbRefsEntity.java
 delete mode 100644 examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/usingjaxb/StatefulVmUsingJaxb-description.adoc
 delete mode 100644 examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/usingjaxb/StatefulVmUsingJaxb.java


[causeway] 01/01: CAUSEWAY-2485: wip - @DomainObject#nature

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

danhaywood pushed a commit to branch CAUSEWAY-2485
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 2c81c3ae4b40126539c2aa805661f7d952fba613
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Mar 30 11:20:06 2023 +0100

    CAUSEWAY-2485: wip - @DomainObject#nature
---
 .../src/main/java/demoapp/dom/DemoModuleJpa.java   |   5 +-
 .../objects/DomainObject/DomainObjectMenu.java     |  57 +++-----
 ...oc => DomainObjectAliasedPage-description.adoc} |   4 +-
 ...AliasedVm.java => DomainObjectAliasedPage.java} |   2 +-
 ...yout.xml => DomainObjectAliasedPage.layout.xml} |   0
 ...up.java => DomainObjectAliasedPage_lookup.java} |   4 +-
 ...s.java => DomainObjectAliasedPage_objects.java} |   4 +-
 ... DomainObjectAutoCompletePage-description.adoc} |   7 +-
 ...teVm.java => DomainObjectAutoCompletePage.java} |   2 +-
 ...xml => DomainObjectAutoCompletePage.layout.xml} |   0
 ...java => DomainObjectAutoCompletePage_find.java} |   4 +-
 ...a => DomainObjectAutoCompletePage_objects.java} |   4 +-
 ...c => DomainObjectBoundingPage-description.adoc} |   4 +-
 ...undingVm.java => DomainObjectBoundingPage.java} |   2 +-
 ...out.xml => DomainObjectBoundingPage.layout.xml} |   0
 ....java => DomainObjectBoundingPage_objects.java} |   4 +-
 ...ind.java => DomainObjectBoundingPage_find.java} |   6 +-
 ...oc => DomainObjectEditingPage-description.adoc} |   2 +-
 ...EditingVm.java => DomainObjectEditingPage.java} |   2 +-
 ...yout.xml => DomainObjectEditingPage.layout.xml} |   0
 ...s.java => DomainObjectEditingPage_objects.java} |   4 +-
 ...ObjectEntityChangePublishingVm-description.adoc |   2 +-
 ...DomainObjectIntrospectionPage-description.adoc} |   6 +-
 ...nVm.java => DomainObjectIntrospectionPage.java} |   2 +-
 ...ml => DomainObjectIntrospectionPage.layout.xml} |   0
 ...bjectIntrospectionPage_annotationOptional.java} |   4 +-
 ...bjectIntrospectionPage_annotationRequired.java} |   4 +-
 ...ObjectIntrospectionVm_encapsulationEnabled.java |   4 +-
 .../mixinMethod/DomainObjectMixinMethod.java       |   5 +-
 ...> DomainObjectMixinMethodPage-description.adoc} |   8 +-
 ...hodVm.java => DomainObjectMixinMethodPage.java} |   8 +-
 ....xml => DomainObjectMixinMethodPage.layout.xml} |   0
 ...va => DomainObjectMixinMethodPage_objects.java} |   4 +-
 ...=> DomainObjectMixinMethodPage_updateName.java} |  11 +-
 .../nature/DomainObjectNaturePage-description.adoc |  41 ++++++
 .../DomainObjectNaturePage.java}                   |  23 ++--
 ...ayout.xml => DomainObjectNaturePage.layout.xml} |   0
 .../DomainObjectNaturePage_entities.java}          |  22 +--
 .../nature/DomainObjectNaturePage_viewModels.java  |  40 ++++++
 .../DomainObjectNatureEntity.java}                 |  30 ++---
 .../entity/DomainObjectNatureEntity.layout.xml}    |  44 ++++--
 .../DomainObjectNatureEntitySeeding.java}          |   6 +-
 .../jdo/DomainObjectNatureJdo.java}                |  30 +++--
 .../jdo/DomainObjectNatureJdoEntities.java}        |  14 +-
 .../jpa/DomainObjectNatureJpa.java}                |  26 ++--
 .../jpa/DomainObjectNatureJpaEntities.java}        |  14 +-
 .../DomainObjectNatureViewModel-description.adoc}  |   0
 .../viewmodel/DomainObjectNatureViewModel.java     |  77 +++++++++++
 .../DomainObjectNatureViewModel.layout.xml}        |   0
 .../jaxbrefentity/StatefulVmJaxbRefsEntity.java    | 148 ---------------------
 .../usingjaxb/StatefulVmUsingJaxb-description.adoc |  48 -------
 .../viewmodels/usingjaxb/StatefulVmUsingJaxb.java  |  98 --------------
 52 files changed, 352 insertions(+), 484 deletions(-)

diff --git a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
index 99c781b4b0..b0ead1c349 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java
@@ -27,10 +27,9 @@ import demoapp.dom.domain.objects.DomainObject.editing.jpa.DomainObjectEditingJp
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.jpa.DomainObjectEntityChangePublishingJpa;
 import demoapp.dom.domain.objects.DomainObject.introspection.annotOpt.jpa.DomainObjectIntrospectionAnnotOptJpa;
 import demoapp.dom.domain.objects.DomainObject.introspection.annotReqd.jpa.DomainObjectIntrospectionAnnotReqdJpa;
-import demoapp.dom.domain.objects.DomainObject.introspection.encapsulated.DomainObjectIntrospectionEncapsulated;
 import demoapp.dom.domain.objects.DomainObject.introspection.encapsulated.jpa.DomainObjectIntrospectionEncapsulatedJpa;
 import demoapp.dom.domain.objects.DomainObject.mixinMethod.jpa.DomainObjectMixinMethodJpa;
-import demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.jpa.JaxbRefJpa;
+import demoapp.dom.domain.objects.DomainObject.nature.entity.jpa.DomainObjectNatureJpa;
 import demoapp.dom.domain.objects.other.embedded.jpa.NumberConstantJpa;
 import demoapp.dom.domain.properties.Property.commandPublishing.jpa.PropertyCommandPublishingJpa;
 import demoapp.dom.domain.properties.Property.executionPublishing.jpa.PropertyExecutionPublishingJpa;
@@ -163,7 +162,7 @@ import org.springframework.context.annotation.Profile;
         PropertyExecutionPublishingJpa.class,
         PropertyProjectingChildJpa.class,
 
-        JaxbRefJpa.class,
+        DomainObjectNatureJpa.class,
         NumberConstantJpa.class,
 
 })
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/DomainObjectMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/DomainObjectMenu.java
index d4eebce0e5..2783e2fdce 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/DomainObjectMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/DomainObjectMenu.java
@@ -18,19 +18,17 @@
  */
 package demoapp.dom.domain.objects.DomainObject;
 
-import demoapp.dom.domain.objects.DomainObject.aliased.DomainObjectAliasedVm;
-import demoapp.dom.domain.objects.DomainObject.autoComplete.DomainObjectAutoCompleteVm;
-import demoapp.dom.domain.objects.DomainObject.bounded.DomainObjectBoundingVm;
-import demoapp.dom.domain.objects.DomainObject.editing.DomainObjectEditingVm;
+import demoapp.dom.domain.objects.DomainObject.aliased.DomainObjectAliasedPage;
+import demoapp.dom.domain.objects.DomainObject.autoComplete.DomainObjectAutoCompletePage;
+import demoapp.dom.domain.objects.DomainObject.bounded.DomainObjectBoundingPage;
+import demoapp.dom.domain.objects.DomainObject.editing.DomainObjectEditingPage;
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingVm;
-import demoapp.dom.domain.objects.DomainObject.introspection.DomainObjectIntrospectionVm;
-import demoapp.dom.domain.objects.DomainObject.mixinMethod.DomainObjectMixinMethodVm;
-import demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.StatefulVmJaxbRefsEntity;
-import demoapp.dom.domain.objects.DomainObject.nature.viewmodels.usingjaxb.StatefulVmUsingJaxb;
+import demoapp.dom.domain.objects.DomainObject.introspection.DomainObjectIntrospectionPage;
+import demoapp.dom.domain.objects.DomainObject.mixinMethod.DomainObjectMixinMethodPage;
+import demoapp.dom.domain.objects.DomainObject.nature.DomainObjectNaturePage;
 import demoapp.dom.domain.objects.DomainObject.xxxDomainEvent.DomainObjectDomainEventsVm;
 import demoapp.dom.domain.objects.DomainObject.xxxLifecycleEvent.DomainObjectLifecyleEventsVm;
 import lombok.RequiredArgsConstructor;
-import lombok.val;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -47,26 +45,26 @@ public class DomainObjectMenu {
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-circle", describedAs = "Specify logical type name aliases")
-    public DomainObjectAliasedVm aliased() {
-        return new DomainObjectAliasedVm();
+    public DomainObjectAliasedPage aliased() {
+        return new DomainObjectAliasedPage();
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-question-circle", describedAs = "Search object in prompt")
-    public DomainObjectAutoCompleteVm autoComplete(){
-        return new DomainObjectAutoCompleteVm();
+    public DomainObjectAutoCompletePage autoComplete(){
+        return new DomainObjectAutoCompletePage();
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-list-ul", describedAs = "Choose 'reference data' object (one of a bounded set) in prompt")
-    public DomainObjectBoundingVm bounding(){
-        return new DomainObjectBoundingVm();
+    public DomainObjectBoundingPage bounding(){
+        return new DomainObjectBoundingPage();
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-pencil-alt", describedAs = "Default editability of properties")
-    public DomainObjectEditingVm editing() {
-        return new DomainObjectEditingVm();
+    public DomainObjectEditingPage editing() {
+        return new DomainObjectEditingPage();
     }
 
     @Action(semantics = SemanticsOf.SAFE)
@@ -77,38 +75,25 @@ public class DomainObjectMenu {
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-pen-ruler", describedAs = "Control over introspection process")
-    public DomainObjectIntrospectionVm introspection(){
-        return new DomainObjectIntrospectionVm();
+    public DomainObjectIntrospectionPage introspection(){
+        return new DomainObjectIntrospectionPage();
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-mortar-pestle", describedAs = "For mixins, override the default method name")
-    public DomainObjectMixinMethodVm mixinMethod() {
-        return new DomainObjectMixinMethodVm();
+    public DomainObjectMixinMethodPage mixinMethod() {
+        return new DomainObjectMixinMethodPage();
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa = "fa-gamepad", describedAs = "@DomainObject(nature=VIEW_MODEL) for a Stateful View Model")
-    public StatefulVmUsingJaxb natureStateful(final String message) {
-        val viewModel = new StatefulVmUsingJaxb();
-        viewModel.setMessage(message);
-        return viewModel;
+    public DomainObjectNaturePage natureStateful() {
+        return new DomainObjectNaturePage();
     }
     @MemberSupport public String default0NatureStateful() {
         return "Some initial state";
     }
 
-    @Action(semantics = SemanticsOf.SAFE)
-    @ActionLayout(cssClassFa = "fa-gamepad", describedAs = "@DomainObject(nature=VIEW_MODEL) for a Stateful View Model referencing an entity")
-    public StatefulVmJaxbRefsEntity natureStatefulRefsEntity(final String message) {
-        val viewModel = new StatefulVmJaxbRefsEntity();
-        viewModel.setMessage(message);
-        return viewModel;
-    }
-    @MemberSupport public String default0NatureStatefulRefsEntity() {
-        return "Some initial state";
-    }
-
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-asterisk", describedAs = "Default class of the domain event emitted when interacting with the domain object's actions, properties or collections")
     public DomainObjectDomainEventsVm domainEvents() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage-description.adoc
similarity index 97%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage-description.adoc
index 4ba9b43570..1c7d41c40c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage-description.adoc
@@ -22,9 +22,9 @@ The "lookup" (mixin) action uses the https://causeway.apache.org/refguide/2.0.0-
 For convenience, the action provides a choices method for all possible values.
 
 [source,java,indent=0]
-.DomainObjectAliasedVm_lookup.java
+.DomainObjectAliasedPage_lookup.java
 ----
-include::DomainObjectAliasedVm_lookup.java[tags=class]
+include::DomainObjectAliasedPage_lookup.java[tags=class]
 ----
 
 Navigate through to the entity to see the corresponding source code.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage.java
similarity index 95%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage.java
index b76f1aa2ba..63e7c95a6c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage.java
@@ -35,7 +35,7 @@ import org.apache.causeway.applib.annotation.ObjectSupport;
 @Named("demo.DomainObjectAliasedVm")
 @DomainObject(
         aliased = {"demo.domain-object.AliasedVm"})
-public class DomainObjectAliasedVm implements HasAsciiDocDescription {
+public class DomainObjectAliasedPage implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
         return "DomainObject#aliased";
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage.layout.xml
similarity index 100%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm.layout.xml
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm_lookup.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage_lookup.java
similarity index 93%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm_lookup.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage_lookup.java
index e3655908ff..c9cababc15 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm_lookup.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage_lookup.java
@@ -17,10 +17,10 @@ import org.apache.causeway.applib.services.bookmark.BookmarkService;
 //tag::class[]
 @Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
-public class DomainObjectAliasedVm_lookup {
+public class DomainObjectAliasedPage_lookup {
 
     @SuppressWarnings("unused")
-    private final DomainObjectAliasedVm mixee;
+    private final DomainObjectAliasedPage mixee;
 
     @MemberSupport
     public DomainObjectAliased act(final String bookmark) {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm_objects.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage_objects.java
similarity index 87%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm_objects.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage_objects.java
index 4d157b722a..7746ba055e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm_objects.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedPage_objects.java
@@ -14,10 +14,10 @@ import org.apache.causeway.applib.annotation.MemberSupport;
 @Collection()
 @CollectionLayout()
 @RequiredArgsConstructor
-public class DomainObjectAliasedVm_objects {
+public class DomainObjectAliasedPage_objects {
 
     @SuppressWarnings("unused")
-    private final DomainObjectAliasedVm mixee;
+    private final DomainObjectAliasedPage mixee;
 
     @MemberSupport
     public List<? extends DomainObjectAliased> coll() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage-description.adoc
similarity index 83%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage-description.adoc
index 2ffd132ead..858627154e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage-description.adoc
@@ -15,14 +15,13 @@ The collection on the left shows a set of entity instances, of type `DomainObjec
 The "find" (mixin) action defines the entity class as its parameter type, and simply returns it.
 
 [source,java,indent=0]
-.DomainObjectAutoCompleteVm_find.java
+.DomainObjectAutoCompletePage_find.java
 ----
-include::DomainObjectAutoCompleteVm_find.java[tags=class]
+include::DomainObjectAutoCompletePage_find.java[tags=class]
 ----
-
 <.> just returns the provided object.
 The main work is performed when the framework renders the action prompt, using the `autoCompleteXxx` attributes to determine how to obtain the objects to provide (in a drop-down list box).
 
-The autoComplete search to perform is specified using the link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/DomainObject.html#autoCompleteRepository[autoCompleteRepository] and link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/DomainObject.html#autoCompleteMethod[autoCompleteMethod] attributes.
+The autoComplete search to perform is specified using the `autoCompleteRepository` and `autoCompleteMethod` attributes.
 
 Navigate through to the entity to see the corresponding source code.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage.java
similarity index 95%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage.java
index 4e3b23b3cb..d7be07156c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage.java
@@ -36,7 +36,7 @@ import org.apache.causeway.applib.annotation.ObjectSupport;
 @Named("demo.DomainObjectAutoCompleteVm")
 @DomainObject(
         nature = Nature.VIEW_MODEL)
-public class DomainObjectAutoCompleteVm implements HasAsciiDocDescription {
+public class DomainObjectAutoCompletePage implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
         return "DomainObject#autoComplete...";
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm_find.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage_find.java
similarity index 84%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm_find.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage_find.java
index 9e9423786e..c358757868 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm_find.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage_find.java
@@ -9,10 +9,10 @@ import org.apache.causeway.applib.annotation.SemanticsOf;
 //tag::class[]
 @Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
-public class DomainObjectAutoCompleteVm_find {
+public class DomainObjectAutoCompletePage_find {
 
     @SuppressWarnings("unused")
-    private final DomainObjectAutoCompleteVm mixee;
+    private final DomainObjectAutoCompletePage mixee;
 
     @MemberSupport
     public DomainObjectAutoComplete act(final DomainObjectAutoComplete domainObjectAutoComplete) {  // <.>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm_objects.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage_objects.java
similarity index 87%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm_objects.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage_objects.java
index 8c007e3667..6ec731ab5c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompleteVm_objects.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/autoComplete/DomainObjectAutoCompletePage_objects.java
@@ -14,10 +14,10 @@ import org.apache.causeway.applib.annotation.MemberSupport;
 @Collection()
 @CollectionLayout()
 @RequiredArgsConstructor
-public class DomainObjectAutoCompleteVm_objects {
+public class DomainObjectAutoCompletePage_objects {
 
     @SuppressWarnings("unused")
-    private final DomainObjectAutoCompleteVm mixee;
+    private final DomainObjectAutoCompletePage mixee;
 
     @MemberSupport
     public List<? extends DomainObjectAutoComplete> coll() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingPage-description.adoc
similarity index 95%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingPage-description.adoc
index f60a3122c3..094e559806 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingPage-description.adoc
@@ -15,9 +15,9 @@ The "find" (mixin) action defines the entity class as its parameter type, and si
 For example, with JPA:
 
 [source,java,indent=0]
-.DomainObjectBoundingVm_find.java
+.DomainObjectBoundingPage_find.java
 ----
-include::jpa/DomainObjectBoundingVm_find.java[tags=class]
+include::jpa/DomainObjectBoundingPage_find.java[tags=class]
 ----
 <.> just returns the provided object.
 The main work is performed when the framework renders the action prompt, using the `bounding` attribute to determine how to obtain the objects to provide (in a drop-down list box).
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingPage.java
similarity index 95%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingPage.java
index 1980034032..1089b0d87c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingPage.java
@@ -37,7 +37,7 @@ import org.apache.causeway.applib.annotation.ObjectSupport;
 @Named("demo.DomainObjectBoundingVm")
 @DomainObject(
         nature = Nature.VIEW_MODEL)
-public class DomainObjectBoundingVm implements HasAsciiDocDescription {
+public class DomainObjectBoundingPage implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
         return "DomainObject#bounding";
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingPage.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingPage.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm_objects.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingPage_objects.java
similarity index 87%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm_objects.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingPage_objects.java
index f25a4c3a4c..0e5f51fb77 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm_objects.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingPage_objects.java
@@ -14,10 +14,10 @@ import org.apache.causeway.applib.annotation.MemberSupport;
 @Collection()
 @CollectionLayout()
 @RequiredArgsConstructor
-public class DomainObjectBoundingVm_objects {
+public class DomainObjectBoundingPage_objects {
 
     @SuppressWarnings("unused")
-    private final DomainObjectBoundingVm mixee;
+    private final DomainObjectBoundingPage mixee;
 
     @MemberSupport
     public List<? extends DomainObjectBounding> coll() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/jpa/DomainObjectBoundingVm_find.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/jpa/DomainObjectBoundingPage_find.java
similarity index 86%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/jpa/DomainObjectBoundingVm_find.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/jpa/DomainObjectBoundingPage_find.java
index f76f2ac7c9..37db74a9a0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/jpa/DomainObjectBoundingVm_find.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/jpa/DomainObjectBoundingPage_find.java
@@ -1,6 +1,6 @@
 package demoapp.dom.domain.objects.DomainObject.bounded.jpa;
 
-import demoapp.dom.domain.objects.DomainObject.bounded.DomainObjectBoundingVm;
+import demoapp.dom.domain.objects.DomainObject.bounded.DomainObjectBoundingPage;
 import lombok.RequiredArgsConstructor;
 
 import org.apache.causeway.applib.annotation.Action;
@@ -12,10 +12,10 @@ import org.springframework.context.annotation.Profile;
 @Profile("demo-jpa")
 @Action(semantics = SemanticsOf.SAFE)
 @RequiredArgsConstructor
-public class DomainObjectBoundingVm_find {
+public class DomainObjectBoundingPage_find {
 
     @SuppressWarnings("unused")
-    private final DomainObjectBoundingVm mixee;
+    private final DomainObjectBoundingPage mixee;
 
     @MemberSupport
     public DomainObjectBoundingJpa act(final DomainObjectBoundingJpa domainObjectBounding) {  // <.>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingPage-description.adoc
similarity index 91%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingVm-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingPage-description.adoc
index 71902b325d..7d82c87675 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingPage-description.adoc
@@ -23,7 +23,7 @@ There are therefore three levels at which property editing can be defined:
 
     @Property > @DomainObject > global configuration property
 
-Alternatively, this works in the opposite direction also: if the global config property is to _allow_ properties to be edited, then the link:https://causeway.apache.org/refguide/2.0.0-RC1/applib/index/annotation/DomainObject.html#editing[@DomainObject#editing] can be used to disable editing and link:https://causeway.apache.org/refguide/2.0.0-RC1/applib/index/annotation/Property.html#editing[@Property#editing].
+Alternatively, this works in the opposite direction also: if the global config property is to _allow_ properties to be edited, then the `@DomainObject#editing` can be used to disable editing and `@Property#editing`.
 
 In addition, the link:https://causeway.apache.org/refguide/2.0.0-RC1/applib/index/annotation/DomainObject.html#editingDisabledReason[@DomainObject#editingDisabledReason] can be used to specify the reason why a property cannot be edited.
 This can also be specified at the property level using link:https://causeway.apache.org/refguide/2.0.0-RC1/applib/index/annotation/Property.html#editingDisabledReason[@Property#editingDisabledReason].
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingPage.java
similarity index 95%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingVm.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingPage.java
index 2d2d72ff74..b400591f86 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingPage.java
@@ -37,7 +37,7 @@ import org.apache.causeway.applib.annotation.ObjectSupport;
 @Named("demo.DomainObjectEditingVm")
 @DomainObject(
         editing = Editing.ENABLED)
-public class DomainObjectEditingVm implements HasAsciiDocDescription {
+public class DomainObjectEditingPage implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
         return "DomainObject#editing";
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingPage.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingVm.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingPage.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingVm_objects.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingPage_objects.java
similarity index 87%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingVm_objects.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingPage_objects.java
index 288f73d2f3..626c2d79e3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingVm_objects.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/editing/DomainObjectEditingPage_objects.java
@@ -14,10 +14,10 @@ import org.apache.causeway.applib.annotation.MemberSupport;
 @Collection()
 @CollectionLayout()
 @RequiredArgsConstructor
-public class DomainObjectEditingVm_objects {
+public class DomainObjectEditingPage_objects {
 
     @SuppressWarnings("unused")
-    private final DomainObjectEditingVm mixee;
+    private final DomainObjectEditingPage mixee;
 
     @MemberSupport
     public List<? extends DomainObjectEditing> coll() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm-description.adoc
index d47bc445a2..cfd8dcc0a3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm-description.adoc
@@ -34,7 +34,7 @@ The collection on the left shows a set of entity instances, which have `@DomainO
 Using this view model, you can use the actions to create new instances of the entity, update them or to delete them.
 
 Meanwhile, at the bottom of this page is a collection that simply lists all of the changes that have been received.
-This uses an implementation of link:https://causeway.apache.org/refguide/${CAUSEWAY_VERSION}/applib/index/services/publishing/spi/EntityChangesSubscriber.html#spi[EntityChangesSubscriber] that captures changes and simply holds them in-memory.
+This uses an implementation of `EntityChangesSubscriber` that captures changes and simply holds them in-memory.
 
 NOTE: there will always be some listed from the fixture scripts run when the application first bootstraps.)
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage-description.adoc
similarity index 78%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage-description.adoc
index 4f28e16a26..ae92725025 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage-description.adoc
@@ -9,17 +9,17 @@ These introspection policies are:
 +
 Introspect public methods only, recognising getters as either properties or collections, and other public methods as actions.
 +
-Supporting methods (hide, disable, validate, choices, autoComplete) do not need to be annotated either.
+Supporting methods for either domain members (`hide`, `disable`, `validate`, `choices`, `autoComplete`) or for the object (`title`, `iconName`, `layout`, `cssClass`) do not need to be annotated either.
 
 * "annotation required"
 +
 Requires that getter methods representing properties or collections, and public methods representing actions are all explicitly annotated (with link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Property.html[@Property], link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Collection.html[@Collection] and link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Action.html[@Action])
 +
-Supporting methods (hide, disable, validate, choices, autoComplete) do not need to be annotated.
+However supporting methods for domain members (`hide`, `disable`, `validate`, `choices`, `autoComplete`) and for the object (`title`, `iconName`, `layout`, `cssClass`) do not need to be annotated.
 
 * "encapsulation enabled"
 +
-Requires that both the methods representing properties, collections an actions are annotated (with link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Property.html[@Property], link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Collection.html[@Collection] and link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Action.html[@Action]), and _also_ that the supporting methods are annotated (with link:http [...]
+Requires that both the methods representing properties, collections an actions are annotated (with `@Property,` `@Collection` and `@Action`), and _also_ that the supporting methods are annotated (with link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/MemberSupport.html[@MemberSupport] for methods relating to domain members, and link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/ObjectSupport.html[@ObjectSupport] for the object- [...]
 +
 However, the methods can have _any_ visibility, including `private` visibility.
 This reduces the programmatic API of the domain object can so can help eliminate bugs.
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage.java
similarity index 95%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage.java
index d3f5c0d630..f4b89ef7ec 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage.java
@@ -37,7 +37,7 @@ import org.apache.causeway.applib.annotation.ObjectSupport;
 @Named("demo.DomainObjectIntrospectionVm")
 @DomainObject(
         introspection = Introspection.ENCAPSULATION_ENABLED)
-public class DomainObjectIntrospectionVm implements HasAsciiDocDescription {
+public class DomainObjectIntrospectionPage implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
         return "DomainObject#introspection";
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm_annotationOptional.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage_annotationOptional.java
similarity index 93%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm_annotationOptional.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage_annotationOptional.java
index b0bf3668f2..d43d2902b7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm_annotationOptional.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage_annotationOptional.java
@@ -33,10 +33,10 @@ import org.apache.causeway.applib.annotation.MemberSupport;
 @Collection()
 @CollectionLayout()
 @RequiredArgsConstructor
-public class DomainObjectIntrospectionVm_annotationOptional {
+public class DomainObjectIntrospectionPage_annotationOptional {
 
     @SuppressWarnings("unused")
-    private final DomainObjectIntrospectionVm mixee;
+    private final DomainObjectIntrospectionPage mixee;
 
     @MemberSupport
     public List<? extends DomainObjectIntrospectionAnnotOpt> coll() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm_annotationRequired.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage_annotationRequired.java
similarity index 93%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm_annotationRequired.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage_annotationRequired.java
index 7c7cb3e4fc..d464d06a82 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionVm_annotationRequired.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/DomainObjectIntrospectionPage_annotationRequired.java
@@ -33,10 +33,10 @@ import org.apache.causeway.applib.annotation.MemberSupport;
 @Collection()
 @CollectionLayout()
 @RequiredArgsConstructor
-public class DomainObjectIntrospectionVm_annotationRequired {
+public class DomainObjectIntrospectionPage_annotationRequired {
 
     @SuppressWarnings("unused")
-    private final DomainObjectIntrospectionVm mixee;
+    private final DomainObjectIntrospectionPage mixee;
 
     @MemberSupport
     public List<? extends DomainObjectIntrospectionAnnotReqd> coll() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/encapsulated/jpa/DomainObjectIntrospectionVm_encapsulationEnabled.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/encapsulated/jpa/DomainObjectIntrospectionVm_encapsulationEnabled.java
index 25982755d3..ebe0cb8795 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/encapsulated/jpa/DomainObjectIntrospectionVm_encapsulationEnabled.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/introspection/encapsulated/jpa/DomainObjectIntrospectionVm_encapsulationEnabled.java
@@ -19,7 +19,7 @@
 package demoapp.dom.domain.objects.DomainObject.introspection.encapsulated.jpa;
 
 import demoapp.dom._infra.values.ValueHolderRepository;
-import demoapp.dom.domain.objects.DomainObject.introspection.DomainObjectIntrospectionVm;
+import demoapp.dom.domain.objects.DomainObject.introspection.DomainObjectIntrospectionPage;
 import lombok.RequiredArgsConstructor;
 
 import java.util.List;
@@ -38,7 +38,7 @@ import org.springframework.context.annotation.Profile;
 public class DomainObjectIntrospectionVm_encapsulationEnabled {
 
     @SuppressWarnings("unused")
-    private final DomainObjectIntrospectionVm mixee;
+    private final DomainObjectIntrospectionPage mixee;
 
     @MemberSupport
     public List<DomainObjectIntrospectionEncapsulatedJpa> coll() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethod.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethod.java
index c7654ba87c..69d001c30c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethod.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethod.java
@@ -21,14 +21,17 @@ package demoapp.dom.domain.objects.DomainObject.mixinMethod;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 
+import org.apache.causeway.applib.annotation.ObjectSupport;
+
 @SuppressWarnings("CdiManagedBeanInconsistencyInspection")
 public abstract class DomainObjectMixinMethod
         implements
         HasAsciiDocDescription,
         ValueHolder<String> {
 
+    @ObjectSupport
     public String title() {
-        return value();
+        return getName();
     }
 
     @Override
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage-description.adoc
similarity index 94%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage-description.adoc
index 6c6b694ea5..9b2dc5c782 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm-description.adoc
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage-description.adoc
@@ -18,9 +18,9 @@ However, if you prefer some other method names other than the defaults then you
 The collection on the left is a mixin to this view model, but (for demonstration purposes) uses `@DomainObject#mixinMethod` to change the default method name from "coll" to "collection":
 
 [source,java,indent=0]
-.DomainObjectMixinMethodVm_objects.java
+.DomainObjectMixinMethodPage_objects.java
 ----
-include::DomainObjectMixinMethodVm_objects.java[tags=class]
+include::DomainObjectMixinMethodPage_objects.java[tags=class]
 ----
 <.> overrides the default mixin method
 <.> method representing the contributed domain collection, using the overridden method name
@@ -29,9 +29,9 @@ Similarly, the "updateName" action shown on the collection panel is also a mixin
 This also overrrides the default name:
 
 [source,java,indent=0]
-.DomainObjectMixinMethodVm_updateName.java
+.DomainObjectMixinMethodPage_updateName.java
 ----
-include::DomainObjectMixinMethodVm_updateName.java[tags=class]
+include::DomainObjectMixinMethodPage_updateName.java[tags=class]
 ----
 <.> overrides the default mixin method
 <.> method representing the contributed domain collection, using the overridden method name
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage.java
similarity index 89%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage.java
index 13cb366256..7e8c2d8a40 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage.java
@@ -33,17 +33,11 @@ import org.apache.causeway.applib.annotation.ObjectSupport;
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
 @Named("demo.DomainObjectMixinMethodVm")
-public class DomainObjectMixinMethodVm implements HasAsciiDocDescription {
+public class DomainObjectMixinMethodPage implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
         return "DomainObject#mixinMethod";
     }
 
-    /*
-     * TODO on a mixin ...
-    @DomainObject(
-        mixinMethod = "xxx")
-    */
-
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm_objects.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage_objects.java
similarity index 89%
copy from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm_objects.java
copy to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage_objects.java
index f0aad21e64..d96e1e0558 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm_objects.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage_objects.java
@@ -16,11 +16,11 @@ import org.apache.causeway.applib.annotation.DomainObject;
 @Collection()
 @CollectionLayout()
 @RequiredArgsConstructor
-public class DomainObjectMixinMethodVm_objects {
+public class DomainObjectMixinMethodPage_objects {
     // ...
 //end::class[]
     @SuppressWarnings("unused")
-    private final DomainObjectMixinMethodVm mixee;
+    private final DomainObjectMixinMethodPage mixee;
 
 //tag::class[]
     public List<? extends DomainObjectMixinMethod> collection() {   // <.>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm_updateName.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage_updateName.java
similarity index 79%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm_updateName.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage_updateName.java
index 66670d8d7b..4a7d63c9e5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm_updateName.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodPage_updateName.java
@@ -13,19 +13,20 @@ import org.apache.causeway.applib.annotation.ActionLayout;
 import org.apache.causeway.applib.annotation.DomainObject;
 
 //tag::class[]
-@DomainObject(mixinMethod = "action")                           // <.>
+@DomainObject(mixinMethod = "action")                   // <.>
 @Action()
 @ActionLayout()
 @RequiredArgsConstructor
-public class DomainObjectMixinMethodVm_updateName {
+public class DomainObjectMixinMethodPage_updateName {
     // ...
 //end::class[]
-    private final DomainObjectMixinMethodVm mixee;
+    private final DomainObjectMixinMethodPage mixee;
 
 //tag::class[]
-    public DomainObjectMixinMethodVm action(                    // <.>
+    public DomainObjectMixinMethodPage action(          // <.>
               final DomainObjectMixinMethod object,
-              final String newName) {
+              final String newName
+    ) {
         // ...
 //end::class[]
         object.setName(newName);
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage-description.adoc
new file mode 100644
index 0000000000..fdc57a7cf0
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage-description.adoc
@@ -0,0 +1,41 @@
+: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 [...]
+
+Domain classes fall into three broad categories:
+
+* (singleton) domain services representing menus, eg whose actions are rendered in the menubars.
+* domain entities, representing shared persistence state (eg `Customer`, `Order`, `Product` and so on)
+* link:https://causeway.apache.org/userguide/${CAUSEWAY_VERSION}/fun/overview.html#view-models[view models], which hold session-specific (temporary) state.
++
+View models can be used for a variety of use cases, such as a "manager" class to handle a complicated workflow (part of an "application layer"), or as an object to render as a simplified representation of an entity (part of the "presentation layer").
+
+The object you are looking at right now is a view model; its source code is:
+
+[source,java]
+.DomainObjectNaturePage.java
+----
+include::DomainObjectNaturePage.java[tags=class]
+----
+
+<.> Specifies this is a JAXB element.
+This is actually enough for the framework to infer that this domain object is a view model.
+<.> Nevertheless, it's generally good practice to specifuy the nature explicitly.
+
+In many cases the framework is able to infer the nature of the domain object from annotations such as `@Entity` or `@PersistenceCapable` (for JPA or JDO entities), or from `@XmlElement` for JAXB-style view models.
+The purpose of link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/DomainObject.html#nature[@DomainObject#nature] is to make the nature explicit.
+
+[TIP]
+.Long URLs
+====
+As you might have noticed, view models are often represented by long URLs.
+This is because their state is encoded into that URL.
+
+If the URL is too long, or if it holds sensitive data that needs to be encrypted, then the link:https://causeway.apache.org/refguide/${CAUSEWAY_VERSION}/applib-svc/UrlEncodingService.html[UrlEncodingService] SPI allows different serializations to be provided.
+====
+
+=== How this demo works
+
+There are two collections on the left hand side, one of domain entities and the other of view models.
+The entities are obtained by querying a repository, while the view models are created on the fly, each wrapping a corresponding entity.
+
+Navigate through to these domain objects to inspect their source code; both the entity and view model explicitly indicates its `nature`.
+
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage.java
similarity index 74%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage.java
index 1980034032..b9e98bf960 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/bounded/DomainObjectBoundingVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.bounded;
+package demoapp.dom.domain.objects.DomainObject.nature;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
@@ -31,23 +31,16 @@ import org.apache.causeway.applib.annotation.Nature;
 import org.apache.causeway.applib.annotation.ObjectSupport;
 
 //tag::class[]
-@XmlRootElement(name = "root")
-@XmlType
-@XmlAccessorType(XmlAccessType.FIELD)
-@Named("demo.DomainObjectBoundingVm")
+@XmlRootElement(name = "root")                              // <.>
+@XmlType                                                    // <1>
+@XmlAccessorType(XmlAccessType.FIELD)                       // <1>
+@Named("demo.DomainObjectNaturePage")
 @DomainObject(
-        nature = Nature.VIEW_MODEL)
-public class DomainObjectBoundingVm implements HasAsciiDocDescription {
+        nature=Nature.VIEW_MODEL)                           // <.>
+public class DomainObjectNaturePage implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
-        return "DomainObject#bounding";
+        return "DomainObject#mixinMethod";
     }
-
-    /*
-     * TODO on an entity ...
-    @DomainObject(
-            bounding = Bounding.BOUNDED)
-    */
-
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/usingjaxb/StatefulVmUsingJaxb.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/usingjaxb/StatefulVmUsingJaxb.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm_objects.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage_entities.java
similarity index 54%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm_objects.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage_entities.java
index f0aad21e64..8bb7f740a8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/mixinMethod/DomainObjectMixinMethodVm_objects.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage_entities.java
@@ -1,6 +1,7 @@
-package demoapp.dom.domain.objects.DomainObject.mixinMethod;
+package demoapp.dom.domain.objects.DomainObject.nature;
 
 import demoapp.dom._infra.values.ValueHolderRepository;
+import demoapp.dom.domain.objects.DomainObject.nature.entity.DomainObjectNatureEntity;
 import lombok.RequiredArgsConstructor;
 
 import java.util.List;
@@ -11,29 +12,20 @@ import org.apache.causeway.applib.annotation.Collection;
 import org.apache.causeway.applib.annotation.CollectionLayout;
 import org.apache.causeway.applib.annotation.DomainObject;
 
-//tag::class[]
 @DomainObject(mixinMethod = "collection")                           // <.>
 @Collection()
 @CollectionLayout()
 @RequiredArgsConstructor
-public class DomainObjectMixinMethodVm_objects {
-    // ...
-//end::class[]
+public class DomainObjectNaturePage_entities {
+
     @SuppressWarnings("unused")
-    private final DomainObjectMixinMethodVm mixee;
+    private final DomainObjectNaturePage mixee;
 
-//tag::class[]
-    public List<? extends DomainObjectMixinMethod> collection() {   // <.>
-        // ...
-//end::class[]
+    public List<? extends DomainObjectNatureEntity> collection() {   // <.>
         return objectRepository.all();
-//tag::class[]
     }
-//end::class[]
 
     @Inject
-    ValueHolderRepository<String, ? extends DomainObjectMixinMethod> objectRepository;
+    ValueHolderRepository<String, ? extends DomainObjectNatureEntity> objectRepository;
 
-//tag::class[]
 }
-//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage_viewModels.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage_viewModels.java
new file mode 100644
index 0000000000..da3d900482
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/DomainObjectNaturePage_viewModels.java
@@ -0,0 +1,40 @@
+package demoapp.dom.domain.objects.DomainObject.nature;
+
+import demoapp.dom._infra.values.ValueHolderRepository;
+import demoapp.dom.domain.objects.DomainObject.nature.entity.DomainObjectNatureEntity;
+import demoapp.dom.domain.objects.DomainObject.nature.viewmodel.DomainObjectNatureViewModel;
+import lombok.RequiredArgsConstructor;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+
+import org.apache.causeway.applib.annotation.Collection;
+import org.apache.causeway.applib.annotation.CollectionLayout;
+import org.apache.causeway.applib.annotation.DomainObject;
+
+//tag::class[]
+@DomainObject(mixinMethod = "collection")                           // <.>
+@Collection()
+@CollectionLayout()
+@RequiredArgsConstructor
+public class DomainObjectNaturePage_viewModels {
+    // ...
+//end::class[]
+    @SuppressWarnings("unused")
+    private final DomainObjectNaturePage mixee;
+
+//tag::class[]
+    public List<DomainObjectNatureViewModel> collection() {   // <.>
+        return entities.all().stream()
+                .map(DomainObjectNatureViewModel::new)
+                .collect(Collectors.toList());
+    }
+//end::class[]
+
+    @Inject ValueHolderRepository<String, ? extends DomainObjectNatureEntity> entities;
+
+//tag::class[]
+}
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/DomainObjectNatureEntity.java
similarity index 65%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/DomainObjectNatureEntity.java
index 0ca9607368..ac86a7647f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/DomainObjectNatureEntity.java
@@ -16,35 +16,29 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity;
+package demoapp.dom.domain.objects.DomainObject.nature.entity;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 
-import java.util.Objects;
-
-import javax.inject.Named;
-
-import org.apache.causeway.applib.annotation.DomainObject;
 import org.apache.causeway.applib.annotation.ObjectSupport;
-import org.apache.causeway.applib.annotation.Property;
 
-@Named("demo.JaxbRefEntity") // shared permissions with concrete sub class
-@DomainObject
-public abstract class JaxbRefEntity
-implements
-    ValueHolder<String> {
+@SuppressWarnings("CdiManagedBeanInconsistencyInspection")
+public abstract class DomainObjectNatureEntity
+        implements
+        HasAsciiDocDescription,
+        ValueHolder<String> {
 
-    @Override
-    public String value() {
+    @ObjectSupport public String title() {
         return getName();
     }
 
-    @ObjectSupport public String title() {
-        return Objects.requireNonNull(getName(), "most likely a serialization or re-attach issue");
+    @Override
+    public String value() {
+        return getName();
     }
 
-    @Property
     public abstract String getName();
-    protected abstract void setName(String value);
+    public abstract void setName(String value);
 
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/DomainObjectNatureEntity.layout.xml
similarity index 67%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/DomainObjectNatureEntity.layout.xml
index cec46c3a2d..691a0c6d47 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/aliased/DomainObjectAliasedVm.layout.xml
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/DomainObjectNatureEntity.layout.xml
@@ -26,10 +26,37 @@
 
 	<bs3:row>
 		<bs3:col span="6">
-			<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-			<cpt:collection id="objects">
-				<cpt:action id="lookup"/>
-			</cpt:collection>
+			<bs3:tabGroup>
+				<bs3:tab name="General">
+					<bs3:row>
+						<bs3:col span="12">
+							<cpt:fieldSet name="General" id="general" >
+								<cpt:property id="name"/>
+								<cpt:property id="originalName"/>
+								<cpt:property id="initialCharacter"/>
+							</cpt:fieldSet>
+						</bs3:col>
+					</bs3:row>
+				</bs3:tab>
+				<bs3:tab name="Metadata">
+					<bs3:row>
+						<bs3:col span="12">
+							<cpt:fieldSet name="Metadata" id="metadata" >
+								<cpt:property id="id"/>
+								<cpt:property id="logicalTypeName"/>
+								<cpt:property id="version"/>
+							</cpt:fieldSet>
+						</bs3:col>
+					</bs3:row>
+				</bs3:tab>
+				<bs3:tab name="Other">
+					<bs3:row>
+						<bs3:col span="12">
+							<cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
+						</bs3:col>
+					</bs3:row>
+				</bs3:tab>
+			</bs3:tabGroup>
 		</bs3:col>
 		<bs3:col span="6">
 			<cpt:fieldSet name="Description" id="description" >
@@ -39,15 +66,14 @@
 				<cpt:action id="inspectMetamodel"  position="PANEL_DROPDOWN"/>
 				<cpt:action id="downloadMetamodelXml"  position="PANEL_DROPDOWN"/>
 				<cpt:action id="downloadJdoMetamodel"  position="PANEL_DROPDOWN"/>
-                <cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
-                <cpt:action id="recentExecutions"  position="PANEL_DROPDOWN"/>
-                <cpt:action id="recentAuditTrailEntries"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="recentCommands"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="recentExecutions"  position="PANEL_DROPDOWN"/>
+				<cpt:action id="recentAuditTrailEntries"  position="PANEL_DROPDOWN"/>
 				<cpt:action id="impersonateWithRoles"  position="PANEL_DROPDOWN"/>
 				<cpt:action id="openRestApi" position="PANEL_DROPDOWN" />
 				<cpt:property id="description"/>
 			</cpt:fieldSet>
-		</bs3:col>
-	</bs3:row>
+		</bs3:col>	</bs3:row>
 	<bs3:row>
 		<bs3:col span="12" unreferencedCollections="true"/>
 	</bs3:row>
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefSeeding.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/DomainObjectNatureEntitySeeding.java
similarity index 82%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefSeeding.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/DomainObjectNatureEntitySeeding.java
index 1157c0ea2f..7b79c4739b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefSeeding.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/DomainObjectNatureEntitySeeding.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity;
+package demoapp.dom.domain.objects.DomainObject.nature.entity;
 
 import demoapp.dom._infra.seed.SeedServiceAbstract;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -26,11 +26,11 @@ import javax.inject.Inject;
 import org.springframework.stereotype.Service;
 
 @Service
-public class JaxbRefSeeding
+public class DomainObjectNatureEntitySeeding
 extends SeedServiceAbstract {
 
     @Inject
-    public JaxbRefSeeding(ValueHolderRepository<String, ? extends JaxbRefEntity> entities) {
+    public DomainObjectNatureEntitySeeding(ValueHolderRepository<String, ? extends DomainObjectNatureEntity> entities) {
         super(entities);
     }
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jdo/JaxbRefJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jdo/DomainObjectNatureJdo.java
similarity index 66%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jdo/JaxbRefJdo.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jdo/DomainObjectNatureJdo.java
index cce40a4db4..8d06f9b170 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jdo/JaxbRefJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jdo/DomainObjectNatureJdo.java
@@ -16,10 +16,11 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.jdo;
+package demoapp.dom.domain.objects.DomainObject.nature.entity.jdo;
 
-import demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.JaxbRefEntity;
+import demoapp.dom.domain.objects.DomainObject.nature.entity.DomainObjectNatureEntity;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 import javax.inject.Named;
@@ -27,24 +28,35 @@ import javax.jdo.annotations.*;
 
 import org.apache.causeway.applib.annotation.Bounding;
 import org.apache.causeway.applib.annotation.DomainObject;
+import org.apache.causeway.applib.annotation.Nature;
 import org.springframework.context.annotation.Profile;
 
 @Profile("demo-jdo")
-//tag::class[]
-@PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo" )
+@PersistenceCapable(
+        identityType = IdentityType.DATASTORE,
+        schema = "demo",
+        table = "DomainObjectNatureJdo"
+)
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@Named("demo.JaxbRefEntity")
+@Named("demo.DomainObjectNatureJpa")
+@NoArgsConstructor
+//tag::class[]
+// ...
 @DomainObject(
-        bounding = Bounding.BOUNDED)
-public class JaxbRefJdo
-        extends JaxbRefEntity {
+        nature = Nature.ENTITY)                     // <.>
+public class DomainObjectNatureJdo
+        extends DomainObjectNatureEntity {
+    // ...
+//end::class[]
 
-    public JaxbRefJdo(final String name) {
+    public DomainObjectNatureJdo(final String name) {
         this.name = name;
     }
 
     @Column(allowsNull = "false")
     @Getter @Setter
     private String name;
+
+    //tag::class[]
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jdo/JaxbRefJdoEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jdo/DomainObjectNatureJdoEntities.java
similarity index 73%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jdo/JaxbRefJdoEntities.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jdo/DomainObjectNatureJdoEntities.java
index 6760a400a7..235cb2814f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jdo/JaxbRefJdoEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jdo/DomainObjectNatureJdoEntities.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.jdo;
+package demoapp.dom.domain.objects.DomainObject.nature.entity.jdo;
 
 import demoapp.dom._infra.values.ValueHolderRepository;
 
@@ -25,16 +25,16 @@ import org.springframework.stereotype.Service;
 
 @Profile("demo-jdo")
 @Service
-public class JaxbRefJdoEntities
-extends ValueHolderRepository<String, JaxbRefJdo> {
+public class DomainObjectNatureJdoEntities
+extends ValueHolderRepository<String, DomainObjectNatureJdo> {
 
-    protected JaxbRefJdoEntities() {
-        super(JaxbRefJdo.class);
+    protected DomainObjectNatureJdoEntities() {
+        super(DomainObjectNatureJdo.class);
     }
 
     @Override
-    protected JaxbRefJdo newDetachedEntity(String value) {
-        return new JaxbRefJdo(value);
+    protected DomainObjectNatureJdo newDetachedEntity(String value) {
+        return new DomainObjectNatureJdo(value);
     }
 
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jpa/JaxbRefJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jpa/DomainObjectNatureJpa.java
similarity index 74%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jpa/JaxbRefJpa.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jpa/DomainObjectNatureJpa.java
index b21fdd05df..4c3ada1263 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jpa/JaxbRefJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jpa/DomainObjectNatureJpa.java
@@ -16,9 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.jpa;
+package demoapp.dom.domain.objects.DomainObject.nature.entity.jpa;
 
-import demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.JaxbRefEntity;
+import demoapp.dom.domain.objects.DomainObject.nature.entity.DomainObjectNatureEntity;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
@@ -28,25 +28,29 @@ import javax.persistence.*;
 
 import org.apache.causeway.applib.annotation.Bounding;
 import org.apache.causeway.applib.annotation.DomainObject;
+import org.apache.causeway.applib.annotation.Nature;
 import org.apache.causeway.persistence.jpa.applib.integration.CausewayEntityListener;
 import org.springframework.context.annotation.Profile;
 
 @Profile("demo-jpa")
-//tag::class[]
 @Entity
 @Table(
     schema = "demo",
-    name = "JaxbRefJpa"
+    name = "DomainObjectNatureJpa"
 )
 @EntityListeners(CausewayEntityListener.class)
-@Named("demo.JaxbRefEntity")
-@DomainObject(
-        bounding = Bounding.BOUNDED)
+@Named("demo.DomainObjectNatureJpa")
 @NoArgsConstructor
-public class JaxbRefJpa
-        extends JaxbRefEntity {
+//tag::class[]
+// ...
+@DomainObject(
+        nature = Nature.ENTITY)                     // <.>
+public class DomainObjectNatureJpa
+        extends DomainObjectNatureEntity {
+    // ...
+//end::class[]
 
-    public JaxbRefJpa(final String name) {
+    public DomainObjectNatureJpa(final String name) {
         this.name = name;
     }
 
@@ -57,5 +61,7 @@ public class JaxbRefJpa
     @Column(nullable = false)
     @Getter @Setter
     private String name;
+
+    //tag::class[]
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jpa/JaxbRefJpaEntities.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jpa/DomainObjectNatureJpaEntities.java
similarity index 73%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jpa/JaxbRefJpaEntities.java
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jpa/DomainObjectNatureJpaEntities.java
index e1e9325831..9e8478298b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jpa/JaxbRefJpaEntities.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/entity/jpa/DomainObjectNatureJpaEntities.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.jpa;
+package demoapp.dom.domain.objects.DomainObject.nature.entity.jpa;
 
 import demoapp.dom._infra.values.ValueHolderRepository;
 
@@ -25,16 +25,16 @@ import org.springframework.stereotype.Service;
 
 @Profile("demo-jpa")
 @Service
-public class JaxbRefJpaEntities
-extends ValueHolderRepository<String, JaxbRefJpa> {
+public class DomainObjectNatureJpaEntities
+extends ValueHolderRepository<String, DomainObjectNatureJpa> {
 
-    protected JaxbRefJpaEntities() {
-        super(JaxbRefJpa.class);
+    protected DomainObjectNatureJpaEntities() {
+        super(DomainObjectNatureJpa.class);
     }
 
     @Override
-    protected JaxbRefJpa newDetachedEntity(String value) {
-        return new JaxbRefJpa(value);
+    protected DomainObjectNatureJpa newDetachedEntity(String value) {
+        return new DomainObjectNatureJpa(value);
     }
 
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/StatefulVmJaxbRefsEntity-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodel/DomainObjectNatureViewModel-description.adoc
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/StatefulVmJaxbRefsEntity-description.adoc
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodel/DomainObjectNatureViewModel-description.adoc
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodel/DomainObjectNatureViewModel.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodel/DomainObjectNatureViewModel.java
new file mode 100644
index 0000000000..6c7741b0c0
--- /dev/null
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodel/DomainObjectNatureViewModel.java
@@ -0,0 +1,77 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package demoapp.dom.domain.objects.DomainObject.nature.viewmodel;
+
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.domain.objects.DomainObject.nature.entity.DomainObjectNatureEntity;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.val;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.xml.bind.annotation.*;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.apache.causeway.applib.annotation.*;
+import org.apache.causeway.applib.jaxb.PersistentEntitiesAdapter;
+import org.apache.causeway.applib.jaxb.PersistentEntityAdapter;
+import org.apache.causeway.applib.services.title.TitleService;
+
+//tag::class[]
+@XmlRootElement(name = "root")
+@XmlType(
+        propOrder = {"message", "favoriteChild", "children"}
+)
+@XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.StatefulViewModelJaxbRefsEntity")
+@DomainObject(
+        nature=Nature.VIEW_MODEL)
+@NoArgsConstructor
+public class DomainObjectNatureViewModel
+        implements HasAsciiDocDescription {
+
+    public DomainObjectNatureViewModel(DomainObjectNatureEntity underlying) {
+        this.message = underlying.getName();
+        this.underlying = underlying;
+    }
+
+    @Inject TitleService titleService;
+    @ObjectSupport public String title() {
+        return message != null ? message : titleService.titleOf(underlying);
+    }
+
+    @Property
+    @Getter @Setter
+    @XmlElement(required = false)
+    private String message;
+
+    @Property
+    @Getter @Setter
+    @XmlElement                                             // <.>
+    @XmlJavaTypeAdapter(PersistentEntityAdapter.class)
+    private DomainObjectNatureEntity underlying;
+
+}
+//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/StatefulVmJaxbRefsEntity.layout.xml b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodel/DomainObjectNatureViewModel.layout.xml
similarity index 100%
rename from examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/StatefulVmJaxbRefsEntity.layout.xml
rename to examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodel/DomainObjectNatureViewModel.layout.xml
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/StatefulVmJaxbRefsEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/StatefulVmJaxbRefsEntity.java
deleted file mode 100644
index d83404fcd1..0000000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/StatefulVmJaxbRefsEntity.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity;
-
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom._infra.values.ValueHolderRepository;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.val;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.xml.bind.annotation.*;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-
-import org.apache.causeway.applib.annotation.*;
-import org.apache.causeway.applib.jaxb.PersistentEntitiesAdapter;
-import org.apache.causeway.applib.jaxb.PersistentEntityAdapter;
-
-//tag::class[]
-@XmlRootElement(name = "root")
-@XmlType(
-        propOrder = {"message", "favoriteChild", "children"}
-)
-@XmlAccessorType(XmlAccessType.FIELD)
-@Named("demo.StatefulViewModelJaxbRefsEntity")
-@DomainObject(
-        nature=Nature.VIEW_MODEL)
-public class StatefulVmJaxbRefsEntity implements HasAsciiDocDescription {
-
-    @XmlTransient @Inject
-    private ValueHolderRepository<String, ? extends JaxbRefEntity> childEntities;
-
-    @ObjectSupport public String title() {
-        return String.format("%s; %s children", getMessage(), getChildren().size());
-    }
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    @XmlElement
-    private String message;
-
-    @Getter @Setter
-    @Property(editing = Editing.ENABLED, optionality = Optionality.OPTIONAL)
-    @XmlElement(required = false)
-    @XmlJavaTypeAdapter(PersistentEntityAdapter.class)
-    private JaxbRefEntity favoriteChild = null;
-
-    @Action(semantics = SemanticsOf.IDEMPOTENT)
-    @ActionLayout(associateWith = "favoriteChild", sequence = "1")
-    public StatefulVmJaxbRefsEntity changeFavoriteChild(final JaxbRefEntity newFavorite) {
-        favoriteChild = newFavorite;
-        return this;
-    }
-    @MemberSupport public List<JaxbRefEntity> choices0ChangeFavoriteChild() {
-        List<JaxbRefEntity> children = new ArrayList<>(getChildren());
-        children.remove(getFavoriteChild());
-        return children;
-    }
-    @MemberSupport public String disableChangeFavoriteChild() {
-        switch (getChildren().size()) {
-            case 0: return "no children";
-            case 1: return "only child";
-            default: return null;
-        }
-    }
-
-//end::class[]
-
-    //XXX[CAUSEWAY-2384] potentially fails with NPE
-    @Action(choicesFrom = "children")
-    public StatefulVmJaxbRefsEntity suffixSelected(final List<JaxbRefEntity> children) {
-        for(JaxbRefEntity child : children) {
-            child.setName(child.getName() + ", Jr");
-        }
-        return this;
-    }
-
-    //XXX shortcut for debugging
-    @Action(semantics = SemanticsOf.NON_IDEMPOTENT)
-    @ActionLayout(associateWith = "children", sequence = "2")
-    public StatefulVmJaxbRefsEntity addAll() {
-        Objects.requireNonNull(childEntities,
-                "ViewModel must have its injections points resolved, before any actions can be invoked.");
-        val all = childEntities.all();
-        getChildren().clear();
-        getChildren().addAll(all);
-        return this;
-    }
-
-    //XXX[CAUSEWAY-2383] in support of an editable property ...
-    @MemberSupport public List<JaxbRefEntity> choicesFavoriteChild() {
-        return choices0ChangeFavoriteChild(); // reuse logic from above
-    }
-    @MemberSupport public String disableFavoriteChild() {
-        return disableChangeFavoriteChild(); // reuse logic from above
-    }
-
-//tag::class[]
-    @Getter @Setter
-    @Collection
-    @XmlElement(name = "child")
-    @XmlJavaTypeAdapter(PersistentEntitiesAdapter.class)
-    private List<JaxbRefEntity> children = new ArrayList<>();
-
-    @Action(choicesFrom = "children", semantics = SemanticsOf.NON_IDEMPOTENT)
-    @ActionLayout(sequence = "1")
-    public StatefulVmJaxbRefsEntity addChild(final JaxbRefEntity child) {
-        children.add(child);
-        if(children.size() == 1) {
-            setFavoriteChild(child);
-        }
-        return this;
-    }
-
-    @Action(choicesFrom = "children", semantics = SemanticsOf.IDEMPOTENT)
-    @ActionLayout(sequence = "2")
-    public StatefulVmJaxbRefsEntity removeChild(final JaxbRefEntity child) {
-        children.remove(child);
-        return this;
-    }
-    @MemberSupport public List<JaxbRefEntity> choices0RemoveChild() { return getChildren(); }
-    @MemberSupport public String disableRemoveChild() {
-        return choices0RemoveChild().isEmpty()? "No children to remove" : null;
-    }
-
-}
-//end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/usingjaxb/StatefulVmUsingJaxb-description.adoc b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/usingjaxb/StatefulVmUsingJaxb-description.adoc
deleted file mode 100644
index 81bb3c0c8c..0000000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/usingjaxb/StatefulVmUsingJaxb-description.adoc
+++ /dev/null
@@ -1,48 +0,0 @@
-: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 [...]
-
-End users interact with link:https://causeway.apache.org/userguide/${CAUSEWAY_VERSION}/fun/overview.html#view-models[view models] in the same way as domain entities.
-
-However, whereas domain entities are mapped to a datastore, view models are not.
-Instead they are recreated dynamically by serializing their state, typically into the URL itself.
-
-The framework provides a number of ways to serialize this state, but the most flexible and standard is to use JAXB annotations:
-
-[source,java]
-----
-include::StatefulVmUsingJaxb.java[tags=class]
-----
-
-<.> mandatory, specifies this is a JAXB element
-<.> mandatory boilerplate
-<.> serializes the state by reading the field
-<.> no further JAXB annotations required for the property.
-
-Notice how the 'message' property can be modified and survives a refresh of the page.
-
-Behind the scenes, the object is converted into an XML serialization, and that is URL encoded.
-
-
-== Collections
-
-JAXB also handles serializing graphs of data, which means that view models can also have collections of other objects:
-
-[source,java,indent=0]
-----
-include::StatefulVmUsingJaxb.java[tags=child]
-----
-
-The demo provides a couple of actions to allow objects to be added and removed.
-
-[source,java,indent=0]
-----
-include::StatefulVmUsingJaxb.java[tags=addChild]
-----
-
-NOTE: the child object has value-type semantics (is annotated with `@lombok.Data`).
-
-
-== Long URLs
-
-As you can see this can result in long URLs.
-If the URL is too long, or needs to be encrypted, then the link:https://causeway.apache.org/refguide/${CAUSEWAY_VERSION}/applib-svc/UrlEncodingService.html[UrlEncodingService] SPI can provide for different serializations.
-
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/usingjaxb/StatefulVmUsingJaxb.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/usingjaxb/StatefulVmUsingJaxb.java
deleted file mode 100644
index ef64b247cf..0000000000
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/usingjaxb/StatefulVmUsingJaxb.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.usingjaxb;
-
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import lombok.Data;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.val;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Named;
-import javax.xml.bind.annotation.*;
-
-import org.apache.causeway.applib.annotation.*;
-
-//tag::class[]
-@XmlRootElement(name = "root")                              // <.>
-@XmlType                                                    // <.>
-@XmlAccessorType(XmlAccessType.FIELD)                       // <.>
-@Named("demo.StatefulVmUsingJaxb")
-@DomainObject(
-        nature=Nature.VIEW_MODEL)
-public class StatefulVmUsingJaxb implements HasAsciiDocDescription {
-
-    @ObjectSupport public String title() {
-        return String.format("%s; %s children", getMessage(), getChildren().size());
-    }
-
-    @Property(editing = Editing.ENABLED)
-    @Getter @Setter
-    @XmlElement
-    private String message;                                 // <.>
-
-//end::class[]
-//tag::child[]
-    @XmlRootElement
-    @XmlType
-    @XmlAccessorType(XmlAccessType.FIELD)
-    @Named("demo.StatefulViewModelUsingJaxb.Child")
-    @DomainObject(
-            nature=Nature.VIEW_MODEL)
-    @Data
-    public static class Child {
-        @Title
-        private String name;
-    }
-
-    @Getter @Setter
-    @Collection
-    @XmlElementWrapper(name = "children")
-    @XmlElement(name = "child")
-    private List<Child> children = new ArrayList<>();
-//end::child[]
-
-//tag::addChild[]
-    @Action(semantics = SemanticsOf.NON_IDEMPOTENT)
-    @ActionLayout(sequence = "1")
-    public StatefulVmUsingJaxb addChild(final String name) {
-        val child = new Child();
-        child.setName(name);
-        children.add(child);
-        return this;
-    }
-
-    @Action(choicesFrom = "children", semantics = SemanticsOf.IDEMPOTENT)
-    @ActionLayout(sequence = "2")
-    public StatefulVmUsingJaxb removeChild(final Child child) {
-        children.remove(child);
-        return this;
-    }
-    @MemberSupport public List<Child> choices0RemoveChild() { return getChildren(); }
-    @MemberSupport public String disableRemoveChild() {
-        return choices0RemoveChild().isEmpty()? "No children to remove" : null;
-    }
-//end::addChild[]
-
-    //tag::class[]
-}
-//end::class[]