You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/09/02 13:57:53 UTC

[isis] branch master updated (9bd2a22 -> 9bd81d7)

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

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


    from 9bd2a22  ISIS-2774: jdoc fix
     new 521a93b  ISIS-2774: prepares demo and built-in domain objects new required annotations policy
     new 9bd81d7  ISIS-2774: adds support for enforcing member annotations

The 2 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:
 .../isis/applib/domain/DomainObjectList.java       |  2 +
 .../isis/applib/mixins/dto/Dto_downloadXsd.java    |  4 ++
 .../services/appfeatui/ApplicationFeatureMenu.java |  2 +
 .../appfeatui/ApplicationFeatureViewModel.java     |  8 ++-
 .../services/appfeatui/ApplicationNamespace.java   |  2 +
 .../appfeatui/ApplicationTypeProperty.java         |  5 +-
 .../services/confview/ConfigurationViewmodel.java  |  2 +
 .../applib/services/layout/LayoutServiceMenu.java  |  5 +-
 .../applib/services/user/ImpersonateStopMenu.java  |  2 +
 .../isis/applib/services/userui/UserMenu.java      |  5 +-
 .../isis/core/metamodel/facetapi/FacetHolder.java  |  7 +--
 .../metamodel/facetapi/FacetHolderAbstract.java    |  5 ++
 .../core/metamodel/facetapi/HasFacetHolder.java    | 13 +++--
 .../choices/enums/EnumValueSemanticsProvider.java  |  2 +-
 .../method/CssClassFacetMethodFactory.java         |  2 +-
 .../facets/object/icon/method/IconFacetMethod.java | 57 --------------------
 .../object/icon/method/IconFacetMethodFactory.java | 22 ++++----
 .../icon/method/IconFacetViaIconNameMethod.java}   | 32 +++++------
 .../facets/object/layout/LayoutFacetFactory.java   |  2 +-
 .../annotation/TitleAnnotationFacetFactory.java    | 47 ++++++++--------
 .../title/methods/TitleFacetViaMethodsFactory.java |  2 +-
 .../core/metamodel/inspect/model/ActionNode.java   |  2 +-
 .../metamodel/inspect/model/CollectionNode.java    |  2 +-
 .../metamodel/inspect/model/FacetAttrNode.java     |  2 +-
 .../metamodel/inspect/model/FacetGroupNode.java    |  2 +-
 .../core/metamodel/inspect/model/FacetNode.java    |  2 +-
 .../isis/core/metamodel/inspect/model/MMNode.java  | 21 +++++---
 .../metamodel/inspect/model/ParameterNode.java     |  2 +-
 .../core/metamodel/inspect/model/PropertyNode.java |  2 +-
 .../core/metamodel/inspect/model/TypeNode.java     |  2 +-
 ...tionEnforcesMetamodelContributionValidator.java |  6 ++-
 .../metamodel/methods/MethodFinderOptions.java     | 63 +++++++++++++---------
 .../core/metamodel/methods/MethodFinderUtils.java  | 25 ++++-----
 .../metamodel/methods/MethodLiteralConstants.java  | 19 +++++++
 .../ident/icon/IconFacetMethodFactoryTest.java     |  4 +-
 .../object/ident/icon/IconFacetMethodTest.java     |  6 +--
 .../i18n/po/TranslationServicePoMenu.java          |  6 +++
 .../dom/domain/_interactions/InteractionDtoVm.java |  4 +-
 .../associateWith/ActionAssociateWithVm.java       | 11 ++--
 .../ActionAssociateWithVm_updateOtherProperty.java |  5 +-
 .../child/ActionAssociateWithChildVm.java          |  4 +-
 ...ommandPublishingEntity_mixinUpdateProperty.java |  5 +-
 ...gEntity_mixinUpdatePropertyCommandDisabled.java |  3 ++
 ...ngEntity_mixinUpdatePropertyMetaAnnotation.java |  3 ++
 ...ixinUpdatePropertyMetaAnnotationOverridden.java |  3 ++
 .../jdo/ActionCommandPublishingJdo.java            |  9 +++-
 .../jpa/ActionCommandPublishingJpa.java            |  7 +++
 .../Action/domainEvent/ActionDomainEventVm.java    |  9 +++-
 .../ActionDomainEventVm_mixinUpdateText.java       |  3 ++
 ...nDomainEventVm_controlUpdateTextInvocation.java |  6 ++-
 ...cutionPublishingEntity_mixinUpdateProperty.java |  5 +-
 ...ngEntity_mixinUpdatePropertyMetaAnnotation.java |  5 +-
 ...ixinUpdatePropertyMetaAnnotationOverridden.java |  5 +-
 .../jdo/ActionExecutionPublishingJdo.java          |  8 ++-
 .../jpa/ActionExecutionPublishingJpa.java          |  6 +++
 .../actions/Action/hidden/ActionHiddenVm.java      | 12 ++++-
 ...onHiddenVm_mixinUpdateTextAndHiddenNowhere.java |  3 ++
 ...iddenVm_mixinUpdateTextButHiddenEverywhere.java |  3 ++
 ...ddenVm_mixinUpdateTextButHiddenObjectForms.java |  3 ++
 ...ActionHiddenVm_mixinUpdateTextNoAnnotation.java |  3 ++
 .../Action/restrictTo/ActionRestrictToVm.java      | 13 ++++-
 ...ctionRestrictToVm_mixinUpdateMetaAnnotated.java |  3 ++
 ...ictToVm_mixinUpdateMetaAnnotatedOverridden.java |  3 ++
 ...ActionRestrictToVm_mixinUpdateNoAnnotation.java |  3 ++
 ...ctToVm_mixinUpdateRestrictToNoRestrictions.java |  3 ++
 ...trictToVm_mixinUpdateRestrictToPrototyping.java |  3 ++
 .../Action/semantics/ActionSemanticsVm.java        | 13 ++++-
 ...ticsVm_mixinIncrementByAmountNonIdempotent.java |  3 ++
 ...tionSemanticsVm_mixinIncrementNoAnnotation.java |  3 ++
 ...ionSemanticsVm_mixinIncrementNonIdempotent.java |  5 +-
 ...csVm_mixinIncrementNonIdempotentAreYouSure.java |  5 +-
 ...Vm_mixinSetToValueForPropertyMetaAnnotated.java |  3 ++
 ...tToValueForPropertyMetaAnnotatedOverridden.java |  3 ++
 ...inSetToValueForPropertySemanticsIdempotent.java |  3 ++
 ...ueForPropertySemanticsIdempotentAreYouSure.java |  3 ++
 .../actions/Action/typeOf/ActionTypeOfVm.java      |  7 ++-
 .../Action/typeOf/child/ActionTypeOfChildVm.java   |  9 ++--
 .../actions/ActionLayout/ActionLayoutMenu.java     | 12 +++--
 .../position/ActionLayoutPositionVm.java           |  5 +-
 .../ActionLayoutPositionVm_annotatedBelow.java     |  5 +-
 .../ActionLayoutPositionVm_annotatedPanel.java     |  5 +-
 ...ionLayoutPositionVm_annotatedPanelDropDown.java |  5 +-
 .../ActionLayoutPositionVm_annotatedRight.java     |  5 +-
 .../ActionLayoutPositionVm_layoutBelow.java        |  5 +-
 .../ActionLayoutPositionVm_layoutPanel.java        |  5 +-
 ...ActionLayoutPositionVm_layoutPanelDropDown.java |  5 +-
 .../ActionLayoutPositionVm_layoutRight.java        |  5 +-
 .../promptStyle/ActionLayoutPromptStyleVm.java     |  4 +-
 .../ActionLayoutPromptStyleVm_annotatedInline.java |  5 +-
 ...ayoutPromptStyleVm_annotatedInlineAsIfEdit.java |  5 +-
 .../ActionLayoutPromptStyleVm_annotatedModal.java  |  5 +-
 ...ActionLayoutPromptStyleVm_annotatedSidebar.java |  5 +-
 .../ActionLayoutPromptStyleVm_layoutDialog.java    |  5 +-
 .../ActionLayoutPromptStyleVm_layoutInline.java    |  5 +-
 ...onLayoutPromptStyleVm_layoutInlineAsIfEdit.java |  5 +-
 .../domain/actions/progmodel/assoc/DemoItem.java   |  2 +
 .../domain/actions/progmodel/depargs/DemoItem.java |  2 +
 .../DependentArgsActionDemo_useAutoComplete.java   |  9 ++--
 .../DependentArgsActionDemo_useChoices.java        |  7 +--
 .../DependentArgsActionDemo_useDisable.java        |  7 +--
 .../depargs/DependentArgsActionDemo_useHide.java   |  9 ++--
 .../DependentArgsActionDemo_useIndependent.java    |  7 +--
 .../domain/actions/progmodel/depargs/Parity.java   |  3 ++
 .../collections/Collection/CollectionMenu.java     | 10 ++--
 .../domainEvent/CollectionDomainEventVm.java       |  2 +
 .../CollectionDomainEventVm_removeChild.java       | 10 +++-
 ...ionDomainEventVm_controlChildrenVisibility.java |  6 ++-
 .../CollectionLayout/CollectionLayoutMenu.java     | 14 +++--
 .../objects/DomainObject/DomainObjectMenu.java     | 10 ++++
 ...PublishingEntity_updatePropertyUsingAction.java |  9 ++--
 .../DomainObjectEntityChangePublishingVm.java      |  2 +
 ...omainObjectEntityChangePublishingVm_create.java | 20 ++++---
 ...omainObjectEntityChangePublishingVm_delete.java | 20 ++++---
 ...inObjectEntityChangePublishingVm_updateAll.java | 17 +++---
 .../jaxbrefentity/StatefulVmJaxbRefsEntity.java    | 13 ++++-
 .../viewmodels/usingjaxb/StatefulVmUsingJaxb.java  |  7 ++-
 .../DomainObjectLayout/DomainObjectLayoutMenu.java | 13 +++--
 .../objects/other/embedded/EmbeddedTypeVm.java     |  2 +
 .../other/embedded/jdo/ComplexNumberJdo.java       | 11 ++--
 .../other/embedded/jdo/NumberConstantJdo.java      |  7 ++-
 .../jdo/NumberConstantJdo_updateNumber.java        |  5 +-
 .../other/embedded/jpa/ComplexNumberJpa.java       | 11 ++--
 .../other/embedded/jpa/NumberConstantJpa.java      |  2 +
 .../jpa/NumberConstantJpa_updateNumber.java        |  5 +-
 .../other/mixins/CountHolder_updateCount.java      |  6 ++-
 .../objects/other/mixins/FibonacciNumberVm.java    |  2 +
 .../dom/domain/objects/other/mixins/MixinVm.java   |  2 +
 .../jdo/PropertyCommandPublishingJdo.java          |  4 +-
 .../jpa/PropertyCommandPublishingJpa.java          |  2 +
 .../domainEvent/PropertyDomainEventVm.java         |  7 ++-
 .../PropertyDomainEventVm_controlTextEditing.java  |  6 ++-
 .../Property/editing/PropertyEditingVm.java        |  5 +-
 .../jdo/PropertyExecutionPublishingJdo.java        |  4 +-
 .../jpa/PropertyExecutionPublishingJpa.java        |  2 +
 .../Property/fileAccept/PropertyFileAcceptVm.java  |  5 +-
 ...FileAcceptVm_updateClobWithParameterLayout.java |  3 ++
 ...pertyFileAcceptVm_updateWithMetaAnnotation.java |  3 ++
 ...cceptVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...ertyFileAcceptVm_updateWithParameterLayout.java |  3 ++
 .../Property/hidden/PropertyHiddenVm.java          |  7 ++-
 .../hidden/PropertyHiddenVm_returnsChildren.java   |  5 +-
 .../hidden/child/PropertyHiddenChildVm.java        |  9 ++--
 .../Property/maxLength/PropertyMaxLengthVm.java    |  5 +-
 ...opertyMaxLengthVm_updateWithMetaAnnotation.java |  3 ++
 ...engthVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...pertyMaxLengthVm_updateWithParameterLayout.java |  3 ++
 .../mustSatisfy/PropertyMustSatisfyVm.java         |  5 +-
 ...ertyMustSatisfyVm_updateWithMetaAnnotation.java |  3 ++
 ...tisfyVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...rtyMustSatisfyVm_updateWithParameterLayout.java |  3 ++
 .../optionality/PropertyOptionalityVm.java         |  5 +-
 ...alityVm_updateMandatoryWithParameterLayout.java |  3 ++
 ...ertyOptionalityVm_updateWithMetaAnnotation.java |  3 ++
 ...alityVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...rtyOptionalityVm_updateWithParameterLayout.java |  3 ++
 .../Property/projecting/PropertyProjectingVm.java  |  7 ++-
 .../regexPattern/PropertyRegexPatternVm.java       |  5 +-
 ...rtyRegexPatternVm_updateWithMetaAnnotation.java |  3 ++
 ...tternVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...tyRegexPatternVm_updateWithParameterLayout.java |  3 ++
 .../Property/snapshot/PropertySnapshotVm.java      |  7 ++-
 .../PropertySnapshotVm_takeXmlSnapshot.java        |  3 ++
 .../cssClass/PropertyLayoutCssClassVm.java         |  5 +-
 ...yLayoutCssClassVm_updateWithMetaAnnotation.java |  3 ++
 ...ClassVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...LayoutCssClassVm_updateWithParameterLayout.java |  3 ++
 .../describedAs/PropertyLayoutDescribedAsVm.java   |  5 +-
 ...youtDescribedAsVm_updateWithMetaAnnotation.java |  3 ++
 ...bedAsVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...outDescribedAsVm_updateWithParameterLayout.java |  3 ++
 .../hidden/PropertyLayoutHiddenVm.java             |  7 ++-
 .../PropertyLayoutHiddenVm_returnsChildren.java    |  5 +-
 .../hidden/child/PropertyLayoutHiddenChildVm.java  |  9 ++--
 .../PropertyLayoutLabelPositionVm.java             |  5 +-
 ...rtyLayoutLabelPositionVm_updateVariantLeft.java |  3 ++
 ...rtyLayoutLabelPositionVm_updateVariantNone.java |  3 ++
 ...tLabelPositionVm_updateVariantNotSpecified.java |  3 ++
 ...tyLayoutLabelPositionVm_updateVariantRight.java |  3 ++
 ...ertyLayoutLabelPositionVm_updateVariantTop.java |  3 ++
 ...utLabelPositionVm_updateWithMetaAnnotation.java |  3 ++
 ...itionVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...tLabelPositionVm_updateWithParameterLayout.java |  3 ++
 .../multiLine/PropertyLayoutMultiLineVm.java       |  5 +-
 ...LayoutMultiLineVm_updateWithMetaAnnotation.java |  3 ++
 ...iLineVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...ayoutMultiLineVm_updateWithParameterLayout.java |  3 ++
 .../named/PropertyLayoutNamedVm.java               |  2 +
 ...ertyLayoutNamedVm_updateWithMetaAnnotation.java |  3 ++
 ...NamedVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...rtyLayoutNamedVm_updateWithParameterLayout.java |  3 ++
 .../PropertyLayout/navigable/FileNodeType.java     |  2 +
 .../PropertyLayout/navigable/FileNodeVm.java       |  9 +++-
 .../renderDay/PropertyLayoutRenderDayVm.java       |  7 ++-
 .../PropertyLayoutRenderDayVm_downloadAsXml.java   |  4 ++
 ...enderDayVm_updateEndDateWithMetaAnnotation.java |  3 ++
 ..._updateEndDateWithMetaAnnotationOverridden.java |  3 ++
 ...nderDayVm_updateEndDateWithParameterLayout.java |  3 ++
 .../repainting/PropertyLayoutRepaintingVm.java     |  5 +-
 .../PropertyLayoutTypicalLengthVm.java             |  5 +-
 ...utTypicalLengthVm_updateWithMetaAnnotation.java |  3 ++
 ...engthVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...tTypicalLengthVm_updateWithParameterLayout.java |  3 ++
 .../featured/customui/vm/WhereInTheWorldMenu.java  | 10 ++--
 .../featured/layout/describedAs/DescribedAsVm.java | 16 +++---
 .../demoapp/dom/featured/layout/tabs/TabDemo.java  |  8 ++-
 .../java/demoapp/dom/homepage/DemoHomePage.java    |  2 +
 .../ErrorReportingServiceDemoVm.java               |  2 +
 .../eventbusservice/EventBusServiceDemoVm.java     |  2 +
 .../core/eventbusservice/EventLogEntryJdo.java     |  6 ++-
 .../core/eventbusservice/EventLogEntryJpa.java     |  6 ++-
 .../core/messageservice/MessageServiceDemoVm.java  |  2 +
 ...pperFactoryEntity_mixinUpdatePropertyAsync.java |  3 ++
 ...pperFactoryEntity_updatePropertyAsyncMixin.java |  3 ++
 .../core/wrapperFactory/jdo/WrapperFactoryJdo.java | 12 +++--
 .../core/wrapperFactory/jpa/WrapperFactoryJpa.java |  5 ++
 .../xmlSnapshotService/XmlSnapshotParentVm.java    | 11 ++--
 .../XmlSnapshotParentVm_takeXmlSnapshot.java       |  7 ++-
 .../extensions/secman/apptenancy/AppTenancyVm.java |  9 +++-
 .../secman/apptenancy/jdo/TenantedJdo.java         |  7 ++-
 .../secman/apptenancy/jpa/TenantedJpa.java         |  2 +
 .../demoapp/dom/types/isis/blobs/IsisBlobs.java    |  6 ++-
 ...sBlobHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../IsisBlobHolder_updateReadOnlyProperty.java     |  6 ++-
 ...obHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/isis/blobs/vm/IsisBlobVm.java        |  9 ++--
 .../demoapp/dom/types/isis/clobs/IsisClobs.java    |  6 ++-
 ...sClobHolder_updateReadOnlyOptionalProperty.java |  3 ++
 .../IsisClobHolder_updateReadOnlyProperty.java     |  6 ++-
 ...obHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../localresourcepaths/IsisLocalResourcePaths.java |  7 ++-
 ...ePathHolder_updateReadOnlyOptionalProperty.java |  5 +-
 ...lResourcePathHolder_updateReadOnlyProperty.java |  6 ++-
 ...thHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/isis/markups/IsisMarkups.java        |  5 ++
 ...arkupHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../IsisMarkupHolder_updateReadOnlyProperty.java   |  6 ++-
 ...upHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/isis/markups/jdo/IsisMarkupJdo.java  |  8 ++-
 .../dom/types/isis/markups/jpa/IsisMarkupJpa.java  |  2 +
 .../dom/types/isis/markups/vm/IsisMarkupVm.java    |  9 ++--
 .../dom/types/isis/passwords/IsisPasswords.java    |  7 ++-
 ...swordHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../IsisPasswordHolder_updateReadOnlyProperty.java |  6 ++-
 ...rdHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/isisext/asciidocs/IsisAsciiDocs.java |  5 ++
 ...iiDocHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../IsisAsciiDocHolder_updateReadOnlyProperty.java |  6 ++-
 ...ocHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../isisext/asciidocs/jdo/IsisAsciiDocJdo.java     | 10 ++--
 .../isisext/asciidocs/jpa/IsisAsciiDocJpa.java     |  2 +
 .../types/isisext/asciidocs/vm/IsisAsciiDocVm.java |  9 ++--
 .../dom/types/isisext/markdowns/IsisMarkdowns.java |  5 ++
 ...kdownHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../IsisMarkdownHolder_updateReadOnlyProperty.java |  6 ++-
 ...wnHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../isisext/markdowns/jdo/IsisMarkdownJdo.java     |  7 ++-
 .../isisext/markdowns/jpa/IsisMarkdownJpa.java     |  2 +
 .../types/isisext/markdowns/vm/IsisMarkdownVm.java |  9 ++--
 .../demoapp/dom/types/isisext/sse/DemoTask.java    |  4 +-
 .../javaawt/images/JavaAwtBufferedImages.java      |  7 ++-
 ...ImageHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...BufferedImageHolder_updateReadOnlyProperty.java |  6 ++-
 ...geHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../images/jdo/JavaAwtBufferedImageJdo.java        |  7 ++-
 .../images/jpa/JavaAwtBufferedImageJpa.java        |  2 +
 .../javaawt/images/vm/JavaAwtBufferedImageVm.java  |  7 ++-
 .../types/javalang/booleans/WrapperBooleans.java   | 13 +++--
 ...oleanHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...rapperBooleanHolder_updateReadOnlyProperty.java |  6 ++-
 ...anHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/javalang/bytes/WrapperBytes.java     |  7 ++-
 ...rByteHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../WrapperByteHolder_updateReadOnlyProperty.java  |  6 ++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../javalang/characters/WrapperCharacters.java     |  6 ++-
 ...acterHolder_updateReadOnlyOptionalProperty.java |  5 +-
 ...pperCharacterHolder_updateReadOnlyProperty.java |  5 +-
 ...erHolder_updateReadOnlyPropertyWithChoices.java |  9 +++-
 .../dom/types/javalang/doubles/WrapperDoubles.java |  6 ++-
 ...oubleHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...WrapperDoubleHolder_updateReadOnlyProperty.java |  6 ++-
 ...leHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/javalang/floats/WrapperFloats.java   |  6 ++-
 ...FloatHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../WrapperFloatHolder_updateReadOnlyProperty.java |  6 ++-
 ...atHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../types/javalang/integers/WrapperIntegers.java   |  6 ++-
 ...tegerHolder_updateReadOnlyOptionalProperty.java |  5 +-
 ...rapperIntegerHolder_updateReadOnlyProperty.java |  6 ++-
 ...erHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/javalang/longs/WrapperLongs.java     |  6 ++-
 ...rLongHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../WrapperLongHolder_updateReadOnlyProperty.java  |  6 ++-
 ...ngHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/javalang/shorts/WrapperShorts.java   |  6 ++-
 ...ShortHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../WrapperShortHolder_updateReadOnlyProperty.java |  6 ++-
 ...rtHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../types/javalang/strings/JavaLangStrings.java    |  6 ++-
 ...tringHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...avaLangStringHolder_updateReadOnlyProperty.java |  6 ++-
 ...ngHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/javalang/voids/JavaLangVoids.java    |  6 +--
 .../javamath/bigdecimals/JavaMathBigDecimals.java  |  6 ++-
 ...cimalHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...athBigDecimalHolder_updateReadOnlyProperty.java |  6 ++-
 ...alHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../javamath/bigintegers/JavaMathBigIntegers.java  |  6 ++-
 ...tegerHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...athBigIntegerHolder_updateReadOnlyProperty.java |  6 ++-
 ...erHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/javanet/urls/JavaNetUrls.java        |  6 ++-
 ...etUrlHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../JavaNetUrlHolder_updateReadOnlyProperty.java   |  6 ++-
 ...rlHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../types/javasql/javasqldate/JavaSqlDates.java    |  6 ++-
 ...lDateHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../JavaSqlDateHolder_updateReadOnlyProperty.java  |  6 ++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../javasqltimestamp/JavaSqlTimestamps.java        |  6 ++-
 ...stampHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...aSqlTimestampHolder_updateReadOnlyProperty.java |  6 ++-
 ...mpHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../javatimelocaldate/JavaTimeLocalDates.java      |  6 ++-
 ...lDateHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...TimeLocalDateHolder_updateReadOnlyProperty.java |  6 ++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../JavaTimeLocalDateTimes.java                    |  6 ++-
 ...eTimeHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...LocalDateTimeHolder_updateReadOnlyProperty.java |  6 ++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../JavaTimeOffsetDateTimes.java                   |  6 ++-
 ...eTimeHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...ffsetDateTimeHolder_updateReadOnlyProperty.java |  6 ++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../javatimeoffsettime/JavaTimeOffsetTimes.java    |  6 ++-
 ...tTimeHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...imeOffsetTimeHolder_updateReadOnlyProperty.java |  6 ++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../JavaTimeZonedDateTimes.java                    |  6 ++-
 ...eTimeHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...ZonedDateTimeHolder_updateReadOnlyProperty.java |  6 ++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../types/javautil/javautildate/JavaUtilDates.java |  6 ++-
 ...lDateHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../JavaUtilDateHolder_updateReadOnlyProperty.java |  6 ++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/javautil/uuids/JavaUtilUuids.java    |  6 ++-
 ...lUuidHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../JavaUtilUuidHolder_updateReadOnlyProperty.java |  6 ++-
 ...idHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../types/jodatime/jodadatetime/JodaDateTimes.java |  6 ++-
 ...eTimeHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 .../JodaDateTimeHolder_updateReadOnlyProperty.java |  6 ++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../jodatime/jodalocaldate/JodaLocalDates.java     |  6 ++-
 ...lDateHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...JodaLocalDateHolder_updateReadOnlyProperty.java |  6 ++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../jodalocaldatetime/JodaLocalDateTimes.java      |  6 ++-
 ...eTimeHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...LocalDateTimeHolder_updateReadOnlyProperty.java |  6 ++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../jodatime/jodalocaltime/JodaLocalTimes.java     |  6 ++-
 ...lTimeHolder_updateReadOnlyOptionalProperty.java |  6 ++-
 ...JodaLocalTimeHolder_updateReadOnlyProperty.java |  6 ++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../primitive/booleans/PrimitiveBooleans.java      |  6 ++-
 ...mitiveBooleanHolder_updateReadOnlyProperty.java |  6 ++-
 ...anHolder_updateReadOnlyPropertyWithChoices.java | 11 +++-
 .../dom/types/primitive/bytes/PrimitiveBytes.java  |  6 ++-
 ...PrimitiveByteHolder_updateReadOnlyProperty.java |  6 ++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++-
 .../dom/types/primitive/chars/PrimitiveChars.java  |  6 ++-
 ...PrimitiveCharHolder_updateReadOnlyProperty.java |  6 ++-
 ...arHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++-
 .../types/primitive/doubles/PrimitiveDoubles.java  |  6 ++-
 ...imitiveDoubleHolder_updateReadOnlyProperty.java |  6 ++-
 ...leHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++-
 .../types/primitive/floats/PrimitiveFloats.java    |  6 ++-
 ...rimitiveFloatHolder_updateReadOnlyProperty.java |  6 ++-
 ...atHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++-
 .../dom/types/primitive/ints/PrimitiveInts.java    |  6 ++-
 .../PrimitiveIntHolder_updateReadOnlyProperty.java |  6 ++-
 ...ntHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++-
 .../dom/types/primitive/longs/PrimitiveLongs.java  |  6 ++-
 ...PrimitiveLongHolder_updateReadOnlyProperty.java |  6 ++-
 ...ngHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++-
 .../types/primitive/shorts/PrimitiveShorts.java    |  6 ++-
 ...rimitiveShortHolder_updateReadOnlyProperty.java |  6 ++-
 ...rtHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++-
 .../PrototypeActionsVisibilityAdvisor.java         | 17 +++---
 .../commandlog/jdo/entities/CommandJdo.java        | 24 ++++++---
 .../commandlog/jdo/ui/CommandServiceMenu.java      |  8 ++-
 .../commandlog/jpa/entities/CommandJpa.java        | 16 +++---
 .../feature/api/ApplicationFeatureChoices.java     | 12 +++--
 .../app/ApplicationOrphanedPermissionManager.java  |  3 +-
 .../permission/dom/ApplicationPermission.java      |  4 +-
 .../permission/menu/ApplicationPermissionMenu.java |  2 +
 .../secman/applib/role/dom/ApplicationRole.java    |  4 +-
 .../dom/mixins/ApplicationRole_updateName.java     |  3 ++
 .../applib/role/menu/ApplicationRoleMenu.java      |  2 +
 .../applib/tenancy/dom/ApplicationTenancy.java     |  4 +-
 .../tenancy/menu/ApplicationTenancyMenu.java       |  2 +
 .../applib/user/app/ApplicationUserManager.java    |  2 +
 .../secman/applib/user/dom/ApplicationUser.java    | 10 ++--
 .../dom/mixins/perms/UserPermissionViewModel.java  |  7 ++-
 .../applib/user/menu/ApplicationUserMenu.java      |  2 +
 .../secman/applib/user/menu/MeService.java         |  4 +-
 .../demomodule/dom/PdfJsDemoObjectWithBlob.java    |  8 ++-
 .../mixins/Persistable_downloadJdoMetadata.java    |  3 ++
 .../DomainModelTest_usingGoodDomain.java           | 17 ++++++
 .../good/ProperMemberInheritanceAbstract.java      |  2 +
 .../good/ProperMemberInheritanceInterface.java     |  6 ++-
 .../model/good/ProperMemberSupport_action.java     | 15 +++---
 .../model/good/ProperMemberSupport_action2.java    | 13 ++---
 .../model/good/ProperMemberSupport_action3.java    | 13 ++---
 ...lWithAnnotationOptionalUsingPrivateSupport.java | 12 ++++-
 .../BulkUpdateManagerForDemoToDoItem.java          | 12 ++++-
 .../demoapp/todomodule/dom/ExcelDemoToDoItem.java  |  7 ++-
 .../demomodule/dom/FakeDataDemoObjectWithAll.java  | 35 ++++++++++--
 .../applib/fixturescripts/FixtureScripts.java      | 15 +++---
 .../h2console/ui/services/H2ManagerMenu.java       |  3 +-
 .../valuetypes/asciidoc/applib/value/AsciiDoc.java |  8 +--
 .../valuetypes/markdown/applib/value/Markdown.java |  4 --
 .../service/swagger/SwaggerServiceMenu.java        |  9 ++--
 426 files changed, 2228 insertions(+), 689 deletions(-)
 delete mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetMethod.java
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/{members/hidden/method/HideForContextFacetViaMethod.java => object/icon/method/IconFacetViaIconNameMethod.java} (75%)

[isis] 01/02: ISIS-2774: prepares demo and built-in domain objects new required annotations policy

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

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

commit 521a93be75bfb554c40e6bbd6d58403939478320
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 2 15:51:51 2021 +0200

    ISIS-2774: prepares demo and built-in domain objects new required
    annotations policy
---
 .../isis/applib/domain/DomainObjectList.java       |  2 ++
 .../isis/applib/mixins/dto/Dto_downloadXsd.java    |  4 +++
 .../services/appfeatui/ApplicationFeatureMenu.java |  2 ++
 .../appfeatui/ApplicationFeatureViewModel.java     |  8 ++++-
 .../services/appfeatui/ApplicationNamespace.java   |  2 ++
 .../appfeatui/ApplicationTypeProperty.java         |  5 ++--
 .../services/confview/ConfigurationViewmodel.java  |  2 ++
 .../applib/services/layout/LayoutServiceMenu.java  |  5 +++-
 .../applib/services/user/ImpersonateStopMenu.java  |  2 ++
 .../isis/applib/services/userui/UserMenu.java      |  5 ++--
 .../core/metamodel/inspect/model/ActionNode.java   |  2 +-
 .../metamodel/inspect/model/CollectionNode.java    |  2 +-
 .../metamodel/inspect/model/FacetAttrNode.java     |  2 +-
 .../metamodel/inspect/model/FacetGroupNode.java    |  2 +-
 .../core/metamodel/inspect/model/FacetNode.java    |  2 +-
 .../isis/core/metamodel/inspect/model/MMNode.java  | 21 +++++++++----
 .../metamodel/inspect/model/ParameterNode.java     |  2 +-
 .../core/metamodel/inspect/model/PropertyNode.java |  2 +-
 .../core/metamodel/inspect/model/TypeNode.java     |  2 +-
 .../i18n/po/TranslationServicePoMenu.java          |  6 ++++
 .../dom/domain/_interactions/InteractionDtoVm.java |  4 ++-
 .../associateWith/ActionAssociateWithVm.java       | 11 +++++--
 .../ActionAssociateWithVm_updateOtherProperty.java |  5 +++-
 .../child/ActionAssociateWithChildVm.java          |  4 ++-
 ...ommandPublishingEntity_mixinUpdateProperty.java |  5 +++-
 ...gEntity_mixinUpdatePropertyCommandDisabled.java |  3 ++
 ...ngEntity_mixinUpdatePropertyMetaAnnotation.java |  3 ++
 ...ixinUpdatePropertyMetaAnnotationOverridden.java |  3 ++
 .../jdo/ActionCommandPublishingJdo.java            |  9 +++++-
 .../jpa/ActionCommandPublishingJpa.java            |  7 +++++
 .../Action/domainEvent/ActionDomainEventVm.java    |  9 ++++--
 .../ActionDomainEventVm_mixinUpdateText.java       |  3 ++
 ...nDomainEventVm_controlUpdateTextInvocation.java |  6 +++-
 ...cutionPublishingEntity_mixinUpdateProperty.java |  5 +++-
 ...ngEntity_mixinUpdatePropertyMetaAnnotation.java |  5 +++-
 ...ixinUpdatePropertyMetaAnnotationOverridden.java |  5 +++-
 .../jdo/ActionExecutionPublishingJdo.java          |  8 ++++-
 .../jpa/ActionExecutionPublishingJpa.java          |  6 ++++
 .../actions/Action/hidden/ActionHiddenVm.java      | 12 ++++++--
 ...onHiddenVm_mixinUpdateTextAndHiddenNowhere.java |  3 ++
 ...iddenVm_mixinUpdateTextButHiddenEverywhere.java |  3 ++
 ...ddenVm_mixinUpdateTextButHiddenObjectForms.java |  3 ++
 ...ActionHiddenVm_mixinUpdateTextNoAnnotation.java |  3 ++
 .../Action/restrictTo/ActionRestrictToVm.java      | 13 ++++++--
 ...ctionRestrictToVm_mixinUpdateMetaAnnotated.java |  3 ++
 ...ictToVm_mixinUpdateMetaAnnotatedOverridden.java |  3 ++
 ...ActionRestrictToVm_mixinUpdateNoAnnotation.java |  3 ++
 ...ctToVm_mixinUpdateRestrictToNoRestrictions.java |  3 ++
 ...trictToVm_mixinUpdateRestrictToPrototyping.java |  3 ++
 .../Action/semantics/ActionSemanticsVm.java        | 13 +++++++-
 ...ticsVm_mixinIncrementByAmountNonIdempotent.java |  3 ++
 ...tionSemanticsVm_mixinIncrementNoAnnotation.java |  3 ++
 ...ionSemanticsVm_mixinIncrementNonIdempotent.java |  5 ++--
 ...csVm_mixinIncrementNonIdempotentAreYouSure.java |  5 ++--
 ...Vm_mixinSetToValueForPropertyMetaAnnotated.java |  3 ++
 ...tToValueForPropertyMetaAnnotatedOverridden.java |  3 ++
 ...inSetToValueForPropertySemanticsIdempotent.java |  3 ++
 ...ueForPropertySemanticsIdempotentAreYouSure.java |  3 ++
 .../actions/Action/typeOf/ActionTypeOfVm.java      |  7 +++--
 .../Action/typeOf/child/ActionTypeOfChildVm.java   |  9 ++++--
 .../actions/ActionLayout/ActionLayoutMenu.java     | 12 ++++++--
 .../position/ActionLayoutPositionVm.java           |  5 +++-
 .../ActionLayoutPositionVm_annotatedBelow.java     |  5 +++-
 .../ActionLayoutPositionVm_annotatedPanel.java     |  5 +++-
 ...ionLayoutPositionVm_annotatedPanelDropDown.java |  5 +++-
 .../ActionLayoutPositionVm_annotatedRight.java     |  5 +++-
 .../ActionLayoutPositionVm_layoutBelow.java        |  5 +++-
 .../ActionLayoutPositionVm_layoutPanel.java        |  5 +++-
 ...ActionLayoutPositionVm_layoutPanelDropDown.java |  5 +++-
 .../ActionLayoutPositionVm_layoutRight.java        |  5 +++-
 .../promptStyle/ActionLayoutPromptStyleVm.java     |  4 ++-
 .../ActionLayoutPromptStyleVm_annotatedInline.java |  5 +++-
 ...ayoutPromptStyleVm_annotatedInlineAsIfEdit.java |  5 +++-
 .../ActionLayoutPromptStyleVm_annotatedModal.java  |  5 +++-
 ...ActionLayoutPromptStyleVm_annotatedSidebar.java |  5 +++-
 .../ActionLayoutPromptStyleVm_layoutDialog.java    |  5 +++-
 .../ActionLayoutPromptStyleVm_layoutInline.java    |  5 +++-
 ...onLayoutPromptStyleVm_layoutInlineAsIfEdit.java |  5 +++-
 .../domain/actions/progmodel/assoc/DemoItem.java   |  2 ++
 .../domain/actions/progmodel/depargs/DemoItem.java |  2 ++
 .../DependentArgsActionDemo_useAutoComplete.java   |  9 +++---
 .../DependentArgsActionDemo_useChoices.java        |  7 +++--
 .../DependentArgsActionDemo_useDisable.java        |  7 +++--
 .../depargs/DependentArgsActionDemo_useHide.java   |  9 +++---
 .../DependentArgsActionDemo_useIndependent.java    |  7 +++--
 .../domain/actions/progmodel/depargs/Parity.java   |  3 ++
 .../collections/Collection/CollectionMenu.java     | 10 +++----
 .../domainEvent/CollectionDomainEventVm.java       |  2 ++
 .../CollectionDomainEventVm_removeChild.java       | 10 +++++--
 ...ionDomainEventVm_controlChildrenVisibility.java |  6 +++-
 .../CollectionLayout/CollectionLayoutMenu.java     | 14 +++++----
 .../objects/DomainObject/DomainObjectMenu.java     | 10 +++++++
 ...PublishingEntity_updatePropertyUsingAction.java |  9 ++++--
 .../DomainObjectEntityChangePublishingVm.java      |  2 ++
 ...omainObjectEntityChangePublishingVm_create.java | 20 ++++++++-----
 ...omainObjectEntityChangePublishingVm_delete.java | 20 +++++++++----
 ...inObjectEntityChangePublishingVm_updateAll.java | 17 +++++++----
 .../jaxbrefentity/StatefulVmJaxbRefsEntity.java    | 13 ++++++--
 .../viewmodels/usingjaxb/StatefulVmUsingJaxb.java  |  7 ++++-
 .../DomainObjectLayout/DomainObjectLayoutMenu.java | 13 ++++++--
 .../objects/other/embedded/EmbeddedTypeVm.java     |  2 ++
 .../other/embedded/jdo/ComplexNumberJdo.java       | 11 ++++---
 .../other/embedded/jdo/NumberConstantJdo.java      |  7 +++--
 .../jdo/NumberConstantJdo_updateNumber.java        |  5 +++-
 .../other/embedded/jpa/ComplexNumberJpa.java       | 11 ++++---
 .../other/embedded/jpa/NumberConstantJpa.java      |  2 ++
 .../jpa/NumberConstantJpa_updateNumber.java        |  5 +++-
 .../other/mixins/CountHolder_updateCount.java      |  6 +++-
 .../objects/other/mixins/FibonacciNumberVm.java    |  2 ++
 .../dom/domain/objects/other/mixins/MixinVm.java   |  2 ++
 .../jdo/PropertyCommandPublishingJdo.java          |  4 ++-
 .../jpa/PropertyCommandPublishingJpa.java          |  2 ++
 .../domainEvent/PropertyDomainEventVm.java         |  7 +++--
 .../PropertyDomainEventVm_controlTextEditing.java  |  6 +++-
 .../Property/editing/PropertyEditingVm.java        |  5 +++-
 .../jdo/PropertyExecutionPublishingJdo.java        |  4 ++-
 .../jpa/PropertyExecutionPublishingJpa.java        |  2 ++
 .../Property/fileAccept/PropertyFileAcceptVm.java  |  5 +++-
 ...FileAcceptVm_updateClobWithParameterLayout.java |  3 ++
 ...pertyFileAcceptVm_updateWithMetaAnnotation.java |  3 ++
 ...cceptVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...ertyFileAcceptVm_updateWithParameterLayout.java |  3 ++
 .../Property/hidden/PropertyHiddenVm.java          |  7 +++--
 .../hidden/PropertyHiddenVm_returnsChildren.java   |  5 ++--
 .../hidden/child/PropertyHiddenChildVm.java        |  9 ++++--
 .../Property/maxLength/PropertyMaxLengthVm.java    |  5 +++-
 ...opertyMaxLengthVm_updateWithMetaAnnotation.java |  3 ++
 ...engthVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...pertyMaxLengthVm_updateWithParameterLayout.java |  3 ++
 .../mustSatisfy/PropertyMustSatisfyVm.java         |  5 +++-
 ...ertyMustSatisfyVm_updateWithMetaAnnotation.java |  3 ++
 ...tisfyVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...rtyMustSatisfyVm_updateWithParameterLayout.java |  3 ++
 .../optionality/PropertyOptionalityVm.java         |  5 +++-
 ...alityVm_updateMandatoryWithParameterLayout.java |  3 ++
 ...ertyOptionalityVm_updateWithMetaAnnotation.java |  3 ++
 ...alityVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...rtyOptionalityVm_updateWithParameterLayout.java |  3 ++
 .../Property/projecting/PropertyProjectingVm.java  |  7 +++--
 .../regexPattern/PropertyRegexPatternVm.java       |  5 +++-
 ...rtyRegexPatternVm_updateWithMetaAnnotation.java |  3 ++
 ...tternVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...tyRegexPatternVm_updateWithParameterLayout.java |  3 ++
 .../Property/snapshot/PropertySnapshotVm.java      |  7 +++--
 .../PropertySnapshotVm_takeXmlSnapshot.java        |  3 ++
 .../cssClass/PropertyLayoutCssClassVm.java         |  5 +++-
 ...yLayoutCssClassVm_updateWithMetaAnnotation.java |  3 ++
 ...ClassVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...LayoutCssClassVm_updateWithParameterLayout.java |  3 ++
 .../describedAs/PropertyLayoutDescribedAsVm.java   |  5 +++-
 ...youtDescribedAsVm_updateWithMetaAnnotation.java |  3 ++
 ...bedAsVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...outDescribedAsVm_updateWithParameterLayout.java |  3 ++
 .../hidden/PropertyLayoutHiddenVm.java             |  7 +++--
 .../PropertyLayoutHiddenVm_returnsChildren.java    |  5 ++--
 .../hidden/child/PropertyLayoutHiddenChildVm.java  |  9 ++++--
 .../PropertyLayoutLabelPositionVm.java             |  5 +++-
 ...rtyLayoutLabelPositionVm_updateVariantLeft.java |  3 ++
 ...rtyLayoutLabelPositionVm_updateVariantNone.java |  3 ++
 ...tLabelPositionVm_updateVariantNotSpecified.java |  3 ++
 ...tyLayoutLabelPositionVm_updateVariantRight.java |  3 ++
 ...ertyLayoutLabelPositionVm_updateVariantTop.java |  3 ++
 ...utLabelPositionVm_updateWithMetaAnnotation.java |  3 ++
 ...itionVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...tLabelPositionVm_updateWithParameterLayout.java |  3 ++
 .../multiLine/PropertyLayoutMultiLineVm.java       |  5 +++-
 ...LayoutMultiLineVm_updateWithMetaAnnotation.java |  3 ++
 ...iLineVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...ayoutMultiLineVm_updateWithParameterLayout.java |  3 ++
 .../named/PropertyLayoutNamedVm.java               |  2 ++
 ...ertyLayoutNamedVm_updateWithMetaAnnotation.java |  3 ++
 ...NamedVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...rtyLayoutNamedVm_updateWithParameterLayout.java |  3 ++
 .../PropertyLayout/navigable/FileNodeType.java     |  2 ++
 .../PropertyLayout/navigable/FileNodeVm.java       |  9 ++++--
 .../renderDay/PropertyLayoutRenderDayVm.java       |  7 +++--
 .../PropertyLayoutRenderDayVm_downloadAsXml.java   |  4 +++
 ...enderDayVm_updateEndDateWithMetaAnnotation.java |  3 ++
 ..._updateEndDateWithMetaAnnotationOverridden.java |  3 ++
 ...nderDayVm_updateEndDateWithParameterLayout.java |  3 ++
 .../repainting/PropertyLayoutRepaintingVm.java     |  5 +++-
 .../PropertyLayoutTypicalLengthVm.java             |  5 +++-
 ...utTypicalLengthVm_updateWithMetaAnnotation.java |  3 ++
 ...engthVm_updateWithMetaAnnotationOverridden.java |  3 ++
 ...tTypicalLengthVm_updateWithParameterLayout.java |  3 ++
 .../featured/customui/vm/WhereInTheWorldMenu.java  | 10 +++++--
 .../featured/layout/describedAs/DescribedAsVm.java | 16 +++++-----
 .../demoapp/dom/featured/layout/tabs/TabDemo.java  |  8 +++--
 .../java/demoapp/dom/homepage/DemoHomePage.java    |  2 ++
 .../ErrorReportingServiceDemoVm.java               |  2 ++
 .../eventbusservice/EventBusServiceDemoVm.java     |  2 ++
 .../core/eventbusservice/EventLogEntryJdo.java     |  6 ++--
 .../core/eventbusservice/EventLogEntryJpa.java     |  6 ++--
 .../core/messageservice/MessageServiceDemoVm.java  |  2 ++
 ...pperFactoryEntity_mixinUpdatePropertyAsync.java |  3 ++
 ...pperFactoryEntity_updatePropertyAsyncMixin.java |  3 ++
 .../core/wrapperFactory/jdo/WrapperFactoryJdo.java | 12 ++++++--
 .../core/wrapperFactory/jpa/WrapperFactoryJpa.java |  5 ++++
 .../xmlSnapshotService/XmlSnapshotParentVm.java    | 11 ++++---
 .../XmlSnapshotParentVm_takeXmlSnapshot.java       |  7 +++--
 .../extensions/secman/apptenancy/AppTenancyVm.java |  9 ++++--
 .../secman/apptenancy/jdo/TenantedJdo.java         |  7 +++--
 .../secman/apptenancy/jpa/TenantedJpa.java         |  2 ++
 .../demoapp/dom/types/isis/blobs/IsisBlobs.java    |  6 +++-
 ...sBlobHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../IsisBlobHolder_updateReadOnlyProperty.java     |  6 +++-
 ...obHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/isis/blobs/vm/IsisBlobVm.java        |  9 ++++--
 .../demoapp/dom/types/isis/clobs/IsisClobs.java    |  6 +++-
 ...sClobHolder_updateReadOnlyOptionalProperty.java |  3 ++
 .../IsisClobHolder_updateReadOnlyProperty.java     |  6 +++-
 ...obHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../localresourcepaths/IsisLocalResourcePaths.java |  7 ++++-
 ...ePathHolder_updateReadOnlyOptionalProperty.java |  5 +++-
 ...lResourcePathHolder_updateReadOnlyProperty.java |  6 +++-
 ...thHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/isis/markups/IsisMarkups.java        |  5 ++++
 ...arkupHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../IsisMarkupHolder_updateReadOnlyProperty.java   |  6 +++-
 ...upHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/isis/markups/jdo/IsisMarkupJdo.java  |  8 +++--
 .../dom/types/isis/markups/jpa/IsisMarkupJpa.java  |  2 ++
 .../dom/types/isis/markups/vm/IsisMarkupVm.java    |  9 ++++--
 .../dom/types/isis/passwords/IsisPasswords.java    |  7 ++++-
 ...swordHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../IsisPasswordHolder_updateReadOnlyProperty.java |  6 +++-
 ...rdHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/isisext/asciidocs/IsisAsciiDocs.java |  5 ++++
 ...iiDocHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../IsisAsciiDocHolder_updateReadOnlyProperty.java |  6 +++-
 ...ocHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../isisext/asciidocs/jdo/IsisAsciiDocJdo.java     | 10 +++++--
 .../isisext/asciidocs/jpa/IsisAsciiDocJpa.java     |  2 ++
 .../types/isisext/asciidocs/vm/IsisAsciiDocVm.java |  9 ++++--
 .../dom/types/isisext/markdowns/IsisMarkdowns.java |  5 ++++
 ...kdownHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../IsisMarkdownHolder_updateReadOnlyProperty.java |  6 +++-
 ...wnHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../isisext/markdowns/jdo/IsisMarkdownJdo.java     |  7 +++--
 .../isisext/markdowns/jpa/IsisMarkdownJpa.java     |  2 ++
 .../types/isisext/markdowns/vm/IsisMarkdownVm.java |  9 ++++--
 .../demoapp/dom/types/isisext/sse/DemoTask.java    |  4 ++-
 .../javaawt/images/JavaAwtBufferedImages.java      |  7 ++++-
 ...ImageHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...BufferedImageHolder_updateReadOnlyProperty.java |  6 +++-
 ...geHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../images/jdo/JavaAwtBufferedImageJdo.java        |  7 +++--
 .../images/jpa/JavaAwtBufferedImageJpa.java        |  2 ++
 .../javaawt/images/vm/JavaAwtBufferedImageVm.java  |  7 +++--
 .../types/javalang/booleans/WrapperBooleans.java   | 13 ++++----
 ...oleanHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...rapperBooleanHolder_updateReadOnlyProperty.java |  6 +++-
 ...anHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/javalang/bytes/WrapperBytes.java     |  7 ++++-
 ...rByteHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../WrapperByteHolder_updateReadOnlyProperty.java  |  6 +++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../javalang/characters/WrapperCharacters.java     |  6 +++-
 ...acterHolder_updateReadOnlyOptionalProperty.java |  5 +++-
 ...pperCharacterHolder_updateReadOnlyProperty.java |  5 +++-
 ...erHolder_updateReadOnlyPropertyWithChoices.java |  9 ++++--
 .../dom/types/javalang/doubles/WrapperDoubles.java |  6 +++-
 ...oubleHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...WrapperDoubleHolder_updateReadOnlyProperty.java |  6 +++-
 ...leHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/javalang/floats/WrapperFloats.java   |  6 +++-
 ...FloatHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../WrapperFloatHolder_updateReadOnlyProperty.java |  6 +++-
 ...atHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../types/javalang/integers/WrapperIntegers.java   |  6 +++-
 ...tegerHolder_updateReadOnlyOptionalProperty.java |  5 +++-
 ...rapperIntegerHolder_updateReadOnlyProperty.java |  6 +++-
 ...erHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/javalang/longs/WrapperLongs.java     |  6 +++-
 ...rLongHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../WrapperLongHolder_updateReadOnlyProperty.java  |  6 +++-
 ...ngHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/javalang/shorts/WrapperShorts.java   |  6 +++-
 ...ShortHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../WrapperShortHolder_updateReadOnlyProperty.java |  6 +++-
 ...rtHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../types/javalang/strings/JavaLangStrings.java    |  6 +++-
 ...tringHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...avaLangStringHolder_updateReadOnlyProperty.java |  6 +++-
 ...ngHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/javalang/voids/JavaLangVoids.java    |  6 ++--
 .../javamath/bigdecimals/JavaMathBigDecimals.java  |  6 +++-
 ...cimalHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...athBigDecimalHolder_updateReadOnlyProperty.java |  6 +++-
 ...alHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../javamath/bigintegers/JavaMathBigIntegers.java  |  6 +++-
 ...tegerHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...athBigIntegerHolder_updateReadOnlyProperty.java |  6 +++-
 ...erHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/javanet/urls/JavaNetUrls.java        |  6 +++-
 ...etUrlHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../JavaNetUrlHolder_updateReadOnlyProperty.java   |  6 +++-
 ...rlHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../types/javasql/javasqldate/JavaSqlDates.java    |  6 +++-
 ...lDateHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../JavaSqlDateHolder_updateReadOnlyProperty.java  |  6 +++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../javasqltimestamp/JavaSqlTimestamps.java        |  6 +++-
 ...stampHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...aSqlTimestampHolder_updateReadOnlyProperty.java |  6 +++-
 ...mpHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../javatimelocaldate/JavaTimeLocalDates.java      |  6 +++-
 ...lDateHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...TimeLocalDateHolder_updateReadOnlyProperty.java |  6 +++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../JavaTimeLocalDateTimes.java                    |  6 +++-
 ...eTimeHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...LocalDateTimeHolder_updateReadOnlyProperty.java |  6 +++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../JavaTimeOffsetDateTimes.java                   |  6 +++-
 ...eTimeHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...ffsetDateTimeHolder_updateReadOnlyProperty.java |  6 +++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../javatimeoffsettime/JavaTimeOffsetTimes.java    |  6 +++-
 ...tTimeHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...imeOffsetTimeHolder_updateReadOnlyProperty.java |  6 +++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../JavaTimeZonedDateTimes.java                    |  6 +++-
 ...eTimeHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...ZonedDateTimeHolder_updateReadOnlyProperty.java |  6 +++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../types/javautil/javautildate/JavaUtilDates.java |  6 +++-
 ...lDateHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../JavaUtilDateHolder_updateReadOnlyProperty.java |  6 +++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/javautil/uuids/JavaUtilUuids.java    |  6 +++-
 ...lUuidHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../JavaUtilUuidHolder_updateReadOnlyProperty.java |  6 +++-
 ...idHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../types/jodatime/jodadatetime/JodaDateTimes.java |  6 +++-
 ...eTimeHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 .../JodaDateTimeHolder_updateReadOnlyProperty.java |  6 +++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../jodatime/jodalocaldate/JodaLocalDates.java     |  6 +++-
 ...lDateHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...JodaLocalDateHolder_updateReadOnlyProperty.java |  6 +++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../jodalocaldatetime/JodaLocalDateTimes.java      |  6 +++-
 ...eTimeHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...LocalDateTimeHolder_updateReadOnlyProperty.java |  6 +++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../jodatime/jodalocaltime/JodaLocalTimes.java     |  6 +++-
 ...lTimeHolder_updateReadOnlyOptionalProperty.java |  6 +++-
 ...JodaLocalTimeHolder_updateReadOnlyProperty.java |  6 +++-
 ...meHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../primitive/booleans/PrimitiveBooleans.java      |  6 +++-
 ...mitiveBooleanHolder_updateReadOnlyProperty.java |  6 +++-
 ...anHolder_updateReadOnlyPropertyWithChoices.java | 11 +++++--
 .../dom/types/primitive/bytes/PrimitiveBytes.java  |  6 +++-
 ...PrimitiveByteHolder_updateReadOnlyProperty.java |  6 +++-
 ...teHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++++--
 .../dom/types/primitive/chars/PrimitiveChars.java  |  6 +++-
 ...PrimitiveCharHolder_updateReadOnlyProperty.java |  6 +++-
 ...arHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++++--
 .../types/primitive/doubles/PrimitiveDoubles.java  |  6 +++-
 ...imitiveDoubleHolder_updateReadOnlyProperty.java |  6 +++-
 ...leHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++++--
 .../types/primitive/floats/PrimitiveFloats.java    |  6 +++-
 ...rimitiveFloatHolder_updateReadOnlyProperty.java |  6 +++-
 ...atHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++++--
 .../dom/types/primitive/ints/PrimitiveInts.java    |  6 +++-
 .../PrimitiveIntHolder_updateReadOnlyProperty.java |  6 +++-
 ...ntHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++++--
 .../dom/types/primitive/longs/PrimitiveLongs.java  |  6 +++-
 ...PrimitiveLongHolder_updateReadOnlyProperty.java |  6 +++-
 ...ngHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++++--
 .../types/primitive/shorts/PrimitiveShorts.java    |  6 +++-
 ...rimitiveShortHolder_updateReadOnlyProperty.java |  6 +++-
 ...rtHolder_updateReadOnlyPropertyWithChoices.java | 13 ++++++--
 .../PrototypeActionsVisibilityAdvisor.java         | 17 ++++++-----
 .../commandlog/jdo/entities/CommandJdo.java        | 24 ++++++++++-----
 .../commandlog/jdo/ui/CommandServiceMenu.java      |  8 ++++-
 .../commandlog/jpa/entities/CommandJpa.java        | 16 +++++-----
 .../feature/api/ApplicationFeatureChoices.java     | 12 ++++----
 .../app/ApplicationOrphanedPermissionManager.java  |  3 +-
 .../permission/dom/ApplicationPermission.java      |  4 ++-
 .../permission/menu/ApplicationPermissionMenu.java |  2 ++
 .../secman/applib/role/dom/ApplicationRole.java    |  4 ++-
 .../dom/mixins/ApplicationRole_updateName.java     |  3 ++
 .../applib/role/menu/ApplicationRoleMenu.java      |  2 ++
 .../applib/tenancy/dom/ApplicationTenancy.java     |  4 ++-
 .../tenancy/menu/ApplicationTenancyMenu.java       |  2 ++
 .../applib/user/app/ApplicationUserManager.java    |  2 ++
 .../secman/applib/user/dom/ApplicationUser.java    | 10 +++++--
 .../dom/mixins/perms/UserPermissionViewModel.java  |  7 ++++-
 .../applib/user/menu/ApplicationUserMenu.java      |  2 ++
 .../secman/applib/user/menu/MeService.java         |  4 ++-
 .../demomodule/dom/PdfJsDemoObjectWithBlob.java    |  8 ++---
 .../mixins/Persistable_downloadJdoMetadata.java    |  3 ++
 .../BulkUpdateManagerForDemoToDoItem.java          | 12 ++++++--
 .../demoapp/todomodule/dom/ExcelDemoToDoItem.java  |  7 ++++-
 .../demomodule/dom/FakeDataDemoObjectWithAll.java  | 35 ++++++++++++++++++++--
 .../applib/fixturescripts/FixtureScripts.java      | 15 +++++-----
 .../h2console/ui/services/H2ManagerMenu.java       |  3 +-
 .../valuetypes/asciidoc/applib/value/AsciiDoc.java |  8 ++---
 .../valuetypes/markdown/applib/value/Markdown.java |  4 ---
 .../service/swagger/SwaggerServiceMenu.java        |  9 ++++--
 402 files changed, 2019 insertions(+), 506 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java b/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
index db66485..64be83f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
@@ -35,6 +35,7 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.jaxb.PersistentEntitiesAdapter;
 
 import lombok.Getter;
@@ -113,6 +114,7 @@ public class DomainObjectList {
 
     // -- title
     private String title;
+    @Title
     public String title() {
         return title;
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
index 850a0a1..00a2af0 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/Dto_downloadXsd.java
@@ -24,6 +24,7 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -78,6 +79,7 @@ public class Dto_downloadXsd {
      * common Apache Isis schemas; useful if there is only one other XSD schema
      * referenced by the DTO.
      */
+    @MemberSupport
     public Object act(
 
             @ParameterLayout(
@@ -119,6 +121,7 @@ public class Dto_downloadXsd {
     /**
      * Defaults to the fully qualified class name of the domain object.
      */
+    @MemberSupport
     public String default0Act() {
         return holder.getClass().getName();
     }
@@ -126,6 +129,7 @@ public class Dto_downloadXsd {
     /**
      * Defaults to {@link IsisSchemas#IGNORE}
      */
+    @MemberSupport
     public IsisSchemas default1Act() {
         return IsisSchemas.IGNORE;
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureMenu.java
index a02efcb..754b969 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureMenu.java
@@ -29,6 +29,7 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.annotation.ObjectSupport;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -66,6 +67,7 @@ public class ApplicationFeatureMenu {
 
     // -- ICON NAME
 
+    @ObjectSupport
     public String iconName() {
         return "applicationFeature";
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureViewModel.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureViewModel.java
index 5628c41..97477c6 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureViewModel.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureViewModel.java
@@ -31,12 +31,15 @@ import javax.inject.Inject;
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.ViewModel;
 import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Navigable;
+import org.apache.isis.applib.annotation.ObjectSupport;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.appfeat.ApplicationFeature;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
@@ -129,9 +132,11 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
      * having a title() method (rather than using @Title annotation) is necessary as a workaround to be able to use
      * wrapperFactory#unwrap(...) method, which is otherwise broken in Isis 1.6.0
      */
+    @Title
     public String title() {
         return getFullyQualifiedName();
     }
+    @ObjectSupport
     public String iconName() {
         return "applicationFeature";
     }
@@ -245,6 +250,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
     public String getTypeSimpleName() {
         return getFeatureId().getTypeSimpleName();
     }
+    @MemberSupport
     public boolean hideTypeSimpleName() {
         return getSort().isNamespace();
     }
@@ -286,7 +292,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
     public String getMemberName() {
         return getFeatureId().getLogicalMemberName();
     }
-
+    @MemberSupport
     public boolean hideMemberName() {
         return !getSort().isMember();
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationNamespace.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationNamespace.java
index 72fd8b7..ea1eec0 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationNamespace.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationNamespace.java
@@ -30,6 +30,7 @@ import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 
@@ -75,6 +76,7 @@ public class ApplicationNamespace extends ApplicationFeatureViewModel {
         final SortedSet<ApplicationFeatureId> contents = getFeature().getContents();
         return asViewModels(contents, ApplicationFeatureViewModel.class);
     }
+    @MemberSupport
     public boolean hideContents() {
         return getSort() != ApplicationFeatureSort.NAMESPACE;
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeProperty.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeProperty.java
index 147f23d..7574ed4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeProperty.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeProperty.java
@@ -26,6 +26,7 @@ import java.lang.annotation.Target;
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
@@ -131,7 +132,7 @@ public class ApplicationTypeProperty extends ApplicationTypeMember {
                 ? maxLen.getAsInt()
                 : null; // unexpected code path, as this case should be hidden
     }
-
+    @MemberSupport
     public boolean hideMaxLength() {
         if(!getFeature().getPropertyMaxLength().isPresent()) {
             return true;
@@ -164,7 +165,7 @@ public class ApplicationTypeProperty extends ApplicationTypeMember {
                 ? maxLen.getAsInt()
                 : null; // unexpected code path, as this case should be hidden
     }
-
+    @MemberSupport
     public boolean hideTypicalLength() {
         if(!getFeature().getPropertyTypicalLength().isPresent()) {
             return true;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewmodel.java b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewmodel.java
index 4639f2a..7fa4d2b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewmodel.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationViewmodel.java
@@ -27,6 +27,7 @@ import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Title;
 
 @DomainObject(
         nature = Nature.VIEW_MODEL,
@@ -38,6 +39,7 @@ public class ConfigurationViewmodel {
     @Autowired(required = false)
     private ConfigurationViewService configurationService;
 
+    @Title
     public String title() {
         return "Configuration";
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
index fd94f8e..ee56a91 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/layout/LayoutServiceMenu.java
@@ -28,6 +28,7 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.RestrictTo;
@@ -85,10 +86,10 @@ public class LayoutServiceMenu {
 
         final byte[] zipBytes = layoutService.toZip(style);
         return new Blob(fileName, mimeTypeApplicationZip, zipBytes);
-
         // ...
     }
 
+    @MemberSupport
     public Style default0DownloadLayouts() {
         return Style.NORMALIZED;
     }
@@ -115,10 +116,12 @@ public class LayoutServiceMenu {
         // ...
     }
 
+    @MemberSupport
     public String default0DownloadMenuBarsLayout() {
         return "menubars.layout.xml";
     }
 
+    @MemberSupport
     public MenuBarsService.Type default1DownloadMenuBarsLayout() {
         return MenuBarsService.Type.DEFAULT;
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateStopMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateStopMenu.java
index 21e74ef..3aa69e0 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateStopMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateStopMenu.java
@@ -25,6 +25,7 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.Publishing;
@@ -85,6 +86,7 @@ public class ImpersonateStopMenu {
         this.userService.stopImpersonating();
         this.messageService.informUser("No longer impersonating another user");
     }
+    @MemberSupport
     public boolean hideStopImpersonating() {
         return ! isImpersonating();
     }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/userui/UserMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/userui/UserMenu.java
index 09d4cfe..8727cc1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/userui/UserMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/userui/UserMenu.java
@@ -25,6 +25,7 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -68,12 +69,10 @@ public class UserMenu {
     public UserMemento me() {
         return userService.currentUser().orElse(null);
     }
-
+    @MemberSupport
     public String disableMe() {
         return userService.currentUser().isPresent() ? null : "Current user not available";
     }
 
 
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.java
index 8417326..f455d4e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ActionNode.java
@@ -56,7 +56,7 @@ public class ActionNode extends MMNode {
     }
 
     @Override
-    public String iconName() {
+    protected String iconSuffix() {
         return "";
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.java
index aead7bf..761a184 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/CollectionNode.java
@@ -56,7 +56,7 @@ public class CollectionNode extends MMNode {
     }
 
     @Override
-    public String iconName() {
+    protected String iconSuffix() {
         return "";
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java
index eb89d53..32aa0a2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetAttrNode.java
@@ -56,7 +56,7 @@ public class FacetAttrNode extends MMNode {
     }
 
     @Override
-    public String iconName() {
+    protected String iconSuffix() {
         return "";
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetGroupNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetGroupNode.java
index 1f63a78..060a05d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetGroupNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetGroupNode.java
@@ -58,7 +58,7 @@ public class FacetGroupNode extends MMNode {
     }
 
     @Override
-    public String iconName() {
+    protected String iconSuffix() {
         return "";
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.java
index fb51d04..abeb7b3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/FacetNode.java
@@ -64,7 +64,7 @@ public class FacetNode extends MMNode {
     }
 
     @Override
-    public String iconName() {
+    protected String iconSuffix() {
         return "";
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNode.java
index 2302895..e109725 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/MMNode.java
@@ -28,7 +28,9 @@ import javax.xml.bind.annotation.XmlSeeAlso;
 
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.Navigable;
+import org.apache.isis.applib.annotation.ObjectSupport;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.schema.metamodel.v2.DomainClassDto;
@@ -62,16 +64,23 @@ public abstract class MMNode {
     protected abstract Stream<MMNode> streamChildNodes();
 
     protected String title;
+
+    @Title
     public final String title() {
         return title==null
                 ? title = createTitle()
                 : title;
     }
-    public abstract String createTitle();
+    protected abstract String createTitle();
+
+    protected abstract String iconSuffix();
 
-    public abstract String iconName();
+    @ObjectSupport
+    public final String iconName() {
+        return iconSuffix();
+    }
 
-    protected String typeToString(Object type) {
+    protected String typeToString(final Object type) {
         if(type instanceof DomainClassDto) {
             return typeToString((DomainClassDto) type);
         }
@@ -80,13 +89,13 @@ public abstract class MMNode {
                 : "void";
     }
 
-    protected String typeToString(DomainClassDto type) {
+    protected String typeToString(final DomainClassDto type) {
         return type!=null
                 ? abbreviate(type.getId())
                 : "void";
     }
 
-    protected String abbreviate(String input) {
+    protected String abbreviate(final String input) {
         return (""+input)
                 .replace("org.apache.isis.core.metamodel.facets.", "».c.m.f.")
                 .replace("org.apache.isis.core.metamodel.", "».c.m.")
@@ -96,7 +105,7 @@ public abstract class MMNode {
                 .replace("java.lang.", "");
     }
 
-    protected String simpleName(String name) {
+    protected String simpleName(final String name) {
         return _Strings.splitThenStream(""+name, ".")
         .reduce((first, second) -> second) // get the last
         .orElse("null");
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.java
index 9cae6b4..3715d42 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/ParameterNode.java
@@ -56,7 +56,7 @@ public class ParameterNode extends MMNode {
     }
 
     @Override
-    public String iconName() {
+    protected String iconSuffix() {
         return "";
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.java
index ef8ce0a..629a88a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/PropertyNode.java
@@ -55,7 +55,7 @@ public class PropertyNode extends MMNode {
     }
 
     @Override
-    public String iconName() {
+    protected String iconSuffix() {
         return "";
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.java
index 49e9123..cbe53d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/inspect/model/TypeNode.java
@@ -57,7 +57,7 @@ public class TypeNode extends MMNode {
     }
 
     @Override
-    public String iconName() {
+    protected String iconSuffix() {
         return "";
     }
 
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/TranslationServicePoMenu.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/TranslationServicePoMenu.java
index b82628e..16cb1fc 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/TranslationServicePoMenu.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/i18n/po/TranslationServicePoMenu.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.RestrictTo;
@@ -69,9 +70,11 @@ public class TranslationServicePoMenu {
                 .map(chars->new Clob(Util.withSuffix(potFileName, "pot"), "text/plain", chars))
                 .orElse(null);
     }
+    @MemberSupport
     public String default0DownloadTranslations() {
         return "translations.pot";
     }
+    @MemberSupport
     public String disableDownloadTranslations() {
         return !translationService.getMode().isWrite()
                 ? notAvailableForCurrentMode()
@@ -94,6 +97,7 @@ public class TranslationServicePoMenu {
     public void resetTranslationCache() {
         translationService.clearCache();
     }
+    @MemberSupport
     public String disableResetTranslationCache() {
         return !translationService.getMode().isRead()
                 ? notAvailableForCurrentMode()
@@ -115,6 +119,7 @@ public class TranslationServicePoMenu {
     public void switchToReadingTranslations() {
         translationService.toggleMode();
     }
+    @MemberSupport
     public String disableSwitchToReadingTranslations() {
         return !translationService.getMode().isWrite()
                 ? notAvailableForCurrentMode()
@@ -137,6 +142,7 @@ public class TranslationServicePoMenu {
     public void switchToWritingTranslations() {
         translationService.toggleMode();
     }
+    @MemberSupport
     public String disableSwitchToWritingTranslations() {
         return !translationService.getMode().isRead()
                 ? notAvailableForCurrentMode()
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/_interactions/InteractionDtoVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/_interactions/InteractionDtoVm.java
index 6b15d10..a0e2102 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/_interactions/InteractionDtoVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/_interactions/InteractionDtoVm.java
@@ -27,6 +27,7 @@ import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
 import org.apache.isis.applib.util.TitleBuffer;
 import org.apache.isis.applib.util.schema.InteractionDtoUtils;
@@ -50,6 +51,7 @@ public class InteractionDtoVm implements ViewModel {
 
     private final static UrlEncodingService encodingService = new UrlEncodingServiceWithCompression();
 
+    @Title
     public String title() {
         // nb: not thread-safe
         // formats defined in https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
@@ -75,7 +77,7 @@ public class InteractionDtoVm implements ViewModel {
     }
 
     @Override
-    public void viewModelInit(String memento) {
+    public void viewModelInit(final String memento) {
         interactionDto =  InteractionDtoUtils.fromXml(encodingService.decodeToString(memento));
     }
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/ActionAssociateWithVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/ActionAssociateWithVm.java
index e204205..8bd87e1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/ActionAssociateWithVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/ActionAssociateWithVm.java
@@ -33,18 +33,21 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain.actions.Action.associateWith.child.ActionAssociateWithChildVm;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import lombok.val;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.domain.actions.Action.associateWith.child.ActionAssociateWithChildVm;
+
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -61,10 +64,11 @@ public class ActionAssociateWithVm implements HasAsciiDocDescription {
 //end::class-properties[]
 //end::class-collections-children[]
 //end::class-collections-favorites[]
-    public ActionAssociateWithVm(String text) {
+    public ActionAssociateWithVm(final String text) {
         this.text = text;
     }
 
+    @Title
     public String title() {
         return "Action#associateWith";
     }
@@ -118,6 +122,7 @@ public class ActionAssociateWithVm implements HasAsciiDocDescription {
         setText(text);
         return this;
     }
+    @MemberSupport
     public String default0UpdateText() {
         return getText();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/ActionAssociateWithVm_updateOtherProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/ActionAssociateWithVm_updateOtherProperty.java
index 11faa73..ad62917 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/ActionAssociateWithVm_updateOtherProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/ActionAssociateWithVm_updateOtherProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.associateWith;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 
 import lombok.RequiredArgsConstructor;
 
@@ -37,10 +38,12 @@ public class ActionAssociateWithVm_updateOtherProperty {
 
     private final ActionAssociateWithVm actionAssociateWithVm;
 
-    public ActionAssociateWithVm act(String newValue) {
+    @MemberSupport
+    public ActionAssociateWithVm act(final String newValue) {
         actionAssociateWithVm.setOtherProperty(newValue);
         return actionAssociateWithVm;
     }
+    @MemberSupport
     public String default0Act() {
         return actionAssociateWithVm.getOtherProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/child/ActionAssociateWithChildVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/child/ActionAssociateWithChildVm.java
index 5d3a7ae..ad9c7ac 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/child/ActionAssociateWithChildVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/associateWith/child/ActionAssociateWithChildVm.java
@@ -28,6 +28,7 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -46,10 +47,11 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @NoArgsConstructor
 public class ActionAssociateWithChildVm implements HasAsciiDocDescription {
 
-    public ActionAssociateWithChildVm(String value) {
+    public ActionAssociateWithChildVm(final String value) {
         setValue(value);
     }
 
+    @Title
     public String title() {
         return getValue();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdateProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdateProperty.java
index 7550009..2dca2ee 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdateProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdateProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.commandPublishing;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -40,14 +41,16 @@ public class ActionCommandPublishingEntity_mixinUpdateProperty {
 
     private final ActionCommandPublishingEntity actionCommandEntity;
 
-    public ActionCommandPublishingEntity_mixinUpdateProperty(ActionCommandPublishingEntity actionCommandEntity) {
+    public ActionCommandPublishingEntity_mixinUpdateProperty(final ActionCommandPublishingEntity actionCommandEntity) {
         this.actionCommandEntity = actionCommandEntity;
     }
 
+    @MemberSupport
     public ActionCommandPublishingEntity act(final String value) {
         actionCommandEntity.setProperty(value);
         return actionCommandEntity;
     }
+    @MemberSupport
     public String default0Act() {
         return actionCommandEntity.getProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyCommandDisabled.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyCommandDisabled.java
index 1d84129..c0bd20c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyCommandDisabled.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyCommandDisabled.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.commandPublishing;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -44,10 +45,12 @@ public class ActionCommandPublishingEntity_mixinUpdatePropertyCommandDisabled {
 
     private final ActionCommandPublishingEntity actionCommandEntity;
 
+    @MemberSupport
     public ActionCommandPublishingEntity act(final String value) {
         actionCommandEntity.setPropertyCommandDisabled(value);
         return actionCommandEntity;
     }
+    @MemberSupport
     public String default0Act() {
         return actionCommandEntity.getPropertyCommandDisabled();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyMetaAnnotation.java
index 5616c64..cbbefba 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.commandPublishing;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -42,10 +43,12 @@ public class ActionCommandPublishingEntity_mixinUpdatePropertyMetaAnnotation {
 
     private final ActionCommandPublishingEntity actionCommandEntity;
 
+    @MemberSupport
     public ActionCommandPublishingEntity act(final String value) {
         actionCommandEntity.setPropertyMetaAnnotated(value);
         return actionCommandEntity;
     }
+    @MemberSupport
     public String default0Act() {
         return actionCommandEntity.getPropertyMetaAnnotated();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java
index 71c0d02..324bbd9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.commandPublishing;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -46,10 +47,12 @@ public class ActionCommandPublishingEntity_mixinUpdatePropertyMetaAnnotationOver
 
     private final ActionCommandPublishingEntity actionCommandEntity;
 
+    @MemberSupport
     public ActionCommandPublishingEntity act(final String value) {
         actionCommandEntity.setPropertyMetaAnnotatedOverridden(value);
         return actionCommandEntity;
     }
+    @MemberSupport
     public String default0Act() {
         return actionCommandEntity.getPropertyMetaAnnotatedOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jdo/ActionCommandPublishingJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jdo/ActionCommandPublishingJdo.java
index ba2b94d..3f99b9a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jdo/ActionCommandPublishingJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jdo/ActionCommandPublishingJdo.java
@@ -29,11 +29,13 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -56,13 +58,14 @@ public class ActionCommandPublishingJdo
     // ...
 //end::class[]
 
-    public ActionCommandPublishingJdo(String initialValue) {
+    public ActionCommandPublishingJdo(final String initialValue) {
         this.property = initialValue;
         this.propertyCommandDisabled = initialValue;
         this.propertyMetaAnnotated = initialValue;
         this.propertyMetaAnnotatedOverridden = initialValue;
     }
 
+    @Title
     public String title() {
         return "Action#commandPublishing (JDO)";
     }
@@ -106,6 +109,7 @@ public class ActionCommandPublishingJdo
         setProperty(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingAnnotation() {
         return getProperty();
 //tag::annotation[]
@@ -129,6 +133,7 @@ public class ActionCommandPublishingJdo
         setPropertyCommandDisabled(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyCommandDisabledUsingAnnotation() {
         return getPropertyCommandDisabled();
 //tag::annotation-2[]
@@ -152,6 +157,7 @@ public class ActionCommandPublishingJdo
         setPropertyMetaAnnotated(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingMetaAnnotation() {
         return getPropertyMetaAnnotated();
 //tag::meta-annotation[]
@@ -177,6 +183,7 @@ public class ActionCommandPublishingJdo
         setPropertyMetaAnnotatedOverridden(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingMetaAnnotationButOverridden() {
         return getPropertyMetaAnnotatedOverridden();
 //tag::meta-annotation-overridden[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jpa/ActionCommandPublishingJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jpa/ActionCommandPublishingJpa.java
index 302d30c..e9ffe8a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jpa/ActionCommandPublishingJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/jpa/ActionCommandPublishingJpa.java
@@ -30,10 +30,12 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
 
 import lombok.Getter;
@@ -69,6 +71,7 @@ public class ActionCommandPublishingJpa
         this.propertyMetaAnnotatedOverridden = initialValue;
     }
 
+    @Title
     public String title() {
         return "Action#commandPublishing (JPA)";
     }
@@ -116,6 +119,7 @@ public class ActionCommandPublishingJpa
         setProperty(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingAnnotation() {
         return getProperty();
 //tag::annotation[]
@@ -139,6 +143,7 @@ public class ActionCommandPublishingJpa
         setPropertyCommandDisabled(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyCommandDisabledUsingAnnotation() {
         return getPropertyCommandDisabled();
 //tag::annotation-2[]
@@ -162,6 +167,7 @@ public class ActionCommandPublishingJpa
         setPropertyMetaAnnotated(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingMetaAnnotation() {
         return getPropertyMetaAnnotated();
 //tag::meta-annotation[]
@@ -187,6 +193,7 @@ public class ActionCommandPublishingJpa
         setPropertyMetaAnnotatedOverridden(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingMetaAnnotationButOverridden() {
         return getPropertyMetaAnnotatedOverridden();
 //tag::meta-annotation-overridden[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventVm.java
index 01cf76c..3a84f2a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventVm.java
@@ -27,17 +27,20 @@ import javax.xml.bind.annotation.XmlType;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.events.domain.ActionDomainEvent;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -51,10 +54,11 @@ public class ActionDomainEventVm implements HasAsciiDocDescription {
     // ...
 //end::class[]
 
-    public ActionDomainEventVm(String text) {
+    public ActionDomainEventVm(final String text) {
         this.text = text;
     }
 
+    @Title
     public String title() {
         return "Action#domainEvent";
     }
@@ -83,6 +87,7 @@ public class ActionDomainEventVm implements HasAsciiDocDescription {
         setText(text);
         return this;
     }
+    @MemberSupport
     public String default0UpdateText() {
         return getText();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventVm_mixinUpdateText.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventVm_mixinUpdateText.java
index cc24382..da391c9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventVm_mixinUpdateText.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/ActionDomainEventVm_mixinUpdateText.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.domainEvent;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.events.domain.ActionDomainEvent;
 
@@ -46,10 +47,12 @@ public class ActionDomainEventVm_mixinUpdateText {
 
     private final ActionDomainEventVm actionDomainEventVm;
 
+    @MemberSupport
     public ActionDomainEventVm act(final String text) {
         actionDomainEventVm.setText(text);
         return actionDomainEventVm;
     }
+    @MemberSupport
     public String default0Act() {
         return actionDomainEventVm.getText();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/subscribers/ActionDomainEventVm_controlUpdateTextInvocation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/subscribers/ActionDomainEventVm_controlUpdateTextInvocation.java
index 1f51c7b..1f91b62 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/subscribers/ActionDomainEventVm_controlUpdateTextInvocation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/domainEvent/subscribers/ActionDomainEventVm_controlUpdateTextInvocation.java
@@ -22,12 +22,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.domain.actions.Action.domainEvent.ActionDomainEventVm;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.domain.actions.Action.domainEvent.ActionDomainEventVm;
+
 
 //tag::class[]
 @Action(
@@ -42,10 +44,12 @@ public class ActionDomainEventVm_controlUpdateTextInvocation {
 
     private final ActionDomainEventVm actionDomainEventVm;
 
+    @MemberSupport
     public ActionDomainEventVm act(final ActionDomainEventControlStrategy controlStrategy) {
         eventActionDomainEventControlService.controlStrategy = controlStrategy;
         return actionDomainEventVm;
     }
+    @MemberSupport
     public ActionDomainEventControlStrategy default0Act() {
         return eventActionDomainEventControlService.controlStrategy;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdateProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdateProperty.java
index 9671cb5..39bec46 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdateProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdateProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.executionPublishing;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -42,15 +43,17 @@ public class ActionExecutionPublishingEntity_mixinUpdateProperty {
 
     private final ActionExecutionPublishingEntity actionPublishingEntity;
 
-    public ActionExecutionPublishingEntity_mixinUpdateProperty(ActionExecutionPublishingJdo actionPublishingJdo) {
+    public ActionExecutionPublishingEntity_mixinUpdateProperty(final ActionExecutionPublishingJdo actionPublishingJdo) {
         this.actionPublishingEntity = actionPublishingJdo;
     }
 
 //tag::class[]
+    @MemberSupport
     public ActionExecutionPublishingEntity act(final String value) {
         actionPublishingEntity.setProperty(value);
         return actionPublishingEntity;
     }
+    @MemberSupport
     public String default0Act() {
         return actionPublishingEntity.getProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation.java
index 9e015cb..1b5bb2c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.executionPublishing;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import demoapp.dom.domain.actions.Action.executionPublishing.jdo.ActionExecutionPublishingJdo;
@@ -41,15 +42,17 @@ public class ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation {
 
     private final ActionExecutionPublishingEntity actionPublishingEntity;
 
-    public ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation(ActionExecutionPublishingJdo actionPublishingJdo) {
+    public ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotation(final ActionExecutionPublishingJdo actionPublishingJdo) {
         this.actionPublishingEntity = actionPublishingJdo;
     }
 
 //tag::class[]
+    @MemberSupport
     public ActionExecutionPublishingEntity act(final String value) {
         actionPublishingEntity.setPropertyMetaAnnotated(value);
         return actionPublishingEntity;
     }
+    @MemberSupport
     public String default0Act() {
         return actionPublishingEntity.getPropertyMetaAnnotated();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java
index bc015c3..975a045 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.executionPublishing;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -45,15 +46,17 @@ public class ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOv
 
     private final ActionExecutionPublishingEntity actionPublishingEntity;
 
-    public ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden(ActionExecutionPublishingJdo actionPublishingJdo) {
+    public ActionExecutionPublishingEntity_mixinUpdatePropertyMetaAnnotationOverridden(final ActionExecutionPublishingJdo actionPublishingJdo) {
         this.actionPublishingEntity = actionPublishingJdo;
     }
 
 //tag::class[]
+    @MemberSupport
     public ActionExecutionPublishingEntity act(final String value) {
         actionPublishingEntity.setPropertyMetaAnnotatedOverridden(value);
         return actionPublishingEntity;
     }
+    @MemberSupport
     public String default0Act() {
         return actionPublishingEntity.getPropertyMetaAnnotatedOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdo.java
index e4bdbed..413bb90 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jdo/ActionExecutionPublishingJdo.java
@@ -29,11 +29,13 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -56,12 +58,13 @@ public class ActionExecutionPublishingJdo
     // ...
 //end::class[]
 
-    public ActionExecutionPublishingJdo(String initialValue) {
+    public ActionExecutionPublishingJdo(final String initialValue) {
         this.property = initialValue;
         this.propertyMetaAnnotated = initialValue;
         this.propertyMetaAnnotatedOverridden = initialValue;
     }
 
+    @Title
     public String title() {
         return "Action#executionPublishing (JDO)";
     }
@@ -98,6 +101,7 @@ public class ActionExecutionPublishingJdo
         setProperty(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingAnnotation() {
         return getProperty();
     }
@@ -119,6 +123,7 @@ public class ActionExecutionPublishingJdo
         setPropertyMetaAnnotated(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingMetaAnnotation() {
         return getPropertyMetaAnnotated();
     }
@@ -142,6 +147,7 @@ public class ActionExecutionPublishingJdo
         setPropertyMetaAnnotatedOverridden(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingMetaAnnotationButOverridden() {
         return getPropertyMetaAnnotatedOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpa.java
index 7465884..2835c88 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/jpa/ActionExecutionPublishingJpa.java
@@ -30,10 +30,12 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
 
 import lombok.Getter;
@@ -68,6 +70,7 @@ public class ActionExecutionPublishingJpa
         this.propertyMetaAnnotatedOverridden = initialValue;
     }
 
+    @Title
     public String title() {
         return "Action#executionPublishing (JPA)";
     }
@@ -108,6 +111,7 @@ public class ActionExecutionPublishingJpa
         setProperty(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingAnnotation() {
         return getProperty();
     }
@@ -129,6 +133,7 @@ public class ActionExecutionPublishingJpa
         setPropertyMetaAnnotated(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingMetaAnnotation() {
         return getPropertyMetaAnnotated();
     }
@@ -152,6 +157,7 @@ public class ActionExecutionPublishingJpa
         setPropertyMetaAnnotatedOverridden(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingMetaAnnotationButOverridden() {
         return getPropertyMetaAnnotatedOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm.java
index 8fb056a..5632d5b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm.java
@@ -27,17 +27,20 @@ import javax.xml.bind.annotation.XmlType;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -51,11 +54,12 @@ public class ActionHiddenVm implements HasAsciiDocDescription {
     // ...
 //end::class[]
 
-    public ActionHiddenVm(String value) {
+    public ActionHiddenVm(final String value) {
         this.text = value;
         this.otherText = value;
     }
 
+    @Title
     public String title() {
         return "Action#hidden";
     }
@@ -87,6 +91,7 @@ public class ActionHiddenVm implements HasAsciiDocDescription {
         setText(text);
         return this;
     }
+    @MemberSupport
     public String default0UpdateTextNoAnnotation() {
         return getText();
     }
@@ -107,6 +112,7 @@ public class ActionHiddenVm implements HasAsciiDocDescription {
         setText(text);
         return this;
     }
+    @MemberSupport
     public String default0UpdateTextAndHiddenNowhere() {
         return getText();
     }
@@ -127,6 +133,7 @@ public class ActionHiddenVm implements HasAsciiDocDescription {
         setText(text);
         return this;
     }
+    @MemberSupport
     public String default0UpdateTextButHiddenOnForms() {
         return getText();
     }
@@ -148,6 +155,7 @@ public class ActionHiddenVm implements HasAsciiDocDescription {
         setText(text);
         return this;
     }
+    @MemberSupport
     public String default0UpdateTextButHiddenEverywhere() {
         return getText();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextAndHiddenNowhere.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextAndHiddenNowhere.java
index 83e128b..6a260e1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextAndHiddenNowhere.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextAndHiddenNowhere.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.hidden;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 
@@ -42,10 +43,12 @@ public class ActionHiddenVm_mixinUpdateTextAndHiddenNowhere {
 
     private final ActionHiddenVm actionHiddenVm;
 
+    @MemberSupport
     public ActionHiddenVm act(final String text) {
         actionHiddenVm.setOtherText(text);
         return actionHiddenVm;
     }
+    @MemberSupport
     public String default0Act() {
         return actionHiddenVm.getOtherText();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextButHiddenEverywhere.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextButHiddenEverywhere.java
index f8ab001..6b89355 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextButHiddenEverywhere.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextButHiddenEverywhere.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.hidden;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 
@@ -42,10 +43,12 @@ public class ActionHiddenVm_mixinUpdateTextButHiddenEverywhere {
 
     private final ActionHiddenVm actionHiddenVm;
 
+    @MemberSupport
     public ActionHiddenVm act(final String text) {
         actionHiddenVm.setOtherText(text);
         return actionHiddenVm;
     }
+    @MemberSupport
     public String default0Act() {
         return actionHiddenVm.getOtherText();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextButHiddenObjectForms.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextButHiddenObjectForms.java
index 495dd5d..6066888 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextButHiddenObjectForms.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextButHiddenObjectForms.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.hidden;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 
@@ -42,10 +43,12 @@ public class ActionHiddenVm_mixinUpdateTextButHiddenObjectForms {
 
     private final ActionHiddenVm actionHiddenVm;
 
+    @MemberSupport
     public ActionHiddenVm act(final String text) {
         actionHiddenVm.setOtherText(text);
         return actionHiddenVm;
     }
+    @MemberSupport
     public String default0Act() {
         return actionHiddenVm.getOtherText();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextNoAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextNoAnnotation.java
index 004e678..804566b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextNoAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenVm_mixinUpdateTextNoAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.hidden;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -41,10 +42,12 @@ public class ActionHiddenVm_mixinUpdateTextNoAnnotation {
 
     private final ActionHiddenVm actionHiddenVm;
 
+    @MemberSupport
     public ActionHiddenVm act(final String text) {
         actionHiddenVm.setOtherText(text);
         return actionHiddenVm;
     }
+    @MemberSupport
     public String default0Act() {
         return actionHiddenVm.getOtherText();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm.java
index 8afff49..d5c569f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm.java
@@ -27,17 +27,20 @@ import javax.xml.bind.annotation.XmlType;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -51,7 +54,7 @@ public class ActionRestrictToVm implements HasAsciiDocDescription {
     // ...
 //end::class[]
 
-    public ActionRestrictToVm(String value) {
+    public ActionRestrictToVm(final String value) {
         this.propertyNoAnnotation = value;
         this.propertyForPrototyping = value;
         this.propertyForNoRestrictions = value;
@@ -59,6 +62,7 @@ public class ActionRestrictToVm implements HasAsciiDocDescription {
         this.propertyForMetaAnnotationsOverridden = value;
     }
 
+    @Title
     public String title() {
         return "Action#restrictTo";
     }
@@ -108,6 +112,7 @@ public class ActionRestrictToVm implements HasAsciiDocDescription {
         setPropertyNoAnnotation(text);
         return this;
     }
+    @MemberSupport
     public String default0UpdateNoAnnotation() {
         return getPropertyNoAnnotation();
     }
@@ -128,6 +133,7 @@ public class ActionRestrictToVm implements HasAsciiDocDescription {
         setPropertyForPrototyping(text);
         return this;
     }
+    @MemberSupport
     public String default0UpdateRestrictToPrototyping() {
         return getPropertyForPrototyping();
     }
@@ -148,6 +154,7 @@ public class ActionRestrictToVm implements HasAsciiDocDescription {
         setPropertyForNoRestrictions(text);
         return this;
     }
+    @MemberSupport
     public String default0UpdateRestrictToNoRestrictions() {
         return getPropertyForNoRestrictions();
     }
@@ -168,6 +175,7 @@ public class ActionRestrictToVm implements HasAsciiDocDescription {
         setPropertyForMetaAnnotations(text);
         return this;
     }
+    @MemberSupport
     public String default0UpdateMetaAnnotated() {
         return getPropertyForMetaAnnotations();
     }
@@ -190,6 +198,7 @@ public class ActionRestrictToVm implements HasAsciiDocDescription {
         setPropertyForMetaAnnotationsOverridden(text);
         return this;
     }
+    @MemberSupport
     public String default0UpdateMetaAnnotatedOverridden() {
         return getPropertyForMetaAnnotationsOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateMetaAnnotated.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateMetaAnnotated.java
index c8c9b1a..22faf20 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateMetaAnnotated.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateMetaAnnotated.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.restrictTo;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -41,10 +42,12 @@ public class ActionRestrictToVm_mixinUpdateMetaAnnotated {
 
     private final ActionRestrictToVm actionRestrictToVm;
 
+    @MemberSupport
     public ActionRestrictToVm act(final String text) {
         actionRestrictToVm.setPropertyForMetaAnnotations(text);
         return actionRestrictToVm;
     }
+    @MemberSupport
     public String default0Act() {
         return actionRestrictToVm.getPropertyForMetaAnnotations();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateMetaAnnotatedOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateMetaAnnotatedOverridden.java
index 276bf58..03317ea 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateMetaAnnotatedOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateMetaAnnotatedOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.restrictTo;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -44,10 +45,12 @@ public class ActionRestrictToVm_mixinUpdateMetaAnnotatedOverridden {
 
     private final ActionRestrictToVm actionRestrictToVm;
 
+    @MemberSupport
     public ActionRestrictToVm act(final String text) {
         actionRestrictToVm.setPropertyForMetaAnnotationsOverridden(text);
         return actionRestrictToVm;
     }
+    @MemberSupport
     public String default0Act() {
         return actionRestrictToVm.getPropertyForMetaAnnotationsOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateNoAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateNoAnnotation.java
index 9f97633..37d14f1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateNoAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateNoAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.restrictTo;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -40,10 +41,12 @@ public class ActionRestrictToVm_mixinUpdateNoAnnotation {
 
     private final ActionRestrictToVm actionRestrictToVm;
 
+    @MemberSupport
     public ActionRestrictToVm act(final String text) {
         actionRestrictToVm.setPropertyNoAnnotation(text);
         return actionRestrictToVm;
     }
+    @MemberSupport
     public String default0Act() {
         return actionRestrictToVm.getPropertyNoAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateRestrictToNoRestrictions.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateRestrictToNoRestrictions.java
index 3959e6b..55e1f0f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateRestrictToNoRestrictions.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateRestrictToNoRestrictions.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.restrictTo;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -42,10 +43,12 @@ public class ActionRestrictToVm_mixinUpdateRestrictToNoRestrictions {
 
     private final ActionRestrictToVm actionRestrictToVm;
 
+    @MemberSupport
     public ActionRestrictToVm act(final String text) {
         actionRestrictToVm.setPropertyForNoRestrictions(text);
         return actionRestrictToVm;
     }
+    @MemberSupport
     public String default0Act() {
         return actionRestrictToVm.getPropertyForNoRestrictions();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateRestrictToPrototyping.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateRestrictToPrototyping.java
index 880145b..adad79e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateRestrictToPrototyping.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/restrictTo/ActionRestrictToVm_mixinUpdateRestrictToPrototyping.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.restrictTo;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -42,10 +43,12 @@ public class ActionRestrictToVm_mixinUpdateRestrictToPrototyping {
 
     private final ActionRestrictToVm actionRestrictToVm;
 
+    @MemberSupport
     public ActionRestrictToVm act(final String text) {
         actionRestrictToVm.setPropertyForPrototyping(text);
         return actionRestrictToVm;
     }
+    @MemberSupport
     public String default0Act() {
         return actionRestrictToVm.getPropertyForPrototyping();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm.java
index b98c45a..968128d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm.java
@@ -29,21 +29,24 @@ import javax.xml.bind.annotation.XmlType;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 
 import static org.apache.isis.applib.services.wrapper.control.SyncControl.control;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -75,6 +78,7 @@ public class ActionSemanticsVm implements HasAsciiDocDescription {
         this.propertyForMetaAnnotationsOverridden = value;
     }
 
+    @Title
     public String title() {
         return "Action#semantics";
     }
@@ -148,6 +152,7 @@ public class ActionSemanticsVm implements HasAsciiDocDescription {
         setPropertyNoAnnotation(getPropertyNoAnnotation() + amount);
         return this;
     }
+    @MemberSupport
     public int default0IncrementByAmountNoAnnotation() {
         return 1;
     }
@@ -222,6 +227,7 @@ public class ActionSemanticsVm implements HasAsciiDocDescription {
         setPropertyForIdempotent(value);
         return this;
     }
+    @MemberSupport
     public int default0SetToValuePropertyForIdempotent() {
         return getPropertyForIdempotent();
     }
@@ -241,6 +247,7 @@ public class ActionSemanticsVm implements HasAsciiDocDescription {
         setPropertyForIdempotentAreYouSure(value);
         return this;
     }
+    @MemberSupport
     public int default0SetToValuePropertyForIdempotentAreYouSure() {
         return getPropertyForIdempotentAreYouSure();
     }
@@ -261,6 +268,7 @@ public class ActionSemanticsVm implements HasAsciiDocDescription {
         setPropertyForNonIdempotent(getPropertyForNonIdempotent() + amount);
         return this;
     }
+    @MemberSupport
     public int default0IncrementByAmountPropertyForNonIdempotent() {
         return 1;
     }
@@ -297,6 +305,7 @@ public class ActionSemanticsVm implements HasAsciiDocDescription {
         setPropertyForNonIdempotentAreYouSure(getPropertyForNonIdempotentAreYouSure() + amount);
         return this;
     }
+    @MemberSupport
     public int default0IncrementByAmountPropertyForNonIdempotentAreYouSure() {
         return 1;
     }
@@ -318,6 +327,7 @@ public class ActionSemanticsVm implements HasAsciiDocDescription {
         setPropertyForMetaAnnotations(value);
         return this;
     }
+    @MemberSupport
     public int default0SetToValueMetaAnnotated() {
         return getPropertyForMetaAnnotations();
     }
@@ -340,6 +350,7 @@ public class ActionSemanticsVm implements HasAsciiDocDescription {
         setPropertyForMetaAnnotationsOverridden(val);
         return this;
     }
+    @MemberSupport
     public int default0SetToValueMetaAnnotatedOverridden() {
         return getPropertyForMetaAnnotationsOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementByAmountNonIdempotent.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementByAmountNonIdempotent.java
index cedb943..013054b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementByAmountNonIdempotent.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementByAmountNonIdempotent.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.semantics;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -40,12 +41,14 @@ public class ActionSemanticsVm_mixinIncrementByAmountNonIdempotent {
 
     private final ActionSemanticsVm actionSemanticsVm;
 
+    @MemberSupport
     public ActionSemanticsVm act(final int incrementBy) {
         actionSemanticsVm.setPropertyForNonIdempotent(
                 actionSemanticsVm.getPropertyForNonIdempotent() + incrementBy
         );
         return actionSemanticsVm;
     }
+    @MemberSupport
     public int default0Act() {
         return 1;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNoAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNoAnnotation.java
index 5a44460..cb2fea7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNoAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNoAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.semantics;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 
 import lombok.RequiredArgsConstructor;
 
@@ -38,11 +39,13 @@ public class ActionSemanticsVm_mixinIncrementNoAnnotation {
 
     private final ActionSemanticsVm actionSemanticsVm;
 
+    @MemberSupport
     public ActionSemanticsVm act(final int incrementBy) {
         actionSemanticsVm.setPropertyNoAnnotation(
                 actionSemanticsVm.getPropertyNoAnnotation() + incrementBy);
         return actionSemanticsVm;
     }
+    @MemberSupport
     public int default0Act() {
         return 1;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNonIdempotent.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNonIdempotent.java
index 9a3c493..c0c84f3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNonIdempotent.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNonIdempotent.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.semantics;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -39,14 +40,12 @@ public class ActionSemanticsVm_mixinIncrementNonIdempotent {
 
     private final ActionSemanticsVm actionSemanticsVm;
 
+    @MemberSupport
     public ActionSemanticsVm act() {
         actionSemanticsVm.setPropertyForNonIdempotent(
                 actionSemanticsVm.getPropertyForNonIdempotent() + 1
         );
         return actionSemanticsVm;
     }
-    public int default0Act() {
-        return 1;
-    }
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNonIdempotentAreYouSure.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNonIdempotentAreYouSure.java
index ce220ee..1f4039b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNonIdempotentAreYouSure.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinIncrementNonIdempotentAreYouSure.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.semantics;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -39,14 +40,12 @@ public class ActionSemanticsVm_mixinIncrementNonIdempotentAreYouSure {
 
     private final ActionSemanticsVm actionSemanticsVm;
 
+    @MemberSupport
     public ActionSemanticsVm act() {
         actionSemanticsVm.setPropertyForNonIdempotentAreYouSure(
                 actionSemanticsVm.getPropertyForNonIdempotentAreYouSure() + 1
         );
         return actionSemanticsVm;
     }
-    public int default0Act() {
-        return 1;
-    }
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotated.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotated.java
index 805334d..fe9350a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotated.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotated.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.semantics;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -41,10 +42,12 @@ public class ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotated {
 
     private final ActionSemanticsVm actionSemanticsVm;
 
+    @MemberSupport
     public ActionSemanticsVm act(final int value) {
         actionSemanticsVm.setPropertyForMetaAnnotations(value);
         return actionSemanticsVm;
     }
+    @MemberSupport
     public int default0Act() {
         return actionSemanticsVm.getPropertyForMetaAnnotations();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotatedOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotatedOverridden.java
index 83fa5ce..20c439e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotatedOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotatedOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.semantics;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -42,10 +43,12 @@ public class ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotatedOverridden
 
     private final ActionSemanticsVm actionSemanticsVm;
 
+    @MemberSupport
     public ActionSemanticsVm act(final int value) {
         actionSemanticsVm.setPropertyForMetaAnnotationsOverridden(value);
         return actionSemanticsVm;
     }
+    @MemberSupport
     public int default0Act() {
         return actionSemanticsVm.getPropertyForMetaAnnotationsOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotent.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotent.java
index 4781cf7..21b5bfa 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotent.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotent.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.semantics;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -40,10 +41,12 @@ public class ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotent {
 
     private final ActionSemanticsVm actionSemanticsVm;
 
+    @MemberSupport
     public ActionSemanticsVm act(final int value) {
         actionSemanticsVm.setPropertyForIdempotent(value);
         return actionSemanticsVm;
     }
+    @MemberSupport
     public int default0Act() {
         return actionSemanticsVm.getPropertyForIdempotent();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java
index b4410a2..e243eb9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.Action.semantics;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -41,10 +42,12 @@ public class ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotentAreY
 
     private final ActionSemanticsVm actionSemanticsVm;
 
+    @MemberSupport
     public ActionSemanticsVm act(final int value) {
         actionSemanticsVm.setPropertyForIdempotentAreYouSure(value);
         return actionSemanticsVm;
     }
+    @MemberSupport
     public int default0Act() {
         return actionSemanticsVm.getPropertyForIdempotentAreYouSure();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/typeOf/ActionTypeOfVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/typeOf/ActionTypeOfVm.java
index 8636bcc..25b6450 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/typeOf/ActionTypeOfVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/typeOf/ActionTypeOfVm.java
@@ -34,12 +34,14 @@ import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain.actions.Action.typeOf.child.ActionTypeOfChildVm;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.domain.actions.Action.typeOf.child.ActionTypeOfChildVm;
+
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -53,6 +55,7 @@ public class ActionTypeOfVm implements HasAsciiDocDescription {
 
 //end::class-collections-children[]
 
+    @Title
     public String title() {
         return "Action#typeOf";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/typeOf/child/ActionTypeOfChildVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/typeOf/child/ActionTypeOfChildVm.java
index 1fcd4ce..32db599 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/typeOf/child/ActionTypeOfChildVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/typeOf/child/ActionTypeOfChildVm.java
@@ -28,12 +28,14 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "child")
 @XmlType
@@ -45,13 +47,14 @@ import lombok.Setter;
 @NoArgsConstructor
 public class ActionTypeOfChildVm implements HasAsciiDocDescription {
 
-    public ActionTypeOfChildVm(String value) {
+    public ActionTypeOfChildVm(final String value) {
         setValue(value);
         setValueUpper(value.toUpperCase());
         setValueLower(value.toLowerCase());
         setValueReversed(reverse(value));
     }
 
+    @Title
     public String title() {
         return getValue();
     }
@@ -80,7 +83,7 @@ public class ActionTypeOfChildVm implements HasAsciiDocDescription {
     @Getter @Setter
     private String valueReversed;
 
-    private static String reverse(String value) {
+    private static String reverse(final String value) {
         return new StringBuilder(value).reverse().toString();
     }
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/ActionLayoutMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/ActionLayoutMenu.java
index 3d15599..a83d413 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/ActionLayoutMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/ActionLayoutMenu.java
@@ -21,15 +21,14 @@ package demoapp.dom.domain.actions.ActionLayout;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import lombok.extern.log4j.Log4j2;
-
 @DomainService(nature=NatureOfService.VIEW, logicalTypeName = "demo.ActionLayoutMenu")
 @javax.annotation.Priority(PriorityPrecedence.EARLY)
-@Log4j2
+//@Log4j2
 public class ActionLayoutMenu {
 
     @Action(semantics = SemanticsOf.SAFE)
@@ -37,6 +36,7 @@ public class ActionLayoutMenu {
     )
     public void bookmarking(){
     }
+    @MemberSupport
     public String disableBookmarking(){
         return "Add link to action prompt as a bookmark" +
                 " (not supported by Wicket viewer)";
@@ -48,6 +48,7 @@ public class ActionLayoutMenu {
     @ActionLayout(cssClassFa="fa-pen-nib", describedAs = "CSS class to wrap the UI component representing this action")
     public void cssClass(){
     }
+    @MemberSupport
     public String disableCssClass(){
         return "CSS class to wrap the UI component representing this action" +
                 " (not yet implemented in demo)";
@@ -59,6 +60,7 @@ public class ActionLayoutMenu {
     @ActionLayout(cssClassFa="fa-font-awesome-flag", describedAs = "Font awesome icon to represent action")
     public void cssClassFa(){
     }
+    @MemberSupport
     public String disableCssClassFa(){
         return "Font awesome icon to represent action" +
                 " (not yet implemented in demo)";
@@ -71,6 +73,7 @@ public class ActionLayoutMenu {
     @ActionLayout(cssClassFa="fa-comment", describedAs = "Description of the action, shown as a tooltip")
     public void describedAs(){
     }
+    @MemberSupport
     public String disableDescribedAs(){
         return "Description of the action, shown as a tooltip" +
                 " (not yet implemented in demo)";
@@ -82,6 +85,7 @@ public class ActionLayoutMenu {
     @ActionLayout(cssClassFa="fa-glasses", describedAs = "Visibility of the action in different contexts")
     public void hidden(){
     }
+    @MemberSupport
     public String disableHidden(){
         return "Visibility of the action in different contexts" +
                 " (not yet implemented in demo)";
@@ -93,6 +97,7 @@ public class ActionLayoutMenu {
     @ActionLayout(cssClassFa="fa-signature", describedAs = "Custom text for the action's label")
     public void named(){
     }
+    @MemberSupport
     public String disableNamed(){
         return "Custom text for the action's label" +
                 " (not yet implemented in demo)";
@@ -120,6 +125,7 @@ public class ActionLayoutMenu {
     @ActionLayout(cssClassFa="fa-random", describedAs = "Whether to redraw page if action returns same object")
     public void redirectPolicy(){
     }
+    @MemberSupport
     public String disableRedirectPolicy(){
         return "Whether to redraw page if action returns same object" +
                 " (not yet implemented in demo)";
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm.java
index bcc5058..8d6357a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm.java
@@ -29,11 +29,13 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -44,6 +46,7 @@ import lombok.Setter;
 )
 public class ActionLayoutPositionVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "ActionLayout#position";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedBelow.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedBelow.java
index 10aed97..f781b21 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedBelow.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedBelow.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.position;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -39,10 +40,12 @@ public class ActionLayoutPositionVm_annotatedBelow {
 
     private final ActionLayoutPositionVm stringViewModel;
 
-    public ActionLayoutPositionVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPositionVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty1(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty1();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedPanel.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedPanel.java
index 36c6d45..fc46f92 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedPanel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedPanel.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.position;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -40,10 +41,12 @@ public class ActionLayoutPositionVm_annotatedPanel {
 
     private final ActionLayoutPositionVm stringViewModel;
 
-    public ActionLayoutPositionVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPositionVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty1(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty1();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedPanelDropDown.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedPanelDropDown.java
index 44dfa86..acd83f1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedPanelDropDown.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedPanelDropDown.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.position;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -40,10 +41,12 @@ public class ActionLayoutPositionVm_annotatedPanelDropDown {
 
     private final ActionLayoutPositionVm stringViewModel;
 
-    public ActionLayoutPositionVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPositionVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty1(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty1();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedRight.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedRight.java
index 4dd9f0b..c4825df 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedRight.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_annotatedRight.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.position;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -40,10 +41,12 @@ public class ActionLayoutPositionVm_annotatedRight {
 
     private final ActionLayoutPositionVm stringViewModel;
 
-    public ActionLayoutPositionVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPositionVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty1(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty1();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutBelow.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutBelow.java
index e6d4243..bdcaf28 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutBelow.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutBelow.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.position;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -39,10 +40,12 @@ public class ActionLayoutPositionVm_layoutBelow {
 
     private final ActionLayoutPositionVm stringViewModel;
 
-    public ActionLayoutPositionVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPositionVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty2(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty2();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutPanel.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutPanel.java
index d4cf2a6..3505fc0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutPanel.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutPanel.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.position;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -39,10 +40,12 @@ public class ActionLayoutPositionVm_layoutPanel {
 
     private final ActionLayoutPositionVm stringViewModel;
 
-    public ActionLayoutPositionVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPositionVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty2(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty2();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutPanelDropDown.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutPanelDropDown.java
index ccaadaa..5d629a5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutPanelDropDown.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutPanelDropDown.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.position;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -39,10 +40,12 @@ public class ActionLayoutPositionVm_layoutPanelDropDown {
 
     private final ActionLayoutPositionVm stringViewModel;
 
-    public ActionLayoutPositionVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPositionVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty2(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty2();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutRight.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutRight.java
index 0268ee0..9f8ba07 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutRight.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/position/ActionLayoutPositionVm_layoutRight.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.position;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -39,10 +40,12 @@ public class ActionLayoutPositionVm_layoutRight {
 
     private final ActionLayoutPositionVm stringViewModel;
 
-    public ActionLayoutPositionVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPositionVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty2(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty2();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm.java
index 7938f89..88ceff5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm.java
@@ -32,10 +32,11 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -46,6 +47,7 @@ import lombok.Setter;
 )
 public class ActionLayoutPromptStyleVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "ActionLayout#promptStyle";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedInline.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedInline.java
index c908aa9..9c38b89 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedInline.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.promptStyle;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -41,10 +42,12 @@ public class ActionLayoutPromptStyleVm_annotatedInline {
 
     private final ActionLayoutPromptStyleVm stringViewModel;
 
-    public ActionLayoutPromptStyleVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPromptStyleVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty1(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty1();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedInlineAsIfEdit.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedInlineAsIfEdit.java
index 59c955c..b4d347c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedInlineAsIfEdit.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedInlineAsIfEdit.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.promptStyle;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -41,10 +42,12 @@ public class ActionLayoutPromptStyleVm_annotatedInlineAsIfEdit {
 
     private final ActionLayoutPromptStyleVm stringViewModel;
 
-    public ActionLayoutPromptStyleVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPromptStyleVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty2(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty2();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedModal.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedModal.java
index d98f98c..f3fee90 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedModal.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedModal.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.promptStyle;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -41,10 +42,12 @@ public class ActionLayoutPromptStyleVm_annotatedModal {
 
     private final ActionLayoutPromptStyleVm stringViewModel;
 
-    public ActionLayoutPromptStyleVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPromptStyleVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty1(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty1();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedSidebar.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedSidebar.java
index fd74663..d8fe417 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedSidebar.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_annotatedSidebar.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.promptStyle;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -41,10 +42,12 @@ public class ActionLayoutPromptStyleVm_annotatedSidebar {
 
     private final ActionLayoutPromptStyleVm stringViewModel;
 
-    public ActionLayoutPromptStyleVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPromptStyleVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty1(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty1();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutDialog.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutDialog.java
index e10d1a1..0f718ea 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutDialog.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutDialog.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.actions.ActionLayout.promptStyle;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -43,10 +44,12 @@ public class ActionLayoutPromptStyleVm_layoutDialog {
 
     private final ActionLayoutPromptStyleVm stringViewModel;
 
-    public ActionLayoutPromptStyleVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPromptStyleVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty3(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty3();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutInline.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutInline.java
index 0cd14b5..a3348af 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutInline.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutInline.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.promptStyle;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -38,10 +39,12 @@ public class ActionLayoutPromptStyleVm_layoutInline {
 
     private final ActionLayoutPromptStyleVm stringViewModel;
 
-    public ActionLayoutPromptStyleVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPromptStyleVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty3(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty3();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutInlineAsIfEdit.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutInlineAsIfEdit.java
index 81c7c07..5dced46 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutInlineAsIfEdit.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/promptStyle/ActionLayoutPromptStyleVm_layoutInlineAsIfEdit.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.actions.ActionLayout.promptStyle;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -38,10 +39,12 @@ public class ActionLayoutPromptStyleVm_layoutInlineAsIfEdit {
 
     private final ActionLayoutPromptStyleVm stringViewModel;
 
-    public ActionLayoutPromptStyleVm act(String newValue) {
+    @MemberSupport
+    public ActionLayoutPromptStyleVm act(final String newValue) {
         stringViewModel.setReadOnlyProperty4(newValue);
         return stringViewModel;
     }
+    @MemberSupport
     public String default0Act() {
         return stringViewModel.getReadOnlyProperty4();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/assoc/DemoItem.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/assoc/DemoItem.java
index c942e3b..98cf45c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/assoc/DemoItem.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/assoc/DemoItem.java
@@ -25,6 +25,7 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -38,6 +39,7 @@ import lombok.Setter;
 @AllArgsConstructor(staticName="of")
 public class DemoItem {
 
+    @Title
     public String title() {
         return String.format("DemoItem '%s'", getName());
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DemoItem.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DemoItem.java
index ad756ed..14e7012 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DemoItem.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DemoItem.java
@@ -25,6 +25,7 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.AllArgsConstructor;
 import lombok.EqualsAndHashCode;
@@ -39,6 +40,7 @@ import lombok.Setter;
 @EqualsAndHashCode // required for the Dependent Arguments demo to work properly
 public class DemoItem {
 
+    @Title
     public String title() {
         return String.format("DemoItem '%s' (%s)", getName(), getParity());
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useAutoComplete.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useAutoComplete.java
index f901862..dcb44bf 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useAutoComplete.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useAutoComplete.java
@@ -52,14 +52,15 @@ public class DependentArgsActionDemo_useAutoComplete {
         DemoItem item1;
     }
 
+    @MemberSupport
     public DependentArgsActionDemo act(
 
             // PARAM 0
-            @Parameter(optionality = Optionality.MANDATORY)
+            @Parameter(optionality = Optionality.MANDATORY) final
             Parity parity,
 
             // PARAM 1
-            @Parameter(optionality = Optionality.MANDATORY)
+            @Parameter(optionality = Optionality.MANDATORY) final
             DemoItem item
 
             ) {
@@ -79,8 +80,8 @@ public class DependentArgsActionDemo_useAutoComplete {
 
     @MemberSupport
     public Collection<DemoItem> autoComplete1Act(
-            Parameters params,
-            @MinLength(3) String search) {
+            final Parameters params,
+            @MinLength(3) final String search) {
 
         val parity = params.parity(); // <-- the refining parameter from the dialog above
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useChoices.java
index cd1c0a8..95b7905 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useChoices.java
@@ -52,14 +52,15 @@ public class DependentArgsActionDemo_useChoices {
         DemoItem item1;
     }
 
+    @MemberSupport
     public DependentArgsActionDemo act(
 
             // PARAM 0
-            @Parameter(optionality = Optionality.MANDATORY)
+            @Parameter(optionality = Optionality.MANDATORY) final
             Parity parity,
 
             // PARAM 1
-            @Parameter(optionality = Optionality.MANDATORY)
+            @Parameter(optionality = Optionality.MANDATORY) final
             DemoItem item
 
             ) {
@@ -78,7 +79,7 @@ public class DependentArgsActionDemo_useChoices {
     // -- PARAM 1 (DemoItem)
 
     @MemberSupport
-    public Collection<DemoItem> choices1Act(Parameters params) {
+    public Collection<DemoItem> choices1Act(final Parameters params) {
 
         val parity = params.parity(); // <-- the refining parameter from the dialog above
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useDisable.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useDisable.java
index 7d93fdb..73ad229 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useDisable.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useDisable.java
@@ -48,15 +48,16 @@ public class DependentArgsActionDemo_useDisable {
         String message;
     }
 
+    @MemberSupport
     public DependentArgsActionDemo act(
 
             // PARAM 0
-            @ParameterLayout(named = "Disable Message Field")
+            @ParameterLayout(named = "Disable Message Field") final
             boolean disableMessageField,
 
             // PARAM 1
             @Parameter(optionality = Optionality.MANDATORY)
-            @ParameterLayout(named = "Message")
+            @ParameterLayout(named = "Message") final
             String message
 
             ) {
@@ -75,7 +76,7 @@ public class DependentArgsActionDemo_useDisable {
     // -- PARAM 1 (String message)
 
     @MemberSupport
-    public String disable1Act(boolean disableMessageField) {
+    public String disable1Act(final boolean disableMessageField) {
         return disableMessageField
                 ? "disabled by dependent argument"
                         : null;
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useHide.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useHide.java
index aca2edc..19ec351 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useHide.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useHide.java
@@ -48,15 +48,16 @@ public class DependentArgsActionDemo_useHide {
         String message;
     }
 
+    @MemberSupport
     public DependentArgsActionDemo act(
 
             // PARAM 0
-            @ParameterLayout(named = "Hide Message Field")
+            @ParameterLayout(named = "Hide Message Field") final
             boolean hideMessageField,
 
             // PARAM 1
             @Parameter(optionality = Optionality.MANDATORY)
-            @ParameterLayout(named = "Message")
+            @ParameterLayout(named = "Message") final
             String message
 
             ) {
@@ -75,12 +76,12 @@ public class DependentArgsActionDemo_useHide {
     // -- PARAM 1 (String message)
 
     @MemberSupport
-    public boolean hide1Act(boolean hideMessageField) {
+    public boolean hide1Act(final boolean hideMessageField) {
         return hideMessageField;
     }
 
 
-    public boolean hide1Act(Parameters params) {
+    public boolean hide1Act(final Parameters params) {
         return params.hideMessageField();
     }
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useIndependent.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useIndependent.java
index 3263eb0..7fa4ce4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useIndependent.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo_useIndependent.java
@@ -42,18 +42,19 @@ public class DependentArgsActionDemo_useIndependent {
 
     private final DependentArgsActionDemo holder;
 
+    @MemberSupport
     public DependentArgsActionDemo act(
 
             // PARAM 0
-            @Parameter(optionality = Optionality.MANDATORY)
+            @Parameter(optionality = Optionality.MANDATORY) final
             Parity parity,
 
             // PARAM 1
-            @Parameter(optionality = Optionality.MANDATORY)
+            @Parameter(optionality = Optionality.MANDATORY) final
             DemoItem item1,
 
             // PARAM 2
-            @Parameter(optionality = Optionality.MANDATORY)
+            @Parameter(optionality = Optionality.MANDATORY) final
             DemoItem item2
 
             ) {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/Parity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/Parity.java
index a3a7cd6..4d182cf 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/Parity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/Parity.java
@@ -18,10 +18,13 @@
  */
 package demoapp.dom.domain.actions.progmodel.depargs;
 
+import org.apache.isis.applib.annotation.Title;
+
 public enum Parity {
     EVEN,
     ODD;
 
+    @Title
     public String title() {
         return name();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/CollectionMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/CollectionMenu.java
index caefa00..74c003d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/CollectionMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/CollectionMenu.java
@@ -23,6 +23,7 @@ import javax.inject.Inject;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -30,7 +31,6 @@ import org.apache.isis.applib.services.factory.FactoryService;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
-import lombok.extern.log4j.Log4j2;
 
 import demoapp.dom.domain.collections.Collection.domainEvent.CollectionDomainEventVm;
 import demoapp.dom.domain.collections.Collection.domainEvent.CollectionDomainEventVm_addChild;
@@ -40,8 +40,8 @@ import demoapp.dom.domain.collections.Collection.domainEvent.CollectionDomainEve
         logicalTypeName = "demo.CollectionMenu"
 )
 @javax.annotation.Priority(PriorityPrecedence.EARLY)
-@Log4j2
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
+//@Log4j2
 public class CollectionMenu {
 
     final FactoryService factoryService;
@@ -64,6 +64,7 @@ public class CollectionMenu {
     @ActionLayout(cssClassFa="fa-glasses", describedAs = "Visibility of collections")
     public void hidden(){
     }
+    @MemberSupport
     public String disableHidden(){
         return "Visibility of collections" +
                  " (not yet implemented in demo)";
@@ -75,14 +76,13 @@ public class CollectionMenu {
     @ActionLayout(cssClassFa="fa-shapes", describedAs = "Element type of collections")
     public void typeOf(){
     }
+    @MemberSupport
     public String disableTypeOf(){
         return "Element type of collections" +
                  " (not yet implemented in demo)";
     }
 
-
-
-    private CollectionDomainEventVm_addChild addChild(CollectionDomainEventVm collectionDomainEventVm) {
+    private CollectionDomainEventVm_addChild addChild(final CollectionDomainEventVm collectionDomainEventVm) {
         return factoryService.mixin(CollectionDomainEventVm_addChild.class, collectionDomainEventVm);
     }
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm.java
index a1f434f..9224f76 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm.java
@@ -33,6 +33,7 @@ import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.events.domain.CollectionDomainEvent;
 
 import lombok.Getter;
@@ -54,6 +55,7 @@ public class CollectionDomainEventVm implements HasAsciiDocDescription {
     // ...
 //end::class[]
 
+    @Title
     public String title() {
         return "Collection#domainEvent";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm_removeChild.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm_removeChild.java
index 323043d..04e38bb 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm_removeChild.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/CollectionDomainEventVm_removeChild.java
@@ -23,11 +23,13 @@ import java.util.Objects;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
+import lombok.RequiredArgsConstructor;
+
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom.domain.collections.Collection.domainEvent.child.CollectionDomainEventChildVm;
-import lombok.RequiredArgsConstructor;
 
 //tag::class[]
 @Action(
@@ -44,18 +46,22 @@ public class CollectionDomainEventVm_removeChild implements HasAsciiDocDescripti
         return collectionDomainEventVm.getChildren();
     }
 
-    public CollectionDomainEventVm_removeChild act(CollectionDomainEventChildVm child) {
+    @MemberSupport
+    public CollectionDomainEventVm_removeChild act(final CollectionDomainEventChildVm child) {
         getChildren().removeIf(
                 x -> Objects.equals(x.getValue(), child.getValue()));
         return this;
     }
 
+    @MemberSupport
     public CollectionDomainEventChildVm default0Act() {
         return getChildren().isEmpty() ? null : getChildren().get(0);
     }
+    @MemberSupport
     public List<CollectionDomainEventChildVm> choices0Act() {
         return getChildren();
     }
+    @MemberSupport
     public String disableAct() {
         return getChildren().isEmpty() ? "No children to remove": null;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/subscribers/CollectionDomainEventVm_controlChildrenVisibility.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/subscribers/CollectionDomainEventVm_controlChildrenVisibility.java
index 65f9f29..f06783b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/subscribers/CollectionDomainEventVm_controlChildrenVisibility.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/subscribers/CollectionDomainEventVm_controlChildrenVisibility.java
@@ -22,13 +22,15 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Redirect;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.domain.collections.Collection.domainEvent.CollectionDomainEventVm;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.domain.collections.Collection.domainEvent.CollectionDomainEventVm;
+
 
 //tag::class[]
 @Action(
@@ -44,10 +46,12 @@ public class CollectionDomainEventVm_controlChildrenVisibility {
 
     private final CollectionDomainEventVm collectionDomainEventVm;
 
+    @MemberSupport
     public CollectionDomainEventVm act(final CollectionDomainEventControlStrategy controlStrategy) {
         eventControlService.controlStrategy = controlStrategy;
         return collectionDomainEventVm;
     }
+    @MemberSupport
     public CollectionDomainEventControlStrategy default0Act() {
         return eventControlService.controlStrategy;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/CollectionLayout/CollectionLayoutMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/CollectionLayout/CollectionLayoutMenu.java
index 1209221..492f455 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/CollectionLayout/CollectionLayoutMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/CollectionLayout/CollectionLayoutMenu.java
@@ -21,24 +21,24 @@ package demoapp.dom.domain.collections.CollectionLayout;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import lombok.extern.log4j.Log4j2;
-
 @DomainService(
         nature=NatureOfService.VIEW,
         logicalTypeName = "demo.CollectionLayoutMenu"
 )
 @javax.annotation.Priority(PriorityPrecedence.EARLY)
-@Log4j2
+//@Log4j2
 public class CollectionLayoutMenu {
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-pen-nib", describedAs = "CSS class to wrap the UI component representing this collection")
     public void cssClass(){
     }
+    @MemberSupport
     public String disableCssClass(){
         return "CSS class to wrap the UI component representing this collection" +
                 " (not yet implemented in demo)";
@@ -50,6 +50,7 @@ public class CollectionLayoutMenu {
     @ActionLayout(cssClassFa="fa-atom", describedAs = "View collection as a table, or collapsed, or some other representation if available")
     public void defaultView(){
     }
+    @MemberSupport
     public String disableDefaultView(){
         return "View collection as a table, or collapsed, or some other representation if available" +
                 " (not yet implemented in demo)";
@@ -61,6 +62,7 @@ public class CollectionLayoutMenu {
     @ActionLayout(cssClassFa="fa-comment", describedAs = "Description of the collection, shown as a tooltip")
     public void describedAs(){
     }
+    @MemberSupport
     public String disableDescribedAs(){
         return "Description of the collection, shown as a tooltip" +
                 " (not yet implemented in demo)";
@@ -72,6 +74,7 @@ public class CollectionLayoutMenu {
     @ActionLayout(cssClassFa="fa-glasses", describedAs = "Visibility of the collection in different contexts")
     public void hidden(){
     }
+    @MemberSupport
     public String disableHidden(){
         return "Visibility of the collection in different contexts" +
                 " (not yet implemented in demo)";
@@ -83,6 +86,7 @@ public class CollectionLayoutMenu {
     @ActionLayout(cssClassFa="fa-signature", describedAs = "Custom text for the collection's label")
     public void named(){
     }
+    @MemberSupport
     public String disableNamed(){
         return "Custom text for the collection's label" +
                 " (not yet implemented in demo)";
@@ -93,6 +97,7 @@ public class CollectionLayoutMenu {
     @ActionLayout(cssClassFa="fa-fast-forward", describedAs = "Number of domain objects per page in this collection")
     public void paged(){
     }
+    @MemberSupport
     public String disablePaged(){
         return "Number of domain objects per page in this collection" +
                 " (not yet implemented in demo)";
@@ -104,11 +109,10 @@ public class CollectionLayoutMenu {
     @ActionLayout(cssClassFa="fa-sort", describedAs = "Sort domain objects in this collection, overriding their default comparator")
     public void sortedBy(){
     }
+    @MemberSupport
     public String disableSortedBy(){
         return "Sort domain objects in this collection, overriding their default comparator" +
                 " (not yet implemented in demo)";
     }
 
-
-
 }
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 364058d..709c36d 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
@@ -23,6 +23,7 @@ import javax.inject.Inject;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -46,6 +47,7 @@ public class DomainObjectMenu {
     @ActionLayout(cssClassFa="fa-question-circle", describedAs = "Search object in prompt")
     public void autoComplete(){
     }
+    @MemberSupport
     public String disableAutoComplete(){
         return "Search object in prompt" +
                  " (not yet implemented in demo)";
@@ -57,6 +59,7 @@ public class DomainObjectMenu {
     @ActionLayout(cssClassFa="fa-list-ul", describedAs = "Choose 'reference data' object (one of a bounded set) in prompt")
     public void bounded(){
     }
+    @MemberSupport
     public String disableBounded(){
         return "Choose 'reference data' object (one of a bounded set) in prompt" +
                  " (not yet implemented in demo)";
@@ -68,6 +71,7 @@ public class DomainObjectMenu {
     @ActionLayout(cssClassFa="fa-pencil-alt", describedAs = "Default editability of properties")
     public void editing() {
     }
+    @MemberSupport
     public String disableEditing(){
         return "Default editability of properties" +
                  " (not yet implemented in demo)";
@@ -87,6 +91,7 @@ public class DomainObjectMenu {
     @ActionLayout(cssClassFa="fa-tools", describedAs = "For mixins, override the default method name")
     public void mixinMethod() {
     }
+    @MemberSupport
     public String disableMixinMethod(){
         return "For mixins, override the default method name" +
                  " (not yet implemented in demo)";
@@ -101,6 +106,7 @@ public class DomainObjectMenu {
         viewModel.setMessage(message);
         return viewModel;
     }
+    @MemberSupport
     public String default0NatureStateful() {
         return "Some initial state";
     }
@@ -114,6 +120,7 @@ public class DomainObjectMenu {
         viewModel.setMessage(message);
         return viewModel;
     }
+    @MemberSupport
     public String default0NatureStatefulRefsEntity() {
         return "Some initial state";
     }
@@ -124,6 +131,7 @@ public class DomainObjectMenu {
     @ActionLayout(cssClassFa="fa-circle", describedAs = "Explicitly specify the logical type name")
     public void logicalTypeName() {
     }
+    @MemberSupport
     public String disableLogicalTypeName(){
         return "Explicitly specify the object type alias" +
                  " (not yet implemented in demo)";
@@ -135,6 +143,7 @@ public class DomainObjectMenu {
     @ActionLayout(cssClassFa="fa-asterisk", describedAs = "Default class of the domain event emitted when interacting with the domain object's actions, properties or collections")
     public void xxxDomainEvent() {
     }
+    @MemberSupport
     public String disableXxxDomainEvent(){
         return "Default class of the domain event emitted when interacting with the domain object's actions, properties or collections" +
                  " (not yet implemented in demo)";
@@ -146,6 +155,7 @@ public class DomainObjectMenu {
     @ActionLayout(cssClassFa="fa-redo", describedAs = "Class of the lifecycle event emitted when the domain entity transitions through its persistence lifecycle")
     public void xxxLifecycleEvent() {
     }
+    @MemberSupport
     public String disableXxxLifecycleEvent(){
         return "Class of the lifecycle event emitted when the domain entity transitions through its persistence lifecycle" +
                  " (not yet implemented in demo)";
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction.java
index 0e863d8..5fae66e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.objects.DomainObject.entityChangePublishing;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
@@ -35,16 +36,18 @@ public class DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction
 //end::class[]
     private final DomainObjectEntityChangePublishingEntity domainObjectAuditingEntity;
 
-    public DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction(DomainObjectEntityChangePublishingEntity domainObjectAuditingEntity) {
+    public DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction(final DomainObjectEntityChangePublishingEntity domainObjectAuditingEntity) {
         this.domainObjectAuditingEntity = domainObjectAuditingEntity;
     }
 
 //tag::class[]
-    public DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction updateProperty(final String value) {
+    @MemberSupport
+    public DomainObjectEntityChangePublishingEntity_updatePropertyUsingAction act(final String value) {
         domainObjectAuditingEntity.setPropertyUpdatedByAction(value);
         return this;
     }
-    public String default0UpdateProperty() {
+    @MemberSupport
+    public String default0Act() {
         return domainObjectAuditingEntity.getPropertyUpdatedByAction();
     }
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm.java
index ffb5c4f..a1ead07 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlType;
 
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
@@ -38,6 +39,7 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 )
 public class DomainObjectEntityChangePublishingVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "DomainObject#entityChangePublishing";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_create.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_create.java
index 8d991f9..fb4faa2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_create.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_create.java
@@ -22,6 +22,7 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import demoapp.dom._infra.samples.NameSamples;
@@ -39,17 +40,17 @@ import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotO
 public class DomainObjectEntityChangePublishingVm_create {
 
     private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
-    public DomainObjectEntityChangePublishingVm_create(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
+    public DomainObjectEntityChangePublishingVm_create(final DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
         this.domainObjectAuditingVm = domainObjectAuditingVm;
     }
 
-
+    @MemberSupport
     public DomainObjectEntityChangePublishingVm act(
-            String newValue
-            , boolean publishingEnabled
-            , boolean publishingDisabled
-            , boolean publishingEnabledMetaAnnotated
-            , boolean publishingEnabledMetaAnnotOverridden
+            final String newValue
+            , final boolean publishingEnabled
+            , final boolean publishingDisabled
+            , final boolean publishingEnabledMetaAnnotated
+            , final boolean publishingEnabledMetaAnnotOverridden
     ) {
         if(publishingEnabled) {
             publishingEnabledEntities.create(newValue);
@@ -65,18 +66,23 @@ public class DomainObjectEntityChangePublishingVm_create {
         }
         return domainObjectAuditingVm;
     }
+    @MemberSupport
     public String default0Act() {
         return nameSamples.random();
     }
+    @MemberSupport
     public boolean default1Act() {
         return true;
     }
+    @MemberSupport
     public boolean default2Act() {
         return true;
     }
+    @MemberSupport
     public boolean default3Act() {
         return true;
     }
+    @MemberSupport
     public boolean default4Act() {
         return true;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_delete.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_delete.java
index 91de8eb..ebf29e9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_delete.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_delete.java
@@ -18,11 +18,13 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing;
 
-import org.springframework.lang.Nullable;
 import javax.inject.Inject;
 
+import org.springframework.lang.Nullable;
+
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -39,15 +41,16 @@ import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotO
 public class DomainObjectEntityChangePublishingVm_delete {
 
     private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
-    public DomainObjectEntityChangePublishingVm_delete(DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
+    public DomainObjectEntityChangePublishingVm_delete(final DomainObjectEntityChangePublishingVm domainObjectAuditingVm) {
         this.domainObjectAuditingVm = domainObjectAuditingVm;
     }
 
+    @MemberSupport
     public DomainObjectEntityChangePublishingVm act(
-            @Nullable DomainObjectEntityChangePublishingEnabledEntity enabledEntity
-            , @Nullable DomainObjectEntityChangePublishingDisabledEntity disabledEntity
-            , @Nullable DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity metaAnnotatedEntity
-            , @Nullable DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity metaAnnotOverriddenEntity
+            @Nullable final DomainObjectEntityChangePublishingEnabledEntity enabledEntity
+            , @Nullable final DomainObjectEntityChangePublishingDisabledEntity disabledEntity
+            , @Nullable final DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity metaAnnotatedEntity
+            , @Nullable final DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity metaAnnotOverriddenEntity
             ) {
         if(enabledEntity != null) {
             publishingEnabledEntities.remove(enabledEntity);
@@ -63,18 +66,23 @@ public class DomainObjectEntityChangePublishingVm_delete {
         }
         return domainObjectAuditingVm;
     }
+    @MemberSupport
     public DomainObjectEntityChangePublishingEnabledEntity default0Act() {
         return publishingEnabledEntities.first().orElse(null);
     }
+    @MemberSupport
     public DomainObjectEntityChangePublishingDisabledEntity default1Act() {
         return publishingDisabledEntities.first().orElse(null);
     }
+    @MemberSupport
     public DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity default2Act() {
         return publishingEnabledMetaAnnotatedEntities.first().orElse(null);
     }
+    @MemberSupport
     public DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity default3Act() {
         return publishingEnabledMetaAnnotOverriddenEntities.first().orElse(null);
     }
+    @MemberSupport
     public String disableAct() {
         if(!publishingEnabledEntities.first().isPresent()) { return "No EnabledJdo to delete"; }
         if(!publishingDisabledEntities.first().isPresent()) { return "No DisabledJdo to delete"; }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_updateAll.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_updateAll.java
index 9cd13fa..545a7a7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_updateAll.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingVm_updateAll.java
@@ -25,6 +25,7 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -45,12 +46,12 @@ public class DomainObjectEntityChangePublishingVm_updateAll {
 
     private final DomainObjectEntityChangePublishingVm domainObjectAuditingVm;
 
+    @MemberSupport
     public DomainObjectEntityChangePublishingVm act(
-            boolean publishingEnabled
-            , boolean publishingDisabled
-            , boolean publishingEnabledMetaAnnotated
-            , boolean publishingEnabledMetaAnnotOverridden
-    ) {
+            final boolean publishingEnabled
+            , final boolean publishingDisabled
+            , final boolean publishingEnabledMetaAnnotated
+            , final boolean publishingEnabledMetaAnnotOverridden) {
 
         if(publishingEnabled) {
             renumber((List)publishingEnabledEntities.all());
@@ -67,21 +68,25 @@ public class DomainObjectEntityChangePublishingVm_updateAll {
 
         return domainObjectAuditingVm;
     }
+    @MemberSupport
     public boolean default0Act() {
         return true;
     }
+    @MemberSupport
     public boolean default1Act() {
         return true;
     }
+    @MemberSupport
     public boolean default2Act() {
         return true;
     }
+    @MemberSupport
     public boolean default3Act() {
         return true;
     }
 
     final static AtomicInteger counter = new AtomicInteger(0);
-    private static void renumber(List<DomainObjectEntityChangePublishingEntity> all) {
+    private static void renumber(final List<DomainObjectEntityChangePublishingEntity> all) {
         all.forEach(x -> x.setPropertyUpdatedByAction("Object #" + counter.incrementAndGet()));
     }
 
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
index b9b4997..ad465a4 100644
--- 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
@@ -36,10 +36,12 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -63,6 +65,7 @@ public class StatefulVmJaxbRefsEntity implements HasAsciiDocDescription {
     @XmlTransient @Inject
     private ValueHolderRepository<String, ? extends JaxbRefEntity> childEntities;
 
+    @Title
     public String title() {
         return String.format("%s; %s children", getMessage(), getChildren().size());
     }
@@ -79,15 +82,17 @@ public class StatefulVmJaxbRefsEntity implements HasAsciiDocDescription {
 
     @Action(semantics = SemanticsOf.IDEMPOTENT)
     @ActionLayout(associateWith = "favoriteChild", sequence = "1")
-    public StatefulVmJaxbRefsEntity changeFavoriteChild(JaxbRefEntity newFavorite) {
+    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";
@@ -100,7 +105,7 @@ public class StatefulVmJaxbRefsEntity implements HasAsciiDocDescription {
 
     //XXX[ISIS-2384] potentially fails with NPE
     @Action(choicesFrom = "children")
-    public StatefulVmJaxbRefsEntity suffixSelected(List<JaxbRefEntity> children) {
+    public StatefulVmJaxbRefsEntity suffixSelected(final List<JaxbRefEntity> children) {
         for(JaxbRefEntity child : children) {
             child.setName(child.getName() + ", Jr");
         }
@@ -120,9 +125,11 @@ public class StatefulVmJaxbRefsEntity implements HasAsciiDocDescription {
     }
 
     //XXX[ISIS-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
     }
@@ -150,7 +157,9 @@ public class StatefulVmJaxbRefsEntity implements HasAsciiDocDescription {
         children.remove(child);
         return this;
     }
+    @MemberSupport
     public List<JaxbRefEntity> choices0RemoveChild() { return getChildren(); }
+    @MemberSupport
     public String disableRemoveChild() {
         return choices0RemoveChild().isEmpty()? "No children to remove" : null;
     }
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
index 6272e5c..53f40dd 100644
--- 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
@@ -33,17 +33,19 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.val;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")                              // <.>
 @XmlType                                                    // <.>
@@ -54,6 +56,7 @@ import lombok.val;
 )
 public class StatefulVmUsingJaxb implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return String.format("%s; %s children", getMessage(), getChildren().size());
     }
@@ -100,7 +103,9 @@ public class StatefulVmUsingJaxb implements HasAsciiDocDescription {
         children.remove(child);
         return this;
     }
+    @MemberSupport
     public List<Child> choices0RemoveChild() { return getChildren(); }
+    @MemberSupport
     public String disableRemoveChild() {
         return choices0RemoveChild().isEmpty()? "No children to remove" : null;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/DomainObjectLayoutMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/DomainObjectLayoutMenu.java
index 1bace2c..bfddb15 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/DomainObjectLayoutMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObjectLayout/DomainObjectLayoutMenu.java
@@ -21,24 +21,24 @@ package demoapp.dom.domain.objects.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import lombok.extern.log4j.Log4j2;
-
 @DomainService(
         nature=NatureOfService.VIEW,
         logicalTypeName = "demo.DomainObjectLayoutMenu"
 )
 @javax.annotation.Priority(PriorityPrecedence.EARLY)
-@Log4j2
+//@Log4j2
 public class DomainObjectLayoutMenu {
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(cssClassFa="fa-bookmark", describedAs = "Add link to object once visited as a bookmark")
     public void bookmarking(){
     }
+    @MemberSupport
     public String disableBookmarking(){
         return "Add link to object once visited as a bookmark" +
                  " (not yet implemented in demo)";
@@ -51,6 +51,7 @@ public class DomainObjectLayoutMenu {
     )
     public void cssClass(){
     }
+    @MemberSupport
     public String disableCssClass(){
         return "CSS class to wrap the UI component representing the domain object" +
                  " (not yet implemented in demo)";
@@ -62,6 +63,7 @@ public class DomainObjectLayoutMenu {
     @ActionLayout(cssClassFa="fa-font-awesome-flag", describedAs = "Font awesome icon to represent domain object")
     public void cssClassFa(){
     }
+    @MemberSupport
     public String disableCssClassFa(){
         return "Font awesome icon to represent domain object" +
                 " (not yet implemented in demo)";
@@ -73,6 +75,7 @@ public class DomainObjectLayoutMenu {
     @ActionLayout(cssClassFa="fa-comment", describedAs = "Description of the property, shown as a tooltip")
     public void describedAs(){
     }
+    @MemberSupport
     public String disableDescribedAs(){
         return "Description of the property, shown as a tooltip" +
                 " (not yet implemented in demo)";
@@ -84,6 +87,7 @@ public class DomainObjectLayoutMenu {
     @ActionLayout(cssClassFa="fa-signature", describedAs = "Custom text for the domain object's type wherever labelled")
     public void named(){
     }
+    @MemberSupport
     public String disableNamed(){
         return "Custom text for the domain object's type wherever labelled" +
                 " (not yet implemented in demo)";
@@ -95,6 +99,7 @@ public class DomainObjectLayoutMenu {
     @ActionLayout(cssClassFa="fa-fast-forward", describedAs = "Number of domain objects per page in collections")
     public void paged(){
     }
+    @MemberSupport
     public String disablePaged(){
         return "Number of domain objects per page in collections" +
                 " (not yet implemented in demo)";
@@ -106,6 +111,7 @@ public class DomainObjectLayoutMenu {
     @ActionLayout(cssClassFa="fa-signature", describedAs = "Overrides plural form for the domain object's type, eg for irregular plurals")
     public void plural(){
     }
+    @MemberSupport
     public String disablePlural(){
         return "Overrides plural form for the domain object's type, eg for irregular plurals" +
                 " (not yet implemented in demo)";
@@ -117,6 +123,7 @@ public class DomainObjectLayoutMenu {
     @ActionLayout(cssClassFa="fa-desktop", describedAs = "Class of the UI events emitted to allow subscribers to specify title, icon etc")
     public void xxxUiEvent(){
     }
+    @MemberSupport
     public String disableXxxUiEvent(){
         return "Class of the UI events emitted to allow subscribers to specify title, icon etc" +
                 " (not yet implemented in demo)";
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/EmbeddedTypeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/EmbeddedTypeVm.java
index a821e823..5586d34 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/EmbeddedTypeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/EmbeddedTypeVm.java
@@ -25,6 +25,7 @@ import javax.inject.Inject;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -38,6 +39,7 @@ public class EmbeddedTypeVm implements HasAsciiDocDescription {
 // end::class[]
     @Inject private ValueHolderRepository<ComplexNumber, ? extends NumberConstantEntity> numberConstantRepo;
 
+    @Title
     public String title() {
         return "Embedded Types";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/ComplexNumberJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/ComplexNumberJdo.java
index 6cd2163..6663f48 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/ComplexNumberJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/ComplexNumberJdo.java
@@ -22,12 +22,14 @@ import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Value;
 
-import demoapp.dom.domain.objects.other.embedded.ComplexNumber;
 import lombok.AccessLevel;
 import lombok.val;
 
+import demoapp.dom.domain.objects.other.embedded.ComplexNumber;
+
 // tag::class[]
 @javax.jdo.annotations.PersistenceCapable                               // <.>
 @javax.jdo.annotations.EmbeddedOnly                                     // <.>
@@ -47,6 +49,7 @@ public class ComplexNumberJdo
 // end::class[]
 
 // tag::title[]
+    @Title
     public String title() {
         return im >= 0
                 ? "" + re + " + " +  im + "i"
@@ -66,13 +69,13 @@ public class ComplexNumberJdo
                 : Optional.empty();
     }
 
-    private static double realFrom(Matcher m) {
+    private static double realFrom(final Matcher m) {
         return Double.parseDouble(m.group("re"));
     }
-    private static double signFrom(Matcher m) {
+    private static double signFrom(final Matcher m) {
         return m.group("sign").equals("-") ? -1.0d : +1.0d;
     }
-    private static double imaginaryFrom(Matcher m) {
+    private static double imaginaryFrom(final Matcher m) {
         return Double.parseDouble(m.group("im"));
     }
 // end::parse[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/NumberConstantJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/NumberConstantJdo.java
index a547b8e..5a9e219 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/NumberConstantJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/NumberConstantJdo.java
@@ -30,12 +30,14 @@ import org.springframework.context.annotation.Profile;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom.domain.objects.other.embedded.ComplexNumber;
-import demoapp.dom.domain.objects.other.embedded.persistence.NumberConstantEntity;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom.domain.objects.other.embedded.ComplexNumber;
+import demoapp.dom.domain.objects.other.embedded.persistence.NumberConstantEntity;
+
 @Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo" )
@@ -47,6 +49,7 @@ public class NumberConstantJdo
     // ...
 
 //end::class[]
+    @Title
     public String title() {
         return getName();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/NumberConstantJdo_updateNumber.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/NumberConstantJdo_updateNumber.java
index 1cf1a5e..3268040 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/NumberConstantJdo_updateNumber.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jdo/NumberConstantJdo_updateNumber.java
@@ -22,6 +22,7 @@ import org.springframework.context.annotation.Profile;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 
 import lombok.RequiredArgsConstructor;
@@ -37,11 +38,13 @@ public class NumberConstantJdo_updateNumber {
 
     private final NumberConstantJdo numberConstantJdo;
 
-    public NumberConstantJdo act(ComplexNumberJdo complexNumberJdo) {
+    @MemberSupport
+    public NumberConstantJdo act(final ComplexNumberJdo complexNumberJdo) {
         numberConstantJdo.setNumber(complexNumberJdo);
         return numberConstantJdo;
     }
 
+    @MemberSupport
     public ComplexNumberJdo default0Act() {
         return numberConstantJdo.getNumber();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/ComplexNumberJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/ComplexNumberJpa.java
index c983268..18e4c95 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/ComplexNumberJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/ComplexNumberJpa.java
@@ -22,12 +22,14 @@ import java.util.Optional;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Value;
 
-import demoapp.dom.domain.objects.other.embedded.ComplexNumber;
 import lombok.AccessLevel;
 import lombok.val;
 
+import demoapp.dom.domain.objects.other.embedded.ComplexNumber;
+
 // tag::class[]
 //@Entity                                                                 // <.>
 @javax.persistence.Embeddable                                                             // <.>
@@ -48,6 +50,7 @@ public class ComplexNumberJpa
 // end::class[]
 
 // tag::title[]
+    @Title
     public String title() {
         return im >= 0
                 ? "" + re + " + " +  im + "i"
@@ -67,13 +70,13 @@ public class ComplexNumberJpa
                 : Optional.empty();
     }
 
-    private static double realFrom(Matcher m) {
+    private static double realFrom(final Matcher m) {
         return Double.parseDouble(m.group("re"));
     }
-    private static double signFrom(Matcher m) {
+    private static double signFrom(final Matcher m) {
         return m.group("sign").equals("-") ? -1.0d : +1.0d;
     }
-    private static double imaginaryFrom(Matcher m) {
+    private static double imaginaryFrom(final Matcher m) {
         return Double.parseDouble(m.group("im"));
     }
 // end::parse[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/NumberConstantJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/NumberConstantJpa.java
index 1e33f49..a396a87 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/NumberConstantJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/NumberConstantJpa.java
@@ -29,6 +29,7 @@ import org.springframework.context.annotation.Profile;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
 
 import lombok.Getter;
@@ -54,6 +55,7 @@ public class NumberConstantJpa
     // ...
 
 //end::class[]
+    @Title
     public String title() {
         return getName();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/NumberConstantJpa_updateNumber.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/NumberConstantJpa_updateNumber.java
index 1299ad4..4798f32 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/NumberConstantJpa_updateNumber.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/jpa/NumberConstantJpa_updateNumber.java
@@ -22,6 +22,7 @@ import org.springframework.context.annotation.Profile;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 
 import lombok.RequiredArgsConstructor;
@@ -37,11 +38,13 @@ public class NumberConstantJpa_updateNumber {
 
     private final NumberConstantJpa numberConstantJdo;
 
-    public NumberConstantJpa act(ComplexNumberJpa complexNumberJdo) {
+    @MemberSupport
+    public NumberConstantJpa act(final ComplexNumberJpa complexNumberJdo) {
         numberConstantJdo.setNumber(complexNumberJdo);
         return numberConstantJdo;
     }
 
+    @MemberSupport
     public ComplexNumberJpa default0Act() {
         return numberConstantJdo.getNumber();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/CountHolder_updateCount.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/CountHolder_updateCount.java
index 991a529..e9e3ba8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/CountHolder_updateCount.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/CountHolder_updateCount.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.objects.other.mixins;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 
 import lombok.RequiredArgsConstructor;
 
@@ -33,15 +34,18 @@ public class CountHolder_updateCount {
 
     private final CountHolder holder;   // <.>
 
-    public CountHolder act(int count) {
+    @MemberSupport
+    public CountHolder act(final int count) {
         holder.setCount(count);
         return holder;
     }
 
+    @MemberSupport
     public int default0Act() {
         return holder.getCount();
     }
 
+    @MemberSupport
     public String validate0Act(final int proposedCount) {
         return proposedCount >= 0 && proposedCount <= 46
                 ? null
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/FibonacciNumberVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/FibonacciNumberVm.java
index 7ec775d..08def91 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/FibonacciNumberVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/FibonacciNumberVm.java
@@ -22,6 +22,7 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 
 import lombok.AllArgsConstructor;
@@ -39,6 +40,7 @@ import lombok.Setter;
 @AllArgsConstructor(staticName = "of")
 public class FibonacciNumberVm {
 
+    @Title
     public String title() {
         return String.format("%d ! = %d", getNumber(), getFibonacci());
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/MixinVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/MixinVm.java
index ab74d27..8047e90 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/MixinVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/mixins/MixinVm.java
@@ -27,6 +27,7 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -40,6 +41,7 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.MixinVm")
 public class MixinVm implements HasAsciiDocDescription, CountHolder {
 
+    @Title
     public String title() {
         return "Mixins";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/jdo/PropertyCommandPublishingJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/jdo/PropertyCommandPublishingJdo.java
index 9a1f6b0..d9d7082 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/jdo/PropertyCommandPublishingJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/jdo/PropertyCommandPublishingJdo.java
@@ -31,6 +31,7 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Publishing;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -53,13 +54,14 @@ public class PropertyCommandPublishingJdo
     // ...
 //end::class[]
 
-    public PropertyCommandPublishingJdo(String initialValue) {
+    public PropertyCommandPublishingJdo(final String initialValue) {
         this.property = initialValue;
         this.propertyCommandPublishingDisabled = initialValue;
         this.propertyMetaAnnotated = initialValue;
         this.propertyMetaAnnotatedOverridden = initialValue;
     }
 
+    @Title
     public String title() {
         return "Property#commandPublishing (JDO)";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/jpa/PropertyCommandPublishingJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/jpa/PropertyCommandPublishingJpa.java
index 932a82d..59fd72f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/jpa/PropertyCommandPublishingJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/jpa/PropertyCommandPublishingJpa.java
@@ -31,6 +31,7 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Publishing;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
 
 import lombok.Getter;
@@ -66,6 +67,7 @@ public class PropertyCommandPublishingJpa
         this.propertyMetaAnnotatedOverridden = initialValue;
     }
 
+    @Title
     public String title() {
         return "Property#commandPublishing (JPA)";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/PropertyDomainEventVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/PropertyDomainEventVm.java
index 42da163..7ef33b5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/PropertyDomainEventVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/PropertyDomainEventVm.java
@@ -29,13 +29,15 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.events.domain.PropertyDomainEvent;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -50,10 +52,11 @@ public class PropertyDomainEventVm implements HasAsciiDocDescription {
     // ...
 //end::class[]
 
-    public PropertyDomainEventVm(String text) {
+    public PropertyDomainEventVm(final String text) {
         this.text = text;
     }
 
+    @Title
     public String title() {
         return "Property#domainEvent";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/subscribers/PropertyDomainEventVm_controlTextEditing.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/subscribers/PropertyDomainEventVm_controlTextEditing.java
index f88c00b..c979f0f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/subscribers/PropertyDomainEventVm_controlTextEditing.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/domainEvent/subscribers/PropertyDomainEventVm_controlTextEditing.java
@@ -22,13 +22,15 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Redirect;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.domain.properties.Property.domainEvent.PropertyDomainEventVm;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.domain.properties.Property.domainEvent.PropertyDomainEventVm;
+
 //tag::class[]
 @Action(
     semantics = SemanticsOf.IDEMPOTENT
@@ -44,10 +46,12 @@ public class PropertyDomainEventVm_controlTextEditing {
 
     private final PropertyDomainEventVm propertyDomainEventVm;
 
+    @MemberSupport
     public PropertyDomainEventVm act(final PropertyDomainEventControlStrategy controlStrategy) {
         eventControlService.controlStrategy = controlStrategy;
         return propertyDomainEventVm;
     }
+    @MemberSupport
     public PropertyDomainEventControlStrategy default0Act() {
         return eventControlService.controlStrategy;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/editing/PropertyEditingVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/editing/PropertyEditingVm.java
index 59f0414..d98c192 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/editing/PropertyEditingVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/editing/PropertyEditingVm.java
@@ -29,11 +29,13 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -47,6 +49,7 @@ public class PropertyEditingVm implements HasAsciiDocDescription {
     // ...
 //end::class[]
 
+    @Title
     public String title() {
         return "Property#editing";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/jdo/PropertyExecutionPublishingJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/jdo/PropertyExecutionPublishingJdo.java
index bb64f4c..244ab0e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/jdo/PropertyExecutionPublishingJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/jdo/PropertyExecutionPublishingJdo.java
@@ -32,6 +32,7 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Publishing;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -54,12 +55,13 @@ public class PropertyExecutionPublishingJdo
     // ...
 //end::class[]
 
-    public PropertyExecutionPublishingJdo(String initialValue) {
+    public PropertyExecutionPublishingJdo(final String initialValue) {
         this.property = initialValue;
         this.propertyMetaAnnotated = initialValue;
         this.propertyMetaAnnotatedOverridden = initialValue;
     }
 
+    @Title
     public String title() {
         return "Property#executionPublishing (JDO)";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/jpa/PropertyExecutionPublishingJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/jpa/PropertyExecutionPublishingJpa.java
index e3917bf..f13c3cd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/jpa/PropertyExecutionPublishingJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/jpa/PropertyExecutionPublishingJpa.java
@@ -32,6 +32,7 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Publishing;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
 
 import lombok.Getter;
@@ -66,6 +67,7 @@ public class PropertyExecutionPublishingJpa
         this.propertyMetaAnnotatedOverridden = initialValue;
     }
 
+    @Title
     public String title() {
         return "Property#executionPublishing (JDO)";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm.java
index 3912d35..ece9c08 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm.java
@@ -29,13 +29,15 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.Clob;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -47,6 +49,7 @@ import lombok.Setter;
 )
 public class PropertyFileAcceptVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Property#fileAccept";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateClobWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateClobWithParameterLayout.java
index 959148a..4de6351 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateClobWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateClobWithParameterLayout.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.fileAccept;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -40,6 +41,7 @@ public class PropertyFileAcceptVm_updateClobWithParameterLayout {
     private final PropertyFileAcceptVm propertyFileAcceptVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyFileAcceptVm act(
             @Parameter(
                 fileAccept = ".txt"                     // <.>
@@ -54,6 +56,7 @@ public class PropertyFileAcceptVm_updateClobWithParameterLayout {
         return propertyFileAcceptVm;
     }
 //end::annotation[]
+    @MemberSupport
     public Clob default0Act() {
         return propertyFileAcceptVm.getTxtPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithMetaAnnotation.java
index 735dddc..0e27eda 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.fileAccept;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -39,6 +40,7 @@ public class PropertyFileAcceptVm_updateWithMetaAnnotation {
     private final PropertyFileAcceptVm propertyFileAcceptVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyFileAcceptVm act(
             @FileAcceptPdfMetaAnnotation                            // <.>
             @Parameter()
@@ -50,6 +52,7 @@ public class PropertyFileAcceptVm_updateWithMetaAnnotation {
         return propertyFileAcceptVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public Blob default0Act() {
         return propertyFileAcceptVm.getPdfPropertyUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithMetaAnnotationOverridden.java
index 2328c07..82bab81 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithMetaAnnotationOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.fileAccept;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -39,6 +40,7 @@ public class PropertyFileAcceptVm_updateWithMetaAnnotationOverridden {
     private final PropertyFileAcceptVm propertyFileAcceptVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyFileAcceptVm act(
             @FileAcceptPdfMetaAnnotation                    // <.>
             @Parameter(
@@ -54,6 +56,7 @@ public class PropertyFileAcceptVm_updateWithMetaAnnotationOverridden {
         return propertyFileAcceptVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public Blob default0Act() {
         return propertyFileAcceptVm.getDocxPropertyUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithParameterLayout.java
index b91984b..2c9db51 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/fileAccept/PropertyFileAcceptVm_updateWithParameterLayout.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.fileAccept;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -40,6 +41,7 @@ public class PropertyFileAcceptVm_updateWithParameterLayout {
     private final PropertyFileAcceptVm propertyFileAcceptVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyFileAcceptVm act(
             @Parameter(
                 fileAccept = ".pdf"                     // <.>
@@ -54,6 +56,7 @@ public class PropertyFileAcceptVm_updateWithParameterLayout {
         return propertyFileAcceptVm;
     }
 //end::annotation[]
+    @MemberSupport
     public Blob default0Act() {
         return propertyFileAcceptVm.getPdfPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenVm.java
index 5fa467d..d5e39de 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenVm.java
@@ -34,14 +34,16 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain.properties.Property.hidden.child.PropertyHiddenChildVm;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.domain.properties.Property.hidden.child.PropertyHiddenChildVm;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -54,6 +56,7 @@ import lombok.Setter;
 @NoArgsConstructor
 public class PropertyHiddenVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Property#hidden";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenVm_returnsChildren.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenVm_returnsChildren.java
index c73fb15..df95265 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenVm_returnsChildren.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenVm_returnsChildren.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.Property.hidden;
 import java.util.List;
 
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -36,12 +37,10 @@ public class PropertyHiddenVm_returnsChildren {
     private final PropertyHiddenVm propertyHiddenVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public List<PropertyHiddenChildVm> act() {
         return propertyHiddenVm.getChildren();
     }
 //end::meta-annotation[]
-    public String default0Act() {
-        return propertyHiddenVm.getPropertyUsingMetaAnnotation();
-    }
 
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/child/PropertyHiddenChildVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/child/PropertyHiddenChildVm.java
index 8489881..d9c7fa1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/child/PropertyHiddenChildVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/child/PropertyHiddenChildVm.java
@@ -29,14 +29,16 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain.properties.Property.hidden.PropertyHiddenVm;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.domain.properties.Property.hidden.PropertyHiddenVm;
+
 //tag::class[]
 @XmlRootElement(name = "child")
 @XmlType
@@ -48,7 +50,7 @@ import lombok.Setter;
 @NoArgsConstructor
 public class PropertyHiddenChildVm implements HasAsciiDocDescription {
 
-    public PropertyHiddenChildVm(String value, PropertyHiddenVm parent) {
+    public PropertyHiddenChildVm(final String value, final PropertyHiddenVm parent) {
         setPropertyHiddenNowhere(value);
         setPropertyHiddenEverywhere(value);
         setPropertyHiddenAnywhere(value);
@@ -63,6 +65,7 @@ public class PropertyHiddenChildVm implements HasAsciiDocDescription {
         setPropertyHiddenReferencesParent(parent);
     }
 
+    @Title
     public String title() {
         return "Property#hidden (child object)";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm.java
index 8d19eed..9c53ca6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm.java
@@ -29,11 +29,13 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -45,6 +47,7 @@ import lombok.Setter;
 )
 public class PropertyMaxLengthVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Property#maxLength";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithMetaAnnotation.java
index 88c90a2..76a7ed7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.maxLength;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -38,6 +39,7 @@ public class PropertyMaxLengthVm_updateWithMetaAnnotation {
     private final PropertyMaxLengthVm propertyMaxLengthVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyMaxLengthVm act(
             @MaxLength10MetaAnnotation                            // <.>
             @Parameter()
@@ -49,6 +51,7 @@ public class PropertyMaxLengthVm_updateWithMetaAnnotation {
         return propertyMaxLengthVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyMaxLengthVm.getPropertyUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithMetaAnnotationOverridden.java
index b33d2e2..c4c6034 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithMetaAnnotationOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.maxLength;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -38,6 +39,7 @@ public class PropertyMaxLengthVm_updateWithMetaAnnotationOverridden {
     private final PropertyMaxLengthVm propertyMaxLengthVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyMaxLengthVm act(
             @MaxLength10MetaAnnotation                          // <.>
             @Parameter(
@@ -53,6 +55,7 @@ public class PropertyMaxLengthVm_updateWithMetaAnnotationOverridden {
         return propertyMaxLengthVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public String default0Act() {
         return propertyMaxLengthVm.getPropertyUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithParameterLayout.java
index 4ec2d8e..27411ef 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/maxLength/PropertyMaxLengthVm_updateWithParameterLayout.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.maxLength;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -38,6 +39,7 @@ public class PropertyMaxLengthVm_updateWithParameterLayout {
     private final PropertyMaxLengthVm propertyMaxLengthVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyMaxLengthVm act(
             @Parameter(
                 maxLength = 10                                 // <.>
@@ -51,6 +53,7 @@ public class PropertyMaxLengthVm_updateWithParameterLayout {
         return propertyMaxLengthVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyMaxLengthVm.getPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm.java
index 2770c75..8da0f48 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm.java
@@ -29,11 +29,13 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -45,6 +47,7 @@ import lombok.Setter;
 )
 public class PropertyMustSatisfyVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Property#mustSatisfy";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithMetaAnnotation.java
index fe9110a..ec168c6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.mustSatisfy;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyMustSatisfyVm_updateWithMetaAnnotation {
     private final PropertyMustSatisfyVm propertyMustSatisfyVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyMustSatisfyVm act(
             @MustSatisfyOfWorkingAgeMetaAnnotation                            // <.>
             @Parameter(optionality = Optionality.OPTIONAL)
@@ -50,6 +52,7 @@ public class PropertyMustSatisfyVm_updateWithMetaAnnotation {
         return propertyMustSatisfyVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public Integer default0Act() {
         return propertyMustSatisfyVm.getCustomerAgePropertyUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithMetaAnnotationOverridden.java
index 168dc45..733654e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithMetaAnnotationOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.mustSatisfy;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -38,6 +39,7 @@ public class PropertyMustSatisfyVm_updateWithMetaAnnotationOverridden {
     private final PropertyMustSatisfyVm propertyMustSatisfyVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyMustSatisfyVm act(
             @MustSatisfyOfWorkingAgeMetaAnnotation                  // <.>
             @Parameter(
@@ -53,6 +55,7 @@ public class PropertyMustSatisfyVm_updateWithMetaAnnotationOverridden {
         return propertyMustSatisfyVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public Integer default0Act() {
         return propertyMustSatisfyVm.getCustomerAgePropertyUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithParameterLayout.java
index 0bedad4..85049ae 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/mustSatisfy/PropertyMustSatisfyVm_updateWithParameterLayout.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.mustSatisfy;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -38,6 +39,7 @@ public class PropertyMustSatisfyVm_updateWithParameterLayout {
     private final PropertyMustSatisfyVm propertyMustSatisfyVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyMustSatisfyVm act(
             @Parameter(
                 mustSatisfy = OfWorkingAgeSpecification.class   // <.>
@@ -51,6 +53,7 @@ public class PropertyMustSatisfyVm_updateWithParameterLayout {
         return propertyMustSatisfyVm;
     }
 //end::annotation[]
+    @MemberSupport
     public Integer default0Act() {
         return propertyMustSatisfyVm.getCustomerAgePropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm.java
index 9ef0a57..4064f94 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm.java
@@ -30,11 +30,13 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -48,6 +50,7 @@ public class PropertyOptionalityVm implements HasAsciiDocDescription {
     // ...
 //end::class[]
 
+    @Title
     public String title() {
         return "Property#optionality";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateMandatoryWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateMandatoryWithParameterLayout.java
index f70af4c..9a80f25 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateMandatoryWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateMandatoryWithParameterLayout.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.optionality;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyOptionalityVm_updateMandatoryWithParameterLayout {
     private final PropertyOptionalityVm propertyOptionalityVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyOptionalityVm act(
             @Parameter(
                 optionality = Optionality.MANDATORY             // <.>
@@ -52,6 +54,7 @@ public class PropertyOptionalityVm_updateMandatoryWithParameterLayout {
         return propertyOptionalityVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyOptionalityVm.getMandatoryPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithMetaAnnotation.java
index 73e8e31..a41b961 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.optionality;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyOptionalityVm_updateWithMetaAnnotation {
     private final PropertyOptionalityVm propertyOptionalityVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyOptionalityVm act(
             @OptionalityOptionalMetaAnnotation                            // <.>
             @Parameter(optionality = Optionality.OPTIONAL)
@@ -50,6 +52,7 @@ public class PropertyOptionalityVm_updateWithMetaAnnotation {
         return propertyOptionalityVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyOptionalityVm.getPropertyUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithMetaAnnotationOverridden.java
index 471019d..e77990d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithMetaAnnotationOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.optionality;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyOptionalityVm_updateWithMetaAnnotationOverridden {
     private final PropertyOptionalityVm propertyOptionalityVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyOptionalityVm act(
             @OptionalityOptionalMetaAnnotation                  // <.>
             @Parameter(
@@ -54,6 +56,7 @@ public class PropertyOptionalityVm_updateWithMetaAnnotationOverridden {
         return propertyOptionalityVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public String default0Act() {
         return propertyOptionalityVm.getPropertyUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithParameterLayout.java
index 86bf6c2..f1c50ad 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/optionality/PropertyOptionalityVm_updateWithParameterLayout.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.optionality;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyOptionalityVm_updateWithParameterLayout {
     private final PropertyOptionalityVm propertyOptionalityVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyOptionalityVm act(
             @Parameter(
                 optionality = Optionality.OPTIONAL
@@ -52,6 +54,7 @@ public class PropertyOptionalityVm_updateWithParameterLayout {
         return propertyOptionalityVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyOptionalityVm.getPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/PropertyProjectingVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/PropertyProjectingVm.java
index 73f66e5..0cfcdb8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/PropertyProjectingVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/PropertyProjectingVm.java
@@ -33,13 +33,15 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain.properties.Property.projecting.child.PropertyProjectingChildVm;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.domain.properties.Property.projecting.child.PropertyProjectingChildVm;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -52,6 +54,7 @@ import lombok.Setter;
 @NoArgsConstructor
 public class PropertyProjectingVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Property#projecting";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm.java
index 38559d8..677d40d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm.java
@@ -31,11 +31,13 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -47,6 +49,7 @@ import lombok.Setter;
 )
 public class PropertyRegexPatternVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Property#regexPattern";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithMetaAnnotation.java
index 85330b3..6c56df2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.regexPattern;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyRegexPatternVm_updateWithMetaAnnotation {
     private final PropertyRegexPatternVm propertyRegexPatternVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyRegexPatternVm act(
             @RegexPatternEmailComMetaAnnotation                            // <.>
             @Parameter(optionality = Optionality.OPTIONAL)
@@ -50,6 +52,7 @@ public class PropertyRegexPatternVm_updateWithMetaAnnotation {
         return propertyRegexPatternVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyRegexPatternVm.getEmailAddressPropertyUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithMetaAnnotationOverridden.java
index bef85b6..99a0530 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithMetaAnnotationOverridden.java
@@ -22,6 +22,7 @@ import java.util.regex.Pattern;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -40,6 +41,7 @@ public class PropertyRegexPatternVm_updateWithMetaAnnotationOverridden {
     private final PropertyRegexPatternVm propertyRegexPatternVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyRegexPatternVm act(
             @RegexPatternEmailComMetaAnnotation                             // <.>
             @Parameter(
@@ -57,6 +59,7 @@ public class PropertyRegexPatternVm_updateWithMetaAnnotationOverridden {
         return propertyRegexPatternVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public String default0Act() {
         return propertyRegexPatternVm.getEmailAddressPropertyUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithParameterLayout.java
index b50eed3..a6422ce 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/regexPattern/PropertyRegexPatternVm_updateWithParameterLayout.java
@@ -22,6 +22,7 @@ import java.util.regex.Pattern;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -40,6 +41,7 @@ public class PropertyRegexPatternVm_updateWithParameterLayout {
     private final PropertyRegexPatternVm propertyRegexPatternVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyRegexPatternVm act(
             @Parameter(
                 regexPattern = "^\\w+@\\w+[.]com$"                  // <.>
@@ -55,6 +57,7 @@ public class PropertyRegexPatternVm_updateWithParameterLayout {
         return propertyRegexPatternVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyRegexPatternVm.getEmailAddressPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotVm.java
index ec00e57..310b7e9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotVm.java
@@ -30,12 +30,14 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Snapshot;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -47,7 +49,7 @@ import lombok.Setter;
 @NoArgsConstructor
 public class PropertySnapshotVm implements HasAsciiDocDescription {
 
-    public PropertySnapshotVm(String text) {
+    public PropertySnapshotVm(final String text) {
         this.text = text;
         this.excludedProperty = text;
         this.includedProperty = text;
@@ -56,6 +58,7 @@ public class PropertySnapshotVm implements HasAsciiDocDescription {
         this.metaAnnotatedPropertyOverridden = text;
     }
 
+    @Title
     public String title() {
         return "PropertySnapshotVm";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotVm_takeXmlSnapshot.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotVm_takeXmlSnapshot.java
index 7bb0673..4916710 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotVm_takeXmlSnapshot.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/snapshot/PropertySnapshotVm_takeXmlSnapshot.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.Property.snapshot;
 import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.xml.XmlService;
 import org.apache.isis.applib.services.xmlsnapshot.XmlSnapshotService;
@@ -41,6 +42,7 @@ public class PropertySnapshotVm_takeXmlSnapshot {
 
     private final PropertySnapshotVm vm;
 //tag::class[]
+    @MemberSupport
     public Clob act(final String fileName) {
         val builder = xmlSnapshotService.builderFor(vm);
         val snapshot = builder.build();
@@ -49,6 +51,7 @@ public class PropertySnapshotVm_takeXmlSnapshot {
     }
     // ...
 //end::class[]
+    @MemberSupport
     public String default0Act() {
         return "snapshot.xml";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm.java
index de5328c..2bdfd02 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm.java
@@ -30,11 +30,13 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -46,6 +48,7 @@ import lombok.Setter;
 )
 public class PropertyLayoutCssClassVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "PropertyLayout#cssClass";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithMetaAnnotation.java
index ce56a69..10f9265 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.cssClass;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutCssClassVm_updateWithMetaAnnotation {
     private final PropertyLayoutCssClassVm propertyLayoutCssClassVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyLayoutCssClassVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @CssClassRedMetaAnnotation                            // <.>
@@ -50,6 +52,7 @@ public class PropertyLayoutCssClassVm_updateWithMetaAnnotation {
         return propertyLayoutCssClassVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutCssClassVm.getPropertyUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithMetaAnnotationOverridden.java
index 0f3da02..200b915 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithMetaAnnotationOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.cssClass;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutCssClassVm_updateWithMetaAnnotationOverridden {
     private final PropertyLayoutCssClassVm propertyLayoutCssClassVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyLayoutCssClassVm act(
             @CssClassRedMetaAnnotation                             // <.>
             @Parameter(optionality = Optionality.OPTIONAL)
@@ -53,6 +55,7 @@ public class PropertyLayoutCssClassVm_updateWithMetaAnnotationOverridden {
         return propertyLayoutCssClassVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutCssClassVm.getPropertyUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithParameterLayout.java
index dbdc2fa..95f5241 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/cssClass/PropertyLayoutCssClassVm_updateWithParameterLayout.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.cssClass;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutCssClassVm_updateWithParameterLayout {
     private final PropertyLayoutCssClassVm propertyLayoutCssClassVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutCssClassVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -51,6 +53,7 @@ public class PropertyLayoutCssClassVm_updateWithParameterLayout {
         return propertyLayoutCssClassVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutCssClassVm.getPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm.java
index 47a5db2..bfa64e7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm.java
@@ -30,11 +30,13 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -46,6 +48,7 @@ import lombok.Setter;
 )
 public class PropertyLayoutDescribedAsVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "PropertyLayout#describedAs";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithMetaAnnotation.java
index f4bc6af..98d850e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.describedAs;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutDescribedAsVm_updateWithMetaAnnotation {
     private final PropertyLayoutDescribedAsVm propertyLayoutDescribedAsVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyLayoutDescribedAsVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @DescribedAsMetaAnnotation                            // <.>
@@ -50,6 +52,7 @@ public class PropertyLayoutDescribedAsVm_updateWithMetaAnnotation {
         return propertyLayoutDescribedAsVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutDescribedAsVm.getPropertyUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithMetaAnnotationOverridden.java
index 6061c35..ad77462 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithMetaAnnotationOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.describedAs;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutDescribedAsVm_updateWithMetaAnnotationOverridden {
     private final PropertyLayoutDescribedAsVm propertyLayoutDescribedAsVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyLayoutDescribedAsVm act(
             @DescribedAsMetaAnnotation                                      // <.>
             @Parameter(optionality = Optionality.OPTIONAL)
@@ -51,6 +53,7 @@ public class PropertyLayoutDescribedAsVm_updateWithMetaAnnotationOverridden {
         return propertyLayoutDescribedAsVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutDescribedAsVm.getPropertyUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithParameterLayout.java
index 34ce644..d3c4486 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/describedAs/PropertyLayoutDescribedAsVm_updateWithParameterLayout.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.describedAs;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutDescribedAsVm_updateWithParameterLayout {
     private final PropertyLayoutDescribedAsVm propertyLayoutDescribedAsVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutDescribedAsVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -50,6 +52,7 @@ public class PropertyLayoutDescribedAsVm_updateWithParameterLayout {
         return propertyLayoutDescribedAsVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutDescribedAsVm.getPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenVm.java
index 264b204..d83643f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenVm.java
@@ -35,14 +35,16 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain.properties.PropertyLayout.hidden.child.PropertyLayoutHiddenChildVm;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.domain.properties.PropertyLayout.hidden.child.PropertyLayoutHiddenChildVm;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -55,6 +57,7 @@ import lombok.Setter;
 @NoArgsConstructor
 public class PropertyLayoutHiddenVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "PropertyLayout#hidden";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenVm_returnsChildren.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenVm_returnsChildren.java
index e843694..6e35747 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenVm_returnsChildren.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenVm_returnsChildren.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.PropertyLayout.hidden;
 import java.util.List;
 
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -36,12 +37,10 @@ public class PropertyLayoutHiddenVm_returnsChildren {
     private final PropertyLayoutHiddenVm propertyLayoutHiddenVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public List<PropertyLayoutHiddenChildVm> act() {
         return propertyLayoutHiddenVm.getChildren();
     }
 //end::meta-annotation[]
-    public String default0Act() {
-        return propertyLayoutHiddenVm.getPropertyUsingMetaAnnotation();
-    }
 
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/child/PropertyLayoutHiddenChildVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/child/PropertyLayoutHiddenChildVm.java
index 05547e5..6ec3b6c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/child/PropertyLayoutHiddenChildVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/child/PropertyLayoutHiddenChildVm.java
@@ -30,14 +30,16 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.domain.properties.PropertyLayout.hidden.PropertyLayoutHiddenVm;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.domain.properties.PropertyLayout.hidden.PropertyLayoutHiddenVm;
+
 //tag::class[]
 @XmlRootElement(name = "child")
 @XmlType
@@ -49,7 +51,7 @@ import lombok.Setter;
 @NoArgsConstructor
 public class PropertyLayoutHiddenChildVm implements HasAsciiDocDescription {
 
-    public PropertyLayoutHiddenChildVm(String value, PropertyLayoutHiddenVm parent) {
+    public PropertyLayoutHiddenChildVm(final String value, final PropertyLayoutHiddenVm parent) {
         setPropertyHiddenNowhere(value);
         setPropertyHiddenEverywhere(value);
         setPropertyHiddenAnywhere(value);
@@ -64,6 +66,7 @@ public class PropertyLayoutHiddenChildVm implements HasAsciiDocDescription {
         setPropertyHiddenReferencesParent(parent);
     }
 
+    @Title
     public String title() {
         return "PropertyLayout#hidden (child object)";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm.java
index 70c1188..15aaed9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm.java
@@ -31,11 +31,13 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -47,6 +49,7 @@ import lombok.Setter;
 )
 public class PropertyLayoutLabelPositionVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "PropertyLayout#labelPosition";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantLeft.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantLeft.java
index d4e740a..7c7d1b4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantLeft.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantLeft.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.PropertyLayout.labelPosition;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -40,6 +41,7 @@ public class PropertyLayoutLabelPositionVm_updateVariantLeft {
     private final PropertyLayoutLabelPositionVm propertyLayoutLabelPositionVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutLabelPositionVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -52,6 +54,7 @@ public class PropertyLayoutLabelPositionVm_updateVariantLeft {
         return propertyLayoutLabelPositionVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutLabelPositionVm.getPropertyLabelPositionLeft();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantNone.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantNone.java
index cf0afc4..e8f6b1a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantNone.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantNone.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.PropertyLayout.labelPosition;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -40,6 +41,7 @@ public class PropertyLayoutLabelPositionVm_updateVariantNone {
     private final PropertyLayoutLabelPositionVm propertyLayoutLabelPositionVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutLabelPositionVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -52,6 +54,7 @@ public class PropertyLayoutLabelPositionVm_updateVariantNone {
         return propertyLayoutLabelPositionVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutLabelPositionVm.getPropertyLabelPositionNone();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantNotSpecified.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantNotSpecified.java
index 3c51e14..e8908b1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantNotSpecified.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantNotSpecified.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.PropertyLayout.labelPosition;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -40,6 +41,7 @@ public class PropertyLayoutLabelPositionVm_updateVariantNotSpecified {
     private final PropertyLayoutLabelPositionVm propertyLayoutLabelPositionVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutLabelPositionVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -52,6 +54,7 @@ public class PropertyLayoutLabelPositionVm_updateVariantNotSpecified {
         return propertyLayoutLabelPositionVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutLabelPositionVm.getPropertyLabelPositionNotSpecified();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantRight.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantRight.java
index b6048b2..30f69dc 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantRight.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantRight.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.PropertyLayout.labelPosition;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -40,6 +41,7 @@ public class PropertyLayoutLabelPositionVm_updateVariantRight {
     private final PropertyLayoutLabelPositionVm propertyLayoutLabelPositionVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutLabelPositionVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -52,6 +54,7 @@ public class PropertyLayoutLabelPositionVm_updateVariantRight {
         return propertyLayoutLabelPositionVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutLabelPositionVm.getPropertyLabelPositionRight();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantTop.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantTop.java
index 35ecdac..2054196 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantTop.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateVariantTop.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.PropertyLayout.labelPosition;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -40,6 +41,7 @@ public class PropertyLayoutLabelPositionVm_updateVariantTop {
     private final PropertyLayoutLabelPositionVm propertyLayoutLabelPositionVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutLabelPositionVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -52,6 +54,7 @@ public class PropertyLayoutLabelPositionVm_updateVariantTop {
         return propertyLayoutLabelPositionVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutLabelPositionVm.getPropertyLabelPositionTop();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithMetaAnnotation.java
index 35873aa..229fb1e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.labelPosition;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutLabelPositionVm_updateWithMetaAnnotation {
     private final PropertyLayoutLabelPositionVm propertyLayoutLabelPositionVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyLayoutLabelPositionVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @LabelPositionTopMetaAnnotation                            // <.>
@@ -50,6 +52,7 @@ public class PropertyLayoutLabelPositionVm_updateWithMetaAnnotation {
         return propertyLayoutLabelPositionVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutLabelPositionVm.getPropertyUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithMetaAnnotationOverridden.java
index 130a8a2..60af78c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithMetaAnnotationOverridden.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.PropertyLayout.labelPosition;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -40,6 +41,7 @@ public class PropertyLayoutLabelPositionVm_updateWithMetaAnnotationOverridden {
     private final PropertyLayoutLabelPositionVm propertyLayoutLabelPositionVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyLayoutLabelPositionVm act(
             @LabelPositionTopMetaAnnotation                             // <.>
             @Parameter(optionality = Optionality.OPTIONAL)
@@ -53,6 +55,7 @@ public class PropertyLayoutLabelPositionVm_updateWithMetaAnnotationOverridden {
         return propertyLayoutLabelPositionVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutLabelPositionVm.getPropertyUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithParameterLayout.java
index 3b5ab4c..c02a7ee 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/labelPosition/PropertyLayoutLabelPositionVm_updateWithParameterLayout.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.PropertyLayout.labelPosition;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -40,6 +41,7 @@ public class PropertyLayoutLabelPositionVm_updateWithParameterLayout {
     private final PropertyLayoutLabelPositionVm propertyLayoutLabelPositionVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutLabelPositionVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -52,6 +54,7 @@ public class PropertyLayoutLabelPositionVm_updateWithParameterLayout {
         return propertyLayoutLabelPositionVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutLabelPositionVm.getPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm.java
index 3597c10..a18777b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm.java
@@ -30,11 +30,13 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -46,6 +48,7 @@ import lombok.Setter;
 )
 public class PropertyLayoutMultiLineVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "PropertyLayout#multiLine";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithMetaAnnotation.java
index 07e5760..f863188 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.multiLine;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutMultiLineVm_updateWithMetaAnnotation {
     private final PropertyLayoutMultiLineVm propertyLayoutMultiLineVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyLayoutMultiLineVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @MultiLine10MetaAnnotation                            // <.>
@@ -50,6 +52,7 @@ public class PropertyLayoutMultiLineVm_updateWithMetaAnnotation {
         return propertyLayoutMultiLineVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutMultiLineVm.getPropertyUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithMetaAnnotationOverridden.java
index 8fd6d6b..2bc8634 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithMetaAnnotationOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.multiLine;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutMultiLineVm_updateWithMetaAnnotationOverridden {
     private final PropertyLayoutMultiLineVm propertyLayoutMultiLineVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyLayoutMultiLineVm act(
             @MultiLine10MetaAnnotation                            // <.>
             @Parameter(optionality = Optionality.OPTIONAL)
@@ -53,6 +55,7 @@ public class PropertyLayoutMultiLineVm_updateWithMetaAnnotationOverridden {
         return propertyLayoutMultiLineVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutMultiLineVm.getPropertyUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithParameterLayout.java
index 9d7cc0f..a028932 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/multiLine/PropertyLayoutMultiLineVm_updateWithParameterLayout.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.multiLine;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutMultiLineVm_updateWithParameterLayout {
     private final PropertyLayoutMultiLineVm propertyLayoutMultiLineVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutMultiLineVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -51,6 +53,7 @@ public class PropertyLayoutMultiLineVm_updateWithParameterLayout {
         return propertyLayoutMultiLineVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutMultiLineVm.getPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm.java
index 175ce6d..3f4f154 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm.java
@@ -30,6 +30,7 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -47,6 +48,7 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 )
 public class PropertyLayoutNamedVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "PropertyLayout#named";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithMetaAnnotation.java
index 1acd1d8..a6ca9d1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.named;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutNamedVm_updateWithMetaAnnotation {
     private final PropertyLayoutNamedVm propertyLayoutNamedVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyLayoutNamedVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @NamedMetaAnnotation                            // <.>
@@ -50,6 +52,7 @@ public class PropertyLayoutNamedVm_updateWithMetaAnnotation {
         return propertyLayoutNamedVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutNamedVm.getPropertyUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithMetaAnnotationOverridden.java
index 4b14ed9..027eaa3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithMetaAnnotationOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.named;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutNamedVm_updateWithMetaAnnotationOverridden {
     private final PropertyLayoutNamedVm propertyLayoutNamedVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyLayoutNamedVm act(
             @NamedMetaAnnotation                                        // <.>
             @Parameter(optionality = Optionality.OPTIONAL)
@@ -52,6 +54,7 @@ public class PropertyLayoutNamedVm_updateWithMetaAnnotationOverridden {
         return propertyLayoutNamedVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutNamedVm.getPropertyUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithParameterLayout.java
index 0f4b881..1bac6f7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/named/PropertyLayoutNamedVm_updateWithParameterLayout.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.named;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutNamedVm_updateWithParameterLayout {
     private final PropertyLayoutNamedVm propertyLayoutNamedVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutNamedVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -51,6 +53,7 @@ public class PropertyLayoutNamedVm_updateWithParameterLayout {
         return propertyLayoutNamedVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutNamedVm.getPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/navigable/FileNodeType.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/navigable/FileNodeType.java
index a69d884..1e62383 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/navigable/FileNodeType.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/navigable/FileNodeType.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.PropertyLayout.navigable;
 
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.util.Enums;
 
 //tag::class[]
@@ -27,6 +28,7 @@ public enum FileNodeType {
     DIRECTORY,
     FILE;
 
+    @Title
     public String title() {
         return Enums.getFriendlyNameOf(this);   // <.>
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/navigable/FileNodeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/navigable/FileNodeVm.java
index df7343d..5099089 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/navigable/FileNodeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/navigable/FileNodeVm.java
@@ -27,25 +27,28 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Navigable;
+import org.apache.isis.applib.annotation.ObjectSupport;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.graph.tree.TreeNode;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import lombok.ToString;
 import lombok.val;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 @XmlRootElement(name="FileNode")
 @DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.FileNode")
 @ToString
 @NoArgsConstructor
 public class FileNodeVm implements HasAsciiDocDescription {
 
-    public FileNodeVm(File file) {
+    public FileNodeVm(final File file) {
         this.path = file.getAbsolutePath();
         this.type = file.isDirectory()
                         ? file.getParent() == null  // ie root
@@ -55,6 +58,7 @@ public class FileNodeVm implements HasAsciiDocDescription {
     }
 
 //tag::title[]
+    @Title
     public String title() {
         if(this.path == null) {
             return "(root)";
@@ -65,6 +69,7 @@ public class FileNodeVm implements HasAsciiDocDescription {
 //end::title[]
 
 //tag::iconName[]
+    @ObjectSupport
     public String iconName() {
         return type!=null ? type.name() : "";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm.java
index 88fcee1..7dcc14f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm.java
@@ -34,13 +34,15 @@ import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.RenderDay;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.jaxb.JodaTimeJaxbAdapters;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -53,11 +55,12 @@ import lombok.Setter;
 @NoArgsConstructor
 public class PropertyLayoutRenderDayVm implements HasAsciiDocDescription {
 
-    public PropertyLayoutRenderDayVm(LocalDate localDate) {
+    public PropertyLayoutRenderDayVm(final LocalDate localDate) {
         startDate = localDate;
         endDate = startDate.plusDays(7);
     }
 
+    @Title
     public String title() {
         return "PropertyLayout#renderDay";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_downloadAsXml.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_downloadAsXml.java
index da914b6..b456a66 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_downloadAsXml.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_downloadAsXml.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.PropertyLayout.renderDay;
 import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.jaxb.JaxbService;
 import org.apache.isis.applib.value.Clob;
@@ -38,10 +39,13 @@ public class PropertyLayoutRenderDayVm_downloadAsXml {
 
     private final PropertyLayoutRenderDayVm propertyLayoutRenderDayVm;
 
+    @MemberSupport
     public Clob act(final String fileName) {
         val xml = jaxbService.toXml(propertyLayoutRenderDayVm);
         return Clob.of(fileName, NamedWithMimeType.CommonMimeType.XML, xml);
     }
+
+    @MemberSupport
     public String default0Act() {
         return "PropertyLayoutRenderVm.xml";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotation.java
index b14db1b..02f8080 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotation.java
@@ -22,6 +22,7 @@ import java.time.LocalDate;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -41,6 +42,7 @@ public class PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotation {
     private final PropertyLayoutRenderDayVm propertyLayoutRenderDayVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyLayoutRenderDayVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @RenderDayMetaAnnotationEndDateExclusive        // <.>
@@ -52,6 +54,7 @@ public class PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotation {
         return propertyLayoutRenderDayVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public LocalDate default0Act() {
         return propertyLayoutRenderDayVm.getEndDateUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotationOverridden.java
index 636a4da..ae51e84 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotationOverridden.java
@@ -22,6 +22,7 @@ import java.time.LocalDate;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -42,6 +43,7 @@ public class PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotationOverridden
     private final PropertyLayoutRenderDayVm propertyLayoutRenderDayVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyLayoutRenderDayVm act(
             @RenderDayMetaAnnotationStartDateInclusive          // <.>
             @Parameter(optionality = Optionality.OPTIONAL)
@@ -56,6 +58,7 @@ public class PropertyLayoutRenderDayVm_updateEndDateWithMetaAnnotationOverridden
         return propertyLayoutRenderDayVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public LocalDate default0Act() {
         return propertyLayoutRenderDayVm.getEndDateUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithParameterLayout.java
index 144a860..b76dcf6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/renderDay/PropertyLayoutRenderDayVm_updateEndDateWithParameterLayout.java
@@ -22,6 +22,7 @@ import java.time.LocalDate;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -42,6 +43,7 @@ public class PropertyLayoutRenderDayVm_updateEndDateWithParameterLayout {
     private final PropertyLayoutRenderDayVm propertyLayoutRenderDayVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutRenderDayVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -54,6 +56,7 @@ public class PropertyLayoutRenderDayVm_updateEndDateWithParameterLayout {
         return propertyLayoutRenderDayVm;
     }
 //end::annotation[]
+    @MemberSupport
     public LocalDate default0Act() {
         return propertyLayoutRenderDayVm.getEndDate();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/repainting/PropertyLayoutRepaintingVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/repainting/PropertyLayoutRepaintingVm.java
index a88954b..c7fa6c6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/repainting/PropertyLayoutRepaintingVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/repainting/PropertyLayoutRepaintingVm.java
@@ -31,13 +31,15 @@ import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Repainting;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.extensions.viewer.wicket.pdfjs.applib.annotations.PdfJsViewer;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -48,6 +50,7 @@ import lombok.Setter;
 )
 public class PropertyLayoutRepaintingVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "PropertyLayout#repainting";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm.java
index b6263a4..53bc8b8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm.java
@@ -30,11 +30,13 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -46,6 +48,7 @@ import lombok.Setter;
 )
 public class PropertyLayoutTypicalLengthVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "PropertyLayout#typicalLength";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithMetaAnnotation.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithMetaAnnotation.java
index a0ab77c..26a0269 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithMetaAnnotation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithMetaAnnotation.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.typicalLength;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutTypicalLengthVm_updateWithMetaAnnotation {
     private final PropertyLayoutTypicalLengthVm propertyLayoutTypicalLengthVm;
 
 //tag::meta-annotation[]
+    @MemberSupport
     public PropertyLayoutTypicalLengthVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @TypicalLengthMetaAnnotation                            // <.>
@@ -50,6 +52,7 @@ public class PropertyLayoutTypicalLengthVm_updateWithMetaAnnotation {
         return propertyLayoutTypicalLengthVm;
     }
 //end::meta-annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutTypicalLengthVm.getPropertyUsingMetaAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithMetaAnnotationOverridden.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithMetaAnnotationOverridden.java
index 574fad1..baf8989 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithMetaAnnotationOverridden.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithMetaAnnotationOverridden.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.typicalLength;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutTypicalLengthVm_updateWithMetaAnnotationOverridden {
     private final PropertyLayoutTypicalLengthVm propertyLayoutTypicalLengthVm;
 
 //tag::meta-annotation-overridden[]
+    @MemberSupport
     public PropertyLayoutTypicalLengthVm act(
             @TypicalLengthMetaAnnotation                            // <.>
             @Parameter(optionality = Optionality.OPTIONAL)
@@ -52,6 +54,7 @@ public class PropertyLayoutTypicalLengthVm_updateWithMetaAnnotationOverridden {
         return propertyLayoutTypicalLengthVm;
     }
 //end::meta-annotation-overridden[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutTypicalLengthVm.getPropertyUsingMetaAnnotationButOverridden();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithParameterLayout.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithParameterLayout.java
index 0bb27bc..e2a9f43 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithParameterLayout.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/typicalLength/PropertyLayoutTypicalLengthVm_updateWithParameterLayout.java
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.typicalLength;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
@@ -39,6 +40,7 @@ public class PropertyLayoutTypicalLengthVm_updateWithParameterLayout {
     private final PropertyLayoutTypicalLengthVm propertyLayoutTypicalLengthVm;
 
 //tag::annotation[]
+    @MemberSupport
     public PropertyLayoutTypicalLengthVm act(
             @Parameter(optionality = Optionality.OPTIONAL)
             @ParameterLayout(
@@ -51,6 +53,7 @@ public class PropertyLayoutTypicalLengthVm_updateWithParameterLayout {
         return propertyLayoutTypicalLengthVm;
     }
 //end::annotation[]
+    @MemberSupport
     public String default0Act() {
         return propertyLayoutTypicalLengthVm.getPropertyUsingAnnotation();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldMenu.java b/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldMenu.java
index 2b46c22..8a81d8c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldMenu.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldMenu.java
@@ -26,6 +26,7 @@ import javax.inject.Inject;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -53,8 +54,7 @@ public class WhereInTheWorldMenu {
     )
     public WhereInTheWorldVm whereInTheWorld(
             final String address,
-            @Zoom final int zoom
-    ){
+            @Zoom final int zoom) {
         val vm = new WhereInTheWorldVm();
 
         val latLng = geoapifyClient.geocode(address);
@@ -66,13 +66,17 @@ public class WhereInTheWorldMenu {
         return vm;
     }
 //end::action[]
-
+    @MemberSupport
     public List<String> choices0WhereInTheWorld() {
         return Arrays.asList("Malvern, UK", "Vienna, Austria", "Leeuwarden, Netherlands", "Dublin, Ireland");
     }
+
+    @MemberSupport
     public String default0WhereInTheWorld() {
         return "Malvern, UK";
     }
+
+    @MemberSupport
     public int default1WhereInTheWorld() {
         return 14;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/describedAs/DescribedAsVm.java b/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/describedAs/DescribedAsVm.java
index 5138c9c..b84db77 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/describedAs/DescribedAsVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/describedAs/DescribedAsVm.java
@@ -28,12 +28,12 @@ import javax.xml.bind.annotation.XmlType;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.LabelPosition;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
@@ -42,6 +42,7 @@ import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.value.Markup;
 
 import lombok.Getter;
@@ -56,6 +57,7 @@ import demoapp.dom.domain.actions.progmodel.assoc.DemoItem;
 @DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.Tooltip")
 public class DescribedAsVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Tooltip Demo";
     }
@@ -91,13 +93,13 @@ public class DescribedAsVm implements HasAsciiDocDescription {
             @Parameter(optionality=Optionality.MANDATORY)
             @ParameterLayout(
                     named="first",
-                    describedAs="This is a mandatory parameter with a tooltip.")
+                    describedAs="This is a mandatory parameter with a tooltip.") final
             String firstArg,
 
             @Parameter(optionality=Optionality.OPTIONAL)
             @ParameterLayout(
                     named="second",
-                    describedAs="This is an optional parameter with a tooltip.")
+                    describedAs="This is an optional parameter with a tooltip.") final
             String secondArg
 
             ){
@@ -106,7 +108,7 @@ public class DescribedAsVm implements HasAsciiDocDescription {
     }
 
     @MemberSupport
-    public String validateBiArgAction(String firstArg, String secondArg) {
+    public String validateBiArgAction(final String firstArg, final String secondArg) {
         return "always fail for demonstration";
     }
 
@@ -120,13 +122,13 @@ public class DescribedAsVm implements HasAsciiDocDescription {
             @Parameter(optionality=Optionality.MANDATORY)
             @ParameterLayout(
                     named="first",
-                    describedAs="This is a mandatory parameter with a tooltip.")
+                    describedAs="This is a mandatory parameter with a tooltip.") final
             String firstArg,
 
             @Parameter(optionality=Optionality.OPTIONAL)
             @ParameterLayout(
                     named="second",
-                    describedAs="This is an optional parameter with a tooltip.")
+                    describedAs="This is an optional parameter with a tooltip.") final
             String secondArg
 
             ){
@@ -135,7 +137,7 @@ public class DescribedAsVm implements HasAsciiDocDescription {
     }
 
     @MemberSupport
-    public String validateBiArgActionWithConfirm(String firstArg, String secondArg) {
+    public String validateBiArgActionWithConfirm(final String firstArg, final String secondArg) {
         return "always fail for demonstration";
     }
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/tabs/TabDemo.java b/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/tabs/TabDemo.java
index 05023cd..2076474 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/tabs/TabDemo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/featured/layout/tabs/TabDemo.java
@@ -26,19 +26,23 @@ import javax.xml.bind.annotation.XmlType;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
 @DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.Tab")
 public class TabDemo implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Tab Demo";
     }
@@ -60,7 +64,7 @@ public class TabDemo implements HasAsciiDocDescription {
     // -- DEMO FIELD 1
 
     @Getter @Setter private String field1 = "field 1";
-
+    @MemberSupport
     public boolean hideField1() {
         return hidden;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage.java b/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage.java
index 3466a53..8c7cd89 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/homepage/DemoHomePage.java
@@ -23,6 +23,7 @@ import javax.inject.Inject;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.HomePage;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.services.user.UserService;
 import org.apache.isis.valuetypes.asciidoc.applib.value.AsciiDoc;
 
@@ -38,6 +39,7 @@ import demoapp.dom._infra.resources.AsciiDocReaderService;
 public class DemoHomePage
         implements HasAsciiDocDescription {                     // <.>
 
+    @Title
     public String title() {                                     // <.>
         return "Hello, " + userService.currentUserNameElseNobody();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoVm.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoVm.java
index 30c8952..f867bed 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/errorreportingservice/ErrorReportingServiceDemoVm.java
@@ -28,6 +28,7 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
@@ -37,6 +38,7 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.ErrorReportingServiceDemoVm", editing=Editing.ENABLED)
 public class ErrorReportingServiceDemoVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Error Reporting Service demo";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventBusServiceDemoVm.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventBusServiceDemoVm.java
index b86f5e6..8f8e930 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventBusServiceDemoVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventBusServiceDemoVm.java
@@ -28,6 +28,7 @@ import org.apache.isis.applib.annotation.ActionLayout.Position;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.services.eventbus.EventBusService;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
@@ -38,6 +39,7 @@ public class EventBusServiceDemoVm implements HasAsciiDocDescription {
     @Inject private EventLogEntryJdoRepository repository;
     @Inject private EventBusService eventBusService;
 
+    @Title
     public String title() {
         return "Event Demo";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJdo.java
index bc18273..efafe05 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJdo.java
@@ -33,6 +33,7 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -46,12 +47,13 @@ import demoapp.dom.services.core.eventbusservice.EventBusServiceDemoVm.UiButtonE
 @DomainObject
 public class EventLogEntryJdo {
 
-    public static EventLogEntryJdo of(UiButtonEvent even) {
+    public static EventLogEntryJdo of(final UiButtonEvent even) {
         val x = new EventLogEntryJdo();
         x.setEvent("Button clicked " + LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME));
         return x;
     }
 
+    @Title
     public String title() {
         return getEvent();
     }
@@ -77,7 +79,7 @@ public class EventLogEntryJdo {
 
     @Action
     @ActionLayout(associateWith = "acknowledge")
-    public EventLogEntryJdo acknowledge(Acknowledge acknowledge) {
+    public EventLogEntryJdo acknowledge(final Acknowledge acknowledge) {
         setAcknowledge(acknowledge);
         return this;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJpa.java
index b0ddbef..44d5a08 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntryJpa.java
@@ -30,6 +30,7 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -42,12 +43,13 @@ import demoapp.dom.services.core.eventbusservice.EventBusServiceDemoVm.UiButtonE
 @DomainObject(logicalTypeName = "demo.EventLogEntryJpa")
 public class EventLogEntryJpa {
 
-    public static EventLogEntryJpa of(UiButtonEvent even) {
+    public static EventLogEntryJpa of(final UiButtonEvent even) {
         val x = new EventLogEntryJpa();
         x.setEvent("Button clicked " + LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_TIME));
         return x;
     }
 
+    @Title
     public String title() {
         return getEvent();
     }
@@ -73,7 +75,7 @@ public class EventLogEntryJpa {
 
     @Action
     @ActionLayout(associateWith = "acknowledge")
-    public EventLogEntryJpa acknowledge(Acknowledge acknowledge) {
+    public EventLogEntryJpa acknowledge(final Acknowledge acknowledge) {
         setAcknowledge(acknowledge);
         return this;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/messageservice/MessageServiceDemoVm.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/messageservice/MessageServiceDemoVm.java
index 9fe6c12..553aeaa 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/messageservice/MessageServiceDemoVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/messageservice/MessageServiceDemoVm.java
@@ -25,6 +25,7 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.ActionLayout.Position;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.services.message.MessageService;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
@@ -34,6 +35,7 @@ public class MessageServiceDemoVm implements HasAsciiDocDescription {
 
     @Inject private MessageService messageService;
 
+    @Title
     public String title() {
         return "Message Demo";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity_mixinUpdatePropertyAsync.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity_mixinUpdatePropertyAsync.java
index 61656d2..af463e8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity_mixinUpdatePropertyAsync.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity_mixinUpdatePropertyAsync.java
@@ -22,6 +22,7 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.applib.services.wrapper.control.AsyncControl;
@@ -49,12 +50,14 @@ public class WrapperFactoryEntity_mixinUpdatePropertyAsync {
     private final WrapperFactoryEntity wrapperFactoryEntity;
 
 //tag::class[]
+    @MemberSupport
     public WrapperFactoryEntity act(final String value) {
         val control = AsyncControl.returningVoid().withSkipRules();
         val wrapped = this.wrapperFactory.asyncWrap(this.wrapperFactoryEntity, control);
         wrapped.setPropertyAsync(value);
         return this.wrapperFactoryEntity;
     }
+    @MemberSupport
     public String default0Act() {
         return wrapperFactoryEntity.getPropertyAsync();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity_updatePropertyAsyncMixin.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity_updatePropertyAsyncMixin.java
index d35a36d..462aa31 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity_updatePropertyAsyncMixin.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity_updatePropertyAsyncMixin.java
@@ -20,6 +20,7 @@ package demoapp.dom.services.core.wrapperFactory;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
@@ -42,10 +43,12 @@ public class WrapperFactoryEntity_updatePropertyAsyncMixin {
     private final WrapperFactoryEntity wrapperFactoryEntity;
 
 //tag::class[]
+    @MemberSupport
     public WrapperFactoryEntity act(final String value) {
         wrapperFactoryEntity.setPropertyAsyncMixin(value);
         return wrapperFactoryEntity;
     }
+    @MemberSupport
     public String default0Act() {
         return wrapperFactoryEntity.getPropertyAsyncMixin();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
index 69fb9e8..64281b0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jdo/WrapperFactoryJdo.java
@@ -30,20 +30,23 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.applib.services.wrapper.control.AsyncControl;
 
-import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity;
-import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity_updatePropertyAsyncMixin;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.val;
 
+import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity;
+import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity_updatePropertyAsyncMixin;
+
 @Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
@@ -62,11 +65,12 @@ public class WrapperFactoryJdo
     // ...
 //end::class[]
 
-    public WrapperFactoryJdo(String initialValue) {
+    public WrapperFactoryJdo(final String initialValue) {
         this.propertyAsync = initialValue;
         this.propertyAsyncMixin = initialValue;
     }
 
+    @Title
     public String title() {
         return "WrapperFactory";
     }
@@ -98,6 +102,7 @@ public class WrapperFactoryJdo
         wrapperFactoryJdo.setPropertyAsync(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyAsync() {
         return getPropertyAsync();
     }
@@ -121,6 +126,7 @@ public class WrapperFactoryJdo
         WrapperFactoryJdo act = (WrapperFactoryJdo) mixin.act(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingAsyncWrapMixin() {
         return new WrapperFactoryEntity_updatePropertyAsyncMixin(this).default0Act();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa.java
index aab511f..73d9553 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/jpa/WrapperFactoryJpa.java
@@ -31,10 +31,12 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.applib.services.wrapper.control.AsyncControl;
@@ -76,6 +78,7 @@ public class WrapperFactoryJpa
         this.propertyAsyncMixin = initialValue;
     }
 
+    @Title
     public String title() {
         return "WrapperFactory";
     }
@@ -111,6 +114,7 @@ public class WrapperFactoryJpa
         wrapperFactoryJdo.setPropertyAsync(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyAsync() {
         return getPropertyAsync();
     }
@@ -134,6 +138,7 @@ public class WrapperFactoryJpa
         WrapperFactoryJpa act = (WrapperFactoryJpa) mixin.act(value);
         return this;
     }
+    @MemberSupport
     public String default0UpdatePropertyUsingAsyncWrapMixin() {
         return new WrapperFactoryEntity_updatePropertyAsyncMixin(this).default0Act();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm.java
index fb6ea65..4f57cba 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm.java
@@ -34,15 +34,17 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.services.core.xmlSnapshotService.child.XmlSnapshotChildVm;
-import demoapp.dom.services.core.xmlSnapshotService.peer.XmlSnapshotPeerVm;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import lombok.val;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.services.core.xmlSnapshotService.child.XmlSnapshotChildVm;
+import demoapp.dom.services.core.xmlSnapshotService.peer.XmlSnapshotPeerVm;
+
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -53,10 +55,11 @@ import lombok.val;
 @NoArgsConstructor
 public class XmlSnapshotParentVm implements HasAsciiDocDescription {
 
-    public XmlSnapshotParentVm(String text) {
+    public XmlSnapshotParentVm(final String text) {
         this.text = text;
     }
 
+    @Title
     public String title() {
         return "XmlSnapshotService parent VM";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm_takeXmlSnapshot.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm_takeXmlSnapshot.java
index ad11ac0..cd1af9a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm_takeXmlSnapshot.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/XmlSnapshotParentVm_takeXmlSnapshot.java
@@ -25,6 +25,7 @@ import java.util.List;
 import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.xml.XmlService;
 import org.apache.isis.applib.services.xmlsnapshot.XmlSnapshotService;
@@ -57,7 +58,7 @@ public class XmlSnapshotParentVm_takeXmlSnapshot {
         PEER_AND_ITS_CHILDREN("peer/children");
 
         final List<String> paths;
-        PathsToInclude(String... paths) {
+        PathsToInclude(final String... paths) {
             this.paths = Collections.unmodifiableList(Arrays.asList(paths));
         }
     }
@@ -71,6 +72,7 @@ public class XmlSnapshotParentVm_takeXmlSnapshot {
 //end::SnapshotType[]
 
 //tag::class[]
+    @MemberSupport
     public Clob act(
             final PathsToInclude pathsToInclude,
             final SnapshotType snapshotType) {
@@ -85,10 +87,11 @@ public class XmlSnapshotParentVm_takeXmlSnapshot {
         return asClob(fileName, xmlService.asString(doc));
     }
 //end::class[]
-
+    @MemberSupport
     public PathsToInclude default0Act() {
         return PathsToInclude.NONE;
     }
+    @MemberSupport
     public SnapshotType default1Act() {
         return SnapshotType.XML;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/AppTenancyVm.java b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/AppTenancyVm.java
index 0ca6005..a10504f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/AppTenancyVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/AppTenancyVm.java
@@ -30,10 +30,12 @@ import javax.xml.bind.annotation.XmlType;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -49,6 +51,7 @@ import demoapp.dom.services.extensions.secman.apptenancy.persistence.TenantedEnt
 )
 public class AppTenancyVm implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Tenancy demo";
     }
@@ -66,11 +69,12 @@ public class AppTenancyVm implements HasAsciiDocDescription {
             associateWith = "hideRegex",
             promptStyle = PromptStyle.INLINE_AS_IF_EDIT)
     public AppTenancyVm updateHideRegex(
-            @Parameter(optionality = Optionality.OPTIONAL)
+            @Parameter(optionality = Optionality.OPTIONAL) final
             String regex) {
         applicationTenancyEvaluatorForDemo.setHideRegex(regex);
         return this;
     }
+    @MemberSupport
     public String default0UpdateHideRegex() {
         return getHideRegex();
     }
@@ -85,11 +89,12 @@ public class AppTenancyVm implements HasAsciiDocDescription {
             associateWith = "disableRegex",
             promptStyle = PromptStyle.INLINE_AS_IF_EDIT)
     public AppTenancyVm updateDisableRegex(
-            @Parameter(optionality = Optionality.OPTIONAL)
+            @Parameter(optionality = Optionality.OPTIONAL) final
             String regex) {
         applicationTenancyEvaluatorForDemo.setDisableRegex(regex);
         return this;
     }
+    @MemberSupport
     public String default0UpdateDisableRegex() {
         return getDisableRegex();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/jdo/TenantedJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/jdo/TenantedJdo.java
index 9e54810..205076c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/jdo/TenantedJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/jdo/TenantedJdo.java
@@ -29,15 +29,17 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom.services.extensions.secman.apptenancy.persistence.TenantedEntity;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom.services.extensions.secman.apptenancy.persistence.TenantedEntity;
+
 @Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo" )
@@ -48,7 +50,7 @@ import lombok.Setter;
 public class TenantedJdo
         extends TenantedEntity {
 
-    public TenantedJdo(String name) {
+    public TenantedJdo(final String name) {
         this.name = name;
     }
 
@@ -64,6 +66,7 @@ public class TenantedJdo
         this.name = name;
         return this;
     }
+    @MemberSupport
     public String default0UpdateName() {
         return this.name;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/jpa/TenantedJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/jpa/TenantedJpa.java
index 71db3be..71a2e24 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/jpa/TenantedJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/jpa/TenantedJpa.java
@@ -30,6 +30,7 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -77,6 +78,7 @@ public class TenantedJpa
         this.name = name;
         return this;
     }
+    @MemberSupport
     public String default0UpdateName() {
         return this.name;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/IsisBlobs.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/IsisBlobs.java
index bbb4d3e..38f29d6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/IsisBlobs.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/IsisBlobs.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.value.Blob;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
@@ -50,15 +52,17 @@ import demoapp.dom.types.isis.blobs.vm.IsisBlobVm;
 //@Log4j2
 public class IsisBlobs implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Blob data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public IsisBlobVm openViewModel(Blob initialValue) {
+    public IsisBlobVm openViewModel(final Blob initialValue) {
         return new IsisBlobVm(initialValue);
     }
+    @MemberSupport
     public Blob default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyOptionalProperty.java
index 2c8e5b5..dddc3e6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isis.blobs.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -42,13 +43,16 @@ public class IsisBlobHolder_updateReadOnlyOptionalProperty {
 
     private final IsisBlobHolder holder;
 
+    @MemberSupport
     public IsisBlobHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Blob newValue
+            final Blob newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Blob default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyProperty.java
index 376cae8..1d0c9aa 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isis.blobs.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Blob;
@@ -40,10 +41,13 @@ public class IsisBlobHolder_updateReadOnlyProperty {
 
     private final IsisBlobHolder holder;
 
-    public IsisBlobHolder act(Blob newValue) {
+    @MemberSupport
+    public IsisBlobHolder act(final Blob newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Blob default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyPropertyWithChoices.java
index 4a64f7a..46afea7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/holder/IsisBlobHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,13 +25,15 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Blob;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -46,13 +48,18 @@ public class IsisBlobHolder_updateReadOnlyPropertyWithChoices {
 
     private final IsisBlobHolder holder;
 
-    public IsisBlobHolder act(Blob newValue) {
+    @MemberSupport
+    public IsisBlobHolder act(final Blob newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Blob default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Blob> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/vm/IsisBlobVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/vm/IsisBlobVm.java
index a8bec0b..6a4d201 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/vm/IsisBlobVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/vm/IsisBlobVm.java
@@ -30,13 +30,15 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.value.Blob;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.types.isis.blobs.holder.IsisBlobHolder2;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.isis.blobs.holder.IsisBlobHolder2;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -50,12 +52,13 @@ public class IsisBlobVm
         implements HasAsciiDocDescription, IsisBlobHolder2 {
 
 //end::class[]
-    public IsisBlobVm(Blob initialValue) {
+    public IsisBlobVm(final Blob initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
 
 //tag::class[]
+    @Title
     public String title() {
         return "Blob view model: " +getReadOnlyProperty().getName();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/IsisClobs.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/IsisClobs.java
index 3fca4dc..7a103a9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/IsisClobs.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/IsisClobs.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.value.Clob;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
@@ -50,15 +52,17 @@ import demoapp.dom.types.isis.clobs.vm.IsisClobVm;
 //@Log4j2
 public class IsisClobs implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Clob data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public IsisClobVm openViewModel(Clob initialValue) {
+    public IsisClobVm openViewModel(final Clob initialValue) {
         return new IsisClobVm(initialValue);
     }
+    @MemberSupport
     public Clob default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyOptionalProperty.java
index bd3719d..c672a4a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isis.clobs.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -42,8 +43,10 @@ public class IsisClobHolder_updateReadOnlyOptionalProperty {
 
     private final IsisClobHolder holder;
 
+    @MemberSupport
     public IsisClobHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
+ final
             Clob newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyProperty.java
index d8131d9..44dde84 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isis.clobs.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Clob;
@@ -40,10 +41,13 @@ public class IsisClobHolder_updateReadOnlyProperty {
 
     private final IsisClobHolder holder;
 
-    public IsisClobHolder act(Clob newValue) {
+    @MemberSupport
+    public IsisClobHolder act(final Clob newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Clob default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyPropertyWithChoices.java
index f0ef9dc..dbe2fb0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/holder/IsisClobHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,13 +25,15 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Clob;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -46,13 +48,18 @@ public class IsisClobHolder_updateReadOnlyPropertyWithChoices {
 
     private final IsisClobHolder holder;
 
-    public IsisClobHolder act(Clob newValue) {
+    @MemberSupport
+    public IsisClobHolder act(final Clob newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Clob default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Clob> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/IsisLocalResourcePaths.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/IsisLocalResourcePaths.java
index 8b292f1..22b7471 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/IsisLocalResourcePaths.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/IsisLocalResourcePaths.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.value.LocalResourcePath;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
@@ -50,15 +52,18 @@ import demoapp.dom.types.isis.localresourcepaths.vm.IsisLocalResourcePathVm;
 //@Log4j2
 public class IsisLocalResourcePaths implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "LocalResourcePath data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public IsisLocalResourcePathVm openViewModel(LocalResourcePath initialValue) {
+    public IsisLocalResourcePathVm openViewModel(final LocalResourcePath initialValue) {
         return new IsisLocalResourcePathVm(initialValue);
     }
+
+    @MemberSupport
     public LocalResourcePath default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyOptionalProperty.java
index 47ed463..9073576 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isis.localresourcepaths.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -43,13 +44,15 @@ public class IsisLocalResourcePathHolder_updateReadOnlyOptionalProperty {
 
     private final IsisLocalResourcePathHolder holder;
 
+    @MemberSupport
     public IsisLocalResourcePathHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            LocalResourcePath newValue
+            final LocalResourcePath newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+    @MemberSupport
     public LocalResourcePath default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyProperty.java
index 53a2252..aa3cc75 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isis.localresourcepaths.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.LocalResourcePath;
@@ -40,10 +41,13 @@ public class IsisLocalResourcePathHolder_updateReadOnlyProperty {
 
     private final IsisLocalResourcePathHolder holder;
 
-    public IsisLocalResourcePathHolder act(LocalResourcePath newValue) {
+    @MemberSupport
+    public IsisLocalResourcePathHolder act(final LocalResourcePath newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public LocalResourcePath default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyPropertyWithChoices.java
index cdc7dd2..ff97eb2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/holder/IsisLocalResourcePathHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,13 +25,15 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.LocalResourcePath;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -46,13 +48,18 @@ public class IsisLocalResourcePathHolder_updateReadOnlyPropertyWithChoices {
 
     private final IsisLocalResourcePathHolder holder;
 
-    public IsisLocalResourcePathHolder act(LocalResourcePath newValue) {
+    @MemberSupport
+    public IsisLocalResourcePathHolder act(final LocalResourcePath newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public LocalResourcePath default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<LocalResourcePath> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/IsisMarkups.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/IsisMarkups.java
index edb8d97..0518e0f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/IsisMarkups.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/IsisMarkups.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.value.Markup;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
@@ -50,6 +52,7 @@ import demoapp.dom.types.isis.markups.vm.IsisMarkupVm;
 //@Log4j2
 public class IsisMarkups implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Markup data type";
     }
@@ -59,6 +62,8 @@ public class IsisMarkups implements HasAsciiDocDescription {
     public IsisMarkupVm openViewModel(final Markup initialValue) {
         return new IsisMarkupVm(initialValue);
     }
+
+    @MemberSupport
     public Markup default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyOptionalProperty.java
index 7757b4d..e44f4b2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isis.markups.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -42,13 +43,16 @@ public class IsisMarkupHolder_updateReadOnlyOptionalProperty {
 
     private final IsisMarkupHolder holder;
 
+    @MemberSupport
     public IsisMarkupHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Markup newValue
+            final Markup newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Markup default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyProperty.java
index 60bb46c..fabb7aa 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isis.markups.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Markup;
@@ -40,10 +41,13 @@ public class IsisMarkupHolder_updateReadOnlyProperty {
 
     private final IsisMarkupHolder holder;
 
-    public IsisMarkupHolder act(Markup newValue) {
+    @MemberSupport
+    public IsisMarkupHolder act(final Markup newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Markup default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyPropertyWithChoices.java
index f78a016..4e7cbda 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/holder/IsisMarkupHolder_updateReadOnlyPropertyWithChoices.java
@@ -23,13 +23,15 @@ import java.util.stream.Collectors;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Markup;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -44,13 +46,18 @@ public class IsisMarkupHolder_updateReadOnlyPropertyWithChoices {
 
     private final IsisMarkupHolder holder;
 
-    public IsisMarkupHolder act(Markup newValue) {
+    @MemberSupport
+    public IsisMarkupHolder act(final Markup newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Markup default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Markup> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/jdo/IsisMarkupJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/jdo/IsisMarkupJdo.java
index 5925f51..3cf8e48 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/jdo/IsisMarkupJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/jdo/IsisMarkupJdo.java
@@ -32,14 +32,16 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.value.Markup;
 
-import demoapp.dom.types.isis.markups.persistence.IsisMarkupEntity;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom.types.isis.markups.persistence.IsisMarkupEntity;
+
 @Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
@@ -51,12 +53,14 @@ public class IsisMarkupJdo                                          // <.>
         extends IsisMarkupEntity {
 
 //end::class[]
-    public IsisMarkupJdo(Markup initialValue) {
+    public IsisMarkupJdo(final Markup initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
 
 //tag::class[]
+
+    @Title
     public String title() {
         return "Markup JDO entity: " +
             bookmarkService.bookmarkForElseFail(this).getIdentifier();
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/jpa/IsisMarkupJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/jpa/IsisMarkupJpa.java
index 23ad9c2..b8a09f8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/jpa/IsisMarkupJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/jpa/IsisMarkupJpa.java
@@ -37,6 +37,7 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.value.Markup;
@@ -74,6 +75,7 @@ public class IsisMarkupJpa
     @GeneratedValue
     private Long id;
 
+    @Title
     public String title() {
         return "Markup JPA entity: " +
             bookmarkService.bookmarkForElseFail(this).getIdentifier();
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/vm/IsisMarkupVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/vm/IsisMarkupVm.java
index 09b0a55..0482dbf 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/vm/IsisMarkupVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/vm/IsisMarkupVm.java
@@ -30,14 +30,16 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.value.Markup;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.types.isis.markups.holder.IsisMarkupHolder2;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.isis.markups.holder.IsisMarkupHolder2;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -51,12 +53,13 @@ public class IsisMarkupVm
         implements HasAsciiDocDescription, IsisMarkupHolder2 {
 
 //end::class[]
-    public IsisMarkupVm(Markup initialValue) {
+    public IsisMarkupVm(final Markup initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
 
 //tag::class[]
+    @Title
     public String title() {
         return "Markup view model";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/IsisPasswords.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/IsisPasswords.java
index f2848e0..54e4026 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/IsisPasswords.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/IsisPasswords.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.value.Password;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
@@ -50,15 +52,18 @@ import demoapp.dom.types.isis.passwords.vm.IsisPasswordVm;
 //@Log4j2
 public class IsisPasswords implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Password data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public IsisPasswordVm openViewModel(Password initialValue) {
+    public IsisPasswordVm openViewModel(final Password initialValue) {
         return new IsisPasswordVm(initialValue);
     }
+
+    @MemberSupport
     public Password default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyOptionalProperty.java
index 759f195..d62e2bf 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isis.passwords.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -42,13 +43,16 @@ public class IsisPasswordHolder_updateReadOnlyOptionalProperty {
 
     private final IsisPasswordHolder holder;
 
+    @MemberSupport
     public IsisPasswordHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Password newValue
+            final Password newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Password default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyProperty.java
index bd621b7..01cf568 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isis.passwords.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Password;
@@ -40,10 +41,13 @@ public class IsisPasswordHolder_updateReadOnlyProperty {
 
     private final IsisPasswordHolder holder;
 
-    public IsisPasswordHolder act(Password newValue) {
+    @MemberSupport
+    public IsisPasswordHolder act(final Password newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Password default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyPropertyWithChoices.java
index 5a33399..42e3e5b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/holder/IsisPasswordHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,13 +25,15 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.value.Password;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -47,13 +49,18 @@ public class IsisPasswordHolder_updateReadOnlyPropertyWithChoices {
 
     private final IsisPasswordHolder holder;
 
-    public IsisPasswordHolder act(Password newValue) {
+    @MemberSupport
+    public IsisPasswordHolder act(final Password newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Password default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Password> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/IsisAsciiDocs.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/IsisAsciiDocs.java
index 3831ac4..785ef2b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/IsisAsciiDocs.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/IsisAsciiDocs.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.valuetypes.asciidoc.applib.value.AsciiDoc;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
@@ -50,6 +52,7 @@ import demoapp.dom.types.isisext.asciidocs.vm.IsisAsciiDocVm;
 //@Log4j2
 public class IsisAsciiDocs implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "AsciiDoc data type";
     }
@@ -59,6 +62,8 @@ public class IsisAsciiDocs implements HasAsciiDocDescription {
     public IsisAsciiDocVm openViewModel(final AsciiDoc initialValue) {
         return new IsisAsciiDocVm(initialValue);
     }
+
+    @MemberSupport
     public AsciiDoc default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyOptionalProperty.java
index 3cf5c6e..42572f8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isisext.asciidocs.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -42,13 +43,16 @@ public class IsisAsciiDocHolder_updateReadOnlyOptionalProperty {
 
     private final IsisAsciiDocHolder holder;
 
+    @MemberSupport
     public IsisAsciiDocHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            AsciiDoc newValue
+            final AsciiDoc newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public AsciiDoc default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyProperty.java
index c65a0c4..f8702ab 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isisext.asciidocs.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.valuetypes.asciidoc.applib.value.AsciiDoc;
@@ -40,10 +41,13 @@ public class IsisAsciiDocHolder_updateReadOnlyProperty {
 
     private final IsisAsciiDocHolder holder;
 
-    public IsisAsciiDocHolder act(AsciiDoc newValue) {
+    @MemberSupport
+    public IsisAsciiDocHolder act(final AsciiDoc newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public AsciiDoc default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyPropertyWithChoices.java
index 70aa579..f25d6f9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/holder/IsisAsciiDocHolder_updateReadOnlyPropertyWithChoices.java
@@ -23,13 +23,15 @@ import java.util.stream.Collectors;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.valuetypes.asciidoc.applib.value.AsciiDoc;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -44,13 +46,18 @@ public class IsisAsciiDocHolder_updateReadOnlyPropertyWithChoices {
 
     private final IsisAsciiDocHolder holder;
 
-    public IsisAsciiDocHolder act(AsciiDoc newValue) {
+    @MemberSupport
+    public IsisAsciiDocHolder act(final AsciiDoc newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public AsciiDoc default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<AsciiDoc> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/jdo/IsisAsciiDocJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/jdo/IsisAsciiDocJdo.java
index 7178d83..3179153 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/jdo/IsisAsciiDocJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/jdo/IsisAsciiDocJdo.java
@@ -25,20 +25,23 @@ import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
 import javax.jdo.annotations.PersistenceCapable;
 
+import org.springframework.context.annotation.Profile;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.valuetypes.asciidoc.applib.value.AsciiDoc;
-import org.springframework.context.annotation.Profile;
 
-import demoapp.dom.types.isisext.asciidocs.persistence.IsisAsciiDocEntity;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom.types.isisext.asciidocs.persistence.IsisAsciiDocEntity;
+
 @Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
@@ -50,12 +53,13 @@ public class IsisAsciiDocJdo                                          // <.>
         extends IsisAsciiDocEntity {
 
 //end::class[]
-    public IsisAsciiDocJdo(AsciiDoc initialValue) {
+    public IsisAsciiDocJdo(final AsciiDoc initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
 
 //tag::class[]
+    @Title
     public String title() {
         return "AsciiDoc JDO entity: " +
             bookmarkService.bookmarkForElseFail(this).getIdentifier();
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/jpa/IsisAsciiDocJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/jpa/IsisAsciiDocJpa.java
index c32338f..dae3dbd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/jpa/IsisAsciiDocJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/jpa/IsisAsciiDocJpa.java
@@ -37,6 +37,7 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
@@ -74,6 +75,7 @@ public class IsisAsciiDocJpa
     @GeneratedValue
     private Long id;
 
+    @Title
     public String title() {
         return "AsciiDoc JPA entity: " +
             bookmarkService.bookmarkForElseFail(this).getIdentifier();
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/vm/IsisAsciiDocVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/vm/IsisAsciiDocVm.java
index 97332aa..4a55409 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/vm/IsisAsciiDocVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/vm/IsisAsciiDocVm.java
@@ -30,14 +30,16 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.valuetypes.asciidoc.applib.value.AsciiDoc;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.types.isisext.asciidocs.holder.IsisAsciiDocHolder2;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.isisext.asciidocs.holder.IsisAsciiDocHolder2;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -51,12 +53,13 @@ public class IsisAsciiDocVm
         implements HasAsciiDocDescription, IsisAsciiDocHolder2 {
 
 //end::class[]
-    public IsisAsciiDocVm(AsciiDoc initialValue) {
+    public IsisAsciiDocVm(final AsciiDoc initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
 
 //tag::class[]
+    @Title
     public String title() {
         return "AsciiDoc view model";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/IsisMarkdowns.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/IsisMarkdowns.java
index 441a7fd..8ec2d7f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/IsisMarkdowns.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/IsisMarkdowns.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.valuetypes.markdown.applib.value.Markdown;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
@@ -50,6 +52,7 @@ import demoapp.dom.types.isisext.markdowns.vm.IsisMarkdownVm;
 //@Log4j2
 public class IsisMarkdowns implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Markdown data type";
     }
@@ -59,6 +62,8 @@ public class IsisMarkdowns implements HasAsciiDocDescription {
     public IsisMarkdownVm openViewModel(final Markdown initialValue) {
         return new IsisMarkdownVm(initialValue);
     }
+
+    @MemberSupport
     public Markdown default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyOptionalProperty.java
index 4ffa07f..ccc328e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isisext.markdowns.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -42,13 +43,16 @@ public class IsisMarkdownHolder_updateReadOnlyOptionalProperty {
 
     private final IsisMarkdownHolder holder;
 
+    @MemberSupport
     public IsisMarkdownHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Markdown newValue
+            final Markdown newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Markdown default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyProperty.java
index f0b6f8e..5c8e6d4e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.isisext.markdowns.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.valuetypes.markdown.applib.value.Markdown;
@@ -40,10 +41,13 @@ public class IsisMarkdownHolder_updateReadOnlyProperty {
 
     private final IsisMarkdownHolder holder;
 
-    public IsisMarkdownHolder act(Markdown newValue) {
+    @MemberSupport
+    public IsisMarkdownHolder act(final Markdown newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Markdown default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyPropertyWithChoices.java
index f3ef2f1..46f4614 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/holder/IsisMarkdownHolder_updateReadOnlyPropertyWithChoices.java
@@ -23,13 +23,15 @@ import java.util.stream.Collectors;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.valuetypes.markdown.applib.value.Markdown;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -44,13 +46,18 @@ public class IsisMarkdownHolder_updateReadOnlyPropertyWithChoices {
 
     private final IsisMarkdownHolder holder;
 
-    public IsisMarkdownHolder act(Markdown newValue) {
+    @MemberSupport
+    public IsisMarkdownHolder act(final Markdown newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Markdown default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Markdown> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/jdo/IsisMarkdownJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/jdo/IsisMarkdownJdo.java
index 3d58eb3..c28d9ef5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/jdo/IsisMarkdownJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/jdo/IsisMarkdownJdo.java
@@ -32,14 +32,16 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.valuetypes.markdown.applib.value.Markdown;
 
-import demoapp.dom.types.isisext.markdowns.persistence.IsisMarkdownEntity;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom.types.isisext.markdowns.persistence.IsisMarkdownEntity;
+
 @Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
@@ -51,12 +53,13 @@ public class IsisMarkdownJdo                                          // <.>
         extends IsisMarkdownEntity {
 
 //end::class[]
-    public IsisMarkdownJdo(Markdown initialValue) {
+    public IsisMarkdownJdo(final Markdown initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
 
 //tag::class[]
+    @Title
     public String title() {
         return "Markdown JDO entity: " +
             bookmarkService.bookmarkForElseFail(this).getIdentifier();
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/jpa/IsisMarkdownJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/jpa/IsisMarkdownJpa.java
index c8237b7..efaf673 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/jpa/IsisMarkdownJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/jpa/IsisMarkdownJpa.java
@@ -37,6 +37,7 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
@@ -74,6 +75,7 @@ public class IsisMarkdownJpa
     @GeneratedValue
     private Long id;
 
+    @Title
     public String title() {
         return "Markdown JPA entity: " +
             bookmarkService.bookmarkForElseFail(this).getIdentifier();
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/vm/IsisMarkdownVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/vm/IsisMarkdownVm.java
index f5e9759..8a0bafb 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/vm/IsisMarkdownVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/vm/IsisMarkdownVm.java
@@ -30,14 +30,16 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.valuetypes.markdown.applib.value.Markdown;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.types.isisext.markdowns.holder.IsisMarkdownHolder2;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.isisext.markdowns.holder.IsisMarkdownHolder2;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -51,12 +53,13 @@ public class IsisMarkdownVm
         implements HasAsciiDocDescription, IsisMarkdownHolder2 {
 
 //end::class[]
-    public IsisMarkdownVm(Markdown initialValue) {
+    public IsisMarkdownVm(final Markdown initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
 
 //tag::class[]
+    @Title
     public String title() {
         return "Markdown view model";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/sse/DemoTask.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/sse/DemoTask.java
index cc22514..6c0c8f0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/sse/DemoTask.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/sse/DemoTask.java
@@ -23,6 +23,7 @@ import java.util.concurrent.atomic.LongAdder;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.commons.internal.concurrent._ThreadSleep;
 import org.apache.isis.valuetypes.sse.applib.annotations.SseSource;
 import org.apache.isis.valuetypes.sse.applib.service.SseChannel;
@@ -33,6 +34,7 @@ import lombok.RequiredArgsConstructor;
 @RequiredArgsConstructor(staticName="of")
 public class DemoTask implements SseSource {
 
+    @Title
     public String title() {
         return String.format("DemoTask '%s'", Integer.toHexString(hashCode()));
     }
@@ -42,7 +44,7 @@ public class DemoTask implements SseSource {
 
 
     @Override
-    public void run(SseChannel eventStream) {
+    public void run(final SseChannel eventStream) {
 
         taskProgress = TaskProgress.of(new LongAdder(), totalSteps);
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/JavaAwtBufferedImages.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/JavaAwtBufferedImages.java
index 2a3b098..4072441 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/JavaAwtBufferedImages.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/JavaAwtBufferedImages.java
@@ -33,9 +33,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -50,15 +52,18 @@ import demoapp.dom.types.javaawt.images.vm.JavaAwtBufferedImageVm;
 //@Log4j2
 public class JavaAwtBufferedImages implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Image data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public JavaAwtBufferedImageVm openViewModel(BufferedImage initialValue) {
+    public JavaAwtBufferedImageVm openViewModel(final BufferedImage initialValue) {
         return new JavaAwtBufferedImageVm(initialValue);
     }
+
+    @MemberSupport
     public BufferedImage default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyOptionalProperty.java
index 568509b..b1dd35a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyOptionalProperty.java
@@ -22,6 +22,7 @@ import java.awt.image.BufferedImage;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -45,13 +46,16 @@ public class JavaAwtBufferedImageHolder_updateReadOnlyOptionalProperty {
 
     private final JavaAwtBufferedImageHolder holder;
 
+    @MemberSupport
     public JavaAwtBufferedImageHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            BufferedImage newValue
+            final BufferedImage newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public BufferedImage default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyProperty.java
index 1705312..c75cd24 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyProperty.java
@@ -22,6 +22,7 @@ import java.awt.image.BufferedImage;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
@@ -43,10 +44,13 @@ public class JavaAwtBufferedImageHolder_updateReadOnlyProperty {
 
     private final JavaAwtBufferedImageHolder holder;
 
-    public JavaAwtBufferedImageHolder act(BufferedImage newValue) {
+    @MemberSupport
+    public JavaAwtBufferedImageHolder act(final BufferedImage newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public BufferedImage default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyPropertyWithChoices.java
index df33873..d649235 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/holder/JavaAwtBufferedImageHolder_updateReadOnlyPropertyWithChoices.java
@@ -26,13 +26,15 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT,
@@ -48,13 +50,18 @@ public class JavaAwtBufferedImageHolder_updateReadOnlyPropertyWithChoices {
 
     private final JavaAwtBufferedImageHolder holder;
 
-    public JavaAwtBufferedImageHolder act(BufferedImage newValue) {
+    @MemberSupport
+    public JavaAwtBufferedImageHolder act(final BufferedImage newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public BufferedImage default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<BufferedImage> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/jdo/JavaAwtBufferedImageJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/jdo/JavaAwtBufferedImageJdo.java
index 61ab555..16e962f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/jdo/JavaAwtBufferedImageJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/jdo/JavaAwtBufferedImageJdo.java
@@ -32,11 +32,13 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom.types.javaawt.images.persistence.JavaAwtBufferedImageEntity;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom.types.javaawt.images.persistence.JavaAwtBufferedImageEntity;
+
 @Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
@@ -52,12 +54,13 @@ public class JavaAwtBufferedImageJdo
 {
 
 //end::class[]
-    public JavaAwtBufferedImageJdo(BufferedImage initialValue) {
+    public JavaAwtBufferedImageJdo(final BufferedImage initialValue) {
         this.readOnlyProperty = initialValue;
 //        this.readWriteProperty = initialValue;    // editable properties not yet supported
     }
 
     // @Title not yet supported
+    @Title
     public String title() {
         return "Image JDO entity";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/jpa/JavaAwtBufferedImageJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/jpa/JavaAwtBufferedImageJpa.java
index c8df4e6..8e65561 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/jpa/JavaAwtBufferedImageJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/jpa/JavaAwtBufferedImageJpa.java
@@ -34,6 +34,7 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
 import org.apache.isis.persistence.jpa.integration.typeconverters.JavaAwtBufferedImageByteArrayConverter;
 
@@ -69,6 +70,7 @@ public class JavaAwtBufferedImageJpa
     }
 
     // @Title not yet supported
+    @Title
     public String title() {
         return "Image JPA entity";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/vm/JavaAwtBufferedImageVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/vm/JavaAwtBufferedImageVm.java
index d8a34e6..012f7d8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/vm/JavaAwtBufferedImageVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/vm/JavaAwtBufferedImageVm.java
@@ -31,11 +31,13 @@ import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
@@ -54,12 +56,13 @@ public class JavaAwtBufferedImageVm
 {
 
 //end::class[]
-    public JavaAwtBufferedImageVm(BufferedImage initialValue) {
+    public JavaAwtBufferedImageVm(final BufferedImage initialValue) {
         this.readOnlyProperty = initialValue;
 //        this.readWriteProperty = initialValue;    // editable properties not yet supported
     }
 
     // @Title not yet supported
+    @Title
     public String title() {
         return "Image view model";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/WrapperBooleans.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/WrapperBooleans.java
index 6998221..aa10663 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/WrapperBooleans.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/WrapperBooleans.java
@@ -36,6 +36,7 @@ import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -49,15 +50,17 @@ import demoapp.dom.types.javalang.booleans.vm.WrapperBooleanVm;
 //@Log4j2
 public class WrapperBooleans implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Boolean (wrapper) data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public WrapperBooleanVm openViewModel(Boolean initialValue) {
+    public WrapperBooleanVm openViewModel(final Boolean initialValue) {
         return new WrapperBooleanVm(initialValue);
     }
+    @MemberSupport
     public Boolean default0OpenViewModel() {
         return true;
     }
@@ -79,8 +82,8 @@ public class WrapperBooleans implements HasAsciiDocDescription {
             , describedAs = "FIXME[ISIS-2387] even though primitive1 gets initialized with true, the model thinks its null"
     )
     public WrapperBooleans booleanParams(
-            boolean primitive0,
-            boolean primitive1) {
+            final boolean primitive0,
+            final boolean primitive1) {
         return this;
     }
     @MemberSupport
@@ -99,8 +102,8 @@ public class WrapperBooleans implements HasAsciiDocDescription {
                     " initialize with FALSE when null"
     )
     public WrapperBooleans booleanBoxedParams(
-            Boolean boxed0,
-            Boolean boxed1) {
+            final Boolean boxed0,
+            final Boolean boxed1) {
         return this;
     }
     @MemberSupport
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyOptionalProperty.java
index 01b81dd..039cf3e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.booleans.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,16 @@ public class WrapperBooleanHolder_updateReadOnlyOptionalProperty {
 
     private final WrapperBooleanHolder holder;
 
+    @MemberSupport
     public WrapperBooleanHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Boolean newValue
+            final Boolean newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Boolean default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyProperty.java
index 545aa60..5c50778 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.booleans.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,13 @@ public class WrapperBooleanHolder_updateReadOnlyProperty {
 
     private final WrapperBooleanHolder holder;
 
-    public WrapperBooleanHolder act(Boolean newValue) {
+    @MemberSupport
+    public WrapperBooleanHolder act(final Boolean newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Boolean default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyPropertyWithChoices.java
index 386971c..0965ba6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/holder/WrapperBooleanHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,12 +25,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -45,13 +47,18 @@ public class WrapperBooleanHolder_updateReadOnlyPropertyWithChoices {
 
     private final WrapperBooleanHolder holder;
 
-    public WrapperBooleanHolder act(Boolean newValue) {
+    @MemberSupport
+    public WrapperBooleanHolder act(final Boolean newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Boolean default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Boolean> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/WrapperBytes.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/WrapperBytes.java
index 1e07cf8..72523ca 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/WrapperBytes.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/WrapperBytes.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -48,15 +50,18 @@ import demoapp.dom.types.javalang.bytes.vm.WrapperByteVm;
 //@Log4j2
 public class WrapperBytes implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Byte (wrapper) data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public WrapperByteVm openViewModel(Byte initialValue) {
+    public WrapperByteVm openViewModel(final Byte initialValue) {
         return new WrapperByteVm(initialValue);
     }
+
+    @MemberSupport
     public Byte default0OpenViewModel() {
         return (byte)123;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyOptionalProperty.java
index 805895a..91415ba 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.bytes.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,16 @@ public class WrapperByteHolder_updateReadOnlyOptionalProperty {
 
     private final WrapperByteHolder holder;
 
+    @MemberSupport
     public WrapperByteHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Byte newValue
+            final Byte newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Byte default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyProperty.java
index 6f25a3b..62749a1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.bytes.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,13 @@ public class WrapperByteHolder_updateReadOnlyProperty {
 
     private final WrapperByteHolder holder;
 
-    public WrapperByteHolder act(Byte newValue) {
+    @MemberSupport
+    public WrapperByteHolder act(final Byte newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Byte default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyPropertyWithChoices.java
index 3783623..be2dab3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/holder/WrapperByteHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,12 +25,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -45,13 +47,18 @@ public class WrapperByteHolder_updateReadOnlyPropertyWithChoices {
 
     private final WrapperByteHolder holder;
 
-    public WrapperByteHolder act(Byte newValue) {
+    @MemberSupport
+    public WrapperByteHolder act(final Byte newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Byte default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Byte> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/WrapperCharacters.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/WrapperCharacters.java
index a959fa1..69d389f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/WrapperCharacters.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/WrapperCharacters.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -48,15 +50,17 @@ import demoapp.dom.types.javalang.characters.vm.WrapperCharacterVm;
 //@Log4j2
 public class WrapperCharacters implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Character (wrapper) data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public WrapperCharacterVm openViewModel(Character initialValue) {
+    public WrapperCharacterVm openViewModel(final Character initialValue) {
         return new WrapperCharacterVm(initialValue);
     }
+    @MemberSupport
     public Character default0OpenViewModel() {
         return 'a';
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyOptionalProperty.java
index 86520e4..c01686d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.characters.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,15 @@ public class WrapperCharacterHolder_updateReadOnlyOptionalProperty {
 
     private final WrapperCharacterHolder holder;
 
+    @MemberSupport
     public WrapperCharacterHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Character newValue
+            final Character newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+    @MemberSupport
     public Character default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyProperty.java
index 44980a4..2a63d57 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.characters.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,12 @@ public class WrapperCharacterHolder_updateReadOnlyProperty {
 
     private final WrapperCharacterHolder holder;
 
-    public WrapperCharacterHolder act(Character newValue) {
+    @MemberSupport
+    public WrapperCharacterHolder act(final Character newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+    @MemberSupport
     public Character default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyPropertyWithChoices.java
index dd363eb..dea2b54 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/holder/WrapperCharacterHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,12 +25,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -45,13 +47,16 @@ public class WrapperCharacterHolder_updateReadOnlyPropertyWithChoices {
 
     private final WrapperCharacterHolder holder;
 
-    public WrapperCharacterHolder act(Character newValue) {
+    @MemberSupport
+    public WrapperCharacterHolder act(final Character newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+    @MemberSupport
     public Character default0Act() {
         return holder.getReadOnlyProperty();
     }
+    @MemberSupport
     public List<Character> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/WrapperDoubles.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/WrapperDoubles.java
index c549a01..fc6af84 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/WrapperDoubles.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/WrapperDoubles.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -48,15 +50,17 @@ import demoapp.dom.types.javalang.doubles.vm.WrapperDoubleVm;
 //@Log4j2
 public class WrapperDoubles implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Double (wrapper) data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public WrapperDoubleVm openViewModel(Double initialValue) {
+    public WrapperDoubleVm openViewModel(final Double initialValue) {
         return new WrapperDoubleVm(initialValue);
     }
+    @MemberSupport
     public Double default0OpenViewModel() {
         return 12345678.1234;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyOptionalProperty.java
index 38deb39..abb0418 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.doubles.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,16 @@ public class WrapperDoubleHolder_updateReadOnlyOptionalProperty {
 
     private final WrapperDoubleHolder holder;
 
+    @MemberSupport
     public WrapperDoubleHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Double newValue
+            final Double newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Double default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyProperty.java
index 2995263..f35e028 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.doubles.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,13 @@ public class WrapperDoubleHolder_updateReadOnlyProperty {
 
     private final WrapperDoubleHolder holder;
 
-    public WrapperDoubleHolder act(Double newValue) {
+    @MemberSupport
+    public WrapperDoubleHolder act(final Double newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Double default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyPropertyWithChoices.java
index 9a687c4..1606c5c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/holder/WrapperDoubleHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,12 +25,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -45,13 +47,18 @@ public class WrapperDoubleHolder_updateReadOnlyPropertyWithChoices {
 
     private final WrapperDoubleHolder holder;
 
-    public WrapperDoubleHolder act(Double newValue) {
+    @MemberSupport
+    public WrapperDoubleHolder act(final Double newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Double default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Double> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/WrapperFloats.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/WrapperFloats.java
index 3bbcb25..2df3ead 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/WrapperFloats.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/WrapperFloats.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -48,15 +50,17 @@ import demoapp.dom.types.javalang.floats.vm.WrapperFloatVm;
 //@Log4j2
 public class WrapperFloats implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Float (wrapper) data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public WrapperFloatVm openViewModel(Float initialValue) {
+    public WrapperFloatVm openViewModel(final Float initialValue) {
         return new WrapperFloatVm(initialValue);
     }
+    @MemberSupport
     public Float default0OpenViewModel() {
         return 1234.1234f;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyOptionalProperty.java
index 788cd00..8767968 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.floats.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,16 @@ public class WrapperFloatHolder_updateReadOnlyOptionalProperty {
 
     private final WrapperFloatHolder holder;
 
+    @MemberSupport
     public WrapperFloatHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Float newValue
+            final Float newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Float default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyProperty.java
index 722286b..16be507 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.floats.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,13 @@ public class WrapperFloatHolder_updateReadOnlyProperty {
 
     private final WrapperFloatHolder holder;
 
-    public WrapperFloatHolder act(Float newValue) {
+    @MemberSupport
+    public WrapperFloatHolder act(final Float newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Float default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyPropertyWithChoices.java
index 7e860f3..b345c5e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/holder/WrapperFloatHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,12 +25,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -45,13 +47,18 @@ public class WrapperFloatHolder_updateReadOnlyPropertyWithChoices {
 
     private final WrapperFloatHolder holder;
 
-    public WrapperFloatHolder act(Float newValue) {
+    @MemberSupport
+    public WrapperFloatHolder act(final Float newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Float default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Float> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/WrapperIntegers.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/WrapperIntegers.java
index 894ccc9..0ccc33c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/WrapperIntegers.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/WrapperIntegers.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -48,15 +50,17 @@ import demoapp.dom.types.javalang.integers.vm.WrapperIntegerVm;
 //@Log4j2
 public class WrapperIntegers implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Integer (wrapper) data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public WrapperIntegerVm openViewModel(Integer initialValue) {
+    public WrapperIntegerVm openViewModel(final Integer initialValue) {
         return new WrapperIntegerVm(initialValue);
     }
+    @MemberSupport
     public Integer default0OpenViewModel() {
         return 12345678;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyOptionalProperty.java
index 09087ef..1961abd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.integers.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,15 @@ public class WrapperIntegerHolder_updateReadOnlyOptionalProperty {
 
     private final WrapperIntegerHolder holder;
 
+    @MemberSupport
     public WrapperIntegerHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Integer newValue
+            final Integer newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+    @MemberSupport
     public Integer default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyProperty.java
index b484384..1755876 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.integers.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,13 @@ public class WrapperIntegerHolder_updateReadOnlyProperty {
 
     private final WrapperIntegerHolder holder;
 
-    public WrapperIntegerHolder act(Integer newValue) {
+    @MemberSupport
+    public WrapperIntegerHolder act(final Integer newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Integer default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyPropertyWithChoices.java
index c586a8e..c1088de 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/holder/WrapperIntegerHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,12 +25,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -45,13 +47,18 @@ public class WrapperIntegerHolder_updateReadOnlyPropertyWithChoices {
 
     private final WrapperIntegerHolder holder;
 
-    public WrapperIntegerHolder act(Integer newValue) {
+    @MemberSupport
+    public WrapperIntegerHolder act(final Integer newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Integer default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Integer> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/WrapperLongs.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/WrapperLongs.java
index ef707f8..b3be613 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/WrapperLongs.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/WrapperLongs.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -48,15 +50,17 @@ import demoapp.dom.types.javalang.longs.vm.WrapperLongVm;
 //@Log4j2
 public class WrapperLongs implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Long (wrapper) data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public WrapperLongVm openViewModel(Long initialValue) {
+    public WrapperLongVm openViewModel(final Long initialValue) {
         return new WrapperLongVm(initialValue);
     }
+    @MemberSupport
     public Long default0OpenViewModel() {
         return 123_456_789_012L;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyOptionalProperty.java
index 5ac21b5..65a61e2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.longs.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,16 @@ public class WrapperLongHolder_updateReadOnlyOptionalProperty {
 
     private final WrapperLongHolder holder;
 
+    @MemberSupport
     public WrapperLongHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Long newValue
+            final Long newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Long default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyProperty.java
index a49f758..e2c4fbf 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.longs.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,13 @@ public class WrapperLongHolder_updateReadOnlyProperty {
 
     private final WrapperLongHolder holder;
 
-    public WrapperLongHolder act(Long newValue) {
+    @MemberSupport
+    public WrapperLongHolder act(final Long newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Long default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyPropertyWithChoices.java
index 7334bc8..c5db8e6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/holder/WrapperLongHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,12 +25,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -45,13 +47,18 @@ public class WrapperLongHolder_updateReadOnlyPropertyWithChoices {
 
     private final WrapperLongHolder holder;
 
-    public WrapperLongHolder act(Long newValue) {
+    @MemberSupport
+    public WrapperLongHolder act(final Long newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Long default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Long> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/WrapperShorts.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/WrapperShorts.java
index 9bbb690..fe2dd44 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/WrapperShorts.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/WrapperShorts.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -48,15 +50,17 @@ import demoapp.dom.types.javalang.shorts.vm.WrapperShortVm;
 //@Log4j2
 public class WrapperShorts implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Short (wrapper) data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public WrapperShortVm openViewModel(Short initialValue) {
+    public WrapperShortVm openViewModel(final Short initialValue) {
         return new WrapperShortVm(initialValue);
     }
+    @MemberSupport
     public Short default0OpenViewModel() {
         return (short)12345;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyOptionalProperty.java
index 74225b2..02500d1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.shorts.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,16 @@ public class WrapperShortHolder_updateReadOnlyOptionalProperty {
 
     private final WrapperShortHolder holder;
 
+    @MemberSupport
     public WrapperShortHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            Short newValue
+            final Short newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Short default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyProperty.java
index a849ef9..2e8a28c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.shorts.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,13 @@ public class WrapperShortHolder_updateReadOnlyProperty {
 
     private final WrapperShortHolder holder;
 
-    public WrapperShortHolder act(Short newValue) {
+    @MemberSupport
+    public WrapperShortHolder act(final Short newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Short default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyPropertyWithChoices.java
index d96432f..53ce4e1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/holder/WrapperShortHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,12 +25,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -45,13 +47,18 @@ public class WrapperShortHolder_updateReadOnlyPropertyWithChoices {
 
     private final WrapperShortHolder holder;
 
-    public WrapperShortHolder act(Short newValue) {
+    @MemberSupport
+    public WrapperShortHolder act(final Short newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public Short default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<Short> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/JavaLangStrings.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/JavaLangStrings.java
index b516e82..f891525 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/JavaLangStrings.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/JavaLangStrings.java
@@ -32,9 +32,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -49,15 +51,17 @@ import demoapp.dom.types.javalang.strings.vm.JavaLangStringVm;
 //@Log4j2
 public class JavaLangStrings implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "String data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public JavaLangStringVm openViewModel(String initialValue) {
+    public JavaLangStringVm openViewModel(final String initialValue) {
         return new JavaLangStringVm(initialValue);
     }
+    @MemberSupport
     public String default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyOptionalProperty.java
index d761869..9ea4df6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.strings.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,16 @@ public class JavaLangStringHolder_updateReadOnlyOptionalProperty {
 
     private final JavaLangStringHolder holder;
 
+    @MemberSupport
     public JavaLangStringHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            String newValue
+            final String newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public String default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyProperty.java
index 5f9d9a7..91464cc 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javalang.strings.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,13 @@ public class JavaLangStringHolder_updateReadOnlyProperty {
 
     private final JavaLangStringHolder holder;
 
-    public JavaLangStringHolder act(String newValue) {
+    @MemberSupport
+    public JavaLangStringHolder act(final String newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public String default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyPropertyWithChoices.java
index 0fd4c95..b4a2194 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/holder/JavaLangStringHolder_updateReadOnlyPropertyWithChoices.java
@@ -25,12 +25,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -45,13 +47,18 @@ public class JavaLangStringHolder_updateReadOnlyPropertyWithChoices {
 
     private final JavaLangStringHolder holder;
 
-    public JavaLangStringHolder act(String newValue) {
+    @MemberSupport
+    public JavaLangStringHolder act(final String newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public String default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<String> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/voids/JavaLangVoids.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/voids/JavaLangVoids.java
index 8cd9ffd..8773ce8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/voids/JavaLangVoids.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/voids/JavaLangVoids.java
@@ -30,8 +30,7 @@ import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
-
-import lombok.extern.log4j.Log4j2;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
@@ -39,9 +38,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
 @DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaLangVoids", editing=Editing.ENABLED)
-@Log4j2
+//@Log4j2
 public class JavaLangVoids implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "Void data type";
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/JavaMathBigDecimals.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/JavaMathBigDecimals.java
index 1939f10..d3ccfde 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/JavaMathBigDecimals.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/JavaMathBigDecimals.java
@@ -33,9 +33,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -50,15 +52,17 @@ import demoapp.dom.types.javamath.bigdecimals.vm.JavaMathBigDecimalVm;
 //@Log4j2
 public class JavaMathBigDecimals implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "java.math.BigDecimal data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public JavaMathBigDecimalVm openViewModel(java.math.BigDecimal initialValue) {
+    public JavaMathBigDecimalVm openViewModel(final java.math.BigDecimal initialValue) {
         return new JavaMathBigDecimalVm(initialValue);
     }
+    @MemberSupport
     public java.math.BigDecimal default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyOptionalProperty.java
index 21e8a11..027b610 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javamath.bigdecimals.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,16 @@ public class JavaMathBigDecimalHolder_updateReadOnlyOptionalProperty {
 
     private final JavaMathBigDecimalHolder holder;
 
+    @MemberSupport
     public JavaMathBigDecimalHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            java.math.BigDecimal newValue
+            final java.math.BigDecimal newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public java.math.BigDecimal default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyProperty.java
index 9e560c7..f36c4e9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javamath.bigdecimals.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,13 @@ public class JavaMathBigDecimalHolder_updateReadOnlyProperty {
 
     private final JavaMathBigDecimalHolder holder;
 
-    public JavaMathBigDecimalHolder act(java.math.BigDecimal newValue) {
+    @MemberSupport
+    public JavaMathBigDecimalHolder act(final java.math.BigDecimal newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public java.math.BigDecimal default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyPropertyWithChoices.java
index 8bf95ce..ca4b9e9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/holder/JavaMathBigDecimalHolder_updateReadOnlyPropertyWithChoices.java
@@ -26,12 +26,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -46,13 +48,18 @@ public class JavaMathBigDecimalHolder_updateReadOnlyPropertyWithChoices {
 
     private final JavaMathBigDecimalHolder holder;
 
-    public JavaMathBigDecimalHolder act(java.math.BigDecimal newValue) {
+    @MemberSupport
+    public JavaMathBigDecimalHolder act(final java.math.BigDecimal newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public java.math.BigDecimal default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<java.math.BigDecimal> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/JavaMathBigIntegers.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/JavaMathBigIntegers.java
index 8e9a2dc..76fea61 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/JavaMathBigIntegers.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/JavaMathBigIntegers.java
@@ -33,9 +33,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -50,15 +52,17 @@ import demoapp.dom.types.javamath.bigintegers.vm.JavaMathBigIntegerVm;
 //@Log4j2
 public class JavaMathBigIntegers implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "java.math.BigInteger data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public JavaMathBigIntegerVm openViewModel(java.math.BigInteger initialValue) {
+    public JavaMathBigIntegerVm openViewModel(final java.math.BigInteger initialValue) {
         return new JavaMathBigIntegerVm(initialValue);
     }
+    @MemberSupport
     public java.math.BigInteger default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyOptionalProperty.java
index e323c7f..360ac13 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javamath.bigintegers.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,16 @@ public class JavaMathBigIntegerHolder_updateReadOnlyOptionalProperty {
 
     private final JavaMathBigIntegerHolder holder;
 
+    @MemberSupport
     public JavaMathBigIntegerHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            java.math.BigInteger newValue
+            final java.math.BigInteger newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public java.math.BigInteger default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyProperty.java
index 5b1305f..971ca30 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javamath.bigintegers.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,13 @@ public class JavaMathBigIntegerHolder_updateReadOnlyProperty {
 
     private final JavaMathBigIntegerHolder holder;
 
-    public JavaMathBigIntegerHolder act(java.math.BigInteger newValue) {
+    @MemberSupport
+    public JavaMathBigIntegerHolder act(final java.math.BigInteger newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public java.math.BigInteger default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyPropertyWithChoices.java
index 26eda9e..b6a6298 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/holder/JavaMathBigIntegerHolder_updateReadOnlyPropertyWithChoices.java
@@ -26,12 +26,14 @@ import javax.inject.Inject;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
-import demoapp.dom.types.Samples;
 import lombok.RequiredArgsConstructor;
 
+import demoapp.dom.types.Samples;
+
 //tag::class[]
 @Action(
         semantics = SemanticsOf.IDEMPOTENT
@@ -46,13 +48,18 @@ public class JavaMathBigIntegerHolder_updateReadOnlyPropertyWithChoices {
 
     private final JavaMathBigIntegerHolder holder;
 
-    public JavaMathBigIntegerHolder act(java.math.BigInteger newValue) {
+    @MemberSupport
+    public JavaMathBigIntegerHolder act(final java.math.BigInteger newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public java.math.BigInteger default0Act() {
         return holder.getReadOnlyProperty();
     }
+
+    @MemberSupport
     public List<java.math.BigInteger> choices0Act() {
         return samples.stream()
                 .collect(Collectors.toList());
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/JavaNetUrls.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/JavaNetUrls.java
index 37aea04..046ea4a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/JavaNetUrls.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/JavaNetUrls.java
@@ -33,9 +33,11 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Title;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolderRepository;
@@ -50,15 +52,17 @@ import demoapp.dom.types.javanet.urls.vm.JavaNetUrlVm;
 //@Log4j2
 public class JavaNetUrls implements HasAsciiDocDescription {
 
+    @Title
     public String title() {
         return "java.net.URL data type";
     }
 
     @Action(semantics = SemanticsOf.SAFE)
     @ActionLayout(promptStyle = PromptStyle.DIALOG_MODAL)
-    public JavaNetUrlVm openViewModel(java.net.URL initialValue) {
+    public JavaNetUrlVm openViewModel(final java.net.URL initialValue) {
         return new JavaNetUrlVm(initialValue);
     }
+    @MemberSupport
     public java.net.URL default0OpenViewModel() {
         return samples.single();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyOptionalProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyOptionalProperty.java
index a12980c..62d6269 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyOptionalProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyOptionalProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javanet.urls.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -41,13 +42,16 @@ public class JavaNetUrlHolder_updateReadOnlyOptionalProperty {
 
     private final JavaNetUrlHolder holder;
 
+    @MemberSupport
     public JavaNetUrlHolder act(
             @Parameter(optionality = Optionality.OPTIONAL)              // <.>
-            java.net.URL newValue
+            final java.net.URL newValue
     ) {
         holder.setReadOnlyOptionalProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public java.net.URL default0Act() {
         return holder.getReadOnlyOptionalProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyProperty.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyProperty.java
index 421f09d..e72f96e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyProperty.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyProperty.java
@@ -20,6 +20,7 @@ package demoapp.dom.types.javanet.urls.holder;
 
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 
@@ -39,10 +40,13 @@ public class JavaNetUrlHolder_updateReadOnlyProperty {
 
     private final JavaNetUrlHolder holder;
 
-    public JavaNetUrlHolder act(java.net.URL newValue) {
+    @MemberSupport
+    public JavaNetUrlHolder act(final java.net.URL newValue) {
         holder.setReadOnlyProperty(newValue);
         return holder;
     }
+
+    @MemberSupport
     public java.net.URL default0Act() {
         return holder.getReadOnlyProperty();
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyPropertyWithChoices.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyPropertyWithChoices.java
index 5f1f2e0..5122e36 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyPropertyWithChoices.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/holder/JavaNetUrlHolder_updateReadOnlyPropertyWithChoices.java
@@ -26,12 +26,14 @@ import javax.inject.Inject;
... 3928 lines suppressed ...

[isis] 02/02: ISIS-2774: adds support for enforcing member annotations

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

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

commit 9bd81d798eec9d40314fa0b1830195d24942c4b1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 2 15:57:40 2021 +0200

    ISIS-2774: adds support for enforcing member annotations
    
    fixes iconName facet not being imperative
    
    some fixes to imperative orphaned method checking: ignore the event rank
    when enumerating imperative facets
---
 .../isis/core/metamodel/facetapi/FacetHolder.java  |  7 +--
 .../metamodel/facetapi/FacetHolderAbstract.java    |  5 ++
 .../core/metamodel/facetapi/HasFacetHolder.java    | 13 +++--
 .../choices/enums/EnumValueSemanticsProvider.java  |  2 +-
 .../method/CssClassFacetMethodFactory.java         |  2 +-
 .../object/icon/method/IconFacetMethodFactory.java | 22 ++++----
 ...Method.java => IconFacetViaIconNameMethod.java} | 29 ++++++++--
 .../facets/object/layout/LayoutFacetFactory.java   |  2 +-
 .../annotation/TitleAnnotationFacetFactory.java    | 47 ++++++++--------
 .../title/methods/TitleFacetViaMethodsFactory.java |  2 +-
 ...tionEnforcesMetamodelContributionValidator.java |  6 ++-
 .../metamodel/methods/MethodFinderOptions.java     | 63 +++++++++++++---------
 .../core/metamodel/methods/MethodFinderUtils.java  | 25 ++++-----
 .../metamodel/methods/MethodLiteralConstants.java  | 19 +++++++
 .../ident/icon/IconFacetMethodFactoryTest.java     |  4 +-
 .../object/ident/icon/IconFacetMethodTest.java     |  6 +--
 .../DomainModelTest_usingGoodDomain.java           | 17 ++++++
 .../good/ProperMemberInheritanceAbstract.java      |  2 +
 .../good/ProperMemberInheritanceInterface.java     |  6 ++-
 .../model/good/ProperMemberSupport_action.java     | 15 +++---
 .../model/good/ProperMemberSupport_action2.java    | 13 ++---
 .../model/good/ProperMemberSupport_action3.java    | 13 ++---
 ...lWithAnnotationOptionalUsingPrivateSupport.java | 12 ++++-
 23 files changed, 217 insertions(+), 115 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java
index 04f4731..25eaa64 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolder.java
@@ -80,7 +80,7 @@ public interface FacetHolder extends HasMetaModelContext {
      * Convenience; saves having to {@link #getFacet(Class)} and then check if
      * <tt>null</tt> and not a fallback.
      */
-    default boolean containsNonFallbackFacet(Class<? extends Facet> facetType) {
+    default boolean containsNonFallbackFacet(final Class<? extends Facet> facetType) {
         val facet = getFacet(facetType);
         return facet != null
                 && !facet.getPrecedence().isFallback();
@@ -90,7 +90,7 @@ public interface FacetHolder extends HasMetaModelContext {
      * As {@link #containsNonFallbackFacet(Class)}, with additional requirement, that the
      * facet is <i>explicit</i>, not {@link Facet.Precedence#isInferred() inferred}.
      */
-    default boolean containsExplicitNonFallbackFacet(Class<? extends Facet> facetType) {
+    default boolean containsExplicitNonFallbackFacet(final Class<? extends Facet> facetType) {
         val facet = getFacet(facetType);
         return facet != null
                 && !facet.getPrecedence().isFallback()
@@ -99,7 +99,7 @@ public interface FacetHolder extends HasMetaModelContext {
 
     Stream<Facet> streamFacets();
 
-    default <F extends Facet> Stream<F> streamFacets(Class<F> requiredType) {
+    default <F extends Facet> Stream<F> streamFacets(final Class<F> requiredType) {
         return streamFacets()
                 .filter(facet->requiredType.isAssignableFrom(facet.getClass()))
                 .map(requiredType::cast);
@@ -117,6 +117,7 @@ public interface FacetHolder extends HasMetaModelContext {
 
     // -- VALIDATION SUPPORT
 
+    Stream<FacetRanking> streamFacetRankings();
     Optional<FacetRanking> getFacetRanking(Class<? extends Facet> facetType);
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java
index fec986b..b577e11 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetHolderAbstract.java
@@ -109,6 +109,11 @@ implements FacetHolder {
     // -- VALIDATION SUPPORT
 
     @Override
+    public Stream<FacetRanking> streamFacetRankings() {
+        return rankingByType.values().stream();
+    }
+
+    @Override
     public Optional<FacetRanking> getFacetRanking(final Class<? extends Facet> facetType) {
         return Optional.ofNullable(rankingByType.get(facetType));
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/HasFacetHolder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/HasFacetHolder.java
index e9db430..4240743 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/HasFacetHolder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/HasFacetHolder.java
@@ -35,12 +35,12 @@ public interface HasFacetHolder extends FacetHolder {
     }
 
     @Override
-    default <T extends Facet> T getFacet(Class<T> cls) {
+    default <T extends Facet> T getFacet(final Class<T> cls) {
         return getFacetHolder().getFacet(cls);
     }
 
     @Override
-    default boolean containsFacet(Class<? extends Facet> facetType) {
+    default boolean containsFacet(final Class<? extends Facet> facetType) {
         return getFacetHolder().containsFacet(facetType);
     }
 
@@ -50,12 +50,17 @@ public interface HasFacetHolder extends FacetHolder {
     }
 
     @Override
-    default void addFacet(Facet facet) {
+    default void addFacet(final Facet facet) {
         getFacetHolder().addFacet(facet);
     }
 
     @Override
-    default Optional<FacetRanking> getFacetRanking(Class<? extends Facet> facetType) {
+    default Stream<FacetRanking> streamFacetRankings() {
+        return getFacetHolder().streamFacetRankings();
+    }
+
+    @Override
+    default Optional<FacetRanking> getFacetRanking(final Class<? extends Facet> facetType) {
         return getFacetHolder().getFacetRanking(facetType);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
index fd912c0..08ddb3d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/choices/enums/EnumValueSemanticsProvider.java
@@ -83,7 +83,7 @@ implements EnumFacet {
                 defaultFor(adaptedClass));
 
         titleMethod = MethodFinderUtils.findMethod_returningText(
-                MethodFinderOptions.layoutSupport(introspectionPolicy),
+                MethodFinderOptions.objectSupport(introspectionPolicy),
                 getAdaptedClass(),
                 TITLE,
                 null);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.java
index bd66e0b..5001ed3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/cssclass/method/CssClassFacetMethodFactory.java
@@ -48,7 +48,7 @@ extends MethodPrefixBasedFacetFactoryAbstract {
 
         final Method method = MethodFinderUtils.findMethod(
                 MethodFinderOptions
-                .layoutSupport(processClassContext.getIntrospectionPolicy()),
+                .objectSupport(processClassContext.getIntrospectionPolicy()),
                 cls, PREFIX, String.class, NO_ARG);
         if (method == null) {
             return;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetMethodFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetMethodFactory.java
index 1eb9ef6..0b42c28 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetMethodFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetMethodFactory.java
@@ -19,43 +19,41 @@
 
 package org.apache.isis.core.metamodel.facets.object.icon.method;
 
-import java.lang.reflect.Method;
-
 import javax.inject.Inject;
 
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
 import org.apache.isis.core.metamodel.methods.MethodFinderUtils;
 import org.apache.isis.core.metamodel.methods.MethodLiteralConstants;
 import org.apache.isis.core.metamodel.methods.MethodPrefixBasedFacetFactoryAbstract;
 
+import lombok.val;
+
 public class IconFacetMethodFactory
 extends MethodPrefixBasedFacetFactoryAbstract {
 
-    private static final String PREFIX = MethodLiteralConstants.ICON_NAME;
+    private static final String METHOD_NAME = MethodLiteralConstants.ICON_NAME;
 
     @Inject
     public IconFacetMethodFactory(final MetaModelContext mmc) {
-        super(mmc, FeatureType.OBJECTS_ONLY, OrphanValidation.VALIDATE, Can.ofSingleton(PREFIX));
+        super(mmc, FeatureType.OBJECTS_ONLY, OrphanValidation.VALIDATE, Can.ofSingleton(METHOD_NAME));
     }
 
     @Override
     public void process(final ProcessClassContext processClassContext) {
-        final Class<?> cls = processClassContext.getCls();
-        final FacetHolder facetHolder = processClassContext.getFacetHolder();
+        val cls = processClassContext.getCls();
+        val facetHolder = processClassContext.getFacetHolder();
 
-        final Method method = MethodFinderUtils.findMethod(
+        val method = MethodFinderUtils.findMethod(
                 MethodFinderOptions
-                .layoutSupport(processClassContext.getIntrospectionPolicy()),
-                cls, PREFIX, String.class, NO_ARG);
+                .objectSupport(processClassContext.getIntrospectionPolicy()),
+                cls, METHOD_NAME, String.class, NO_ARG);
         if (method == null) {
             return;
         }
         processClassContext.removeMethod(method);
-        FacetUtil.addFacet(new IconFacetMethod(method, facetHolder));
+        addFacet(new IconFacetViaIconNameMethod(method, facetHolder));
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetMethod.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java
similarity index 66%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetMethod.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java
index 7bb3802..8c83d44 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/icon/method/IconFacetViaIconNameMethod.java
@@ -22,26 +22,32 @@ package org.apache.isis.core.metamodel.facets.object.icon.method;
 import java.lang.reflect.Method;
 import java.util.function.BiConsumer;
 
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.ImperativeFacet;
 import org.apache.isis.core.metamodel.facets.object.icon.IconFacetAbstract;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
 
+import lombok.Getter;
 import lombok.NonNull;
+import lombok.val;
 
-public class IconFacetMethod
-extends IconFacetAbstract {
+public class IconFacetViaIconNameMethod
+extends IconFacetAbstract
+implements ImperativeFacet {
 
-    private final @NonNull Method method;
+    @Getter(onMethod_ = {@Override}) private final @NonNull Can<Method> methods;
 
-    public IconFacetMethod(final Method method, final FacetHolder holder) {
+    public IconFacetViaIconNameMethod(final Method method, final FacetHolder holder) {
         super(holder);
-        this.method = method;
+        this.methods = ImperativeFacet.singleMethod(method);
     }
 
     @Override
     public String iconName(final ManagedObject owningAdapter) {
         try {
+            val method = methods.getFirstOrFail();
             return (String) ManagedObjects.InvokeUtil.invoke(method, owningAdapter);
         } catch (final RuntimeException ex) {
             return null;
@@ -49,8 +55,21 @@ extends IconFacetAbstract {
     }
 
     @Override
+    public Intent getIntent(final Method method) {
+        return Intent.UI_HINT;
+    }
+
+    @Override
+    protected String toStringValues() {
+        val method = methods.getFirstOrFail();
+        return "method=" + method;
+    }
+
+    @Override
     public void visitAttributes(final BiConsumer<String, Object> visitor) {
+        val method = methods.getFirstOrFail();
         super.visitAttributes(visitor);
+        ImperativeFacet.visitAttributes(this, visitor);
         visitor.accept("method", method);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layout/LayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layout/LayoutFacetFactory.java
index 15ca351..c12f40b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layout/LayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/layout/LayoutFacetFactory.java
@@ -46,7 +46,7 @@ extends MethodPrefixBasedFacetFactoryAbstract {
 
         final Method method = MethodFinderUtils.findMethod(
                 MethodFinderOptions
-                .layoutSupport(processClassContext.getIntrospectionPolicy()),
+                .objectSupport(processClassContext.getIntrospectionPolicy()),
                 cls, PREFIX, String.class, NO_ARG);
 
         final LayoutFacet layoutFacet;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
index 02d8bbc..dc74a6f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleAnnotationFacetFactory.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.core.metamodel.facets.object.title.annotation;
 
-import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
@@ -42,6 +41,7 @@ import org.apache.isis.core.metamodel.facets.fallback.FallbackFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.title.methods.TitleFacetViaMethodsFactory;
 import org.apache.isis.core.metamodel.methods.MethodFinderOptions;
 import org.apache.isis.core.metamodel.methods.MethodFinderUtils;
+import org.apache.isis.core.metamodel.methods.MethodLiteralConstants;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract;
@@ -147,43 +147,46 @@ implements MetaModelRefiner {
 
 
     /**
-     * Violation if there is a class that has both a <tt>title()</tt> method and also any non-inherited method
-     * annotated with <tt>@Title</tt>.
-     *
+     * Violation if there is a class that has both a <tt>title()</tt> method
+     * and also any declared (non-inherited) method annotated with <tt>@Title</tt>.
      * <p>
-     * If there are only inherited methods annotated with <tt>@Title</tt> then this is <i>not</i> a violation; but
-     * (from the implementation of {@link TitleFacetViaMethodsFactory} the imperative <tt>title()</tt> method will take
+     * If there are only inherited methods annotated with <tt>@Title</tt>
+     * then this is <i>not</i> a violation;
+     * but (from the implementation of {@link TitleFacetViaMethodsFactory}
+     * the imperative <tt>title()</tt> method will take
      * precedence.
      */
     @Override
     public void refineProgrammingModel(final ProgrammingModel programmingModel) {
 
-        programmingModel.addVisitingValidatorSkipManagedBeans(objectSpec -> {
+        programmingModel.addVisitingValidatorSkipManagedBeans(_objectSpec -> {
 
-            final Class<?> cls = objectSpec.getCorrespondingClass();
-            final var introspectionPolicy = ((ObjectSpecificationAbstract)objectSpec).getIntrospectionPolicy();
+            final var objectSpec = (ObjectSpecificationAbstract)_objectSpec;
+            final var cls = objectSpec.getCorrespondingClass();
+            final var introspectionPolicy = objectSpec.getIntrospectionPolicy();
 
-            final Method titleMethod = MethodFinderUtils.findMethod(
-                    MethodFinderOptions.layoutSupport(introspectionPolicy),
+            final var titleMethod = MethodFinderUtils.findMethod(
+                    MethodFinderOptions.objectSupport(introspectionPolicy),
                     cls, TITLE_METHOD_NAME, String.class, null);
             if (titleMethod == null) {
                 return;
             }
 
             // determine if cls contains an @Title annotated method, not inherited from superclass
-            final ObjectSpecification supClass = objectSpec.superclass();
-            if (supClass == null) {
+            final ObjectSpecification superSpec = objectSpec.superclass();
+            if (superSpec == null) {
                 return;
             }
 
-            final var superIntrospectionPolicy = ((ObjectSpecificationAbstract)supClass).getIntrospectionPolicy();
+            final var superIntrospectionPolicy = ((ObjectSpecificationAbstract)superSpec).getIntrospectionPolicy();
+            final var superCls = superSpec.getCorrespondingClass();
 
-            final List<Method> methods = methodsWithTitleAnnotation(superIntrospectionPolicy, cls);
-            final List<Method> superClassMethods = methodsWithTitleAnnotation(superIntrospectionPolicy, supClass.getCorrespondingClass());
-            if (methods.size() > superClassMethods.size()) {
+            if (countMethodsWithTitleAnnotation(introspectionPolicy, cls)
+                    > countMethodsWithTitleAnnotation(superIntrospectionPolicy, superCls)) {
                 ValidationFailure.raiseFormatted(
                         objectSpec,
-                        "%s: conflict for determining a strategy for retrieval of title for class, contains a method '%s' and an annotation '@%s'",
+                        "%s: conflict for determining a strategy for retrieval of title for class, "
+                        + "contains a method '%s' and an annotation '@%s'",
                         objectSpec.getFeatureIdentifier().getClassName(),
                         TITLE_METHOD_NAME,
                         Title.class.getName());
@@ -192,11 +195,13 @@ implements MetaModelRefiner {
         });
     }
 
-    private static List<Method> methodsWithTitleAnnotation(
+    private static long countMethodsWithTitleAnnotation(
             final IntrospectionPolicy introspectionPolicy,
             final Class<?> cls) {
-        return MethodFinderUtils.findMethodsWithAnnotation(
-                MethodFinderOptions.layoutSupport(introspectionPolicy), cls, Title.class);
+        return MethodFinderUtils.streamMethodsWithAnnotation(
+                MethodFinderOptions.objectSupport(introspectionPolicy), cls, Title.class)
+                .filter(method->!method.getName().equals(MethodLiteralConstants.TITLE))
+                .count();
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
index dcd98ae..29888c2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaMethodsFactory.java
@@ -70,7 +70,7 @@ extends MethodPrefixBasedFacetFactoryAbstract {
 
         val titleMethod = MethodFinderUtils.findMethod_returningText(
                 MethodFinderOptions
-                .layoutSupport(processClassContext.getIntrospectionPolicy()),
+                .objectSupport(processClassContext.getIntrospectionPolicy()),
                 cls,
                 TITLE,
                 NO_ARG);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/DomainIncludeAnnotationEnforcesMetamodelContributionValidator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/DomainIncludeAnnotationEnforcesMetamodelContributionValidator.java
index a6420ac..d68313a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/DomainIncludeAnnotationEnforcesMetamodelContributionValidator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/DomainIncludeAnnotationEnforcesMetamodelContributionValidator.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.methods;
 import java.lang.reflect.Method;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Optional;
 import java.util.TreeSet;
 import java.util.stream.Collectors;
 
@@ -93,7 +94,10 @@ extends MetaModelVisitingValidatorAbstract {
 
         spec
         .streamFacetHolders()
-        .flatMap(FacetHolder::streamFacets)
+        .flatMap(FacetHolder::streamFacetRankings)
+        .map(facetRanking->facetRanking.getWinnerNonEvent(facetRanking.facetType()))
+        .filter(Optional::isPresent)
+        .map(Optional::get)
         .filter(ImperativeFacet.class::isInstance)
         .map(ImperativeFacet.class::cast)
         .map(ImperativeFacet::getMethods)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderOptions.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderOptions.java
index e3f29bd..656ff50 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderOptions.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderOptions.java
@@ -25,11 +25,14 @@ import java.util.function.Predicate;
 import org.apache.isis.applib.annotation.Domain;
 import org.apache.isis.applib.annotation.Introspection.EncapsulationPolicy;
 import org.apache.isis.applib.annotation.Introspection.IntrospectionPolicy;
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.functions._Predicates;
 import org.apache.isis.commons.internal.reflection._Annotations;
 import org.apache.isis.commons.internal.reflection._Reflect;
 
+import lombok.NonNull;
 import lombok.Value;
+import lombok.val;
 
 @Value(staticConstructor = "of")
 public class MethodFinderOptions {
@@ -53,32 +56,32 @@ public class MethodFinderOptions {
         return havingAnyOrNoAnnotation(memberIntrospectionPolicy);
     }
 
-    public static MethodFinderOptions memberSupport(
-            final IntrospectionPolicy memberIntrospectionPolicy) {
-        return havingAnnotationIfEnforcedByPolicyOrAccessibility(
-                memberIntrospectionPolicy, Domain.Include.class);
-    }
-
     public static MethodFinderOptions objectSupport(
             final IntrospectionPolicy memberIntrospectionPolicy) {
         return havingAnnotationIfEnforcedByPolicyOrAccessibility(
-                memberIntrospectionPolicy, Domain.Include.class);
+                memberIntrospectionPolicy,
+                Domain.Include.class,
+                MethodLiteralConstants.ConflictingAnnotations.OBJECT_SUPPORT.getProhibits());
     }
 
     public static MethodFinderOptions livecycleCallback(
             final IntrospectionPolicy memberIntrospectionPolicy) {
         return havingAnnotationIfEnforcedByPolicyOrAccessibility(
-                memberIntrospectionPolicy, Domain.Include.class);
+                memberIntrospectionPolicy,
+                Domain.Include.class,
+                MethodLiteralConstants.ConflictingAnnotations.OBJECT_LIFECYCLE.getProhibits());
     }
 
-    public static MethodFinderOptions layoutSupport(
+    public static MethodFinderOptions memberSupport(
             final IntrospectionPolicy memberIntrospectionPolicy) {
         return havingAnnotationIfEnforcedByPolicyOrAccessibility(
-                memberIntrospectionPolicy, Domain.Include.class);
+                memberIntrospectionPolicy,
+                Domain.Include.class,
+                MethodLiteralConstants.ConflictingAnnotations.MEMBER_SUPPORT.getProhibits());
     }
 
-    private final EncapsulationPolicy encapsulationPolicy;
-    private final Predicate<Method> mustSatisfy;
+    private final @NonNull EncapsulationPolicy encapsulationPolicy;
+    private final @NonNull Predicate<Method> mustSatisfy;
 
     // -- HELPER
 
@@ -91,7 +94,8 @@ public class MethodFinderOptions {
 
     private static MethodFinderOptions havingAnnotationIfEnforcedByPolicyOrAccessibility(
             final IntrospectionPolicy memberIntrospectionPolicy,
-            final Class<? extends Annotation> annotationType) {
+            final Class<? extends Annotation> annotationType,
+            final Can<Class<? extends Annotation>> conflictingAnnotations) {
 
         //MemberAnnotationPolicy
         //  when REQUIRED -> annot. on support also required
@@ -100,22 +104,33 @@ public class MethodFinderOptions {
         return of(
                 EncapsulationPolicy.ENCAPSULATED_MEMBERS_SUPPORTED, // support methods are always allowed private
                 memberIntrospectionPolicy.getMemberAnnotationPolicy().isMemberAnnotationsRequired()
-                    ? method->_Annotations.synthesizeInherited(method, annotationType).isPresent()
+                    ? method->havingAnnotation(method, annotationType, conflictingAnnotations)
                     : method-> !_Reflect.isAccessible(method)
-                            ? _Annotations.synthesizeInherited(method, annotationType).isPresent()
+                            ? havingAnnotation(method, annotationType, conflictingAnnotations)
                             : true);
 
     }
 
+    //FIXME[ISIS-2774] if annotation appears on an abstract method that was inherited with given method,
+    // its not detected here
+    private static boolean havingAnnotation(
+            final Method method,
+            final Class<? extends Annotation> annotationType,
+            final Can<Class<? extends Annotation>> conflictingAnnotations) {
+
+        val isMarkerAnnotationPresent = _Annotations.synthesizeInherited(method, annotationType).isPresent();
+        if(isMarkerAnnotationPresent) {
+
+            val isConflictingAnnotationPresent = conflictingAnnotations
+            .stream()
+            .anyMatch(conflictingAnnotationType->
+                    _Annotations.synthesizeInherited(method, conflictingAnnotationType).isPresent());
+
+            // do not pickup this method if conflicting - so meta-model validation will fail later on
+            return !isConflictingAnnotationPresent;
+        }
+        return isMarkerAnnotationPresent;
+    }
 
-//    private static MethodFinderOptions havingAnnotation(
-//            final IntrospectionPolicy memberIntrospectionPolicy,
-//            final Class<? extends Annotation> associatedAnnotationType) {
-//        return of(
-//                memberIntrospectionPolicy.getEncapsulationPolicy(),
-//                memberIntrospectionPolicy.getMemberAnnotationPolicy().isMemberAnnotationsRequired()
-//                    ? method->_Annotations.synthesizeInherited(method, associatedAnnotationType).isPresent()
-//                    : _Predicates.alwaysTrue());
-//    }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderUtils.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderUtils.java
index 83c7d3f..82575d3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderUtils.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodFinderUtils.java
@@ -23,10 +23,8 @@ import java.lang.reflect.Array;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.util.Collection;
-import java.util.List;
 import java.util.Map;
 import java.util.Optional;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.isis.applib.services.i18n.TranslatableString;
@@ -108,6 +106,10 @@ public final class MethodFinderUtils {
             }
         }
 
+        if(!options.getMustSatisfy().test(method)) {
+            return null;
+        }
+
         return method;
     }
 
@@ -165,21 +167,15 @@ public final class MethodFinderUtils {
         }
     }
 
-    public static List<Method> findMethodsWithAnnotation(
-            final MethodFinderOptions options,
-            final Class<?> type,
-            final Class<? extends Annotation> annotationClass) {
-
-        // Validate arguments
-        if (type == null || annotationClass == null) {
-            throw new IllegalArgumentException("One or more arguments are 'null' valued");
-        }
+    public static Stream<Method> streamMethodsWithAnnotation(
+            final @NonNull MethodFinderOptions options,
+            final @NonNull Class<?> type,
+            final @NonNull Class<? extends Annotation> annotationClass) {
 
         // Find methods annotated with the specified annotation
         return streamMethods(options, type)
                 .filter(method -> !MethodUtil.isStatic(method))
-                .filter(method -> method.isAnnotationPresent(annotationClass))
-                .collect(Collectors.toList());
+                .filter(method -> method.isAnnotationPresent(annotationClass));
     }
 
     public static void removeMethod(final MethodRemover methodRemover, final Method method) {
@@ -368,7 +364,8 @@ public final class MethodFinderUtils {
         val methodCache = _MethodCache.getInstance();
         return options.getEncapsulationPolicy().isEncapsulatedMembersSupported()
                 ? methodCache.streamPublicOrDeclaredMethods(type)
-                : methodCache.streamPublicMethods(type);
+                : methodCache.streamPublicMethods(type)
+                .filter(options.getMustSatisfy()::test);
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodLiteralConstants.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodLiteralConstants.java
index 531fa0d..9ea4df7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodLiteralConstants.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/MethodLiteralConstants.java
@@ -18,15 +18,22 @@
  */
 package org.apache.isis.core.metamodel.methods;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Member;
 import java.lang.reflect.Method;
 import java.util.function.IntFunction;
 
 import org.springframework.lang.Nullable;
 
+import org.apache.isis.applib.annotation.MemberSupport;
+import org.apache.isis.applib.annotation.ObjectLifecycle;
+import org.apache.isis.applib.annotation.ObjectSupport;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.commons.StringExtensions;
 
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
 public final class MethodLiteralConstants {
 
     // -- ACCESSORS
@@ -77,6 +84,18 @@ public final class MethodLiteralConstants {
 
     public static final String TO_STRING = "toString";
 
+    // -- CONFLICTING MARKER ANNOTATIONS
+
+    @RequiredArgsConstructor @Getter
+    public static enum ConflictingAnnotations {
+        OBJECT_SUPPORT(Can.of(ObjectLifecycle.class, MemberSupport.class)),
+        OBJECT_LIFECYCLE(Can.of(ObjectSupport.class, MemberSupport.class)),
+        MEMBER_SUPPORT(Can.of(ObjectSupport.class, ObjectLifecycle.class));
+        final Can<Class<? extends Annotation>> prohibits;
+    }
+
+    // -- METHOD NAMING CONVENTIONS
+
     @FunctionalInterface
     public static interface SupportingMethodNameProviderForAction {
         @Nullable String getActionSupportingMethodName(Method actionMethod, String prefix, boolean isMixin);
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/icon/IconFacetMethodFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/icon/IconFacetMethodFactoryTest.java
index 382b575..fbcfebd 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/icon/IconFacetMethodFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/icon/IconFacetMethodFactoryTest.java
@@ -30,7 +30,7 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
 import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
-import org.apache.isis.core.metamodel.facets.object.icon.method.IconFacetMethod;
+import org.apache.isis.core.metamodel.facets.object.icon.method.IconFacetViaIconNameMethod;
 import org.apache.isis.core.metamodel.facets.object.icon.method.IconFacetMethodFactory;
 
 public class IconFacetMethodFactoryTest extends AbstractFacetFactoryTest {
@@ -64,7 +64,7 @@ public class IconFacetMethodFactoryTest extends AbstractFacetFactoryTest {
 
         final Facet facet = facetedMethod.getFacet(IconFacet.class);
         assertThat(facet, is(notNullValue()));
-        assertThat(facet, is(instanceOf(IconFacetMethod.class)));
+        assertThat(facet, is(instanceOf(IconFacetViaIconNameMethod.class)));
 
         assertTrue(methodRemover.getRemovedMethodMethodCalls().contains(iconNameMethod));
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/icon/IconFacetMethodTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/icon/IconFacetMethodTest.java
index bd156f2..8a4ccf3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/icon/IconFacetMethodTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/ident/icon/IconFacetMethodTest.java
@@ -29,7 +29,7 @@ import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.object.icon.method.IconFacetMethod;
+import org.apache.isis.core.metamodel.facets.object.icon.method.IconFacetViaIconNameMethod;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -40,7 +40,7 @@ public class IconFacetMethodTest {
 
     private final Mockery mockery = new JUnit4Mockery();
 
-    private IconFacetMethod facet;
+    private IconFacetViaIconNameMethod facet;
     private FacetHolder mockFacetHolder;
 
     private ManagedObject mockOwningAdapter;
@@ -60,7 +60,7 @@ public class IconFacetMethodTest {
         mockFacetHolder = mockery.mock(FacetHolder.class);
         mockOwningAdapter = mockery.mock(ManagedObject.class);
         final Method iconNameMethod = DomainObjectWithProblemInIconNameMethod.class.getMethod("iconName");
-        facet = new IconFacetMethod(iconNameMethod, mockFacetHolder);
+        facet = new IconFacetViaIconNameMethod(iconNameMethod, mockFacetHolder);
 
         mockery.checking(new Expectations() {
             {
diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
index a5d79f7..e8a0912 100644
--- a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
+++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
@@ -489,6 +489,23 @@ class DomainModelTest_usingGoodDomain {
         coll.assertCollectionElements(List.of("Foo"));
     }
 
+//    @Test
+//    void quicktest() {
+//        val testerFactory = new DomainObjectTesterFactory(serviceInjector);
+//        val prop = testerFactory.propertyTester(DomainObjectList.class, "elementTypeFqcn");
+//        prop.assertExists(true);
+//
+//        val objectSpec = specificationLoader.specForTypeElseFail(DomainObjectList.class);
+//
+//        val titleFacet = objectSpec.getFacetRanking(TitleFacet.class).get().getWinnerNonEvent(TitleFacet.class).get();
+//        assertNotNull(titleFacet);
+//        assertTrue(titleFacet instanceof ImperativeFacet, "no imperative: " + titleFacet.getClass());
+//
+//        ((ImperativeFacet)titleFacet).getMethods()
+//        .forEach(System.err::println);
+//
+//    }
+
     @Test
     void viewmodelWithAnnotationOptional_usingPrivateSupport() {
 
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberInheritanceAbstract.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberInheritanceAbstract.java
index 2c2b879..873431a 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberInheritanceAbstract.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberInheritanceAbstract.java
@@ -32,10 +32,12 @@ import lombok.Setter;
 
 abstract class ProperMemberInheritanceAbstract {
 
+    //@Title //FIXME[ISIS-2774] either not picked up, or validation fails when abstract
     public String title() {
         return "inherited title";
     }
 
+    //@ObjectSupport //FIXME[ISIS-2774] either not picked up, or validation fails when abstract
     public String iconName() {
         return "inherited icon";
     }
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberInheritanceInterface.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberInheritanceInterface.java
index 2f2a1ed..1680ed6 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberInheritanceInterface.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberInheritanceInterface.java
@@ -24,15 +24,19 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.annotation.ObjectSupport;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.annotation.Title;
 
 public interface ProperMemberInheritanceInterface {
 
+    @Title
     default String title() {
         return "inherited title";
     }
 
+    @ObjectSupport
     default String iconName() {
         return "inherited icon";
     }
@@ -63,7 +67,7 @@ public interface ProperMemberInheritanceInterface {
 
     @Action
     @ActionLayout(named = "foo", describedAs = "bar")
-    default void sampleActionOverrideWithParam(String x) {
+    default void sampleActionOverrideWithParam(final String x) {
     }
 
     @Property
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action.java
index 4f93a318..404611b 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action.java
@@ -37,7 +37,8 @@ public class ProperMemberSupport_action {
 
     // proper mix-in action
     //@Action // <-- inferred by annotation on type above
-    public ProperMemberSupport act(String p0, String p1) {
+    @MemberSupport
+    public ProperMemberSupport act(final String p0, final String p1) {
         return holder;
     }
 
@@ -52,17 +53,17 @@ public class ProperMemberSupport_action {
     }
 
     @MemberSupport
-    public String validateAct(String p0, String p1) {
+    public String validateAct(final String p0, final String p1) {
         return null;
     }
 
     @MemberSupport
-    public Set<String> autoComplete0Act(@MinLength(3) String search) {
+    public Set<String> autoComplete0Act(@MinLength(3) final String search) {
         return null;
     }
 
     @MemberSupport
-    public Set<String> autoComplete1Act(@MinLength(3) String search) {
+    public Set<String> autoComplete1Act(@MinLength(3) final String search) {
         return null;
     }
 
@@ -77,7 +78,7 @@ public class ProperMemberSupport_action {
     }
 
     @MemberSupport
-    public Set<String> choices1Act(String p0) {
+    public Set<String> choices1Act(final String p0) {
         return null;
     }
 
@@ -92,12 +93,12 @@ public class ProperMemberSupport_action {
     }
 
     @MemberSupport
-    public String validate0Act(String p0) {
+    public String validate0Act(final String p0) {
         return null;
     }
 
     @MemberSupport
-    public String validate1Act(String p1) {
+    public String validate1Act(final String p1) {
         return null;
     }
 
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action2.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action2.java
index 03158aa..29b3adf 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action2.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action2.java
@@ -35,7 +35,8 @@ public class ProperMemberSupport_action2 {
 
     // proper mix-in action
 
-    public ProperMemberSupport act(String p0, String p1) {
+    @MemberSupport
+    public ProperMemberSupport act(final String p0, final String p1) {
         return holder;
     }
 
@@ -50,17 +51,17 @@ public class ProperMemberSupport_action2 {
     }
 
     @MemberSupport
-    public String validateAct(String p0, String p1) {
+    public String validateAct(final String p0, final String p1) {
         return null;
     }
 
     @MemberSupport
-    public Set<String> autoComplete0Act(@MinLength(3) String search) {
+    public Set<String> autoComplete0Act(@MinLength(3) final String search) {
         return null;
     }
 
     @MemberSupport
-    public Set<String> autoComplete1Act(@MinLength(3) String search) {
+    public Set<String> autoComplete1Act(@MinLength(3) final String search) {
         return null;
     }
 
@@ -97,12 +98,12 @@ public class ProperMemberSupport_action2 {
     }
 
     @MemberSupport
-    public String validate0Act(String p0) {
+    public String validate0Act(final String p0) {
         return null;
     }
 
     @MemberSupport
-    public String validate1Act(String p1) {
+    public String validate1Act(final String p1) {
         return null;
     }
 
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action3.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action3.java
index 7bad058..48fca58 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action3.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action3.java
@@ -36,7 +36,8 @@ public class ProperMemberSupport_action3 {
 
     // proper mix-in action
 
-    public ProperMemberSupport act(List<String> p0, List<String> p1) {
+    @MemberSupport
+    public ProperMemberSupport act(final List<String> p0, final List<String> p1) {
         return holder;
     }
 
@@ -51,17 +52,17 @@ public class ProperMemberSupport_action3 {
     }
 
     @MemberSupport
-    public String validateAct(List<String> p0, List<String> p1) {
+    public String validateAct(final List<String> p0, final List<String> p1) {
         return null;
     }
 
     @MemberSupport
-    public Set<String> autoComplete0Act(@MinLength(3) String search) {
+    public Set<String> autoComplete0Act(@MinLength(3) final String search) {
         return null;
     }
 
     @MemberSupport
-    public Set<String> autoComplete1Act(@MinLength(3) String search) {
+    public Set<String> autoComplete1Act(@MinLength(3) final String search) {
         return null;
     }
 
@@ -98,12 +99,12 @@ public class ProperMemberSupport_action3 {
     }
 
     @MemberSupport
-    public String validate0Act(List<String> p0) {
+    public String validate0Act(final List<String> p0) {
         return null;
     }
 
     @MemberSupport
-    public String validate1Act(List<String> p1) {
+    public String validate1Act(final List<String> p1) {
         return null;
     }
 
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ViewModelWithAnnotationOptionalUsingPrivateSupport.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ViewModelWithAnnotationOptionalUsingPrivateSupport.java
index d0ba85e..33c9e91 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ViewModelWithAnnotationOptionalUsingPrivateSupport.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ViewModelWithAnnotationOptionalUsingPrivateSupport.java
@@ -27,7 +27,9 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Introspection;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.ObjectSupport;
 import org.apache.isis.applib.annotation.Property;
+import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
 import lombok.Setter;
@@ -46,6 +48,12 @@ implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
+    // allowed to be private since 2.0.0-M7
+    @Title
+    private String title() {
+        return "view-model with annotation optional using private support";
+    }
+
     // -- PUBLIC ACTION WITH PRIVATE SUPPORT
 
     @Action
@@ -86,13 +94,13 @@ implements Serializable {
     // -- PRIVATE OBJECT SUPPORT
 
     // allowed to be private since 2.0.0-M7
-    @MemberSupport//FIXME[ISIS-2774] be more specific, don't allow @MemberSupport
+    @ObjectSupport
     private String disabled() {
         return "object disabled for testing purposes";
     }
 
     // allowed to be private since 2.0.0-M7
-    @MemberSupport//FIXME[ISIS-2774] be more specific, don't allow @MemberSupport
+    @ObjectSupport
     private boolean hidden() {
         return false;
     }