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 2022/05/24 10:20:17 UTC

[isis] branch master updated: ISIS-3063: instate @Named as replacement for annot. attr. logicalTypeName=...

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 540babf530 ISIS-3063: instate @Named as replacement for annot. attr. logicalTypeName=...
540babf530 is described below

commit 540babf530bd1b6ef956a9997209394be73509d3
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue May 24 12:20:08 2022 +0200

    ISIS-3063: instate @Named as replacement for annot. attr.
    logicalTypeName=...
---
 .../apache/isis/applib/annotation/SemanticsOf.java |  5 +-
 .../org/apache/isis/applib/annotation/Value.java   |  4 +-
 .../isis/applib/domain/DomainObjectList.java       |  9 +--
 .../org/apache/isis/applib/graph/SimpleEdge.java   |  5 +-
 .../apache/isis/applib/graph/tree/TreeNode.java    |  5 +-
 .../org/apache/isis/applib/id/LogicalType.java     | 55 +++++++++++++
 .../services/appfeat/ApplicationFeature.java       | 13 ++--
 .../services/appfeat/ApplicationFeatureSort.java   |  5 +-
 .../appfeatui/ApplicationFeatureViewModel.java     |  6 +-
 .../services/appfeatui/ApplicationNamespace.java   |  7 +-
 .../applib/services/appfeatui/ApplicationType.java |  7 +-
 .../services/appfeatui/ApplicationTypeAction.java  |  7 +-
 .../appfeatui/ApplicationTypeCollection.java       |  7 +-
 .../services/appfeatui/ApplicationTypeMember.java  |  7 +-
 .../appfeatui/ApplicationTypeProperty.java         |  7 +-
 .../isis/applib/services/bookmark/Bookmark.java    |  6 +-
 .../services/confview/ConfigurationProperty.java   |  6 +-
 .../services/confview/ConfigurationViewmodel.java  |  6 +-
 .../isis/applib/services/jaxb/IsisSchemas.java     |  5 +-
 .../apache/isis/applib/services/layout/Style.java  |  6 +-
 .../isis/applib/services/menu/MenuBarsService.java |  7 +-
 .../isis/applib/services/swagger/Format.java       |  5 +-
 .../isis/applib/services/swagger/Visibility.java   | 12 ++-
 .../isis/applib/services/user/RoleMemento.java     |  7 +-
 .../isis/applib/services/user/UserMemento.java     | 10 +--
 .../java/org/apache/isis/applib/value/Blob.java    |  4 +-
 .../java/org/apache/isis/applib/value/Clob.java    |  5 +-
 .../isis/applib/value/LocalResourcePath.java       |  4 +-
 .../java/org/apache/isis/applib/value/Markup.java  |  4 +-
 .../org/apache/isis/applib/value/Password.java     |  4 +-
 .../apache/isis/core/config/IsisConfiguration.java |  5 +-
 .../beans/IsisBeanTypeClassifierDefault.java       | 20 ++++-
 .../DomainObjectAnnotationFacetFactory.java        |  2 +-
 .../LogicalTypeFacetForDomainObjectAnnotation.java |  1 +
 ...gicalTypeFacetForLogicalTypeNameAnnotation.java |  1 +
 .../LogicalTypeFacetForNamedAnnotation.java        |  2 +-
 .../LogicalTypeFacetForValueAnnotation.java        |  1 +
 .../annotation/ValueAnnotationFacetFactory.java    |  2 +
 .../core/metamodel/inspect/model/ActionNode.java   |  3 +-
 .../metamodel/inspect/model/CollectionNode.java    |  3 +-
 .../metamodel/inspect/model/FacetAttrNode.java     |  4 +-
 .../metamodel/inspect/model/FacetGroupNode.java    |  3 +-
 .../core/metamodel/inspect/model/FacetNode.java    |  3 +-
 .../metamodel/inspect/model/ParameterNode.java     |  3 +-
 .../core/metamodel/inspect/model/PropertyNode.java |  6 +-
 .../core/metamodel/inspect/model/TypeNode.java     |  6 +-
 .../appfeat/ApplicationFeatureDefault.java         |  5 +-
 .../specimpl/ObjectSpecificationAbstract.java      | 24 ++----
 .../specimpl/dflt/ObjectSpecificationDefault.java  | 16 ++--
 .../DomainObjectAnnotationFacetFactoryTest.java    | 22 ++++--
 .../ObjectTypeAnnotationFacetFactoryTest.java      | 22 +++---
 .../LogicalTypeFacetFromClassNameFactoryTest.java  | 21 +++--
 .../isis/core/metamodel/services/grid/Bar.java     |  7 +-
 .../security/authentication/logout/LogoutMenu.java |  4 +-
 .../dom/domain/_interactions/InteractionDtoVm.java |  7 +-
 .../associateWith/ActionAssociateWithVm.java       |  5 +-
 .../child/ActionAssociateWithChildVm.java          |  5 +-
 .../ActionCommandPublishingEntity.java             |  7 +-
 .../jdo/ActionCommandPublishingJdo.java            |  3 +-
 .../jpa/ActionCommandPublishingJpa.java            |  6 +-
 .../Action/domainEvent/ActionDomainEventVm.java    |  6 +-
 .../ActionExecutionPublishingEntity.java           |  7 +-
 .../jdo/ActionExecutionPublishingJdo.java          |  3 +-
 .../jpa/ActionExecutionPublishingJpa.java          |  6 +-
 .../actions/Action/hidden/ActionHiddenVm.java      |  6 +-
 .../Action/restrictTo/ActionRestrictToVm.java      |  6 +-
 .../Action/semantics/ActionSemanticsVm.java        |  6 +-
 .../actions/Action/typeOf/ActionTypeOfVm.java      |  6 +-
 .../Action/typeOf/child/ActionTypeOfChildVm.java   |  6 +-
 .../position/ActionLayoutPositionVm.java           |  5 +-
 .../promptStyle/ActionLayoutPromptStyleVm.java     |  6 +-
 .../progmodel/assoc/AssociatedActionDemo.java      |  4 +-
 .../domain/actions/progmodel/assoc/DemoItem.java   |  5 +-
 .../domain/actions/progmodel/depargs/DemoItem.java |  4 +-
 .../progmodel/depargs/DependentArgsActionDemo.java |  6 +-
 .../domainEvent/CollectionDomainEventVm.java       |  3 +-
 .../child/CollectionDomainEventChildVm.java        |  6 +-
 .../DomainObjectEntityChangePublishingEntity.java  |  7 +-
 .../DomainObjectEntityChangePublishingVm.java      |  7 +-
 ...ObjectEntityChangePublishingDisabledEntity.java |  7 +-
 ...ainObjectEntityChangePublishingDisabledJdo.java |  5 +-
 ...ainObjectEntityChangePublishingDisabledJpa.java |  3 +-
 ...nObjectEntityChangePublishingEnabledEntity.java |  7 +-
 ...mainObjectEntityChangePublishingEnabledJdo.java |  5 +-
 ...mainObjectEntityChangePublishingEnabledJpa.java |  3 +-
 ...ChangePublishingEnabledMetaAnnotatedEntity.java |  7 +-
 ...ityChangePublishingEnabledMetaAnnotatedJdo.java |  5 +-
 ...ityChangePublishingEnabledMetaAnnotatedJpa.java |  3 +-
 ...PublishingEnabledMetaAnnotOverriddenEntity.java |  7 +-
 ...ngePublishingEnabledMetaAnnotOverriddenJdo.java |  5 +-
 ...ngePublishingEnabledMetaAnnotOverriddenJpa.java |  3 +-
 .../viewmodels/jaxbrefentity/JaxbRefEntity.java    |  7 +-
 .../jaxbrefentity/StatefulVmJaxbRefsEntity.java    |  6 +-
 .../viewmodels/jaxbrefentity/jdo/JaxbRefJdo.java   |  5 +-
 .../viewmodels/jaxbrefentity/jpa/JaxbRefJpa.java   |  5 +-
 .../viewmodels/usingjaxb/StatefulVmUsingJaxb.java  | 10 +--
 .../objects/other/embedded/EmbeddedTypeVm.java     |  4 +-
 .../other/embedded/jdo/NumberConstantJdo.java      |  4 +-
 .../other/embedded/jpa/NumberConstantJpa.java      |  4 +-
 .../embedded/persistence/NumberConstantEntity.java |  7 +-
 .../objects/other/mixins/FibonacciNumberVm.java    |  8 +-
 .../dom/domain/objects/other/mixins/MixinVm.java   |  4 +-
 .../PropertyCommandPublishingEntity.java           |  7 +-
 .../jdo/PropertyCommandPublishingJdo.java          |  3 +-
 .../jpa/PropertyCommandPublishingJpa.java          |  6 +-
 .../domainEvent/PropertyDomainEventVm.java         |  6 +-
 .../Property/editing/PropertyEditingVm.java        |  3 +-
 .../PropertyExecutionPublishingEntity.java         |  7 +-
 .../jdo/PropertyExecutionPublishingJdo.java        |  6 +-
 .../jpa/PropertyExecutionPublishingJpa.java        |  6 +-
 .../Property/fileAccept/PropertyFileAcceptVm.java  |  6 +-
 .../Property/hidden/PropertyHiddenVm.java          |  6 +-
 .../hidden/child/PropertyHiddenChildVm.java        |  6 +-
 .../Property/maxLength/PropertyMaxLengthVm.java    |  6 +-
 .../mustSatisfy/PropertyMustSatisfyVm.java         |  6 +-
 .../optionality/PropertyOptionalityVm.java         |  6 +-
 .../Property/projecting/PropertyProjectingVm.java  |  6 +-
 .../child/PropertyProjectingChildVm.java           |  6 +-
 .../projecting/jdo/PropertyProjectingChildJdo.java |  3 +-
 .../projecting/jpa/PropertyProjectingChildJpa.java |  6 +-
 .../persistence/PropertyProjectingChildEntity.java |  7 +-
 .../regexPattern/PropertyRegexPatternVm.java       |  6 +-
 .../Property/snapshot/PropertySnapshotVm.java      |  6 +-
 .../cssClass/PropertyLayoutCssClassVm.java         |  6 +-
 .../describedAs/PropertyLayoutDescribedAsVm.java   |  6 +-
 .../hidden/PropertyLayoutHiddenVm.java             |  6 +-
 .../hidden/child/PropertyLayoutHiddenChildVm.java  |  6 +-
 .../PropertyLayoutLabelPositionVm.java             |  6 +-
 .../multiLine/PropertyLayoutMultiLineVm.java       |  6 +-
 .../named/PropertyLayoutNamedVm.java               |  6 +-
 .../PropertyLayout/navigable/FileNodeVm.java       |  4 +-
 .../renderDay/PropertyLayoutRenderDayVm.java       |  9 ++-
 .../repainting/PropertyLayoutRepaintingVm.java     |  6 +-
 .../PropertyLayoutTypicalLengthVm.java             |  6 +-
 .../featured/customui/vm/WhereInTheWorldVm.java    |  9 ++-
 .../featured/layout/describedAs/DescribedAsVm.java |  4 +-
 .../demoapp/dom/featured/layout/tabs/TabDemo.java  |  4 +-
 .../java/demoapp/dom/homepage/DemoHomePage.java    |  6 +-
 .../ErrorReportingServiceDemoVm.java               |  4 +-
 .../eventbusservice/EventBusServiceDemoVm.java     |  7 +-
 .../core/eventbusservice/EventLogEntry.java        |  5 +-
 .../core/eventbusservice/EventLogEntryJdo.java     |  4 +-
 .../core/eventbusservice/EventLogEntryJpa.java     |  4 +-
 .../EventSubscriberDemoImplementation.java         |  4 +-
 .../core/messageservice/MessageServiceDemoVm.java  |  6 +-
 .../core/wrapperFactory/WrapperFactoryEntity.java  |  7 +-
 .../core/wrapperFactory/jdo/WrapperFactoryJdo.java |  3 +-
 .../core/wrapperFactory/jpa/WrapperFactoryJpa.java |  3 +-
 .../xmlSnapshotService/XmlSnapshotParentVm.java    |  6 +-
 .../child/XmlSnapshotChildVm.java                  |  8 +-
 .../xmlSnapshotService/peer/XmlSnapshotPeerVm.java |  8 +-
 .../peer/child/XmlSnapshotPeerChildVm.java         |  8 +-
 .../extensions/secman/apptenancy/AppTenancyVm.java |  6 +-
 .../secman/apptenancy/jdo/TenantedJdo.java         |  6 +-
 .../secman/apptenancy/jpa/TenantedJpa.java         |  6 +-
 .../apptenancy/persistence/TenantedEntity.java     |  7 +-
 .../demoapp/dom/types/isis/blobs/IsisBlobs.java    |  4 +-
 .../dom/types/isis/blobs/jdo/IsisBlobJdo.java      |  8 +-
 .../dom/types/isis/blobs/jpa/IsisBlobJpa.java      | 16 +++-
 .../isis/blobs/persistence/IsisBlobEntity.java     |  7 +-
 .../dom/types/isis/blobs/vm/IsisBlobVm.java        |  6 +-
 .../demoapp/dom/types/isis/clobs/IsisClobs.java    |  4 +-
 .../dom/types/isis/clobs/jdo/IsisClobJdo.java      |  8 +-
 .../dom/types/isis/clobs/jpa/IsisClobJpa.java      |  6 +-
 .../isis/clobs/persistence/IsisClobEntity.java     |  7 +-
 .../dom/types/isis/clobs/vm/IsisClobVm.java        |  8 +-
 .../localresourcepaths/IsisLocalResourcePaths.java |  4 +-
 .../jdo/IsisLocalResourcePathJdo.java              |  8 +-
 .../jpa/IsisLocalResourcePathJpa.java              |  6 +-
 .../persistence/IsisLocalResourcePathEntity.java   |  7 +-
 .../vm/IsisLocalResourcePathVm.java                |  8 +-
 .../dom/types/isis/markups/IsisMarkups.java        |  4 +-
 .../dom/types/isis/markups/jdo/IsisMarkupJdo.java  |  8 +-
 .../dom/types/isis/markups/jpa/IsisMarkupJpa.java  |  6 +-
 .../isis/markups/persistence/IsisMarkupEntity.java |  7 +-
 .../dom/types/isis/markups/vm/IsisMarkupVm.java    |  6 +-
 .../dom/types/isis/passwords/IsisPasswords.java    |  4 +-
 .../types/isis/passwords/jdo/IsisPasswordJdo.java  |  8 +-
 .../types/isis/passwords/jpa/IsisPasswordJpa.java  |  6 +-
 .../passwords/persistence/IsisPasswordEntity.java  |  8 +-
 .../types/isis/passwords/vm/IsisPasswordVm.java    |  6 +-
 .../dom/types/isisext/asciidocs/IsisAsciiDocs.java |  4 +-
 .../isisext/asciidocs/jdo/IsisAsciiDocJdo.java     |  6 +-
 .../isisext/asciidocs/jpa/IsisAsciiDocJpa.java     |  6 +-
 .../asciidocs/persistence/IsisAsciiDocEntity.java  |  7 +-
 .../types/isisext/asciidocs/vm/IsisAsciiDocVm.java |  6 +-
 .../dom/types/isisext/cal/IsisCalendarEvents.java  |  4 +-
 .../isisext/cal/jdo/IsisCalendarEventJdo.java      |  6 +-
 .../isisext/cal/jpa/IsisCalendarEventJpa.java      |  6 +-
 .../cal/persistence/IsisCalendarEventEntity.java   |  7 +-
 .../types/isisext/cal/vm/IsisCalendarEventVm.java  |  6 +-
 .../dom/types/isisext/markdowns/IsisMarkdowns.java |  4 +-
 .../isisext/markdowns/jdo/IsisMarkdownJdo.java     |  6 +-
 .../isisext/markdowns/jpa/IsisMarkdownJpa.java     |  6 +-
 .../markdowns/persistence/IsisMarkdownEntity.java  |  7 +-
 .../types/isisext/markdowns/vm/IsisMarkdownVm.java |  6 +-
 .../dom/types/isisext/sse/AsyncActionDemo.java     |  4 +-
 .../demoapp/dom/types/isisext/sse/DemoTask.java    |  5 +-
 .../javaawt/images/JavaAwtBufferedImages.java      |  4 +-
 .../images/jdo/JavaAwtBufferedImageJdo.java        |  6 +-
 .../images/jpa/JavaAwtBufferedImageJpa.java        |  6 +-
 .../persistence/JavaAwtBufferedImageEntity.java    | 11 +--
 .../javaawt/images/vm/JavaAwtBufferedImageVm.java  |  6 +-
 .../types/javalang/booleans/WrapperBooleans.java   |  4 +-
 .../javalang/booleans/jdo/WrapperBooleanJdo.java   |  8 +-
 .../javalang/booleans/jpa/WrapperBooleanJpa.java   |  6 +-
 .../booleans/persistence/WrapperBooleanEntity.java |  7 +-
 .../javalang/booleans/vm/WrapperBooleanVm.java     |  8 +-
 .../dom/types/javalang/bytes/WrapperBytes.java     |  5 +-
 .../types/javalang/bytes/jdo/WrapperByteJdo.java   |  8 +-
 .../types/javalang/bytes/jpa/WrapperByteJpa.java   |  6 +-
 .../bytes/persistence/WrapperByteEntity.java       |  7 +-
 .../dom/types/javalang/bytes/vm/WrapperByteVm.java |  8 +-
 .../javalang/characters/WrapperCharacters.java     |  4 +-
 .../characters/jdo/WrapperCharacterJdo.java        |  8 +-
 .../characters/jpa/WrapperCharacterJpa.java        |  6 +-
 .../persistence/WrapperCharacterEntity.java        |  7 +-
 .../javalang/characters/vm/WrapperCharacterVm.java |  8 +-
 .../dom/types/javalang/doubles/WrapperDoubles.java |  4 +-
 .../javalang/doubles/jdo/WrapperDoubleJdo.java     |  8 +-
 .../javalang/doubles/jpa/WrapperDoubleJpa.java     |  6 +-
 .../doubles/persistence/WrapperDoubleEntity.java   |  7 +-
 .../types/javalang/doubles/vm/WrapperDoubleVm.java |  8 +-
 .../dom/types/javalang/floats/WrapperFloats.java   |  4 +-
 .../types/javalang/floats/jdo/WrapperFloatJdo.java |  8 +-
 .../types/javalang/floats/jpa/WrapperFloatJpa.java |  6 +-
 .../floats/persistence/WrapperFloatEntity.java     |  7 +-
 .../types/javalang/floats/vm/WrapperFloatVm.java   |  8 +-
 .../types/javalang/integers/WrapperIntegers.java   |  4 +-
 .../javalang/integers/jdo/WrapperIntegerJdo.java   |  8 +-
 .../javalang/integers/jpa/WrapperIntegerJpa.java   |  6 +-
 .../integers/persistence/WrapperIntegerEntity.java |  7 +-
 .../javalang/integers/vm/WrapperIntegerVm.java     |  8 +-
 .../dom/types/javalang/longs/WrapperLongs.java     |  4 +-
 .../types/javalang/longs/jdo/WrapperLongJdo.java   |  8 +-
 .../types/javalang/longs/jpa/WrapperLongJpa.java   |  6 +-
 .../longs/persistence/WrapperLongEntity.java       |  7 +-
 .../dom/types/javalang/longs/vm/WrapperLongVm.java |  8 +-
 .../dom/types/javalang/shorts/WrapperShorts.java   |  4 +-
 .../types/javalang/shorts/jdo/WrapperShortJdo.java |  8 +-
 .../types/javalang/shorts/jpa/WrapperShortJpa.java |  6 +-
 .../shorts/persistence/WrapperShortEntity.java     |  7 +-
 .../types/javalang/shorts/vm/WrapperShortVm.java   |  8 +-
 .../types/javalang/strings/JavaLangStrings.java    |  4 +-
 .../javalang/strings/jdo/JavaLangStringJdo.java    |  8 +-
 .../javalang/strings/jpa/JavaLangStringJpa.java    |  6 +-
 .../strings/persistence/JavaLangStringEntity.java  |  7 +-
 .../javalang/strings/vm/JavaLangStringVm.java      |  6 +-
 .../dom/types/javalang/voids/JavaLangVoids.java    |  4 +-
 .../javamath/bigdecimals/JavaMathBigDecimals.java  |  4 +-
 .../bigdecimals/jdo/JavaMathBigDecimalJdo.java     |  6 +-
 .../bigdecimals/jpa/JavaMathBigDecimalJpa.java     |  6 +-
 .../persistence/JavaMathBigDecimalEntity.java      |  7 +-
 .../bigdecimals/vm/JavaMathBigDecimalVm.java       | 11 +--
 .../javamath/bigintegers/JavaMathBigIntegers.java  |  4 +-
 .../bigintegers/jdo/JavaMathBigIntegerJdo.java     |  8 +-
 .../bigintegers/jpa/JavaMathBigIntegerJpa.java     |  6 +-
 .../persistence/JavaMathBigIntegerEntity.java      |  7 +-
 .../bigintegers/vm/JavaMathBigIntegerVm.java       |  8 +-
 .../dom/types/javanet/urls/JavaNetUrls.java        |  4 +-
 .../dom/types/javanet/urls/jdo/JavaNetUrlJdo.java  |  8 +-
 .../dom/types/javanet/urls/jpa/JavaNetUrlJpa.java  |  6 +-
 .../javanet/urls/persistence/JavaNetUrlEntity.java |  7 +-
 .../dom/types/javanet/urls/vm/JavaNetUrlVm.java    |  8 +-
 .../types/javasql/javasqldate/JavaSqlDates.java    |  4 +-
 .../javasql/javasqldate/jdo/JavaSqlDateJdo.java    |  8 +-
 .../javasql/javasqldate/jpa/JavaSqlDateJpa.java    |  6 +-
 .../javasqldate/persistence/JavaSqlDateEntity.java |  7 +-
 .../javasql/javasqldate/vm/JavaSqlDateVm.java      |  8 +-
 .../javasqltimestamp/JavaSqlTimestamps.java        |  4 +-
 .../javasqltimestamp/jdo/JavaSqlTimestampJdo.java  |  8 +-
 .../javasqltimestamp/jpa/JavaSqlTimestampJpa.java  |  6 +-
 .../persistence/JavaSqlTimestampEntity.java        |  7 +-
 .../javasqltimestamp/vm/JavaSqlTimestampVm.java    |  8 +-
 .../javatimelocaldate/JavaTimeLocalDates.java      |  4 +-
 .../jdo/JavaTimeLocalDateJdo.java                  |  8 +-
 .../jpa/JavaTimeLocalDateJpa.java                  |  6 +-
 .../persistence/JavaTimeLocalDateEntity.java       |  7 +-
 .../javatimelocaldate/vm/JavaTimeLocalDateVm.java  |  8 +-
 .../JavaTimeLocalDateTimes.java                    |  4 +-
 .../jdo/JavaTimeLocalDateTimeJdo.java              |  8 +-
 .../jpa/JavaTimeLocalDateTimeJpa.java              |  6 +-
 .../persistence/JavaTimeLocalDateTimeEntity.java   |  7 +-
 .../vm/JavaTimeLocalDateTimeVm.java                |  8 +-
 .../javatimelocaltime/JavaTimeLocalTimes.java      |  4 +-
 .../jdo/JavaTimeLocalTimeJdo.java                  |  9 ++-
 .../jpa/JavaTimeLocalTimeJpa.java                  |  9 ++-
 .../persistence/JavaTimeLocalTimeEntity.java       |  7 +-
 .../javatimelocaltime/vm/JavaTimeLocalTimeVm.java  | 11 +--
 .../JavaTimeOffsetDateTimes.java                   |  4 +-
 .../jdo/JavaTimeOffsetDateTimeJdo.java             |  8 +-
 .../jpa/JavaTimeOffsetDateTimeJpa.java             |  6 +-
 .../persistence/JavaTimeOffsetDateTimeEntity.java  |  7 +-
 .../vm/JavaTimeOffsetDateTimeVm.java               |  8 +-
 .../javatimeoffsettime/JavaTimeOffsetTimes.java    |  4 +-
 .../jdo/JavaTimeOffsetTimeJdo.java                 |  8 +-
 .../jpa/JavaTimeOffsetTimeJpa.java                 |  6 +-
 .../persistence/JavaTimeOffsetTimeEntity.java      |  7 +-
 .../vm/JavaTimeOffsetTimeVm.java                   |  8 +-
 .../JavaTimeZonedDateTimes.java                    |  4 +-
 .../jdo/JavaTimeZonedDateTimeJdo.java              |  8 +-
 .../jpa/JavaTimeZonedDateTimeJpa.java              |  6 +-
 .../persistence/JavaTimeZonedDateTimeEntity.java   |  7 +-
 .../vm/JavaTimeZonedDateTimeVm.java                |  8 +-
 .../types/javautil/javautildate/JavaUtilDates.java |  4 +-
 .../javautil/javautildate/jdo/JavaUtilDateJdo.java |  8 +-
 .../javautil/javautildate/jpa/JavaUtilDateJpa.java |  6 +-
 .../persistence/JavaUtilDateEntity.java            |  7 +-
 .../javautil/javautildate/vm/JavaUtilDateVm.java   |  8 +-
 .../dom/types/javautil/uuids/JavaUtilUuids.java    |  4 +-
 .../types/javautil/uuids/jdo/JavaUtilUuidJdo.java  |  8 +-
 .../types/javautil/uuids/jpa/JavaUtilUuidJpa.java  |  6 +-
 .../uuids/persistence/JavaUtilUuidEntity.java      |  7 +-
 .../types/javautil/uuids/vm/JavaUtilUuidVm.java    |  8 +-
 .../types/jodatime/jodadatetime/JodaDateTimes.java |  4 +-
 .../jodatime/jodadatetime/jdo/JodaDateTimeJdo.java |  8 +-
 .../persistence/JodaDateTimeEntity.java            |  7 +-
 .../jodatime/jodadatetime/vm/JodaDateTimeVm.java   | 11 +--
 .../jodatime/jodalocaldate/JodaLocalDates.java     |  4 +-
 .../jodalocaldate/jdo/JodaLocalDateJdo.java        |  8 +-
 .../persistence/JodaLocalDateEntity.java           |  7 +-
 .../jodatime/jodalocaldate/vm/JodaLocalDateVm.java | 11 +--
 .../jodalocaldatetime/JodaLocalDateTimes.java      |  4 +-
 .../jdo/JodaLocalDateTimeJdo.java                  |  8 +-
 .../persistence/JodaLocalDateTimeEntity.java       |  7 +-
 .../jodalocaldatetime/vm/JodaLocalDateTimeVm.java  | 11 +--
 .../jodatime/jodalocaltime/JodaLocalTimes.java     |  4 +-
 .../jodalocaltime/jdo/JodaLocalTimeJdo.java        |  8 +-
 .../persistence/JodaLocalTimeEntity.java           |  7 +-
 .../jodatime/jodalocaltime/vm/JodaLocalTimeVm.java | 11 +--
 .../primitive/booleans/PrimitiveBooleans.java      |  6 +-
 .../booleans/jdo/PrimitiveBooleanJdo.java          |  6 +-
 .../booleans/jpa/PrimitiveBooleanJpa.java          |  6 +-
 .../persistence/PrimitiveBooleanEntity.java        |  7 +-
 .../primitive/booleans/vm/PrimitiveBooleanVm.java  |  8 +-
 .../dom/types/primitive/bytes/PrimitiveBytes.java  |  6 +-
 .../primitive/bytes/jdo/PrimitiveByteJdo.java      |  8 +-
 .../primitive/bytes/jpa/PrimitiveByteJpa.java      |  6 +-
 .../bytes/persistence/PrimitiveByteEntity.java     |  7 +-
 .../types/primitive/bytes/vm/PrimitiveByteVm.java  |  8 +-
 .../dom/types/primitive/chars/PrimitiveChars.java  |  6 +-
 .../primitive/chars/jdo/PrimitiveCharJdo.java      |  8 +-
 .../primitive/chars/jpa/PrimitiveCharJpa.java      |  6 +-
 .../chars/persistence/PrimitiveCharEntity.java     |  7 +-
 .../types/primitive/chars/vm/PrimitiveCharVm.java  |  8 +-
 .../types/primitive/doubles/PrimitiveDoubles.java  |  6 +-
 .../primitive/doubles/jdo/PrimitiveDoubleJdo.java  |  8 +-
 .../primitive/doubles/jpa/PrimitiveDoubleJpa.java  |  6 +-
 .../doubles/persistence/PrimitiveDoubleEntity.java |  7 +-
 .../primitive/doubles/vm/PrimitiveDoubleVm.java    |  8 +-
 .../types/primitive/floats/PrimitiveFloats.java    |  6 +-
 .../primitive/floats/jdo/PrimitiveFloatJdo.java    |  8 +-
 .../primitive/floats/jpa/PrimitiveFloatJpa.java    |  6 +-
 .../floats/persistence/PrimitiveFloatEntity.java   |  7 +-
 .../primitive/floats/vm/PrimitiveFloatVm.java      |  8 +-
 .../dom/types/primitive/ints/PrimitiveInts.java    |  6 +-
 .../types/primitive/ints/jdo/PrimitiveIntJdo.java  |  8 +-
 .../types/primitive/ints/jpa/PrimitiveIntJpa.java  |  6 +-
 .../ints/persistence/PrimitiveIntEntity.java       |  7 +-
 .../types/primitive/ints/vm/PrimitiveIntVm.java    |  8 +-
 .../dom/types/primitive/longs/PrimitiveLongs.java  |  6 +-
 .../primitive/longs/jdo/PrimitiveLongJdo.java      |  8 +-
 .../primitive/longs/jpa/PrimitiveLongJpa.java      |  6 +-
 .../longs/persistence/PrimitiveLongEntity.java     |  7 +-
 .../types/primitive/longs/vm/PrimitiveLongVm.java  |  8 +-
 .../types/primitive/shorts/PrimitiveShorts.java    |  6 +-
 .../primitive/shorts/jdo/PrimitiveShortJdo.java    |  8 +-
 .../primitive/shorts/jpa/PrimitiveShortJpa.java    |  6 +-
 .../shorts/persistence/PrimitiveShortEntity.java   |  7 +-
 .../primitive/shorts/vm/PrimitiveShortVm.java      |  8 +-
 .../BulkUpdateLineItemForDemoToDoItem.java         |  8 +-
 .../BulkUpdateManagerForDemoToDoItem.java          |  6 +-
 .../pivot/ExcelPivotByCategoryAndSubcategory.java  |  7 +-
 .../ExcelUploadRowHandler4ToDoItem.java            | 10 +--
 .../DemoFixture_extending_ExcelFixture2.java       |  9 ++-
 .../extensions/excel/testing/ExcelFixture.java     |  8 +-
 .../extensions/excel/testing/ExcelFixture2.java    |  8 +-
 .../commandlog/applib/command/CommandLog.java      |  6 +-
 .../commandlog/jdo/entities/CommandJdo.java        |  6 +-
 .../commandlog/jpa/entities/CommandJpa.java        |  3 +-
 .../feature/api/ApplicationFeatureChoices.java     |  6 +-
 .../app/ApplicationOrphanedPermissionManager.java  |  6 +-
 .../permission/dom/ApplicationPermission.java      |  6 +-
 .../secman/applib/role/dom/ApplicationRole.java    |  6 +-
 .../applib/role/man/ApplicationRoleManager.java    |  6 +-
 .../applib/tenancy/dom/ApplicationTenancy.java     |  7 +-
 .../tenancy/man/ApplicationTenancyManager.java     |  6 +-
 .../secman/applib/user/dom/ApplicationUser.java    |  6 +-
 .../dom/mixins/perms/UserPermissionViewModel.java  |  6 +-
 .../applib/user/man/ApplicationUserManager.java    |  6 +-
 .../jdo/permission/dom/ApplicationPermission.java  | 16 ++--
 .../secman/jdo/role/dom/ApplicationRole.java       |  7 +-
 .../secman/jdo/tenancy/dom/ApplicationTenancy.java | 17 ++---
 .../secman/jdo/user/dom/ApplicationUser.java       |  6 +-
 .../jpa/permission/dom/ApplicationPermission.java  |  6 +-
 .../secman/jpa/role/dom/ApplicationRole.java       |  3 +-
 .../secman/jpa/tenancy/dom/ApplicationTenancy.java | 17 ++---
 .../secman/jpa/user/dom/ApplicationUser.java       |  6 +-
 .../fullcalendar/applib/value/CalendarEvent.java   |  5 +-
 .../graphql/viewer/source/gqltestdomain/E1.java    | 19 +++--
 .../graphql/viewer/source/gqltestdomain/E2.java    | 31 ++++++--
 .../source/gqltestdomain/GQLTestDomainMenu.java    | 21 +++--
 .../jdo/metamodel/beans/JdoBeanTypeClassifier.java |  7 ++
 .../DomainModelTest_usingBadDomain.java            | 27 ++++---
 .../testdomain/interact/CommandArgumentTest.java   |  7 +-
 .../testdomain/viewers/jdo/wkt/TestAppJdoWkt.java  |  6 +-
 .../testdomain/viewers/jpa/wkt/TestAppJpaWkt.java  |  6 +-
 .../isis/testdomain/jdo/JdoInventoryJaxbVm.java    |  6 +-
 .../isis/testdomain/jdo/entities/JdoBook.java      |  5 +-
 .../isis/testdomain/jdo/entities/JdoInventory.java |  3 +-
 .../isis/testdomain/jdo/entities/JdoProduct.java   |  7 +-
 .../testdomain/jdo/entities/JdoProductComment.java |  5 +-
 .../isis/testdomain/jpa/JpaInventoryJaxbVm.java    |  6 +-
 .../isis/testdomain/jpa/entities/JpaBook.java      |  5 +-
 .../jpa/entities/JpaEntityGeneratedLongId.java     |  5 +-
 .../entities/JpaEntityNonGeneratedStringId.java    |  3 +-
 .../isis/testdomain/jpa/entities/JpaInventory.java |  3 +-
 .../isis/testdomain/jpa/entities/JpaProduct.java   |  5 +-
 .../testdomain/jpa/entities/JpaProductComment.java |  5 +-
 .../isis/testdomain/jpa/springdata/Employee.java   |  6 +-
 .../testdomain/jpa/springdata/EmployeeManager.java |  4 +-
 .../testdomain/model/actnsemantics/BlobDemo.java   |  4 +-
 .../model/bad/InvalidLogicalTypeNameClash.java     | 22 +++---
 .../testdomain/model/good/ElementTypeConcrete.java |  5 +-
 .../model/interaction/InteractionDemo.java         |  4 +-
 .../model/interaction/InteractionNpmDemo.java      |  4 +-
 .../isis/testdomain/model/layout/LayoutDemo.java   |  4 +-
 .../model/valuetypes/ValueTypeExample.java         | 89 +++++++++++-----------
 .../valuetypes/composite/CalendarEventJaxbVm.java  |  6 +-
 .../applib/classrules/ArchitectureDomainRules.java | 38 +++------
 .../applib/classrules/ArchitectureJdoRules.java    | 14 ++--
 .../applib/classrules/_LogicalNaming.java          | 63 +++++++++++++++
 .../applib/domain/DomainArchTests.java             |  8 +-
 .../applib/domain/dom/SerializableViewModel.java   |  4 +-
 .../applib/domain/dom/SomeDomainObject.java        |  5 +-
 .../applib/fixturescripts/FixtureResult.java       |  8 +-
 .../valuetypes/asciidoc/applib/value/AsciiDoc.java |  5 +-
 .../valuetypes/markdown/applib/value/Markdown.java |  5 +-
 438 files changed, 1800 insertions(+), 1329 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
index 1d2a0775e6..37a6921852 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/SemanticsOf.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.applib.annotation;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.util.Enums;
 
@@ -25,7 +27,8 @@ import org.apache.isis.applib.util.Enums;
  * @since 1.x {@index}
  * @see <a href="https://isis.apache.org/guides/rgant/rgant.html#_rgant-Action_semantics">Reference Guide</a>
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".annotation.SemanticsOf")
+@Named(IsisModuleApplib.NAMESPACE + ".annotation.SemanticsOf")
+@Value
 public enum SemanticsOf {
 
     /**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/Value.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/Value.java
index e268d2162d..5ed5ed72a5 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/Value.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/Value.java
@@ -48,10 +48,10 @@ public @interface Value {
      * <p>
      * If not specified, the fully qualified class name is used instead.
      * </p>
-     *
-     * @see DomainObject#logicalTypeName()
+      * @deprecated use {@link Named} instead
      * @see Named
      */
+    @Deprecated(forRemoval = true, since = "2.0.0-RC1")
     String logicalTypeName()
             default "";
 
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 eb9f6af9d2..facfc85d76 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
@@ -21,6 +21,7 @@ package org.apache.isis.applib.domain;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -67,17 +68,15 @@ import lombok.Getter;
         }
         )
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named(DomainObjectList.LOGICAL_TYPE_NAME)
 @DomainObject(
-        logicalTypeName = DomainObjectList.LOGICAL_TYPE_NAME,
         editing = Editing.DISABLED,
-        nature = Nature.VIEW_MODEL
-        )
+        nature = Nature.VIEW_MODEL)
 @DomainObjectLayout(
         titleUiEvent = DomainObjectList.TitleUiEvent.class,
         iconUiEvent = DomainObjectList.IconUiEvent.class,
         cssClassUiEvent = DomainObjectList.CssClassUiEvent.class,
-        layoutUiEvent = DomainObjectList.LayoutUiEvent.class
-        )
+        layoutUiEvent = DomainObjectList.LayoutUiEvent.class)
 public class DomainObjectList {
 
     public static final String LOGICAL_TYPE_NAME = "isis.applib.DomainObjectList";
diff --git a/api/applib/src/main/java/org/apache/isis/applib/graph/SimpleEdge.java b/api/applib/src/main/java/org/apache/isis/applib/graph/SimpleEdge.java
index f2ab381d74..85eb0edbb8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/graph/SimpleEdge.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/SimpleEdge.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.applib.graph;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Value;
 
@@ -30,7 +32,8 @@ import org.apache.isis.applib.annotation.Value;
  * @param <T> type constraint for values contained by this edge's vertices
  */
 @lombok.Value(staticConstructor = "of")
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".graph.SimpleEdge")
+@Named(IsisModuleApplib.NAMESPACE + ".graph.SimpleEdge")
+@Value
 public class SimpleEdge<T> implements Edge<T> {
 
     Vertex<T> from;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode.java b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode.java
index 5968861012..33ad9b1cf1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/graph/tree/TreeNode.java
@@ -27,6 +27,8 @@ import java.util.concurrent.atomic.LongAdder;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
+import javax.inject.Named;
+
 import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.IsisModuleApplib;
@@ -48,7 +50,8 @@ import lombok.SneakyThrows;
  *
  * @param <T> type constraint for values contained by this node
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".graph.tree.TreeNode")
+@Named(IsisModuleApplib.NAMESPACE + ".graph.tree.TreeNode")
+@Value
 public class TreeNode<T> implements Vertex<T> {
 
     private final TreeState sharedState;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/id/LogicalType.java b/api/applib/src/main/java/org/apache/isis/applib/id/LogicalType.java
index 154eb15b30..fe40ab9113 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/id/LogicalType.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/id/LogicalType.java
@@ -24,11 +24,16 @@ import java.io.Serializable;
 import java.util.Objects;
 import java.util.function.Supplier;
 
+import javax.inject.Named;
+
 import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.commons.internal.reflection._Annotations;
 
 import lombok.Getter;
 import lombok.NonNull;
@@ -103,6 +108,56 @@ implements
         return eager(correspondingClass, correspondingClass.getName());
     }
 
+    /**
+     * Infer from annotations.
+     */
+    public static LogicalType infer(
+            final @NonNull Class<?> correspondingClass) {
+
+        // has precedence, over any former (deprecated) naming strategies
+        val named = _Strings.emptyToNull(
+                _Annotations.synthesize(correspondingClass, Named.class)
+                .map(Named::value)
+                .orElse(null));
+        if(named!=null) {
+            return eager(correspondingClass, named);
+        }
+
+        // 3x deprecated naming strategies ...
+
+        {
+            val logicalTypeName = _Strings.emptyToNull(
+                    _Annotations.synthesize(correspondingClass, DomainObject.class)
+                    .map(DomainObject::logicalTypeName)
+                    .orElse(null));
+            if(logicalTypeName!=null) {
+                return eager(correspondingClass, logicalTypeName);
+            }
+        }
+
+        {
+            val logicalTypeName = _Strings.emptyToNull(
+                    _Annotations.synthesize(correspondingClass, DomainService.class)
+                    .map(DomainService::logicalTypeName)
+                    .orElse(null));
+            if(logicalTypeName!=null) {
+                return eager(correspondingClass, logicalTypeName);
+            }
+        }
+
+        {
+            val logicalTypeName = _Strings.emptyToNull(
+                    _Annotations.synthesize(correspondingClass, Value.class)
+                    .map(Value::logicalTypeName)
+                    .orElse(null));
+            if(logicalTypeName!=null) {
+                return eager(correspondingClass, logicalTypeName);
+            }
+        }
+        // fallback to fqcn
+        return eager(correspondingClass, correspondingClass.getName());
+    }
+
     // -- HIDDEN CONSTRUTORS
 
     private LogicalType(
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java
index aac21661c0..89f3c78f40 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeature.java
@@ -18,20 +18,23 @@
  */
 package org.apache.isis.applib.services.appfeat;
 
-import org.apache.isis.applib.IsisModuleApplib;
-import org.apache.isis.applib.annotation.SemanticsOf;
-import org.apache.isis.applib.annotation.Value;
-
 import java.util.Collections;
 import java.util.Optional;
 import java.util.OptionalInt;
 import java.util.SortedSet;
 
+import javax.inject.Named;
+
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.annotation.Value;
+
 /**
  *
  * @since 1.x revised for 2.0 {@index}
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE_SUDO + ".ApplicationFeature")
+@Named(IsisModuleApplib.NAMESPACE_SUDO + ".ApplicationFeature")
+@Value
 public interface ApplicationFeature {
 
     ApplicationFeatureId getFeatureId();
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureSort.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureSort.java
index bc6bea01aa..af59ff92df 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureSort.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeat/ApplicationFeatureSort.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.applib.services.appfeat;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Value;
 
@@ -25,7 +27,8 @@ import org.apache.isis.applib.annotation.Value;
  *
  * @since 1.x revised for 2.0 {@index}
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationFeatureSort")
+@Named(IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationFeatureSort")
+@Value
 public enum ApplicationFeatureSort {
 
     /**
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 32fcb3b794..4497c703d1 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
@@ -27,6 +27,7 @@ import java.util.Optional;
 import java.util.function.Function;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.ViewModel;
@@ -63,9 +64,8 @@ import lombok.val;
  *
  * @since 2.x  {@index}
  */
-@DomainObject(
-    logicalTypeName = ApplicationFeatureViewModel.LOGICAL_TYPE_NAME
-)
+@Named(ApplicationFeatureViewModel.LOGICAL_TYPE_NAME)
+@DomainObject
 public abstract class ApplicationFeatureViewModel implements ViewModel {
 
     public static final String LOGICAL_TYPE_NAME = IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationFeatureViewModel";
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 dad01b67c6..f31befcdc6 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
@@ -25,6 +25,8 @@ import java.lang.annotation.Target;
 import java.util.List;
 import java.util.SortedSet;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
@@ -37,9 +39,8 @@ import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 /**
  * @since 2.x  {@index}
  */
-@DomainObject(
-        logicalTypeName = ApplicationNamespace.LOGICAL_TYPE_NAME
-)
+@Named(ApplicationNamespace.LOGICAL_TYPE_NAME)
+@DomainObject
 @DomainObjectLayout(paged=100)
 public class ApplicationNamespace extends ApplicationFeatureViewModel {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationType.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationType.java
index 97ac386088..2aa3951562 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationType.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationType.java
@@ -25,6 +25,8 @@ import java.lang.annotation.Target;
 import java.util.List;
 import java.util.SortedSet;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.Collection;
@@ -36,9 +38,8 @@ import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 /**
  * @since 2.x  {@index}
  */
-@DomainObject(
-        logicalTypeName = ApplicationType.LOGICAL_TYPE_NAME
-)
+@Named(ApplicationType.LOGICAL_TYPE_NAME)
+@DomainObject
 @DomainObjectLayout(
         bookmarking = BookmarkPolicy.AS_ROOT,
         paged=100
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeAction.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeAction.java
index fbeab65966..1a47ed0562 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeAction.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeAction.java
@@ -23,6 +23,8 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
@@ -34,9 +36,8 @@ import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 /**
  * @since 2.x  {@index}
  */
-@DomainObject(
-        logicalTypeName = ApplicationTypeAction.LOGICAL_TYPE_NAME
-)
+@Named(ApplicationTypeAction.LOGICAL_TYPE_NAME)
+@DomainObject
 @DomainObjectLayout(
         paged = 100
 )
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeCollection.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeCollection.java
index 880e7b9740..9f58f3e8a9 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeCollection.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeCollection.java
@@ -22,6 +22,8 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
@@ -32,9 +34,8 @@ import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 /**
  * @since 2.x  {@index}
  */
-@DomainObject(
-        logicalTypeName = ApplicationTypeCollection.LOGICAL_TYPE_NAME
-)
+@Named(ApplicationTypeCollection.LOGICAL_TYPE_NAME)
+@DomainObject
 @DomainObjectLayout(
         paged = 100
 )
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeMember.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeMember.java
index a45f0a79d9..51a3959dcb 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeMember.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeMember.java
@@ -23,6 +23,8 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.DomainObject;
@@ -36,9 +38,8 @@ import lombok.NoArgsConstructor;
 /**
  * @since 2.x  {@index}
  */
-@DomainObject(
-        logicalTypeName = ApplicationTypeMember.LOGICAL_TYPE_NAME
-)
+@Named(ApplicationTypeMember.LOGICAL_TYPE_NAME)
+@DomainObject
 @DomainObjectLayout(
         bookmarking = BookmarkPolicy.AS_CHILD
 )
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 792589d981..f40f993d3a 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
@@ -23,6 +23,8 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
@@ -37,9 +39,8 @@ import lombok.val;
 /**
  * @since 2.x  {@index}
  */
-@DomainObject(
-        logicalTypeName = ApplicationTypeProperty.LOGICAL_TYPE_NAME
-)
+@Named(ApplicationTypeProperty.LOGICAL_TYPE_NAME)
+@DomainObject
 @DomainObjectLayout(
         paged = 100
 )
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
index dc4347d199..118f54c803 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
@@ -22,6 +22,8 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.StringTokenizer;
 
+import javax.inject.Named;
+
 import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.IsisModuleApplib;
@@ -42,8 +44,8 @@ import lombok.val;
  *
  * @since 1.x revised for 2.0 {@index}
  */
-@org.apache.isis.applib.annotation.Value(
-        logicalTypeName = IsisModuleApplib.NAMESPACE + ".Bookmark")
+@Named(IsisModuleApplib.NAMESPACE + ".Bookmark")
+@org.apache.isis.applib.annotation.Value
 @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
 public final class Bookmark implements Oid {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
index 514877abfd..00f76c8c14 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/confview/ConfigurationProperty.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.applib.services.confview;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -45,10 +46,9 @@ import lombok.Setter;
                 "value"
         }
 )
+@Named(ConfigurationProperty.LOGICAL_TYPE_NAME)
 @DomainObject(
-        editing = Editing.DISABLED,
-        logicalTypeName = ConfigurationProperty.LOGICAL_TYPE_NAME
-        )
+        editing = Editing.DISABLED)
 @XmlAccessorType(XmlAccessType.FIELD)
 @DomainObjectLayout(paged = 999)
 @NoArgsConstructor
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 06a39b0184..445542d017 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
@@ -21,6 +21,8 @@ package org.apache.isis.applib.services.confview;
 import java.util.Collections;
 import java.util.Set;
 
+import javax.inject.Named;
+
 import org.springframework.beans.factory.annotation.Autowired;
 
 import org.apache.isis.applib.IsisModuleApplib;
@@ -29,9 +31,9 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 import org.apache.isis.applib.annotation.ObjectSupport;
 
+@Named(ConfigurationViewmodel.LOGICAL_TYPE_NAME)
 @DomainObject(
-        nature = Nature.VIEW_MODEL,
-        logicalTypeName = ConfigurationViewmodel.LOGICAL_TYPE_NAME)
+        nature = Nature.VIEW_MODEL)
 public class ConfigurationViewmodel {
 
     public static final String LOGICAL_TYPE_NAME = IsisModuleApplib.NAMESPACE_CONF + ".ConfigurationViewmodel";
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/IsisSchemas.java b/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/IsisSchemas.java
index 38df18d34e..cbdcd1aa89 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/IsisSchemas.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/jaxb/IsisSchemas.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.applib.services.jaxb;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.mixins.dto.Dto_downloadXsd;
@@ -35,7 +37,8 @@ import org.apache.isis.applib.mixins.dto.Dto_downloadXsd;
  * <a href="http://isis.apache.org/schema">downloaded</a> from the Isis website.
  * </p>
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.jaxb.IsisSchemas")
+@Named(IsisModuleApplib.NAMESPACE + ".services.jaxb.IsisSchemas")
+@Value
 public enum IsisSchemas {
     INCLUDE,
     IGNORE;
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/layout/Style.java b/api/applib/src/main/java/org/apache/isis/applib/services/layout/Style.java
index d76f463790..1ebd193aef 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/layout/Style.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/layout/Style.java
@@ -18,8 +18,9 @@
  */
 package org.apache.isis.applib.services.layout;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
-import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.layout.grid.Grid;
 
@@ -36,7 +37,8 @@ import org.apache.isis.applib.layout.grid.Grid;
  *
  * @since 1.x {@index}
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.layout.Style")
+@Named(IsisModuleApplib.NAMESPACE + ".services.layout.Style")
+@Value
 public enum Style {
 
     /**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java b/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
index 8a2c3e38d7..680c1b629e 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/menu/MenuBarsService.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.applib.services.menu;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.layout.menubars.MenuBars;
@@ -37,7 +39,8 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
  */
 public interface MenuBarsService {
 
-    @Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.menu.MenuBarsService.Type")
+    @Named(IsisModuleApplib.NAMESPACE + ".services.menu.MenuBarsService.Type")
+    @Value
     enum Type {
 
         /**
@@ -74,7 +77,7 @@ public interface MenuBarsService {
         return new MenuBarsService() {
 
             @Override
-            public MenuBars menuBars(Type type) {
+            public MenuBars menuBars(final Type type) {
                 throw _Exceptions.unsupportedOperation();
             }
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Format.java b/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Format.java
index 19c90b054f..13ef9b087c 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Format.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Format.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.applib.services.swagger;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Value;
 
@@ -26,7 +28,8 @@ import org.apache.isis.applib.annotation.Value;
  *
  * @since 1.x {@index}
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.swagger.Format")
+@Named(IsisModuleApplib.NAMESPACE + ".services.swagger.Format")
+@Value
 public enum Format {
     /**
      * Generate a format in JSON (<code>text/json</code> media type).
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Visibility.java b/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Visibility.java
index 6b2b75618e..e5904d3bbe 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Visibility.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/swagger/Visibility.java
@@ -18,8 +18,15 @@
  */
 package org.apache.isis.applib.services.swagger;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
-import org.apache.isis.applib.annotation.*;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.annotation.RestrictTo;
+import org.apache.isis.applib.annotation.Value;
 
 /**
  * Specifies which elements of the metamodel are included within the generated
@@ -27,7 +34,8 @@ import org.apache.isis.applib.annotation.*;
  *
  * @since 1.x {@index}
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.swagger.Visibility")
+@Named(IsisModuleApplib.NAMESPACE + ".services.swagger.Visibility")
+@Value
 public enum Visibility {
 
     /**
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
index dc8ab32513..c3b832153a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/RoleMemento.java
@@ -20,6 +20,8 @@ package org.apache.isis.applib.services.user;
 
 import java.io.Serializable;
 
+import javax.inject.Named;
+
 import org.springframework.context.event.EventListener;
 import org.springframework.core.annotation.Order;
 
@@ -40,10 +42,9 @@ import lombok.val;
  *
  * @since 1.x revised for 2.0 {@index}
  */
+@Named(RoleMemento.LOGICAL_TYPE_NAME)
 @DomainObject(
-        nature = Nature.VIEW_MODEL,
-        logicalTypeName = RoleMemento.LOGICAL_TYPE_NAME
-)
+        nature = Nature.VIEW_MODEL)
 @DomainObjectLayout(
         titleUiEvent = RoleMemento.TitleUiEvent.class
 )
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
index e3e841206f..76ff6ffc9b 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
@@ -27,6 +27,8 @@ import java.util.Locale;
 import java.util.Objects;
 import java.util.stream.Stream;
 
+import javax.inject.Named;
+
 import org.springframework.context.event.EventListener;
 import org.springframework.core.annotation.Order;
 import org.springframework.lang.Nullable;
@@ -59,13 +61,11 @@ import lombok.val;
  *
  * @since 1.x revised for 2.0 {@index}
  */
+@Named(UserMemento.LOGICAL_TYPE_NAME)
 @DomainObject(
-        nature = Nature.VIEW_MODEL,
-        logicalTypeName = UserMemento.LOGICAL_TYPE_NAME
-)
+        nature = Nature.VIEW_MODEL)
 @DomainObjectLayout(
-        titleUiEvent = UserMemento.TitleUiEvent.class
-)
+        titleUiEvent = UserMemento.TitleUiEvent.class)
 @lombok.Value @lombok.Builder
 public class UserMemento
 implements Serializable {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java b/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
index 7b90adec19..169deb762a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Blob.java
@@ -32,6 +32,7 @@ import java.util.function.Function;
 
 import javax.activation.MimeType;
 import javax.activation.MimeTypeParseException;
+import javax.inject.Named;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
@@ -72,7 +73,8 @@ import lombok.extern.log4j.Log4j2;
  * @see Clob
  * @since 1.x {@index}
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.Blob")
+@Named(IsisModuleApplib.NAMESPACE + ".value.Blob")
+@Value
 @XmlJavaTypeAdapter(Blob.JaxbToStringAdapter.class)   // for JAXB view model support
 @Log4j2
 public final class Blob implements NamedWithMimeType {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Clob.java b/api/applib/src/main/java/org/apache/isis/applib/value/Clob.java
index e8f40ab83d..78642986b1 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Clob.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Clob.java
@@ -26,6 +26,7 @@ import java.util.Objects;
 
 import javax.activation.MimeType;
 import javax.activation.MimeTypeParseException;
+import javax.inject.Named;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
@@ -59,8 +60,8 @@ import lombok.val;
  * @see Blob
  * @since 1.x {@index}
  */
-@Value(
-        logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.Clob")
+@Named(IsisModuleApplib.NAMESPACE + ".value.Clob")
+@Value
 @XmlJavaTypeAdapter(Clob.JaxbToStringAdapter.class)   // for JAXB view model support
 //@Log4j2
 public final class Clob implements NamedWithMimeType {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/LocalResourcePath.java b/api/applib/src/main/java/org/apache/isis/applib/value/LocalResourcePath.java
index 6aed14beb2..acea0bd3e3 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/LocalResourcePath.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/LocalResourcePath.java
@@ -22,6 +22,7 @@ import java.io.Serializable;
 import java.net.URISyntaxException;
 import java.util.function.UnaryOperator;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
@@ -50,7 +51,8 @@ import lombok.NonNull;
  * @since 2.0 {@index}
  * @see OpenUrlStrategy
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.LocalResourcePath")
+@Named(IsisModuleApplib.NAMESPACE + ".value.LocalResourcePath")
+@Value
 @XmlJavaTypeAdapter(LocalResourcePath.JaxbToStringAdapter.class)   // for JAXB view model support
 public final class LocalResourcePath implements Serializable {
 
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Markup.java b/api/applib/src/main/java/org/apache/isis/applib/value/Markup.java
index 40e2aef50a..0edefac4e6 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Markup.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Markup.java
@@ -22,6 +22,7 @@ import java.io.Serializable;
 import java.nio.charset.StandardCharsets;
 import java.util.Base64;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
@@ -36,7 +37,8 @@ import lombok.EqualsAndHashCode;
  *
  * @since 2.0 {@index}
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.Markup")
+@Named(IsisModuleApplib.NAMESPACE + ".value.Markup")
+@Value
 @XmlJavaTypeAdapter(Markup.JaxbToStringAdapter.class)   // for JAXB view model support
 @EqualsAndHashCode
 public final class Markup implements Serializable {
diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Password.java b/api/applib/src/main/java/org/apache/isis/applib/value/Password.java
index df59c03d10..c5ab75635a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/value/Password.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/value/Password.java
@@ -21,6 +21,7 @@ package org.apache.isis.applib.value;
 import java.io.Serializable;
 import java.util.Objects;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 
@@ -33,7 +34,8 @@ import org.apache.isis.applib.value.semantics.ValueSemanticsAbstract.Placeholder
  *
  * @since 1.x {@index}
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".value.Password")
+@Named(IsisModuleApplib.NAMESPACE + ".value.Password")
+@Value
 @XmlAccessorType(XmlAccessType.FIELD)
 // @XmlJavaTypeAdapter(Password.JaxbToStringAdapter.class) // TODO: not automatically registered because not secure enough.  Instead we should set up some sort of mechanism to encrypt.
 @lombok.Value
diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index 0a34429cf4..d1973308a1 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -41,6 +41,7 @@ import static java.lang.annotation.ElementType.PARAMETER;
 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 
 import javax.activation.DataSource;
+import javax.inject.Named;
 import javax.validation.Constraint;
 import javax.validation.ConstraintValidator;
 import javax.validation.ConstraintValidatorContext;
@@ -54,8 +55,6 @@ import org.springframework.validation.annotation.Validated;
 
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.Introspection.IntrospectionPolicy;
 import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -1402,7 +1401,7 @@ public class IsisConfiguration {
 
                 /**
                  * Whether to ensure that the logical-type-name of all objects must be specified explicitly, using either
-                 * {@link DomainObject#logicalTypeName()} or {@link DomainService#logicalTypeName()}.
+                 * {@link Named}.
                  *
                  * <p>
                  *     It is <i>highly advisable</i> to leave this set as enabled (the default). These logical-type-names
diff --git a/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeClassifierDefault.java b/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeClassifierDefault.java
index 321954c534..13afb846e1 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeClassifierDefault.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeClassifierDefault.java
@@ -23,6 +23,7 @@ import java.lang.reflect.Modifier;
 import java.util.Collection;
 import java.util.Locale;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.Table;
 
@@ -129,12 +130,18 @@ implements IsisBeanTypeClassifier {
 
             String logicalTypeName = null;
 
+            // deprecated @DomainObject(logicalTypeName=...)
             val aDomainObject = _Annotations.synthesize(type, DomainObject.class).orElse(null);
             if(aDomainObject!=null) {
                 logicalTypeName = aDomainObject.logicalTypeName();
             }
 
-            // don't trample over the @DomainObject(logicalTypeName=..) if present
+            val named = _Annotations.synthesize(type, Named.class).orElse(null);
+            if(named!=null) {
+                logicalTypeName = named.value();
+            }
+
+            // don't trample over the @Named/@DomainObject(logicalTypeName=..) if present
             if(_Strings.isEmpty(logicalTypeName)) {
                 val aTable = _Annotations.synthesize(type, Table.class).orElse(null);
                 if(aTable!=null) {
@@ -160,9 +167,18 @@ implements IsisBeanTypeClassifier {
         if(aDomainObject!=null) {
             switch (aDomainObject.nature()) {
             case BEAN:
+
+                // deprecated @DomainObject(logicalTypeName=...)
+                String logicalTypeName = aDomainObject.logicalTypeName();
+
+                val named = _Annotations.synthesize(type, Named.class).orElse(null);
+                if(named!=null) {
+                    logicalTypeName = named.value();
+                }
+
                 return BeanClassification.delegated(
                         BeanSort.MANAGED_BEAN_CONTRIBUTING,
-                        aDomainObject.logicalTypeName());
+                        _Strings.emptyToNull(logicalTypeName));
             case MIXIN:
                 return BeanClassification.selfManaged(BeanSort.MIXIN);
             case ENTITY:
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index b32698b043..64267f8ce6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -311,7 +311,7 @@ implements
                 .create(domainObjectIfAny, getConfiguration(), facetHolder));
     }
 
-    // check from @DomainObject(logicalTypeName=...)
+    // check from @DomainObject(logicalTypeName=..., introspection=...)
     void processLogicalTypeName(
             final Optional<DomainObject> domainObjectIfAny,
             final ProcessObjectTypeContext processClassContext) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForDomainObjectAnnotation.java
index fba6579414..0ffe337c1b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForDomainObjectAnnotation.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacet;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacetAbstract;
 
+@Deprecated //@DomainObject(logicalTypeName=...) is deprecated
 public class LogicalTypeFacetForDomainObjectAnnotation
 extends LogicalTypeFacetAbstract {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotation.java
index 602abab059..e75746e631 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForLogicalTypeNameAnnotation.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacet;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacetAbstract;
 
+@Deprecated //@LogicalTypeName(...) is deprecated
 public class LogicalTypeFacetForLogicalTypeNameAnnotation
 extends LogicalTypeFacetAbstract {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForNamedAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForNamedAnnotation.java
index b72c99a315..29ac9968fe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForNamedAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/logicaltype/LogicalTypeFacetForNamedAnnotation.java
@@ -47,6 +47,6 @@ extends LogicalTypeFacetAbstract {
     private LogicalTypeFacetForNamedAnnotation(
             final LogicalType logicalType,
             final FacetHolder holder) {
-        super(logicalType, holder, Precedence.DEFAULT);
+        super(logicalType, holder, Precedence.HIGH);
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/annotation/LogicalTypeFacetForValueAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/annotation/LogicalTypeFacetForValueAnnotation.java
index a67f36564c..4c75e61ba4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/annotation/LogicalTypeFacetForValueAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/annotation/LogicalTypeFacetForValueAnnotation.java
@@ -26,6 +26,7 @@ import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacetAbstract;
 
+@Deprecated // @Value(logicalTypeName=...) is deprecated
 public class LogicalTypeFacetForValueAnnotation
 extends LogicalTypeFacetAbstract {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/annotation/ValueAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/annotation/ValueAnnotationFacetFactory.java
index fc0a85704f..538e59b328 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/annotation/ValueAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/annotation/ValueAnnotationFacetFactory.java
@@ -27,6 +27,7 @@ import org.apache.isis.core.metamodel.facets.ObjectTypeFacetFactory;
 
 import lombok.val;
 
+@Deprecated // @Value(logicalTypeName=...) is deprecated
 public class ValueAnnotationFacetFactory
 extends FacetFactoryAbstract
 implements
@@ -42,6 +43,7 @@ implements
         val cls = processClassContext.getCls();
         val facetHolder = processClassContext.getFacetHolder();
 
+        // deprecated
         // @Value(logicalTypeName=...)
         val valueIfAny = processClassContext.synthesizeOnType(org.apache.isis.applib.annotation.Value.class);
         addFacetIfPresent(LogicalTypeFacetForValueAnnotation.create(valueIfAny, cls, facetHolder));
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 56e9649866..94162ac5d6 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
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.inspect.model;
 
 import java.util.stream.Stream;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -37,9 +38,9 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+@Named(ActionNode.LOGICAL_TYPE_NAME)
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = ActionNode.LOGICAL_TYPE_NAME,
         introspection = Introspection.ANNOTATION_REQUIRED
 )
 @XmlRootElement
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 937188c1b2..671df68fe3 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
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.inspect.model;
 
 import java.util.stream.Stream;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -37,9 +38,9 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+@Named(CollectionNode.LOGICAL_TYPE_NAME)
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = CollectionNode.LOGICAL_TYPE_NAME,
         introspection = Introspection.ANNOTATION_REQUIRED
 )
 @XmlRootElement
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 fedfd1eaec..04f0f4634b 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
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.inspect.model;
 
 import java.util.stream.Stream;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -37,9 +38,9 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+@Named(FacetAttrNode.LOGICAL_TYPE_NAME)
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = FacetAttrNode.LOGICAL_TYPE_NAME,
         introspection = Introspection.ANNOTATION_REQUIRED
 )
 @XmlRootElement
@@ -72,6 +73,5 @@ public class FacetAttrNode extends MMNode {
         return Stream.empty();
     }
 
-
 }
 
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 8f4d28ae01..ac229221f2 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
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.inspect.model;
 
 import java.util.stream.Stream;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -38,9 +39,9 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+@Named(FacetGroupNode.LOGICAL_TYPE_NAME)
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = FacetGroupNode.LOGICAL_TYPE_NAME,
         introspection = Introspection.ANNOTATION_REQUIRED
 )
 @XmlRootElement
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 5b1fae9347..a7f19b36e7 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
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.inspect.model;
 import java.util.Optional;
 import java.util.stream.Stream;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -41,9 +42,9 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.val;
 
+@Named(FacetNode.LOGICAL_TYPE_NAME)
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = FacetNode.LOGICAL_TYPE_NAME,
         introspection = Introspection.ANNOTATION_REQUIRED
 )
 @XmlRootElement
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 168105ccea..0c2baa00e5 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
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.inspect.model;
 
 import java.util.stream.Stream;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -37,9 +38,9 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+@Named(ParameterNode.LOGICAL_TYPE_NAME)
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = ParameterNode.LOGICAL_TYPE_NAME,
         introspection = Introspection.ANNOTATION_REQUIRED
 )
 @XmlRootElement
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 b8e1f4a26f..35ff89aa7e 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
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.inspect.model;
 
 import java.util.stream.Stream;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -36,11 +37,10 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+@Named(PropertyNode.LOGICAL_TYPE_NAME)
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = PropertyNode.LOGICAL_TYPE_NAME,
-        introspection = Introspection.ANNOTATION_REQUIRED
-)
+        introspection = Introspection.ANNOTATION_REQUIRED)
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 @ToString
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 8bccc1b095..7e9e81dd76 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
@@ -20,6 +20,7 @@ package org.apache.isis.core.metamodel.inspect.model;
 
 import java.util.stream.Stream;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -38,11 +39,10 @@ import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
+@Named(TypeNode.LOGICAL_TYPE_NAME)
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = TypeNode.LOGICAL_TYPE_NAME,
-        introspection = Introspection.ANNOTATION_REQUIRED
-)
+        introspection = Introspection.ANNOTATION_REQUIRED)
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 @ToString
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
index 98de5d91f9..2444d3240c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureDefault.java
@@ -23,6 +23,8 @@ import java.util.Optional;
 import java.util.OptionalInt;
 import java.util.SortedSet;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Value;
@@ -50,7 +52,8 @@ import lombok.Setter;
  *     {@link ApplicationFeatureRepository}.
  * </p>
  */
-@Value(logicalTypeName = IsisModuleApplib.NAMESPACE + ".services.appfeat.ApplicationFeature")
+@Named(IsisModuleApplib.NAMESPACE + ".services.appfeat.ApplicationFeature")
+@Value
 public class ApplicationFeatureDefault
 implements
 ApplicationFeature,
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 47f729141d..1bab00407b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -64,7 +64,6 @@ import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFactor
 import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
 import org.apache.isis.core.metamodel.facets.object.icon.ObjectIcon;
 import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
-import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacet;
 import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
 import org.apache.isis.core.metamodel.facets.object.navparent.NavigableParentFacet;
 import org.apache.isis.core.metamodel.facets.object.parented.ParentedCollectionFacet;
@@ -177,8 +176,7 @@ implements ObjectSpecification {
     private final String shortName;
     private final boolean isAbstract;
 
-    // derived lazily, cached since immutable
-    private _Lazy<LogicalType> logicalTypeLazy = _Lazy.threadSafe(this::lookupLogicalType);
+    private final LogicalType logicalType;
 
     private ObjectSpecification superclassSpec;
 
@@ -191,8 +189,9 @@ implements ObjectSpecification {
 
 
     // -- Constructor
-    public ObjectSpecificationAbstract(
+    protected ObjectSpecificationAbstract(
             final Class<?> introspectedClass,
+            final LogicalType logicalType,
             final String shortName,
             final BeanSort beanSort,
             final FacetProcessor facetProcessor,
@@ -201,16 +200,13 @@ implements ObjectSpecification {
         super(facetProcessor.getMetaModelContext());
 
         this.correspondingClass = introspectedClass;
+        this.logicalType = logicalType;
         this.fullName = introspectedClass.getName();
         this.shortName = shortName;
         this.beanSort = beanSort;
 
         this.isAbstract = ClassExtensions.isAbstract(introspectedClass);
-
-        super.featureIdentifier = Identifier.classIdentifier(
-                LogicalType.lazy(
-                        introspectedClass,
-                        ()->logicalTypeLazy.get().getLogicalTypeName()));
+        super.featureIdentifier = Identifier.classIdentifier(logicalType);
 
         this.facetProcessor = facetProcessor;
         this.postProcessor = postProcessor;
@@ -224,15 +220,7 @@ implements ObjectSpecification {
 
     @Override
     public final LogicalType getLogicalType() {
-        return logicalTypeLazy.get();
-    }
-
-    private LogicalType lookupLogicalType() {
-        val logicalTypeFacet = getFacet(LogicalTypeFacet.class);
-        if(logicalTypeFacet == null) {
-            throw new IllegalStateException("could not find an LogicalTypeFacet for " + this.getFullIdentifier());
-        }
-        return logicalTypeFacet.getLogicalType();
+        return logicalType;
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index dff41e973d..2ffac650c3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -30,6 +30,7 @@ import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Introspection.IntrospectionPolicy;
+import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.services.metamodel.BeanSort;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.collections.ImmutableEnumSet;
@@ -76,11 +77,6 @@ public class ObjectSpecificationDefault
 extends ObjectSpecificationAbstract
 implements FacetHolder {
 
-    private static String determineShortName(final Class<?> introspectedClass) {
-        final String name = introspectedClass.getName();
-        return name.substring(name.lastIndexOf('.') + 1);
-    }
-
     // -- constructor, fields
 
     /**
@@ -109,7 +105,10 @@ implements FacetHolder {
             final PostProcessor postProcessor,
             final ClassSubstitutorRegistry classSubstitutorRegistry) {
 
-        super(correspondingClass, determineShortName(correspondingClass), beanSort, facetProcessor, postProcessor);
+        super(correspondingClass,
+                LogicalType.infer(correspondingClass),
+                determineShortName(correspondingClass),
+                beanSort, facetProcessor, postProcessor);
 
         this.nameIfIsManagedBean = nameIfIsManagedBean;
         this.classSubstitutorRegistry = classSubstitutorRegistry;
@@ -132,6 +131,11 @@ implements FacetHolder {
 
     }
 
+    private static String determineShortName(final Class<?> introspectedClass) {
+        final String name = introspectedClass.getName();
+        return name.substring(name.lastIndexOf('.') + 1);
+    }
+
     @Override
     protected void introspectTypeHierarchy() {
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
index 35d4386e1d..5441f32a4f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
@@ -20,6 +20,8 @@ package org.apache.isis.core.metamodel.facets.object.domainobject;
 
 import java.util.UUID;
 
+import javax.inject.Named;
+
 import org.jmock.Expectations;
 import org.junit.After;
 import org.junit.Assert;
@@ -40,7 +42,6 @@ import org.apache.isis.core.config.metamodel.facets.PublishingPolicies;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
-import org.apache.isis.core.metamodel.facets.ObjectTypeFacetFactory.ProcessObjectTypeContext;
 import org.apache.isis.core.metamodel.facets.object.autocomplete.AutoCompleteFacet;
 import org.apache.isis.core.metamodel.facets.object.domainobject.autocomplete.AutoCompleteFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.choices.ChoicesFacetForDomainObjectAnnotation;
@@ -50,12 +51,13 @@ import org.apache.isis.core.metamodel.facets.object.domainobject.editing.Immutab
 import org.apache.isis.core.metamodel.facets.object.domainobject.entitychangepublishing.EntityChangePublishingFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.facets.object.domainobject.entitychangepublishing.EntityChangePublishingFacetForDomainObjectAnnotationAsConfigured;
 import org.apache.isis.core.metamodel.facets.object.domainobject.entitychangepublishing.EntityChangePublishingFacetFromConfiguration;
-import org.apache.isis.core.metamodel.facets.object.domainobject.logicaltype.LogicalTypeFacetForDomainObjectAnnotation;
+import org.apache.isis.core.metamodel.facets.object.domainobject.logicaltype.LogicalTypeFacetForAnnotationFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.domainobject.logicaltype.LogicalTypeFacetForNamedAnnotation;
 import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacet;
 import org.apache.isis.core.metamodel.facets.object.publish.entitychange.EntityChangePublishingFacet;
-import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
+import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.facets.objectvalue.choices.ChoicesFacet;
 import org.apache.isis.core.metamodel.methods.MethodByClassMap;
 
@@ -65,10 +67,12 @@ public class DomainObjectAnnotationFacetFactoryTest
 extends AbstractFacetFactoryJUnit4TestCase {
 
     DomainObjectAnnotationFacetFactory facetFactory;
+    LogicalTypeFacetForAnnotationFacetFactory facetFactory2;
 
     @Before
     public void setUp() throws Exception {
         facetFactory = new DomainObjectAnnotationFacetFactory(metaModelContext, new MethodByClassMap());
+        facetFactory2 = new LogicalTypeFacetForAnnotationFacetFactory(metaModelContext, new MethodByClassMap());
     }
 
     @Override
@@ -556,7 +560,8 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
     public static class LogicalTypeName extends DomainObjectAnnotationFacetFactoryTest {
 
-        @DomainObject(logicalTypeName = "CUS")
+        @Named("CUS")
+        @DomainObject
         class CustomerWithDomainObjectAndObjectTypeSet {
         }
 
@@ -574,14 +579,15 @@ extends AbstractFacetFactoryJUnit4TestCase {
         @Test
         public void whenDomainObjectAndObjectTypeSetToTrue() {
 
-            facetFactory.process(new ProcessObjectTypeContext(CustomerWithDomainObjectAndObjectTypeSet.class, facetHolder));
+            facetFactory2.process(ProcessClassContext
+                    .forTesting(CustomerWithDomainObjectAndObjectTypeSet.class, mockMethodRemover, facetHolder));
 
             final Facet facet = facetHolder.getFacet(LogicalTypeFacet.class);
             Assert.assertNotNull(facet);
 
-            Assert.assertTrue(facet instanceof LogicalTypeFacetForDomainObjectAnnotation);
-            final LogicalTypeFacetForDomainObjectAnnotation facetForDomainObjectAnnotation =
-                    (LogicalTypeFacetForDomainObjectAnnotation) facet;
+            Assert.assertTrue(facet instanceof LogicalTypeFacetForNamedAnnotation);
+            final LogicalTypeFacetForNamedAnnotation facetForDomainObjectAnnotation =
+                    (LogicalTypeFacetForNamedAnnotation) facet;
 
             assertThat(facetForDomainObjectAnnotation.value(), is("CUS"));
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectTypeAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectTypeAnnotationFacetFactoryTest.java
index 68d85ff724..08b43506e6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectTypeAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/ObjectTypeAnnotationFacetFactoryTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.core.metamodel.facets.object.domainobject;
 
+import javax.inject.Named;
+
 import org.junit.Before;
 import org.junit.Test;
 
@@ -28,38 +30,38 @@ import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
-import org.apache.isis.core.metamodel.facets.ObjectTypeFacetFactory.ProcessObjectTypeContext;
-import org.apache.isis.core.metamodel.facets.object.domainobject.logicaltype.LogicalTypeFacetForDomainObjectAnnotation;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
+import org.apache.isis.core.metamodel.facets.object.domainobject.logicaltype.LogicalTypeFacetForAnnotationFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.domainobject.logicaltype.LogicalTypeFacetForNamedAnnotation;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.LogicalTypeFacet;
 import org.apache.isis.core.metamodel.methods.MethodByClassMap;
 
-import lombok.val;
-
 public class ObjectTypeAnnotationFacetFactoryTest extends AbstractFacetFactoryJUnit4TestCase {
 
-    private DomainObjectAnnotationFacetFactory facetFactory;
+    private LogicalTypeFacetForAnnotationFacetFactory facetFactory;
 
     @Before
     public void setUp() throws Exception {
-        facetFactory = new DomainObjectAnnotationFacetFactory(metaModelContext, new MethodByClassMap());
+        facetFactory = new LogicalTypeFacetForAnnotationFacetFactory(metaModelContext, new MethodByClassMap());
     }
 
     @Test
     public void logicalTypeNameAnnotationPickedUpOnClass() {
 
-        @DomainObject(logicalTypeName = "CUS")
+        @Named("CUS")
+        @DomainObject
         class Customer {
         }
 
         expectNoMethodsRemoved();
 
-        val context = new ProcessObjectTypeContext(Customer.class, facetHolder);
-        facetFactory.processLogicalTypeName(context.synthesizeOnType(DomainObject.class), context);
+        facetFactory.process(ProcessClassContext
+                .forTesting(Customer.class, mockMethodRemover, facetHolder));
 
         final LogicalTypeFacet facet = facetHolder.getFacet(LogicalTypeFacet.class);
 
         assertThat(facet, is(not(nullValue())));
-        assertThat(facet instanceof LogicalTypeFacetForDomainObjectAnnotation, is(true));
+        assertThat(facet instanceof LogicalTypeFacetForNamedAnnotation, is(true));
         assertThat(facet.value(), is("CUS"));
 
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/logicaltype/LogicalTypeFacetFromClassNameFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/logicaltype/LogicalTypeFacetFromClassNameFactoryTest.java
index 5af24c1b56..b33cd622c5 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/logicaltype/LogicalTypeFacetFromClassNameFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/logicaltype/LogicalTypeFacetFromClassNameFactoryTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.core.metamodel.facets.object.logicaltype;
 
+import javax.inject.Named;
+
 import org.datanucleus.testing.dom.CustomerAsProxiedByDataNucleus;
 import org.junit.Test;
 
@@ -28,11 +30,15 @@ import static org.hamcrest.MatcherAssert.assertThat;
 
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
 import org.apache.isis.core.metamodel.facets.ObjectTypeFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.domainobject.logicaltype.LogicalTypeFacetForAnnotationFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.domainobject.logicaltype.LogicalTypeFacetForNamedAnnotation;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.classname.LogicalTypeFacetFromClassName;
 import org.apache.isis.core.metamodel.facets.object.logicaltype.classname.LogicalTypeFacetFromClassNameFactory;
-import org.apache.isis.core.metamodel.facets.value.annotation.LogicalTypeFacetForValueAnnotation;
-import org.apache.isis.core.metamodel.facets.value.annotation.ValueAnnotationFacetFactory;
+import org.apache.isis.core.metamodel.methods.MethodByClassMap;
+
+import lombok.val;
 
 public class LogicalTypeFacetFromClassNameFactoryTest
 extends AbstractFacetFactoryJUnit4TestCase {
@@ -78,23 +84,26 @@ extends AbstractFacetFactoryJUnit4TestCase {
         assertThat(facet.value(), is(ValueExample1.class.getCanonicalName()));
     }
 
-    @Value(logicalTypeName = "xxx.ValueExample")
+    @Named("xxx.ValueExample")
+    @Value
     public static class ValueExample2 {
     }
 
     @Test
     public void installsFacet_onValuesUsingLogicalTypeName() {
 
-        facetFactory = new ValueAnnotationFacetFactory(metaModelContext);
+        val facetFactory =
+                new LogicalTypeFacetForAnnotationFacetFactory(metaModelContext, new MethodByClassMap());
 
         expectNoMethodsRemoved();
 
-        facetFactory.process(new ObjectTypeFacetFactory.ProcessObjectTypeContext(ValueExample2.class, facetHolder));
+        facetFactory.process(ProcessClassContext
+                .forTesting(ValueExample2.class, mockMethodRemover, facetHolder));
 
         final LogicalTypeFacet facet = facetHolder.getFacet(LogicalTypeFacet.class);
 
         assertThat(facet, is(not(nullValue())));
-        assertThat(facet instanceof LogicalTypeFacetForValueAnnotation, is(true));
+        assertThat(facet instanceof LogicalTypeFacetForNamedAnnotation, is(true));
         assertThat(facet.value(), is("xxx.ValueExample"));
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Bar.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Bar.java
index c3df28aa77..c92b2773d6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Bar.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/services/grid/Bar.java
@@ -18,14 +18,15 @@
  */
 package org.apache.isis.core.metamodel.services.grid;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Nature;
 
+@Named("simple.Bar")
 @DomainObject(
-        nature = Nature.VIEW_MODEL,
-        logicalTypeName = "simple.Bar"
-        )
+        nature = Nature.VIEW_MODEL)
 public class Bar {
 
     @Action
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java
index 7366a7409d..398558d313 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/logout/LogoutMenu.java
@@ -94,9 +94,9 @@ public class LogoutMenu {
     }
 
     /** A pseudo model used to redirect to the login page.*/
+    @Named(LoginRedirect.LOGICAL_TYPE_NAME)
     @DomainObject(
-            nature = Nature.VIEW_MODEL,
-            logicalTypeName = LoginRedirect.LOGICAL_TYPE_NAME)
+            nature = Nature.VIEW_MODEL)
     public static class LoginRedirect {
         public final static String LOGICAL_TYPE_NAME = "isis.security.LoginRedirect";
     }
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 2f727df143..5773e539de 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
@@ -21,6 +21,8 @@ package demoapp.dom.domain._interactions;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.ViewModel;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.LabelPosition;
@@ -41,10 +43,9 @@ import lombok.Setter;
 import lombok.val;
 
 //tag::class[]
+@Named("demo.InteractionDtoVm")
 @DomainObject(
-    logicalTypeName = "demo.InteractionDtoVm"
-    , nature = Nature.VIEW_MODEL
-)
+        nature = Nature.VIEW_MODEL)
 @NoArgsConstructor
 @AllArgsConstructor
 public class InteractionDtoVm implements ViewModel {
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 487e572738..83945a954b 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
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -51,9 +52,9 @@ import demoapp.dom.domain.actions.Action.associateWith.child.ActionAssociateWith
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.ActionAssociateWithVm")
 @DomainObject(
-    nature=Nature.VIEW_MODEL,
-    logicalTypeName = "demo.ActionAssociateWithVm"
+    nature=Nature.VIEW_MODEL
 )
 @NoArgsConstructor
 //tag::class-properties[]
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 3b5da28508..e37a277683 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.actions.Action.associateWith.child;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -40,9 +41,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "child")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.ActionAssociateWithChildVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.ActionAssociateWithChildVm"
+        nature=Nature.VIEW_MODEL
 )
 @NoArgsConstructor
 public class ActionAssociateWithChildVm implements HasAsciiDocDescription {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity.java
index 5b69c3c2aa..aead71d4a4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/commandPublishing/ActionCommandPublishingEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.domain.actions.Action.commandPublishing;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.domain._commands.ExposePersistedCommands;
 
-@DomainObject(
-        logicalTypeName = "demo.ActionCommandPublishingEntity" // shared permissions with concrete sub class
-)
+@Named("demo.ActionCommandPublishingEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class ActionCommandPublishingEntity
 implements
     HasAsciiDocDescription,
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 2d855cc1f4..3fa0666c93 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.actions.Action.commandPublishing.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -48,9 +49,9 @@ import demoapp.dom.domain.actions.Action.commandPublishing.ActionCommandPublishi
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Named("demo.ActionCommandPublishingEntity")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.ActionCommandPublishingEntity"
         , editing = Editing.DISABLED
 )
 public class ActionCommandPublishingJdo
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 463418c1ec..e71353e453 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.actions.Action.commandPublishing.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -54,10 +55,9 @@ import demoapp.dom.domain.actions.Action.commandPublishing.ActionCommandPublishi
     name = "ActionCommandPublishingJpa"
 )
 @EntityListeners(IsisEntityListener.class)
+@Named("demo.ActionCommandPublishingEntity")
 @DomainObject(
-    logicalTypeName = "demo.ActionCommandPublishingEntity"
-    , editing = Editing.DISABLED
-)
+    editing = Editing.DISABLED)
 @NoArgsConstructor
 public class ActionCommandPublishingJpa
         extends ActionCommandPublishingEntity {
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 a1ed8e0ba8..4a6c3fce73 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.actions.Action.domainEvent;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,10 +45,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.ActionDomainEventVm")
 @DomainObject(
-    nature=Nature.VIEW_MODEL,
-    logicalTypeName = "demo.ActionDomainEventVm"
-)
+    nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 //tag::class[]
 public class ActionDomainEventVm implements HasAsciiDocDescription {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity.java
index 9b5db11432..e544ffa195 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/executionPublishing/ActionExecutionPublishingEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.domain.actions.Action.executionPublishing;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.domain._interactions.ExposeCapturedInteractions;
 
-@DomainObject(
-        logicalTypeName = "demo.ActionExecutionPublishingEntity" // shared permissions with concrete sub class
-)
+@Named("demo.ActionExecutionPublishingEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class ActionExecutionPublishingEntity
 implements
     HasAsciiDocDescription,
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 922fb94350..99a247040f 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.actions.Action.executionPublishing.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -48,9 +49,9 @@ import demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPubl
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Named("demo.ActionExecutionPublishingEntity")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.ActionExecutionPublishingEntity"
         , editing = Editing.DISABLED
 )
 public class ActionExecutionPublishingJdo
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 be8ea3a5e3..1483a3772e 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.actions.Action.executionPublishing.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -54,10 +55,9 @@ import demoapp.dom.domain.actions.Action.executionPublishing.ActionExecutionPubl
       name = "ActionExecutionPublishingJpa"
 )
 @EntityListeners(IsisEntityListener.class)
+@Named("demo.ActionExecutionPublishingEntity")
 @DomainObject(
-      logicalTypeName = "demo.ActionExecutionPublishingEntity"
-      , editing = Editing.DISABLED
-)
+        editing = Editing.DISABLED)
 @NoArgsConstructor
 public class ActionExecutionPublishingJpa
         extends ActionExecutionPublishingEntity {
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 0b8beca373..afa09b1aab 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.actions.Action.hidden;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,10 +45,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.ActionHiddenVm")
 @DomainObject(
-    nature=Nature.VIEW_MODEL,
-    logicalTypeName = "demo.ActionHiddenVm"
-)
+    nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 //tag::class[]
 public class ActionHiddenVm implements HasAsciiDocDescription {
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 420967a7f1..221b27dece 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.actions.Action.restrictTo;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,10 +45,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.ActionRestrictToVm")
 @DomainObject(
-    nature=Nature.VIEW_MODEL,
-    logicalTypeName = "demo.ActionRestrictToVm"
-)
+    nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 //tag::class[]
 public class ActionRestrictToVm implements HasAsciiDocDescription {
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 d16d6b9c16..afb3a35a0b 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
@@ -19,6 +19,7 @@
 package demoapp.dom.domain.actions.Action.semantics;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -50,10 +51,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.ActionSemanticsVm")
 @DomainObject(
-    nature=Nature.VIEW_MODEL,
-    logicalTypeName = "demo.ActionSemanticsVm"
-)
+    nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 //tag::class[]
 public class ActionSemanticsVm implements HasAsciiDocDescription {
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 672169bcaf..10e8aef4f9 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
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -45,10 +46,9 @@ import demoapp.dom.domain.actions.Action.typeOf.child.ActionTypeOfChildVm;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.ActionTypeOfVm")
 @DomainObject(
-    nature=Nature.VIEW_MODEL,
-    logicalTypeName = "demo.ActionTypeOfVm"
-)
+    nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 //tag::class-collections-children[]
 public class ActionTypeOfVm implements HasAsciiDocDescription {
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 2fcf1a97b1..8501a77ce8 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.actions.Action.typeOf.child;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -40,10 +41,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "child")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.ActionTypeOfChildVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.ActionTypeOfChildVm"
-)
+        nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 public class ActionTypeOfChildVm implements HasAsciiDocDescription {
 
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 594fd7808f..6cf501a2b6 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.actions.ActionLayout.position;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -40,9 +41,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.ActionLayoutPositionVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.ActionLayoutPositionVm"
+        nature=Nature.VIEW_MODEL
 )
 public class ActionLayoutPositionVm implements HasAsciiDocDescription {
 
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 e0ffbb913a..f15eef2e43 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.actions.ActionLayout.promptStyle;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -41,10 +42,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.ActionLayoutPromptStyleVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.ActionLayoutPromptStyleVm"
-)
+        nature=Nature.VIEW_MODEL)
 public class ActionLayoutPromptStyleVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/assoc/AssociatedActionDemo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/assoc/AssociatedActionDemo.java
index 7fbd54497a..f496cd0e26 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/assoc/AssociatedActionDemo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/assoc/AssociatedActionDemo.java
@@ -22,6 +22,7 @@ import java.util.LinkedHashSet;
 import java.util.Set;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.AssociatedAction", editing=Editing.ENABLED)
+@Named("demo.AssociatedAction")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 @NoArgsConstructor
 public class AssociatedActionDemo implements HasAsciiDocDescription {
 
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 edf8f0097d..3e0ef07b6c 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
@@ -32,9 +32,8 @@ import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
-
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.AssociatedActionDemoTask")
-@Named("assoc.DemoItem")
+@Named("demo.AssociatedActionDemoTask")
+@DomainObject(nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 @AllArgsConstructor(staticName="of")
 public class DemoItem {
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 e8dc3d4bc6..d7a13e7ecd 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
@@ -33,8 +33,8 @@ import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.DependentArgsDemoItem")
-@Named("depargs.DemoItem")
+@Named("demo.DependentArgsDemoItem")
+@DomainObject(nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 @AllArgsConstructor(staticName="of")
 @EqualsAndHashCode // required for the Dependent Arguments demo to work properly
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo.java
index 8470ba625a..54322c4f47 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/progmodel/depargs/DependentArgsActionDemo.java
@@ -21,6 +21,7 @@ package demoapp.dom.domain.actions.progmodel.depargs;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -44,7 +45,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.DependentArgs", editing=Editing.ENABLED)
+@Named("demo.DependentArgs")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 public class DependentArgsActionDemo implements HasAsciiDocDescription {
 
     public String title() {
@@ -86,7 +88,5 @@ public class DependentArgsActionDemo implements HasAsciiDocDescription {
     @Getter
     private final Set<DemoItem> items = new LinkedHashSet<>();
 
-
-
 }
 
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 1577ea8727..8590a918ea 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
@@ -21,6 +21,7 @@ package demoapp.dom.domain.collections.Collection.domainEvent;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -45,9 +46,9 @@ import demoapp.dom.domain.collections.Collection.domainEvent.child.CollectionDom
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.CollectionDomainEventVm")
 @DomainObject(
     nature=Nature.VIEW_MODEL,
-    logicalTypeName = "demo.CollectionDomainEventVm",
     editing = Editing.ENABLED
 )
 //tag::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/child/CollectionDomainEventChildVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/child/CollectionDomainEventChildVm.java
index fe95326311..3ef33cee2f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/child/CollectionDomainEventChildVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/collections/Collection/domainEvent/child/CollectionDomainEventChildVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.collections.Collection.domainEvent.child;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -40,10 +41,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "child")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.CollectionDomainEventChildVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.CollectionDomainEventChildVm"
-)
+        nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 public class CollectionDomainEventChildVm implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity.java
index 1942098fa3..5a1cb2ea9b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/DomainObjectEntityChangePublishingEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.domain._changes.ExposeCapturedChanges;
 
-@DomainObject(
-        logicalTypeName = "demo.DomainObjectEntityChangePublishingEntity"
-)
+@Named("demo.DomainObjectEntityChangePublishingEntity")
+@DomainObject
 //tag::class[]
 public abstract class DomainObjectEntityChangePublishingEntity
 implements
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 9c03412259..f464737e36 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -33,16 +34,14 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.DomainObjectEntityChangePublishingVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.DomainObjectEntityChangePublishingVm"
-)
+        nature=Nature.VIEW_MODEL)
 public class DomainObjectEntityChangePublishingVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
         return "DomainObject#entityChangePublishing";
     }
 
-
 }
 //end::class[]
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledEntity.java
index c8399726ae..3fe223f70f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/DomainObjectEntityChangePublishingDisabledEntity.java
@@ -18,13 +18,14 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingEntity;
 
-@DomainObject(
-        logicalTypeName = "demo.DomainObjectEntityChangePublishingDisabledEntity" // shared permissions with concrete sub class
-)
+@Named("demo.DomainObjectEntityChangePublishingDisabledEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class DomainObjectEntityChangePublishingDisabledEntity
 extends DomainObjectEntityChangePublishingEntity {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdo.java
index f7f3651891..b4240ca8dd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jdo/DomainObjectEntityChangePublishingDisabledJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -41,9 +42,9 @@ import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Named("demo.DomainObjectEntityChangePublishingDisabledEntity")
 @DomainObject(
     nature=Nature.ENTITY
-    , logicalTypeName = "demo.DomainObjectEntityChangePublishingDisabledEntity"
     , entityChangePublishing = Publishing.DISABLED           // <.>
     , bounding = Bounding.BOUNDED
 )
@@ -55,7 +56,7 @@ public class DomainObjectEntityChangePublishingDisabledJdo
     // ...
 //end::class[]
 
-    public DomainObjectEntityChangePublishingDisabledJdo(String initialValue) {
+    public DomainObjectEntityChangePublishingDisabledJdo(final String initialValue) {
         this.property = initialValue;
         this.propertyUpdatedByAction = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jpa/DomainObjectEntityChangePublishingDisabledJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jpa/DomainObjectEntityChangePublishingDisabledJpa.java
index a881863ea4..7caa93c4a4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jpa/DomainObjectEntityChangePublishingDisabledJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/disabled/jpa/DomainObjectEntityChangePublishingDisabledJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.disabled.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -48,9 +49,9 @@ import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.
     name = "DomainObjectEntityChangePublishingDisabledJpa"
 )
 @EntityListeners(IsisEntityListener.class)
+@Named("demo.DomainObjectEntityChangePublishingDisabledEntity")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.DomainObjectEntityChangePublishingDisabledEntity"
         , entityChangePublishing = Publishing.DISABLED           // <.>
         , bounding = Bounding.BOUNDED
     )
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledEntity.java
index 95ff50a1ea..9e7d2b5416 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/DomainObjectEntityChangePublishingEnabledEntity.java
@@ -18,13 +18,14 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingEntity;
 
-@DomainObject(
-        logicalTypeName = "demo.DomainObjectEntityChangePublishingEnabledEntity" // shared permissions with concrete sub class
-)
+@Named("demo.DomainObjectEntityChangePublishingEnabledEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class DomainObjectEntityChangePublishingEnabledEntity
 extends DomainObjectEntityChangePublishingEntity {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdo.java
index 6bea4268ea..f58493470d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jdo/DomainObjectEntityChangePublishingEnabledJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -41,9 +42,9 @@ import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Named("demo.DomainObjectEntityChangePublishingEnabledEntity")
 @DomainObject(
     nature=Nature.ENTITY
-    , logicalTypeName = "demo.DomainObjectEntityChangePublishingEnabledEntity"
     , entityChangePublishing = Publishing.ENABLED            // <.>
     , bounding = Bounding.BOUNDED
 )
@@ -55,7 +56,7 @@ public class DomainObjectEntityChangePublishingEnabledJdo
     // ...
 //end::class[]
 
-    public DomainObjectEntityChangePublishingEnabledJdo(String initialValue) {
+    public DomainObjectEntityChangePublishingEnabledJdo(final String initialValue) {
         this.property = initialValue;
         this.propertyUpdatedByAction = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jpa/DomainObjectEntityChangePublishingEnabledJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jpa/DomainObjectEntityChangePublishingEnabledJpa.java
index a93b32c84f..61a89c9cbe 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jpa/DomainObjectEntityChangePublishingEnabledJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/annotated/enabled/jpa/DomainObjectEntityChangePublishingEnabledJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.enabled.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -48,9 +49,9 @@ import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.annotated.
     name = "DomainObjectEntityChangePublishingEnabledJpa"
 )
 @EntityListeners(IsisEntityListener.class)
+@Named("demo.DomainObjectEntityChangePublishingEnabledEntity")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.DomainObjectEntityChangePublishingEnabledEntity"
         , entityChangePublishing = Publishing.ENABLED            // <.>
         , bounding = Bounding.BOUNDED
     )
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity.java
index c904d5ab4e..4f4b8e9d76 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity.java
@@ -18,13 +18,14 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingEntity;
 
-@DomainObject(
-        logicalTypeName = "demo.DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity" // shared permissions with concrete sub class
-)
+@Named("demo.DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity
 extends DomainObjectEntityChangePublishingEntity {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.java
index ea2e070962..e033e291f8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -42,9 +43,9 @@ import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObjectEntityChangePublishingEnabledMetaAnnotation                    // <.>
+@Named("demo.DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity")
 @DomainObject(
     nature=Nature.ENTITY
-    , logicalTypeName = "demo.DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity"
     , bounding = Bounding.BOUNDED
 )
 @DomainObjectLayout(
@@ -55,7 +56,7 @@ public class DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo
     // ...
 //end::class[]
 
-    public DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo(String initialValue) {
+    public DomainObjectEntityChangePublishingEnabledMetaAnnotatedJdo(final String initialValue) {
         this.property = initialValue;
         this.propertyUpdatedByAction = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jpa/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jpa/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJpa.java
index d891e15e80..e3c63e07cf 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jpa/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnot/enabled/jpa/DomainObjectEntityChangePublishingEnabledMetaAnnotatedJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.enabled.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -49,9 +50,9 @@ import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnot.
 )
 @EntityListeners(IsisEntityListener.class)
 @DomainObjectEntityChangePublishingEnabledMetaAnnotation                    // <.>
+@Named("demo.DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity")
 @DomainObject(
     nature=Nature.ENTITY
-    , logicalTypeName = "demo.DomainObjectEntityChangePublishingEnabledMetaAnnotatedEntity"
     , bounding = Bounding.BOUNDED
 )
 @DomainObjectLayout(
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity.java
index 37c6c4c1ad..d2c8ab2e5c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity.java
@@ -18,13 +18,14 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.DomainObjectEntityChangePublishingEntity;
 
-@DomainObject(
-        logicalTypeName = "demo.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity" // shared permissions with concrete sub class
-)
+@Named("demo.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity
 extends DomainObjectEntityChangePublishingEntity {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.java
index ae57266885..2d8749de47 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jdo/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -43,9 +44,9 @@ import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotO
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
 @DomainObjectEntityChangePublishingDisabledMetaAnnotation                   // <.>
+@Named("demo.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity"
         , entityChangePublishing = Publishing.ENABLED         // <.>
         , bounding = Bounding.BOUNDED
 )
@@ -59,7 +60,7 @@ public class DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo
     // ...
 //end::class[]
 
-    public DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo(String initialValue) {
+    public DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJdo(final String initialValue) {
         this.property = initialValue;
         this.propertyUpdatedByAction = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jpa/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jpa/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJpa.java
index 22c87ec033..4e6c6355d3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jpa/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/entityChangePublishing/metaAnnotOverridden/enabled/jpa/DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotOverridden.enabled.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -50,9 +51,9 @@ import demoapp.dom.domain.objects.DomainObject.entityChangePublishing.metaAnnotO
 )
 @EntityListeners(IsisEntityListener.class)
 @DomainObjectEntityChangePublishingDisabledMetaAnnotation                   // <.>
+@Named("demo.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.DomainObjectEntityChangePublishingEnabledMetaAnnotOverriddenEntity"
         , entityChangePublishing = Publishing.ENABLED         // <.>
         , bounding = Bounding.BOUNDED
 )
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java
index 03925e85d4..bcfc59a447 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/JaxbRefEntity.java
@@ -20,15 +20,16 @@ package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity;
 
 import java.util.Objects;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.ObjectSupport;
 import org.apache.isis.applib.annotation.Property;
 
 import demoapp.dom._infra.values.ValueHolder;
 
-@DomainObject(
-        logicalTypeName = "demo.JaxbRefEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JaxbRefEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JaxbRefEntity
 implements
     ValueHolder<String> {
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 dedc492ef0..4abe07736b 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
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Objects;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -58,10 +59,9 @@ import demoapp.dom._infra.values.ValueHolderRepository;
         propOrder = {"message", "favoriteChild", "children"}
 )
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.StatefulViewModelJaxbRefsEntity")
 @DomainObject(
-        nature=Nature.VIEW_MODEL
-        , logicalTypeName = "demo.StatefulViewModelJaxbRefsEntity"
-)
+        nature=Nature.VIEW_MODEL)
 public class StatefulVmJaxbRefsEntity implements HasAsciiDocDescription {
 
     @XmlTransient @Inject
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jdo/JaxbRefJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jdo/JaxbRefJdo.java
index 56661c1c54..a78686d865 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jdo/JaxbRefJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jdo/JaxbRefJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -38,9 +39,9 @@ import demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.J
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo" )
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Named("demo.JaxbRefEntity")
 @DomainObject(
-        bounding = Bounding.BOUNDED
-        , logicalTypeName = "demo.JaxbRefEntity")
+        bounding = Bounding.BOUNDED)
 public class JaxbRefJdo
         extends JaxbRefEntity {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jpa/JaxbRefJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jpa/JaxbRefJpa.java
index b28b9ad7c4..d00533530a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jpa/JaxbRefJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/DomainObject/nature/viewmodels/jaxbrefentity/jpa/JaxbRefJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -45,9 +46,9 @@ import demoapp.dom.domain.objects.DomainObject.nature.viewmodels.jaxbrefentity.J
     name = "JaxbRefJpa"
 )
 @EntityListeners(IsisEntityListener.class)
+@Named("demo.JaxbRefEntity")
 @DomainObject(
-        bounding = Bounding.BOUNDED
-        , logicalTypeName = "demo.JaxbRefEntity")
+        bounding = Bounding.BOUNDED)
 @NoArgsConstructor
 public class JaxbRefJpa
         extends JaxbRefEntity {
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 e7024c6c35..ef0a38e2c1 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
@@ -21,6 +21,7 @@ package demoapp.dom.domain.objects.DomainObject.nature.viewmodels.usingjaxb;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -51,10 +52,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")                              // <.>
 @XmlType                                                    // <.>
 @XmlAccessorType(XmlAccessType.FIELD)                       // <.>
+@Named("demo.StatefulVmUsingJaxb")
 @DomainObject(
-        nature=Nature.VIEW_MODEL
-        , logicalTypeName = "demo.StatefulVmUsingJaxb"
-)
+        nature=Nature.VIEW_MODEL)
 public class StatefulVmUsingJaxb implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
@@ -71,9 +71,9 @@ public class StatefulVmUsingJaxb implements HasAsciiDocDescription {
     @XmlRootElement(name = "root")
     @XmlType
     @XmlAccessorType(XmlAccessType.FIELD)
+    @Named("demo.StatefulViewModelUsingJaxb.Child")
     @DomainObject(
-            nature=Nature.VIEW_MODEL
-            , logicalTypeName = "demo.StatefulViewModelUsingJaxb.Child")
+            nature=Nature.VIEW_MODEL)
     @Data
     public static class Child {
         @Title
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 d35025ec93..9557031c48 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
@@ -21,6 +21,7 @@ package demoapp.dom.domain.objects.other.embedded;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.DomainObject;
@@ -32,7 +33,8 @@ import demoapp.dom._infra.values.ValueHolderRepository;
 import demoapp.dom.domain.objects.other.embedded.persistence.NumberConstantEntity;
 
 // tag::class[]
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.EmbeddedTypeVm")
+@Named("demo.EmbeddedTypeVm")
+@DomainObject(nature=Nature.VIEW_MODEL)
 public class EmbeddedTypeVm implements HasAsciiDocDescription {
 
     // ...
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 a57ef43041..2e8c0bab3c 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.other.embedded.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,7 +43,8 @@ import demoapp.dom.domain.objects.other.embedded.persistence.NumberConstantEntit
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo" )
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(logicalTypeName = "demo.NumberConstantEntity")
+@Named("demo.NumberConstantEntity")
+@DomainObject
 public class NumberConstantJdo
         extends NumberConstantEntity {
 
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 d0b7e7f019..fc7af7e696 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.other.embedded.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -47,7 +48,8 @@ import demoapp.dom.domain.objects.other.embedded.persistence.NumberConstantEntit
       name = "NumberConstantJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(logicalTypeName = "demo.NumberConstantEntity")
+@Named("demo.NumberConstantEntity")
+@DomainObject
 @NoArgsConstructor
 public class NumberConstantJpa
         extends NumberConstantEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/persistence/NumberConstantEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/persistence/NumberConstantEntity.java
index 9352ec8269..0a48f4f898 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/persistence/NumberConstantEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/objects/other/embedded/persistence/NumberConstantEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.domain.objects.other.embedded.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.domain.objects.other.embedded.ComplexNumber;
 
-@DomainObject(
-        logicalTypeName = "demo.NumberConstantEntity" // shared permissions with concrete sub class
-)
+@Named("demo.NumberConstantEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class NumberConstantEntity
 implements
     HasAsciiDocDescription,
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 37f3acc3d3..2cad9d5f56 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
@@ -18,6 +18,8 @@
  */
 package demoapp.dom.domain.objects.other.mixins;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
@@ -30,12 +32,10 @@ import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
-
+@Named("demo.FibonacciNumberVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        editing = Editing.DISABLED,
-        logicalTypeName = "demo.FibonacciNumberVm"
-)
+        editing = Editing.DISABLED)
 @NoArgsConstructor
 @AllArgsConstructor(staticName = "of")
 public class FibonacciNumberVm {
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 c314ceb7a5..2e6680a6a1 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.objects.other.mixins;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -38,7 +39,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.MixinVm")
+@Named("demo.MixinVm")
+@DomainObject(nature=Nature.VIEW_MODEL)
 public class MixinVm implements HasAsciiDocDescription, CountHolder {
 
     @ObjectSupport public String title() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/PropertyCommandPublishingEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/PropertyCommandPublishingEntity.java
index 80a17f8362..8346b70275 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/PropertyCommandPublishingEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/commandPublishing/PropertyCommandPublishingEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.domain.properties.Property.commandPublishing;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.domain._commands.ExposePersistedCommands;
 
-@DomainObject(
-        logicalTypeName = "demo.PropertyCommandPublishingEntity" // shared permissions with concrete sub class
-)
+@Named("demo.PropertyCommandPublishingEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class PropertyCommandPublishingEntity
 implements
     HasAsciiDocDescription,
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 84e5f2e3f1..6f445df227 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.commandPublishing.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -44,9 +45,9 @@ import demoapp.dom.domain.properties.Property.commandPublishing.PropertyCommandP
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Named("demo.PropertyCommandPublishingEntity")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.PropertyCommandPublishingEntity"
         , editing = Editing.ENABLED
 )
 public class PropertyCommandPublishingJdo
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 0b63dc605a..5396164afd 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.commandPublishing.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -50,10 +51,9 @@ import demoapp.dom.domain.properties.Property.commandPublishing.PropertyCommandP
         name = "PropertyCommandPublishingJpa"
 )
 @EntityListeners(IsisEntityListener.class)
+@Named("demo.PropertyCommandPublishingEntity")
 @DomainObject(
-        logicalTypeName = "demo.PropertyCommandPublishingEntity"
-        , editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 @NoArgsConstructor
 public class PropertyCommandPublishingJpa
         extends PropertyCommandPublishingEntity {
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 7c81bc7a23..a75122c6c4 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.domainEvent;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -41,11 +42,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyDomainEventVm")
 @DomainObject(
     nature=Nature.VIEW_MODEL,
-    logicalTypeName = "demo.PropertyDomainEventVm",
-    editing = Editing.ENABLED
-)
+    editing = Editing.ENABLED)
 @NoArgsConstructor
 //tag::class[]
 public class PropertyDomainEventVm implements HasAsciiDocDescription {
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 5a6b49c935..739dc6c6ef 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.editing;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -40,9 +41,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyEditingVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyEditingVm",
         editing = Editing.DISABLED              // <.>
 )
 public class PropertyEditingVm implements HasAsciiDocDescription {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/PropertyExecutionPublishingEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/PropertyExecutionPublishingEntity.java
index 8bf322ae93..ee1bf086be 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/PropertyExecutionPublishingEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/executionPublishing/PropertyExecutionPublishingEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.domain.properties.Property.executionPublishing;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.domain._interactions.ExposeCapturedInteractions;
 
-@DomainObject(
-        logicalTypeName = "demo.PropertyExecutionPublishingEntity" // shared permissions with concrete sub class
-)
+@Named("demo.PropertyExecutionPublishingEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class PropertyExecutionPublishingEntity
 implements
     HasAsciiDocDescription,
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 d994db73f3..af4996a954 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.executionPublishing.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -45,11 +46,10 @@ import demoapp.dom.domain.properties.Property.executionPublishing.PropertyExecut
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Named("demo.PropertyExecutionPublishingEntity")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.PropertyExecutionPublishingEntity"
-        , editing = Editing.ENABLED
-)
+        , editing = Editing.ENABLED)
 public class PropertyExecutionPublishingJdo
         extends PropertyExecutionPublishingEntity {
     // ...
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 efba97e0ef..f4e9542751 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.executionPublishing.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -51,10 +52,9 @@ import demoapp.dom.domain.properties.Property.executionPublishing.PropertyExecut
       name = "PropertyExecutionPublishingJpa"
 )
 @EntityListeners(IsisEntityListener.class)
+@Named("demo.PropertyExecutionPublishingEntity")
 @DomainObject(
-      logicalTypeName = "demo.PropertyExecutionPublishingEntity"
-      , editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 @NoArgsConstructor
 public class PropertyExecutionPublishingJpa
         extends PropertyExecutionPublishingEntity {
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 974a8059db..505c422543 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.fileAccept;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,11 +43,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyFileAcceptVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyFileAcceptVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 public class PropertyFileAcceptVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 5c566a7cbe..82661917a4 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
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.Property.hidden;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -48,11 +49,10 @@ import demoapp.dom.domain.properties.Property.hidden.child.PropertyHiddenChildVm
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyHiddenVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyHiddenVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 @NoArgsConstructor
 public class PropertyHiddenVm implements HasAsciiDocDescription {
 
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 88afb91ae3..1a65f0aea6 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.hidden.child;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -43,10 +44,9 @@ import demoapp.dom.domain.properties.Property.hidden.PropertyHiddenVm;
 @XmlRootElement(name = "child")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyHiddenChildVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyHiddenChildVm"
-)
+        nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 public class PropertyHiddenChildVm implements HasAsciiDocDescription {
 
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 2c6491b423..88ba23fc8a 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.maxLength;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -40,11 +41,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyMaxLengthVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyMaxLengthVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 public class PropertyMaxLengthVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 fdf1923eda..ebb624552c 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.mustSatisfy;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -40,11 +41,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyMustSatisfyVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyMustSatisfyVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 public class PropertyMustSatisfyVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 84914788f0..160eca13b5 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.optionality;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -41,11 +42,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyOptionalityVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyOptionalityVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 public class PropertyOptionalityVm implements HasAsciiDocDescription {
     // ...
 //end::class[]
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 a0d5aa6093..64f6fcc6d9 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
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.Property.projecting;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -46,11 +47,10 @@ import demoapp.dom.domain.properties.Property.projecting.child.PropertyProjectin
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyProjectingVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyProjectingVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 @NoArgsConstructor
 public class PropertyProjectingVm implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/child/PropertyProjectingChildVm.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/child/PropertyProjectingChildVm.java
index b7086b8207..da6a916648 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/child/PropertyProjectingChildVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/child/PropertyProjectingChildVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.projecting.child;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -46,10 +47,9 @@ import demoapp.dom.domain.properties.Property.projecting.persistence.PropertyPro
 @XmlRootElement(name = "child")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyProjectingChildVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyProjectingChildVm"
-)
+        nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 public class PropertyProjectingChildVm implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/jdo/PropertyProjectingChildJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/jdo/PropertyProjectingChildJdo.java
index 1de2b5879a..e833e8c7bf 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/jdo/PropertyProjectingChildJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/jdo/PropertyProjectingChildJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.projecting.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -42,9 +43,9 @@ import demoapp.dom.domain.properties.Property.projecting.persistence.PropertyPro
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Named("demo.PropertyProjectingChildJdo")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.PropertyProjectingChildJdo"
         , editing = Editing.DISABLED
 )
 @XmlJavaTypeAdapter(PersistentEntityAdapter.class)
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/jpa/PropertyProjectingChildJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/jpa/PropertyProjectingChildJpa.java
index b946d0919e..6357342017 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/jpa/PropertyProjectingChildJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/jpa/PropertyProjectingChildJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.projecting.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -48,10 +49,9 @@ import demoapp.dom.domain.properties.Property.projecting.persistence.PropertyPro
     name = "PropertyProjectingChildJpa"
 )
 @EntityListeners(IsisEntityListener.class)
+@Named("demo.PropertyProjectingChildJpa")
 @DomainObject(
-    logicalTypeName = "demo.PropertyProjectingChildJpa"
-    , editing = Editing.DISABLED
-)
+    editing = Editing.DISABLED)
 @XmlJavaTypeAdapter(PersistentEntityAdapter.class)
 @NoArgsConstructor
 public class PropertyProjectingChildJpa
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/persistence/PropertyProjectingChildEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/persistence/PropertyProjectingChildEntity.java
index fdd373f265..01be2c0151 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/persistence/PropertyProjectingChildEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/projecting/persistence/PropertyProjectingChildEntity.java
@@ -18,14 +18,15 @@
  */
 package demoapp.dom.domain.properties.Property.projecting.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 
-@DomainObject(
-        logicalTypeName = "demo.PropertyProjectingChildEntity" // shared permissions with concrete sub class
-)
+@Named("demo.PropertyProjectingChildEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class PropertyProjectingChildEntity
 implements
     HasAsciiDocDescription,
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 03a935b1bd..2e481c6518 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
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.Property.regexPattern;
 
 import java.util.regex.Pattern;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,11 +43,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyRegexPatternVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyRegexPatternVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 public class PropertyRegexPatternVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 302e1d3370..c07ed86194 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.Property.snapshot;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -41,11 +42,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertySnapshotVm")
 @DomainObject(
     nature=Nature.VIEW_MODEL,
-    logicalTypeName = "demo.PropertySnapshotVm",
-    editing = Editing.ENABLED
-)
+    editing = Editing.ENABLED)
 @NoArgsConstructor
 public class PropertySnapshotVm implements HasAsciiDocDescription {
 
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 159811dd9e..e95d20d7e2 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.PropertyLayout.cssClass;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -41,11 +42,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyLayoutCssClassVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyLayoutCssClassVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 public class PropertyLayoutCssClassVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 c1732e4fc5..5f9ebf6944 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.PropertyLayout.describedAs;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -41,11 +42,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyLayoutDescribedAsVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyLayoutDescribedAsVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 public class PropertyLayoutDescribedAsVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 e494a7c82b..b61dcc5d1b 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
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.PropertyLayout.hidden;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -49,11 +50,10 @@ import demoapp.dom.domain.properties.PropertyLayout.hidden.child.PropertyLayoutH
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyLayoutHiddenVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyLayoutHiddenVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 @NoArgsConstructor
 public class PropertyLayoutHiddenVm implements HasAsciiDocDescription {
 
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 7d1ed002cc..0da0256b4e 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.PropertyLayout.hidden.child;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,10 +45,9 @@ import demoapp.dom.domain.properties.PropertyLayout.hidden.PropertyLayoutHiddenV
 @XmlRootElement(name = "child")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyLayoutHiddenChildVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyLayoutHiddenChildVm"
-)
+        nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 public class PropertyLayoutHiddenChildVm implements HasAsciiDocDescription {
 
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 c011807207..679c9aa697 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.PropertyLayout.labelPosition;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,11 +43,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyLayoutLabelPositionVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyLayoutLabelPositionVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 public class PropertyLayoutLabelPositionVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 d333177a07..02d5e1a36a 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.PropertyLayout.multiLine;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -41,11 +42,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyLayoutMultiLineVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyLayoutMultiLineVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 public class PropertyLayoutMultiLineVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 4216da126a..9c01b62ad5 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.PropertyLayout.named;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -41,11 +42,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyLayoutNamedVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyLayoutNamedVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 public class PropertyLayoutNamedVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 995d4cca26..d7d348390c 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
@@ -21,6 +21,7 @@ package demoapp.dom.domain.properties.PropertyLayout.navigable;
 import java.io.File;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.isis.applib.annotation.DomainObject;
@@ -42,7 +43,8 @@ import lombok.val;
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
 @XmlRootElement(name="FileNode")
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.FileNode")
+@Named("demo.FileNode")
+@DomainObject(nature=Nature.VIEW_MODEL)
 @ToString
 @NoArgsConstructor
 public class FileNodeVm implements HasAsciiDocDescription {
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 cd9356d31f..84b3161284 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
@@ -20,6 +20,7 @@ package demoapp.dom.domain.properties.PropertyLayout.renderDay;
 
 import java.time.LocalDate;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -37,20 +38,20 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.RenderDay;
 import org.apache.isis.applib.jaxb.JavaTimeJaxbAdapters;
 
-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
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyLayoutRenderDayVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyLayoutRenderDayVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 @NoArgsConstructor
 public class PropertyLayoutRenderDayVm implements HasAsciiDocDescription {
 
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 bdc1e67a96..a3cf5ce74d 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.PropertyLayout.repainting;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,10 +45,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyLayoutRepaintingVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyLayoutRepaintingVm"
-)
+        nature=Nature.VIEW_MODEL)
 public class PropertyLayoutRepaintingVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 822f742e36..2474732d2a 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.domain.properties.PropertyLayout.typicalLength;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -41,11 +42,10 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PropertyLayoutTypicalLengthVm")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PropertyLayoutTypicalLengthVm",
-        editing = Editing.ENABLED
-)
+        editing = Editing.ENABLED)
 public class PropertyLayoutTypicalLengthVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldVm.java b/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldVm.java
index f079846c2f..e403abb9ff 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/featured/customui/vm/WhereInTheWorldVm.java
@@ -20,6 +20,7 @@ package demoapp.dom.featured.customui.vm;
 
 import java.io.Serializable;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -41,8 +42,12 @@ import demoapp.dom.featured.customui.latlng.Zoom;
 @XmlRootElement(name = "demo.CustomUiVm")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.CustomUiVm")
-public class WhereInTheWorldVm implements HasAsciiDocDescription, Serializable {
+@Named("demo.CustomUiVm")
+@DomainObject(nature=Nature.VIEW_MODEL)
+public class WhereInTheWorldVm
+implements HasAsciiDocDescription, Serializable {
+
+    private static final long serialVersionUID = 1L;
 
     @Title
     @Getter @Setter
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 e2aaa7d784..0ab2d124ab 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
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -57,7 +58,8 @@ import demoapp.dom.domain.actions.progmodel.assoc.DemoItem;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.Tooltip")
+@Named("demo.Tooltip")
+@DomainObject(nature=Nature.VIEW_MODEL)
 public class DescribedAsVm implements HasAsciiDocDescription {
 
     @XmlTransient
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 e1036969fa..3e51919374 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.featured.layout.tabs;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -39,7 +40,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.Tab")
+@Named("demo.Tab")
+@DomainObject(nature=Nature.VIEW_MODEL)
 public class TabDemo implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 0936aebdbf..9dc76956b9 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
@@ -19,6 +19,7 @@
 package demoapp.dom.homepage;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.HomePage;
@@ -31,10 +32,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.resources.AsciiDocReaderService;
 
 //tag::class[]
+@Named("demo.Homepage")
 @DomainObject(
-    nature=Nature.VIEW_MODEL,
-    logicalTypeName = "demo.Homepage"
-)
+    nature=Nature.VIEW_MODEL)
 @HomePage                                                       // <.>
 public class DemoHomePage
         implements HasAsciiDocDescription {                     // <.>
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 af2570974d..fde4f2ac98 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.services.core.errorreportingservice;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -35,7 +36,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.ErrorReportingServiceDemoVm", editing=Editing.ENABLED)
+@Named("demo.ErrorReportingServiceDemoVm")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 public class ErrorReportingServiceDemoVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 e515a9aa3c..c54caabf66 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
@@ -21,6 +21,7 @@ package demoapp.dom.services.core.eventbusservice;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import org.apache.isis.applib.ViewModel;
 import org.apache.isis.applib.annotation.Action;
@@ -34,7 +35,8 @@ import org.apache.isis.applib.services.eventbus.EventBusService;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.EventBusServiceDemoVm")
+@Named("demo.EventBusServiceDemoVm")
+@DomainObject(nature=Nature.VIEW_MODEL)
 public class EventBusServiceDemoVm implements HasAsciiDocDescription {
 
     @Inject private EventLogEntryRepository<? extends EventLogEntry> eventLogEntryRepository;
@@ -49,7 +51,8 @@ public class EventBusServiceDemoVm implements HasAsciiDocDescription {
         return eventLogEntryRepository.listAll();
     }
 
-    @DomainObject(nature = Nature.VIEW_MODEL, logicalTypeName = "demo.EventBusServiceDemoVm.UiButtonEvent")
+    @Named("demo.EventBusServiceDemoVm.UiButtonEvent")
+    @DomainObject(nature = Nature.VIEW_MODEL)
     public static class UiButtonEvent implements ViewModel {
         // -- VIEWMODEL CONTRACT
         public UiButtonEvent(final String memento) { }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntry.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntry.java
index 257222bc14..cda5c46901 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntry.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventLogEntry.java
@@ -18,10 +18,13 @@
  */
 package demoapp.dom.services.core.eventbusservice;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.ObjectSupport;
 
-@DomainObject(logicalTypeName = "demo.EventLogEntry")
+@Named("demo.EventLogEntry")
+@DomainObject
 public abstract class EventLogEntry {
 
     @ObjectSupport public String title() {
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 da87c122a3..3b4888a066 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
@@ -21,6 +21,7 @@ package demoapp.dom.services.core.eventbusservice;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -43,7 +44,8 @@ import demoapp.dom.services.core.eventbusservice.EventBusServiceDemoVm.UiButtonE
 @Profile("demo-jdo")
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo" )
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(logicalTypeName = "demo.EventLogEntry")
+@Named("demo.EventLogEntry")
+@DomainObject
 public class EventLogEntryJdo
 extends EventLogEntry {
 
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 8fd58fe877..8965387456 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
@@ -21,6 +21,7 @@ package demoapp.dom.services.core.eventbusservice;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
@@ -41,7 +42,8 @@ import demoapp.dom.services.core.eventbusservice.EventBusServiceDemoVm.UiButtonE
 
 @Profile("demo-jpa")
 @Entity
-@DomainObject(logicalTypeName = "demo.EventLogEntry")
+@Named("demo.EventLogEntry")
+@DomainObject
 public class EventLogEntryJpa
 extends EventLogEntry {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventSubscriberDemoImplementation.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventSubscriberDemoImplementation.java
index d413bccfbd..5a9525b09c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventSubscriberDemoImplementation.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/eventbusservice/EventSubscriberDemoImplementation.java
@@ -61,9 +61,9 @@ public class EventSubscriberDemoImplementation {
 
     }
 
+    @Named("demo.eventLogWriter")
     @DomainObject(
-            nature = Nature.BEAN, // <-- have this Object's lifecycle managed by Spring
-            logicalTypeName = "demo.eventLogWriter")
+            nature = Nature.BEAN) // <-- have this Object's lifecycle managed by Spring
     public static class EventLogWriter {
 
         @Inject private EventLogEntryRepository<? extends EventLogEntry> eventLogEntryRepository;
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 a9c3113812..4679a217aa 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
@@ -19,18 +19,20 @@
 package demoapp.dom.services.core.messageservice;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import org.apache.isis.applib.annotation.Action;
 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.ObjectSupport;
-import org.apache.isis.applib.annotation.ActionLayout.Position;
 import org.apache.isis.applib.services.message.MessageService;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.MessageServiceDemoVm")
+@Named("demo.MessageServiceDemoVm")
+@DomainObject(nature=Nature.VIEW_MODEL)
 public class MessageServiceDemoVm implements HasAsciiDocDescription {
 
     @Inject private MessageService messageService;
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity.java
index d04fb95679..60ee9d34ee 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/wrapperFactory/WrapperFactoryEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.services.core.wrapperFactory;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.domain._commands.ExposePersistedCommands;
 
-@DomainObject(
-        logicalTypeName = "demo.WrapperFactoryEntity" // shared permissions with concrete sub class
-)
+@Named("demo.WrapperFactoryEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class WrapperFactoryEntity
 implements
     HasAsciiDocDescription,
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 5f65816715..7f7d0ca9d9 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
@@ -19,6 +19,7 @@
 package demoapp.dom.services.core.wrapperFactory.jdo;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -51,9 +52,9 @@ import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity_updatePrope
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
+@Named("demo.WrapperFactoryEntity")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.WrapperFactoryEntity"
         , editing = Editing.DISABLED
 )
 public class WrapperFactoryJdo
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 87c9ffacfd..e3d6ab114b 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
@@ -19,6 +19,7 @@
 package demoapp.dom.services.core.wrapperFactory.jpa;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -58,9 +59,9 @@ import demoapp.dom.services.core.wrapperFactory.WrapperFactoryEntity_updatePrope
   name = "WrapperFactoryJpa"
 )
 @EntityListeners(IsisEntityListener.class)
+@Named("demo.WrapperFactoryEntity")
 @DomainObject(
         nature=Nature.ENTITY
-        , logicalTypeName = "demo.WrapperFactoryEntity"
         , editing = Editing.DISABLED
 )
 @NoArgsConstructor
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 14aecb0826..26c618b08b 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
@@ -21,6 +21,7 @@ package demoapp.dom.services.core.xmlSnapshotService;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -48,10 +49,9 @@ import demoapp.dom.services.core.xmlSnapshotService.peer.XmlSnapshotPeerVm;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.XmlSnapshotParentVm")
 @DomainObject(
-    nature=Nature.VIEW_MODEL,
-    logicalTypeName = "demo.XmlSnapshotParentVm"
-)
+    nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 public class XmlSnapshotParentVm implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/child/XmlSnapshotChildVm.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/child/XmlSnapshotChildVm.java
index b75d331981..92754bad64 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/child/XmlSnapshotChildVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/child/XmlSnapshotChildVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.services.core.xmlSnapshotService.child;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -40,14 +41,13 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "child")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.XmlSnapshotChildVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.XmlSnapshotChildVm"
-)
+        nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 public class XmlSnapshotChildVm implements HasAsciiDocDescription {
 
-    public XmlSnapshotChildVm(String value) {
+    public XmlSnapshotChildVm(final String value) {
         setValue(value);
     }
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/XmlSnapshotPeerVm.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/XmlSnapshotPeerVm.java
index 9a65e77218..671c484bb4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/XmlSnapshotPeerVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/XmlSnapshotPeerVm.java
@@ -21,6 +21,7 @@ package demoapp.dom.services.core.xmlSnapshotService.peer;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -47,14 +48,13 @@ import demoapp.dom.services.core.xmlSnapshotService.peer.child.XmlSnapshotPeerCh
 @XmlRootElement(name = "peer")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.XmlSnapshotPeerVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.XmlSnapshotPeerVm"
-)
+        nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 public class XmlSnapshotPeerVm implements HasAsciiDocDescription {
 
-    public XmlSnapshotPeerVm(String value) {
+    public XmlSnapshotPeerVm(final String value) {
         setValue(value);
     }
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/child/XmlSnapshotPeerChildVm.java b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/child/XmlSnapshotPeerChildVm.java
index c517e55f13..f3e1f0ce56 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/child/XmlSnapshotPeerChildVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/core/xmlSnapshotService/peer/child/XmlSnapshotPeerChildVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.services.core.xmlSnapshotService.peer.child;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -40,14 +41,13 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "child")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.XmlSnapshotPeerChildVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.XmlSnapshotPeerChildVm"
-)
+        nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 public class XmlSnapshotPeerChildVm implements HasAsciiDocDescription {
 
-    public XmlSnapshotPeerChildVm(String value) {
+    public XmlSnapshotPeerChildVm(final String value) {
         setValue(value);
     }
 
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 c9cfa5bbef..ce24d9d538 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
@@ -21,6 +21,7 @@ package demoapp.dom.services.extensions.secman.apptenancy;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -45,10 +46,9 @@ import demoapp.dom.services.extensions.secman.apptenancy.persistence.TenantedEnt
 @XmlRootElement(name = "root")
 @XmlType()
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.SecManVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL
-        , logicalTypeName = "demo.SecManVm"
-)
+        nature=Nature.VIEW_MODEL)
 public class AppTenancyVm implements HasAsciiDocDescription {
 
     @ObjectSupport public String title() {
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 9b3ed2a9f3..305367e0c8 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.services.extensions.secman.apptenancy.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -44,9 +45,8 @@ import demoapp.dom.services.extensions.secman.apptenancy.persistence.TenantedEnt
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo" )
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.TenantedEntity"
-)
+@Named("demo.TenantedEntity")
+@DomainObject
 public class TenantedJdo
         extends TenantedEntity {
 
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 4404c61a6e..baeffd8b82 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.services.extensions.secman.apptenancy.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -51,9 +52,8 @@ import demoapp.dom.services.extensions.secman.apptenancy.persistence.TenantedEnt
     name = "TenantedJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-    logicalTypeName = "demo.TenantedEntity"
-)
+@Named("demo.TenantedEntity")
+@DomainObject
 @NoArgsConstructor
 public class TenantedJpa
         extends TenantedEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/persistence/TenantedEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/persistence/TenantedEntity.java
index 65c238ce2d..c498b9d68d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/persistence/TenantedEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/services/extensions/secman/apptenancy/persistence/TenantedEntity.java
@@ -18,13 +18,14 @@
  */
 package demoapp.dom.services.extensions.secman.apptenancy.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.values.ValueHolder;
 
-@DomainObject(
-        logicalTypeName = "demo.TenantedEntity" // shared permissions with concrete sub class
-)
+@Named("demo.TenantedEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class TenantedEntity
 implements ValueHolder<String>{
 
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 9fbdccea59..3d56d52fa8 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.isis.blobs;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.isis.blobs.vm.IsisBlobVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.IsisBlobs", editing=Editing.ENABLED)
+@Named("demo.IsisBlobs")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class IsisBlobs implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/jdo/IsisBlobJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/jdo/IsisBlobJdo.java
index 5cd686decf..fc59e20ce5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/jdo/IsisBlobJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/jdo/IsisBlobJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.blobs.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -44,14 +45,13 @@ import demoapp.dom.types.isis.blobs.persistence.IsisBlobEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.IsisBlobEntity"
-)
+@Named("demo.IsisBlobEntity")
+@DomainObject
 public class IsisBlobJdo                                            // <.>
         extends IsisBlobEntity {
 
 //end::class[]
-    public IsisBlobJdo(Blob initialValue) {
+    public IsisBlobJdo(final Blob initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/jpa/IsisBlobJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/jpa/IsisBlobJpa.java
index 97bb10ce7a..7db185115f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/jpa/IsisBlobJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/jpa/IsisBlobJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.blobs.jpa;
 
+import javax.inject.Named;
 import javax.persistence.AttributeOverride;
 import javax.persistence.AttributeOverrides;
 import javax.persistence.Column;
@@ -52,15 +53,14 @@ import demoapp.dom.types.isis.blobs.persistence.IsisBlobEntity;
       name = "IsisBlobJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.IsisBlobEntity"
-)
+@Named("demo.IsisBlobEntity")
+@DomainObject
 @NoArgsConstructor
 public class IsisBlobJpa
         extends IsisBlobEntity {
 
 //end::class[]
-    public IsisBlobJpa(Blob initialValue) {
+    public IsisBlobJpa(final Blob initialValue) {
         setReadOnlyProperty(initialValue);
         setReadWriteProperty(initialValue);
     }
@@ -78,11 +78,13 @@ public class IsisBlobJpa
     @Embedded
     private BlobJpaEmbeddable readOnlyProperty;
 
+    @Override
     @Title(prepend = "Blob JPA entity: ")
     @PropertyLayout(fieldSetId = "read-only-properties", sequence = "1")
     public Blob getReadOnlyProperty() {
         return BlobJpaEmbeddable.toBlob(readOnlyProperty);
     }
+    @Override
     public void setReadOnlyProperty(final Blob readOnlyProperty) {
         this.readOnlyProperty = BlobJpaEmbeddable.fromBlob(readOnlyProperty);
     }
@@ -95,12 +97,14 @@ public class IsisBlobJpa
     @Embedded
     private BlobJpaEmbeddable readWriteProperty;
 
+    @Override
     @Property(editing = Editing.ENABLED)                            // <.>
     @PropertyLayout(fieldSetId = "editable-properties", sequence = "1")
     public Blob getReadWriteProperty() {
         return BlobJpaEmbeddable.toBlob(readWriteProperty);
     }
 
+    @Override
     public void setReadWriteProperty(final Blob readWriteProperty) {
         this.readWriteProperty = BlobJpaEmbeddable.fromBlob(readWriteProperty);
     }
@@ -113,12 +117,14 @@ public class IsisBlobJpa
     @Embedded
     private BlobJpaEmbeddable readOnlyOptionalProperty;
 
+    @Override
     @Property(optionality = Optionality.OPTIONAL)                   // <.>
     @PropertyLayout(fieldSetId = "optional-properties", sequence = "1")
     public Blob getReadOnlyOptionalProperty() {
         return BlobJpaEmbeddable.toBlob(readOnlyOptionalProperty);
     }
 
+    @Override
     public void setReadOnlyOptionalProperty(final Blob readOnlyOptionalProperty) {
         this.readOnlyOptionalProperty = BlobJpaEmbeddable.fromBlob(readOnlyOptionalProperty);
     }
@@ -132,12 +138,14 @@ public class IsisBlobJpa
     @Embedded
     private BlobJpaEmbeddable readWriteOptionalProperty;
 
+    @Override
     @Property(editing = Editing.ENABLED, optionality = Optionality.OPTIONAL)
     @PropertyLayout(fieldSetId = "optional-properties", sequence = "2")
     public Blob getReadWriteOptionalProperty() {
         return BlobJpaEmbeddable.toBlob(readWriteOptionalProperty);
     }
 
+    @Override
     public void setReadWriteOptionalProperty(final Blob readWriteOptionalProperty) {
         this.readWriteOptionalProperty = BlobJpaEmbeddable.fromBlob(readWriteOptionalProperty);
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/persistence/IsisBlobEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/persistence/IsisBlobEntity.java
index a726102887..fa80160207 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/persistence/IsisBlobEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/blobs/persistence/IsisBlobEntity.java
@@ -18,6 +18,8 @@
  */
 package demoapp.dom.types.isis.blobs.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.value.Blob;
 
@@ -25,9 +27,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.isis.blobs.holder.IsisBlobHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.IsisBlobEntity" // shared permissions with concrete sub class
-)
+@Named("demo.IsisBlobEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class IsisBlobEntity
 implements
     HasAsciiDocDescription,
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 965af2364f..491208b983 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.blobs.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -43,10 +44,9 @@ import demoapp.dom.types.isis.blobs.holder.IsisBlobHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.IsisBlobVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.IsisBlobVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class IsisBlobVm
         implements HasAsciiDocDescription, IsisBlobHolder2 {
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 f42a3fd1fa..f2357df321 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.isis.clobs;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.isis.clobs.vm.IsisClobVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.IsisClobs", editing=Editing.ENABLED)
+@Named("demo.IsisClobs")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class IsisClobs implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/jdo/IsisClobJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/jdo/IsisClobJdo.java
index a3b8ec043f..75f16b53bb 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/jdo/IsisClobJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/jdo/IsisClobJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.clobs.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -44,14 +45,13 @@ import demoapp.dom.types.isis.clobs.persistence.IsisClobEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.IsisClobEntity"
-)
+@Named("demo.IsisClobEntity")
+@DomainObject
 public class IsisClobJdo                                          // <.>
         extends IsisClobEntity {
 
 //end::class[]
-    public IsisClobJdo(Clob initialValue) {
+    public IsisClobJdo(final Clob initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/jpa/IsisClobJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/jpa/IsisClobJpa.java
index 9e093423d9..4d974caa57 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/jpa/IsisClobJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/jpa/IsisClobJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.clobs.jpa;
 
+import javax.inject.Named;
 import javax.persistence.AttributeOverride;
 import javax.persistence.AttributeOverrides;
 import javax.persistence.Column;
@@ -52,9 +53,8 @@ import demoapp.dom.types.isis.clobs.persistence.IsisClobEntity;
       name = "IsisClobJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.IsisClobEntity"
-)
+@Named("demo.IsisClobEntity")
+@DomainObject
 @NoArgsConstructor
 public class IsisClobJpa
         extends IsisClobEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/persistence/IsisClobEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/persistence/IsisClobEntity.java
index 99ebd5067b..ec5437cb10 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/persistence/IsisClobEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/persistence/IsisClobEntity.java
@@ -18,6 +18,8 @@
  */
 package demoapp.dom.types.isis.clobs.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.value.Clob;
 
@@ -25,9 +27,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.isis.clobs.holder.IsisClobHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.IsisClobEntity" // shared permissions with concrete sub class
-)
+@Named("demo.IsisClobEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class IsisClobEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/vm/IsisClobVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/vm/IsisClobVm.java
index c59e9187ab..e19c30eece 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/vm/IsisClobVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/clobs/vm/IsisClobVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.clobs.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -43,16 +44,15 @@ import demoapp.dom.types.isis.clobs.holder.IsisClobHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.IsisClobVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.IsisClobVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class IsisClobVm
         implements HasAsciiDocDescription, IsisClobHolder2 {
 
 //end::class[]
-    public IsisClobVm(Clob initialValue) {
+    public IsisClobVm(final Clob initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 80b0243c55..dc16e6cb7a 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.isis.localresourcepaths;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.isis.localresourcepaths.vm.IsisLocalResourcePathVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.IsisLocalResourcePaths", editing=Editing.ENABLED)
+@Named("demo.IsisLocalResourcePaths")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class IsisLocalResourcePaths implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/jdo/IsisLocalResourcePathJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/jdo/IsisLocalResourcePathJdo.java
index ae00a3782a..18459e95fd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/jdo/IsisLocalResourcePathJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/jdo/IsisLocalResourcePathJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.localresourcepaths.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -44,14 +45,13 @@ import demoapp.dom.types.isis.localresourcepaths.persistence.IsisLocalResourcePa
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.IsisLocalResourcePathEntity"
-)
+@Named("demo.IsisLocalResourcePathEntity")
+@DomainObject
 public class IsisLocalResourcePathJdo                                   // <.>
         extends IsisLocalResourcePathEntity {
 
 //end::class[]
-    public IsisLocalResourcePathJdo(LocalResourcePath initialValue) {
+    public IsisLocalResourcePathJdo(final LocalResourcePath initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/jpa/IsisLocalResourcePathJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/jpa/IsisLocalResourcePathJpa.java
index 168f81cf61..a9b5cc714e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/jpa/IsisLocalResourcePathJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/jpa/IsisLocalResourcePathJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.localresourcepaths.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -50,9 +51,8 @@ import demoapp.dom.types.isis.localresourcepaths.persistence.IsisLocalResourcePa
       name = "IsisLocalResourcePathJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.IsisLocalResourcePathEntity"
-)
+@Named("demo.IsisLocalResourcePathEntity")
+@DomainObject
 @NoArgsConstructor
 public class IsisLocalResourcePathJpa
         extends IsisLocalResourcePathEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/persistence/IsisLocalResourcePathEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/persistence/IsisLocalResourcePathEntity.java
index 825f48d008..9e80d7ee10 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/persistence/IsisLocalResourcePathEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/persistence/IsisLocalResourcePathEntity.java
@@ -18,6 +18,8 @@
  */
 package demoapp.dom.types.isis.localresourcepaths.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.value.LocalResourcePath;
 
@@ -25,9 +27,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.isis.localresourcepaths.holder.IsisLocalResourcePathHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.IsisLocalResourcePathEntity" // shared permissions with concrete sub class
-)
+@Named("demo.IsisLocalResourcePathEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class IsisLocalResourcePathEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/vm/IsisLocalResourcePathVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/vm/IsisLocalResourcePathVm.java
index 0edb39c005..d7a250c54e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/vm/IsisLocalResourcePathVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/localresourcepaths/vm/IsisLocalResourcePathVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.localresourcepaths.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -43,16 +44,15 @@ import demoapp.dom.types.isis.localresourcepaths.holder.IsisLocalResourcePathHol
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.IsisLocalResourcePathVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.IsisLocalResourcePathVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class IsisLocalResourcePathVm
         implements HasAsciiDocDescription, IsisLocalResourcePathHolder2 {
 
 //end::class[]
-    public IsisLocalResourcePathVm(LocalResourcePath initialValue) {
+    public IsisLocalResourcePathVm(final LocalResourcePath initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 4c8f1a4678..b5c421baa3 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.isis.markups;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.isis.markups.vm.IsisMarkupVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.IsisMarkups", editing=Editing.ENABLED)
+@Named("demo.IsisMarkups")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class IsisMarkups implements HasAsciiDocDescription {
 
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 c82a1ac8b0..0a031379d6 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
@@ -19,6 +19,7 @@
 package demoapp.dom.types.isis.markups.jdo;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -46,11 +47,10 @@ import demoapp.dom.types.isis.markups.persistence.IsisMarkupEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.IsisMarkupEntity"
-)
+@Named("demo.IsisMarkupEntity")
+@DomainObject
 public class IsisMarkupJdo                                          // <.>
-        extends IsisMarkupEntity {
+extends IsisMarkupEntity {
 
 //end::class[]
     public IsisMarkupJdo(final Markup initialValue) {
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 cb130a7a96..456c7d7f9c 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
@@ -19,6 +19,7 @@
 package demoapp.dom.types.isis.markups.jpa;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.persistence.Basic;
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -57,9 +58,8 @@ import demoapp.dom.types.isis.markups.persistence.IsisMarkupEntity;
       name = "IsisMarkupJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.IsisMarkupEntity"
-)
+@Named("demo.IsisMarkupEntity")
+@DomainObject
 @NoArgsConstructor
 public class IsisMarkupJpa
         extends IsisMarkupEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/persistence/IsisMarkupEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/persistence/IsisMarkupEntity.java
index f77474c9c1..5cb4ac665a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/persistence/IsisMarkupEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/markups/persistence/IsisMarkupEntity.java
@@ -18,6 +18,8 @@
  */
 package demoapp.dom.types.isis.markups.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.value.Markup;
 
@@ -25,9 +27,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.isis.markups.holder.IsisMarkupHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.IsisMarkupEntity" // shared permissions with concrete sub class
-)
+@Named("demo.IsisMarkupEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class IsisMarkupEntity
 implements
     HasAsciiDocDescription,
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 859616600d..d78fe06c87 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.markups.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,10 +45,9 @@ import demoapp.dom.types.isis.markups.holder.IsisMarkupHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.IsisMarkupVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.IsisMarkupVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class IsisMarkupVm
         implements HasAsciiDocDescription, IsisMarkupHolder2 {
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 23c1d03cab..1863454c60 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.isis.passwords;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.isis.passwords.vm.IsisPasswordVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.IsisPasswords", editing=Editing.ENABLED)
+@Named("demo.IsisPasswords")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class IsisPasswords implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/jdo/IsisPasswordJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/jdo/IsisPasswordJdo.java
index e475e205b7..b4dc542e85 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/jdo/IsisPasswordJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/jdo/IsisPasswordJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.passwords.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -43,14 +44,13 @@ import demoapp.dom.types.isis.passwords.persistence.IsisPasswordEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.IsisPasswordEntity"
-)
+@Named("demo.IsisPasswordEntity")
+@DomainObject
 public class IsisPasswordJdo                                          // <.>
         extends IsisPasswordEntity {
 
 //end::class[]
-    public IsisPasswordJdo(Password initialValue) {
+    public IsisPasswordJdo(final Password initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/jpa/IsisPasswordJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/jpa/IsisPasswordJpa.java
index e076661137..b00b3e2622 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/jpa/IsisPasswordJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/jpa/IsisPasswordJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.passwords.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -50,9 +51,8 @@ import demoapp.dom.types.isis.passwords.persistence.IsisPasswordEntity;
       name = "IsisPasswordJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.IsisPasswordEntity"
-)
+@Named("demo.IsisPasswordEntity")
+@DomainObject
 @NoArgsConstructor
 public class IsisPasswordJpa
         extends IsisPasswordEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/persistence/IsisPasswordEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/persistence/IsisPasswordEntity.java
index 26df5af154..1918009a28 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/persistence/IsisPasswordEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/persistence/IsisPasswordEntity.java
@@ -19,12 +19,13 @@
 package demoapp.dom.types.isis.passwords.persistence;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 
 import org.apache.isis.applib.annotation.Action;
 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.PromptStyle;
-import org.apache.isis.applib.annotation.ActionLayout.Position;
 import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.applib.value.Password;
 
@@ -32,9 +33,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.isis.passwords.holder.IsisPasswordHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.IsisPasswordEntity" // shared permissions with concrete sub class
-)
+@Named("demo.IsisPasswordEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class IsisPasswordEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/vm/IsisPasswordVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/vm/IsisPasswordVm.java
index 3647a08939..95bf564ac9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/vm/IsisPasswordVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isis/passwords/vm/IsisPasswordVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isis.passwords.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -43,10 +44,9 @@ import demoapp.dom.types.isis.passwords.holder.IsisPasswordHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.IsisPasswordVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.IsisPasswordVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class IsisPasswordVm
         implements HasAsciiDocDescription, IsisPasswordHolder2 {
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 283438d57a..f141a9ae3c 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.isisext.asciidocs;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.isisext.asciidocs.vm.IsisAsciiDocVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.IsisAsciiDocs", editing=Editing.ENABLED)
+@Named("demo.IsisAsciiDocs")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class IsisAsciiDocs implements HasAsciiDocDescription {
 
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 5e141fd9f3..16e3aaf868 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
@@ -19,6 +19,7 @@
 package demoapp.dom.types.isisext.asciidocs.jdo;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -46,9 +47,8 @@ import demoapp.dom.types.isisext.asciidocs.persistence.IsisAsciiDocEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.IsisAsciiDocEntity"
-)
+@Named("demo.IsisAsciiDocEntity")
+@DomainObject
 public class IsisAsciiDocJdo                                          // <.>
         extends IsisAsciiDocEntity {
 
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 0be6edab5f..729f7b2b53 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
@@ -19,6 +19,7 @@
 package demoapp.dom.types.isisext.asciidocs.jpa;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.persistence.Basic;
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -57,9 +58,8 @@ import demoapp.dom.types.isisext.asciidocs.persistence.IsisAsciiDocEntity;
       name = "IsisAsciiDocJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.IsisAsciiDocEntity"
-)
+@Named("demo.IsisAsciiDocEntity")
+@DomainObject
 @NoArgsConstructor
 public class IsisAsciiDocJpa
         extends IsisAsciiDocEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/persistence/IsisAsciiDocEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/persistence/IsisAsciiDocEntity.java
index 94aa08e5ac..982c2d6ed4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/persistence/IsisAsciiDocEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/asciidocs/persistence/IsisAsciiDocEntity.java
@@ -18,6 +18,8 @@
  */
 package demoapp.dom.types.isisext.asciidocs.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.valuetypes.asciidoc.applib.value.AsciiDoc;
 
@@ -25,9 +27,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.isisext.asciidocs.holder.IsisAsciiDocHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.IsisAsciiDocEntity" // shared permissions with concrete sub class
-)
+@Named("demo.IsisAsciiDocEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class IsisAsciiDocEntity
 implements
     HasAsciiDocDescription,
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 53bc0d6bcd..9ad314aced 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isisext.asciidocs.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,10 +45,9 @@ import demoapp.dom.types.isisext.asciidocs.holder.IsisAsciiDocHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.IsisAsciiDocVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.IsisAsciiDocVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class IsisAsciiDocVm
         implements HasAsciiDocDescription, IsisAsciiDocHolder2 {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/IsisCalendarEvents.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/IsisCalendarEvents.java
index 1a2e1391f8..b6a1c33a47 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/IsisCalendarEvents.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/IsisCalendarEvents.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.isisext.cal;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.isisext.cal.vm.IsisCalendarEventVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.IsisCalendarEvents", editing=Editing.ENABLED)
+@Named("demo.IsisCalendarEvents")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class IsisCalendarEvents
 implements HasAsciiDocDescription {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/jdo/IsisCalendarEventJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/jdo/IsisCalendarEventJdo.java
index 325adb61fe..4ad95c5490 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/jdo/IsisCalendarEventJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/jdo/IsisCalendarEventJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isisext.cal.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -43,9 +44,8 @@ import demoapp.dom.types.isisext.cal.persistence.IsisCalendarEventEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.IsisCalendarEventEntity"
-)
+@Named("demo.IsisCalendarEventEntity")
+@DomainObject
 public class IsisCalendarEventJdo
         extends IsisCalendarEventEntity {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/jpa/IsisCalendarEventJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/jpa/IsisCalendarEventJpa.java
index bfc0f52c1b..fb68365b95 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/jpa/IsisCalendarEventJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/jpa/IsisCalendarEventJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isisext.cal.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -50,9 +51,8 @@ import demoapp.dom.types.isisext.cal.persistence.IsisCalendarEventEntity;
       name = "IsisCalendarEventJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.IsisCalendarEventEntity"
-)
+@Named("demo.IsisCalendarEventEntity")
+@DomainObject
 @NoArgsConstructor
 public class IsisCalendarEventJpa
         extends IsisCalendarEventEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/persistence/IsisCalendarEventEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/persistence/IsisCalendarEventEntity.java
index 4088a9834c..f8a46859cf 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/persistence/IsisCalendarEventEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/persistence/IsisCalendarEventEntity.java
@@ -18,6 +18,8 @@
  */
 package demoapp.dom.types.isisext.cal.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.extensions.fullcalendar.applib.CalendarEventable;
 import org.apache.isis.extensions.fullcalendar.applib.value.CalendarEvent;
@@ -26,9 +28,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.isisext.cal.holder.IsisCalendarEventHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.CalendarEventEntity" // shared permissions with concrete sub class
-)
+@Named("demo.CalendarEventEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class IsisCalendarEventEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/vm/IsisCalendarEventVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/vm/IsisCalendarEventVm.java
index 23ec3efeec..e766665f12 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/vm/IsisCalendarEventVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/cal/vm/IsisCalendarEventVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isisext.cal.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -43,10 +44,9 @@ import demoapp.dom.types.isisext.cal.holder.IsisCalendarEventHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.IsisCalendarEventVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.IsisCalendarEventVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class IsisCalendarEventVm
         implements HasAsciiDocDescription, IsisCalendarEventHolder2 {
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 6cb9278137..1f5605635c 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.isisext.markdowns;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.isisext.markdowns.vm.IsisMarkdownVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.IsisMarkdowns", editing=Editing.ENABLED)
+@Named("demo.IsisMarkdowns")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class IsisMarkdowns implements HasAsciiDocDescription {
 
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 76f9bb70d2..3b772ba0b7 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
@@ -19,6 +19,7 @@
 package demoapp.dom.types.isisext.markdowns.jdo;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -46,9 +47,8 @@ import demoapp.dom.types.isisext.markdowns.persistence.IsisMarkdownEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.IsisMarkdownEntity"
-)
+@Named("demo.IsisMarkdownEntity")
+@DomainObject
 public class IsisMarkdownJdo                                          // <.>
         extends IsisMarkdownEntity {
 
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 f382387ae7..bbbf110bbc 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
@@ -19,6 +19,7 @@
 package demoapp.dom.types.isisext.markdowns.jpa;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.persistence.Basic;
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -57,9 +58,8 @@ import demoapp.dom.types.isisext.markdowns.persistence.IsisMarkdownEntity;
       name = "IsisMarkdownJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.IsisMarkdownEntity"
-)
+@Named("demo.IsisMarkdownEntity")
+@DomainObject
 @NoArgsConstructor
 public class IsisMarkdownJpa
         extends IsisMarkdownEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/persistence/IsisMarkdownEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/persistence/IsisMarkdownEntity.java
index 74ac8bd4a8..55f354e05b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/persistence/IsisMarkdownEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/markdowns/persistence/IsisMarkdownEntity.java
@@ -18,6 +18,8 @@
  */
 package demoapp.dom.types.isisext.markdowns.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.valuetypes.markdown.applib.value.Markdown;
 
@@ -25,9 +27,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.isisext.markdowns.holder.IsisMarkdownHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.IsisMarkdownEntity" // shared permissions with concrete sub class
-)
+@Named("demo.IsisMarkdownEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class IsisMarkdownEntity
 implements
     HasAsciiDocDescription,
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 b9d3e07aed..360c1c7345 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.isisext.markdowns.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,10 +45,9 @@ import demoapp.dom.types.isisext.markdowns.holder.IsisMarkdownHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.IsisMarkdownVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.IsisMarkdownVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class IsisMarkdownVm
         implements HasAsciiDocDescription, IsisMarkdownHolder2 {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/sse/AsyncActionDemo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/sse/AsyncActionDemo.java
index 8872a67457..701dc146a7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/sse/AsyncActionDemo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/isisext/sse/AsyncActionDemo.java
@@ -19,6 +19,7 @@
 package demoapp.dom.types.isisext.sse;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -46,7 +47,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.AsyncAction", editing=Editing.DISABLED)
+@Named("demo.AsyncAction")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.DISABLED)
 public class AsyncActionDemo implements HasAsciiDocDescription {
 
     @XmlTransient
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 d1122c9a01..29596920c4 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
@@ -20,6 +20,8 @@ package demoapp.dom.types.isisext.sse;
 
 import java.util.concurrent.atomic.LongAdder;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Nature;
@@ -30,7 +32,8 @@ import org.apache.isis.valuetypes.sse.applib.service.SseChannel;
 
 import lombok.RequiredArgsConstructor;
 
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.AsyncDemoTask", editing=Editing.DISABLED)
+@Named("demo.AsyncDemoTask")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.DISABLED)
 @RequiredArgsConstructor(staticName="of")
 public class DemoTask implements SseSource {
 
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 450dd1401f..507c73e617 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
@@ -22,6 +22,7 @@ import java.awt.image.BufferedImage;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.javaawt.images.vm.JavaAwtBufferedImageVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaAwtBufferedImages", editing=Editing.ENABLED)
+@Named("demo.JavaAwtBufferedImages")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaAwtBufferedImages implements HasAsciiDocDescription {
 
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 0a10ae8798..4dc3c34439 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
@@ -20,6 +20,7 @@ package demoapp.dom.types.javaawt.images.jdo;
 
 import java.awt.image.BufferedImage;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -43,9 +44,8 @@ import demoapp.dom.types.javaawt.images.persistence.JavaAwtBufferedImageEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaAwtBufferedImageEntity"
-)
+@Named("demo.JavaAwtBufferedImageEntity")
+@DomainObject
 public class JavaAwtBufferedImageJdo
         extends JavaAwtBufferedImageEntity
 //end::class[]
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 0eb04c8d2c..ce0b0ea7d3 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
@@ -20,6 +20,7 @@ package demoapp.dom.types.javaawt.images.jpa;
 
 import java.awt.image.BufferedImage;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Convert;
 import javax.persistence.Entity;
@@ -52,9 +53,8 @@ import demoapp.dom.types.javaawt.images.persistence.JavaAwtBufferedImageEntity;
       name = "JavaAwtBufferedImageJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaAwtBufferedImageEntity"
-)
+@Named("demo.JavaAwtBufferedImageEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaAwtBufferedImageJpa
         extends JavaAwtBufferedImageEntity
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/persistence/JavaAwtBufferedImageEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/persistence/JavaAwtBufferedImageEntity.java
index fbef565a6f..b5b984836c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/persistence/JavaAwtBufferedImageEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javaawt/images/persistence/JavaAwtBufferedImageEntity.java
@@ -20,15 +20,16 @@ package demoapp.dom.types.javaawt.images.persistence;
 
 import java.awt.image.BufferedImage;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javaawt.images.holder.JavaAwtBufferedImageHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaAwtBufferedImageEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaAwtBufferedImageEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaAwtBufferedImageEntity
 implements
     HasAsciiDocDescription,
@@ -49,7 +50,7 @@ implements
     }
 
     @Override
-    public void setReadWriteProperty(BufferedImage c) {
+    public void setReadWriteProperty(final BufferedImage c) {
         // TODO Auto-generated method stub
     }
 
@@ -60,7 +61,7 @@ implements
     }
 
     @Override
-    public void setReadWriteOptionalProperty(BufferedImage c) {
+    public void setReadWriteOptionalProperty(final BufferedImage c) {
         // TODO Auto-generated method stub
     }
 
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 62203f2717..9be23f6f4d 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
@@ -20,6 +20,7 @@ package demoapp.dom.types.javaawt.images.vm;
 
 import java.awt.image.BufferedImage;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,10 +43,9 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaAwtBufferedImageVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaAwtBufferedImageVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                               // <.>
 public class JavaAwtBufferedImageVm
         implements HasAsciiDocDescription
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 553c7f775f..5833234a24 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.javalang.booleans;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javalang.booleans.vm.WrapperBooleanVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.WrapperBooleans", editing=Editing.ENABLED)
+@Named("demo.WrapperBooleans")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class WrapperBooleans implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/jdo/WrapperBooleanJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/jdo/WrapperBooleanJdo.java
index eb0373ada9..fb5217a374 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/jdo/WrapperBooleanJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/jdo/WrapperBooleanJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.booleans.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javalang.booleans.persistence.WrapperBooleanEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.WrapperBooleanEntity"
-)
+@Named("demo.WrapperBooleanEntity")
+@DomainObject
 public class WrapperBooleanJdo                                          // <.>
         extends WrapperBooleanEntity {
 
 //end::class[]
-    public WrapperBooleanJdo(Boolean initialValue) {
+    public WrapperBooleanJdo(final Boolean initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/jpa/WrapperBooleanJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/jpa/WrapperBooleanJpa.java
index 381ee276bb..21b829869f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/jpa/WrapperBooleanJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/jpa/WrapperBooleanJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.booleans.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javalang.booleans.persistence.WrapperBooleanEntity;
       name = "WrapperBooleanJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.WrapperBooleanEntity"
-)
+@Named("demo.WrapperBooleanEntity")
+@DomainObject
 @NoArgsConstructor
 public class WrapperBooleanJpa
         extends WrapperBooleanEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/persistence/WrapperBooleanEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/persistence/WrapperBooleanEntity.java
index 7119329944..502cfe34e9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/persistence/WrapperBooleanEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/persistence/WrapperBooleanEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javalang.booleans.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javalang.booleans.holder.WrapperBooleanHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.WrapperBooleanEntity" // shared permissions with concrete sub class
-)
+@Named("demo.WrapperBooleanEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class WrapperBooleanEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/vm/WrapperBooleanVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/vm/WrapperBooleanVm.java
index 83a9bb1f60..f574cf0edc 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/vm/WrapperBooleanVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/booleans/vm/WrapperBooleanVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.booleans.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,16 +43,15 @@ import demoapp.dom.types.javalang.booleans.holder.WrapperBooleanHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.WrapperBooleanVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.WrapperBooleanVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class WrapperBooleanVm
         implements HasAsciiDocDescription, WrapperBooleanHolder2 {
 
 //end::class[]
-    public WrapperBooleanVm(Boolean initialValue) {
+    public WrapperBooleanVm(final Boolean initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 eb428edddb..ec8eafca87 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.javalang.bytes;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javalang.bytes.vm.WrapperByteVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.WrapperBytes", editing=Editing.ENABLED)
+@Named("demo.WrapperBytes")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class WrapperBytes implements HasAsciiDocDescription {
 
@@ -73,5 +75,4 @@ public class WrapperBytes implements HasAsciiDocDescription {
     @XmlTransient
     ValueHolderRepository<Byte, ? extends WrapperByteEntity> entities;
 
-
 }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/jdo/WrapperByteJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/jdo/WrapperByteJdo.java
index 2517742a26..30de7c3827 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/jdo/WrapperByteJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/jdo/WrapperByteJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.bytes.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javalang.bytes.persistence.WrapperByteEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.WrapperByteEntity"
-)
+@Named("demo.WrapperByteEntity")
+@DomainObject
 public class WrapperByteJdo                                          // <.>
         extends WrapperByteEntity {
 
 //end::class[]
-    public WrapperByteJdo(Byte initialValue) {
+    public WrapperByteJdo(final Byte initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/jpa/WrapperByteJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/jpa/WrapperByteJpa.java
index 2276a28a90..8f703e5e76 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/jpa/WrapperByteJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/jpa/WrapperByteJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.bytes.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javalang.bytes.persistence.WrapperByteEntity;
       name = "WrapperByteJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.WrapperByteEntity"
-)
+@Named("demo.WrapperByteEntity")
+@DomainObject
 @NoArgsConstructor
 public class WrapperByteJpa
         extends WrapperByteEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/persistence/WrapperByteEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/persistence/WrapperByteEntity.java
index 9271f7bdb8..99be9f0b37 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/persistence/WrapperByteEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/persistence/WrapperByteEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javalang.bytes.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javalang.bytes.holder.WrapperByteHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.WrapperByteEntity" // shared permissions with concrete sub class
-)
+@Named("demo.WrapperByteEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class WrapperByteEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/vm/WrapperByteVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/vm/WrapperByteVm.java
index 06761f1831..ea2671f600 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/vm/WrapperByteVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/bytes/vm/WrapperByteVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.bytes.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,16 +43,15 @@ import demoapp.dom.types.javalang.bytes.holder.WrapperByteHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.WrapperByteVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.WrapperByteVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class WrapperByteVm
         implements HasAsciiDocDescription, WrapperByteHolder2 {
 
 //end::class[]
-    public WrapperByteVm(Byte initialValue) {
+    public WrapperByteVm(final Byte initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 3b9a6cc07b..3502f7c310 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.javalang.characters;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javalang.characters.vm.WrapperCharacterVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.WrapperCharacters", editing=Editing.ENABLED)
+@Named("demo.WrapperCharacters")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class WrapperCharacters implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/jdo/WrapperCharacterJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/jdo/WrapperCharacterJdo.java
index bb46e81c68..a7d30ab42a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/jdo/WrapperCharacterJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/jdo/WrapperCharacterJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.characters.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javalang.characters.persistence.WrapperCharacterEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.WrapperCharacterEntity"
-)
+@Named("demo.WrapperCharacterEntity")
+@DomainObject
 public class WrapperCharacterJdo                                          // <.>
         extends WrapperCharacterEntity {
 
 //end::class[]
-    public WrapperCharacterJdo(Character initialValue) {
+    public WrapperCharacterJdo(final Character initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/jpa/WrapperCharacterJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/jpa/WrapperCharacterJpa.java
index c71642de21..38dfb22be5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/jpa/WrapperCharacterJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/jpa/WrapperCharacterJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.characters.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javalang.characters.persistence.WrapperCharacterEntity;
       name = "WrapperCharacterJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.WrapperCharacterEntity"
-)
+@Named("demo.WrapperCharacterEntity")
+@DomainObject
 @NoArgsConstructor
 public class WrapperCharacterJpa
         extends WrapperCharacterEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/persistence/WrapperCharacterEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/persistence/WrapperCharacterEntity.java
index 3833e89b6d..67f724458b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/persistence/WrapperCharacterEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/persistence/WrapperCharacterEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javalang.characters.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javalang.characters.holder.WrapperCharacterHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.WrapperCharacterEntity" // shared permissions with concrete sub class
-)
+@Named("demo.WrapperCharacterEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class WrapperCharacterEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/vm/WrapperCharacterVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/vm/WrapperCharacterVm.java
index 0e60a130ea..e1e4b110fa 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/vm/WrapperCharacterVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/characters/vm/WrapperCharacterVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.characters.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,16 +43,15 @@ import demoapp.dom.types.javalang.characters.holder.WrapperCharacterHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.WrapperCharacterVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.WrapperCharacterVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class WrapperCharacterVm
         implements HasAsciiDocDescription, WrapperCharacterHolder2 {
 
 //end::class[]
-    public WrapperCharacterVm(Character initialValue) {
+    public WrapperCharacterVm(final Character initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 2b15a9b81c..6d41711a6f 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.javalang.doubles;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javalang.doubles.vm.WrapperDoubleVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.WrapperDoubles", editing=Editing.ENABLED)
+@Named("demo.WrapperDoubles")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class WrapperDoubles implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/jdo/WrapperDoubleJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/jdo/WrapperDoubleJdo.java
index 84f10b1c83..64959109a8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/jdo/WrapperDoubleJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/jdo/WrapperDoubleJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.doubles.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javalang.doubles.persistence.WrapperDoubleEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.WrapperDoubleEntity"
-)
+@Named("demo.WrapperDoubleEntity")
+@DomainObject
 public class WrapperDoubleJdo                                          // <.>
         extends WrapperDoubleEntity {
 
 //end::class[]
-    public WrapperDoubleJdo(Double initialValue) {
+    public WrapperDoubleJdo(final Double initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/jpa/WrapperDoubleJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/jpa/WrapperDoubleJpa.java
index ac952231fb..8c448953a3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/jpa/WrapperDoubleJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/jpa/WrapperDoubleJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.doubles.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javalang.doubles.persistence.WrapperDoubleEntity;
       name = "WrapperDoubleJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.WrapperDoubleEntity"
-)
+@Named("demo.WrapperDoubleEntity")
+@DomainObject
 @NoArgsConstructor
 public class WrapperDoubleJpa
         extends WrapperDoubleEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/persistence/WrapperDoubleEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/persistence/WrapperDoubleEntity.java
index 70a415aef1..a87fef51b0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/persistence/WrapperDoubleEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/persistence/WrapperDoubleEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javalang.doubles.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javalang.doubles.holder.WrapperDoubleHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.WrapperDoubleEntity" // shared permissions with concrete sub class
-)
+@Named("demo.WrapperDoubleEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class WrapperDoubleEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/vm/WrapperDoubleVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/vm/WrapperDoubleVm.java
index 8024a5a816..04f283d7dd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/vm/WrapperDoubleVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/doubles/vm/WrapperDoubleVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.doubles.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,16 +43,15 @@ import demoapp.dom.types.javalang.doubles.holder.WrapperDoubleHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.WrapperDoubleVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.WrapperDoubleVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class WrapperDoubleVm
         implements HasAsciiDocDescription, WrapperDoubleHolder2 {
 
 //end::class[]
-    public WrapperDoubleVm(Double initialValue) {
+    public WrapperDoubleVm(final Double initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 0eb61dd571..f9cf165839 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.javalang.floats;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javalang.floats.vm.WrapperFloatVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.WrapperFloats", editing=Editing.ENABLED)
+@Named("demo.WrapperFloats")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class WrapperFloats implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/jdo/WrapperFloatJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/jdo/WrapperFloatJdo.java
index 8e59304ad2..8997126b2e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/jdo/WrapperFloatJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/jdo/WrapperFloatJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.floats.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javalang.floats.persistence.WrapperFloatEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.WrapperFloatEntity"
-)
+@Named("demo.WrapperFloatEntity")
+@DomainObject
 public class WrapperFloatJdo                                          // <.>
         extends WrapperFloatEntity {
 
 //end::class[]
-    public WrapperFloatJdo(Float initialValue) {
+    public WrapperFloatJdo(final Float initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/jpa/WrapperFloatJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/jpa/WrapperFloatJpa.java
index cee5733aa2..088f6db777 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/jpa/WrapperFloatJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/jpa/WrapperFloatJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.floats.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javalang.floats.persistence.WrapperFloatEntity;
       name = "WrapperFloatJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.WrapperFloatEntity"
-)
+@Named("demo.WrapperFloatEntity")
+@DomainObject
 @NoArgsConstructor
 public class WrapperFloatJpa
         extends WrapperFloatEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/persistence/WrapperFloatEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/persistence/WrapperFloatEntity.java
index 46feb4eaf4..a6b0a5c257 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/persistence/WrapperFloatEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/persistence/WrapperFloatEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javalang.floats.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javalang.floats.holder.WrapperFloatHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.WrapperFloatEntity" // shared permissions with concrete sub class
-)
+@Named("demo.WrapperFloatEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class WrapperFloatEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/vm/WrapperFloatVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/vm/WrapperFloatVm.java
index b0a4f296f0..304e0d9bbe 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/vm/WrapperFloatVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/floats/vm/WrapperFloatVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.floats.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,16 +43,15 @@ import demoapp.dom.types.javalang.floats.holder.WrapperFloatHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.WrapperFloatVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.WrapperFloatVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class WrapperFloatVm
         implements HasAsciiDocDescription, WrapperFloatHolder2 {
 
 //end::class[]
-    public WrapperFloatVm(Float initialValue) {
+    public WrapperFloatVm(final Float initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 711c852e1e..f6ae534e77 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.javalang.integers;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javalang.integers.vm.WrapperIntegerVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.WrapperIntegers", editing=Editing.ENABLED)
+@Named("demo.WrapperIntegers")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class WrapperIntegers implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/jdo/WrapperIntegerJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/jdo/WrapperIntegerJdo.java
index 5e27681871..b5e72b0670 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/jdo/WrapperIntegerJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/jdo/WrapperIntegerJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.integers.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javalang.integers.persistence.WrapperIntegerEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.WrapperIntegerEntity"
-)
+@Named("demo.WrapperIntegerEntity")
+@DomainObject
 public class WrapperIntegerJdo                                          // <.>
         extends WrapperIntegerEntity {
 
 //end::class[]
-    public WrapperIntegerJdo(Integer initialValue) {
+    public WrapperIntegerJdo(final Integer initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/jpa/WrapperIntegerJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/jpa/WrapperIntegerJpa.java
index dbd9cfc04f..08d26231c2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/jpa/WrapperIntegerJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/jpa/WrapperIntegerJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.integers.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javalang.integers.persistence.WrapperIntegerEntity;
       name = "WrapperIntegerJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.WrapperIntegerEntity"
-)
+@Named("demo.WrapperIntegerEntity")
+@DomainObject
 @NoArgsConstructor
 public class WrapperIntegerJpa
         extends WrapperIntegerEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/persistence/WrapperIntegerEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/persistence/WrapperIntegerEntity.java
index b5ee7c498a..5d37772bcf 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/persistence/WrapperIntegerEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/persistence/WrapperIntegerEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javalang.integers.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javalang.integers.holder.WrapperIntegerHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.WrapperIntegerEntity" // shared permissions with concrete sub class
-)
+@Named("demo.WrapperIntegerEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class WrapperIntegerEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/vm/WrapperIntegerVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/vm/WrapperIntegerVm.java
index dac385d28a..6250181717 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/vm/WrapperIntegerVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/integers/vm/WrapperIntegerVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.integers.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,16 +43,15 @@ import demoapp.dom.types.javalang.integers.holder.WrapperIntegerHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.WrapperIntegerVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.WrapperIntegerVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class WrapperIntegerVm
         implements HasAsciiDocDescription, WrapperIntegerHolder2 {
 
 //end::class[]
-    public WrapperIntegerVm(Integer initialValue) {
+    public WrapperIntegerVm(final Integer initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 0863afe9a7..3194d2243d 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.javalang.longs;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javalang.longs.vm.WrapperLongVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.WrapperLongs", editing=Editing.ENABLED)
+@Named("demo.WrapperLongs")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class WrapperLongs implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/jdo/WrapperLongJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/jdo/WrapperLongJdo.java
index 14b3e90740..485a49e176 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/jdo/WrapperLongJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/jdo/WrapperLongJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.longs.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javalang.longs.persistence.WrapperLongEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.WrapperLongEntity"
-)
+@Named("demo.WrapperLongEntity")
+@DomainObject
 public class WrapperLongJdo                                          // <.>
         extends WrapperLongEntity {
 
 //end::class[]
-    public WrapperLongJdo(Long initialValue) {
+    public WrapperLongJdo(final Long initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/jpa/WrapperLongJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/jpa/WrapperLongJpa.java
index c76214d008..22ccda932a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/jpa/WrapperLongJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/jpa/WrapperLongJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.longs.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javalang.longs.persistence.WrapperLongEntity;
       name = "WrapperLongJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.WrapperLongEntity"
-)
+@Named("demo.WrapperLongEntity")
+@DomainObject
 @NoArgsConstructor
 public class WrapperLongJpa
         extends WrapperLongEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/persistence/WrapperLongEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/persistence/WrapperLongEntity.java
index 79e8045984..f382471f8d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/persistence/WrapperLongEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/persistence/WrapperLongEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javalang.longs.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javalang.longs.holder.WrapperLongHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.WrapperLongEntity" // shared permissions with concrete sub class
-)
+@Named("demo.WrapperLongEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class WrapperLongEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/vm/WrapperLongVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/vm/WrapperLongVm.java
index f25f524e00..f0e4041815 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/vm/WrapperLongVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/longs/vm/WrapperLongVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.longs.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,16 +43,15 @@ import demoapp.dom.types.javalang.longs.holder.WrapperLongHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.WrapperLongVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.WrapperLongVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class WrapperLongVm
         implements HasAsciiDocDescription, WrapperLongHolder2 {
 
 //end::class[]
-    public WrapperLongVm(Long initialValue) {
+    public WrapperLongVm(final Long initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 71b7cdce78..f9893f9f4b 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.javalang.shorts;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javalang.shorts.vm.WrapperShortVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.WrapperShorts", editing=Editing.ENABLED)
+@Named("demo.WrapperShorts")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class WrapperShorts implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/jdo/WrapperShortJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/jdo/WrapperShortJdo.java
index 269f69da92..eb5863428c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/jdo/WrapperShortJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/jdo/WrapperShortJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.shorts.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javalang.shorts.persistence.WrapperShortEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.WrapperShortEntity"
-)
+@Named("demo.WrapperShortEntity")
+@DomainObject
 public class WrapperShortJdo                                          // <.>
         extends WrapperShortEntity {
 
 //end::class[]
-    public WrapperShortJdo(Short initialValue) {
+    public WrapperShortJdo(final Short initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/jpa/WrapperShortJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/jpa/WrapperShortJpa.java
index 72a0a2e018..966bd0bcbf 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/jpa/WrapperShortJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/jpa/WrapperShortJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.shorts.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javalang.shorts.persistence.WrapperShortEntity;
       name = "WrapperShortJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.WrapperShortEntity"
-)
+@Named("demo.WrapperShortEntity")
+@DomainObject
 @NoArgsConstructor
 public class WrapperShortJpa
         extends WrapperShortEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/persistence/WrapperShortEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/persistence/WrapperShortEntity.java
index 330a3a75db..8a1b513449 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/persistence/WrapperShortEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/persistence/WrapperShortEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javalang.shorts.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javalang.shorts.holder.WrapperShortHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.WrapperShortEntity" // shared permissions with concrete sub class
-)
+@Named("demo.WrapperShortEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class WrapperShortEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/vm/WrapperShortVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/vm/WrapperShortVm.java
index e86d5be05f..321b64308f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/vm/WrapperShortVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/shorts/vm/WrapperShortVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.shorts.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,16 +43,15 @@ import demoapp.dom.types.javalang.shorts.holder.WrapperShortHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.WrapperShortVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.WrapperShortVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class WrapperShortVm
         implements HasAsciiDocDescription, WrapperShortHolder2 {
 
 //end::class[]
-    public WrapperShortVm(Short initialValue) {
+    public WrapperShortVm(final Short initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 e9b58cb92c..fd59eae43c 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
@@ -21,6 +21,7 @@ package demoapp.dom.types.javalang.strings;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -47,7 +48,8 @@ import demoapp.dom.types.javalang.strings.vm.JavaLangStringVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaLangStrings", editing=Editing.ENABLED)
+@Named("demo.JavaLangStrings")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaLangStrings implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdo.java
index 3046fb0071..215eeca80c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jdo/JavaLangStringJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.strings.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javalang.strings.persistence.JavaLangStringEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaLangStringEntity"
-)
+@Named("demo.JavaLangStringEntity")
+@DomainObject
 public class JavaLangStringJdo                                                  // <.>
         extends JavaLangStringEntity {
 
 //end::class[]
-    public JavaLangStringJdo(String initialValue) {
+    public JavaLangStringJdo(final String initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jpa/JavaLangStringJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jpa/JavaLangStringJpa.java
index d8d1fccfea..7ec7633358 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jpa/JavaLangStringJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/jpa/JavaLangStringJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.strings.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javalang.strings.persistence.JavaLangStringEntity;
         name = "JavaLangStringJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-        logicalTypeName = "demo.JavaLangStringEntity"
-)
+@Named("demo.JavaLangStringEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaLangStringJpa
         extends JavaLangStringEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/persistence/JavaLangStringEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/persistence/JavaLangStringEntity.java
index ba6cebb32f..d3ec78d041 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/persistence/JavaLangStringEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/persistence/JavaLangStringEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javalang.strings.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javalang.strings.holder.JavaLangStringHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaLangStringEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaLangStringEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaLangStringEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/vm/JavaLangStringVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/vm/JavaLangStringVm.java
index ee371a0306..ba0bf882df 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/vm/JavaLangStringVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javalang/strings/vm/JavaLangStringVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.strings.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,10 +43,9 @@ import demoapp.dom.types.javalang.strings.holder.JavaLangStringHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaLangStringVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaLangStringVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaLangStringVm
         implements HasAsciiDocDescription, JavaLangStringHolder2 {
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 018568c96f..85a6bfdc4f 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
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javalang.voids;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -37,7 +38,8 @@ import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 @XmlRootElement(name = "demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaLangVoids", editing=Editing.ENABLED)
+@Named("demo.JavaLangVoids")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaLangVoids implements HasAsciiDocDescription {
 
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 c1989b7097..4a6cd00716 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
@@ -22,6 +22,7 @@ import java.math.BigDecimal;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.javamath.bigdecimals.vm.JavaMathBigDecimalVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaMathBigDecimals", editing=Editing.ENABLED)
+@Named("demo.JavaMathBigDecimals")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaMathBigDecimals implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo.java
index 31f6ad8598..ea77d104f7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jdo/JavaMathBigDecimalJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javamath.bigdecimals.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,9 +43,8 @@ import demoapp.dom.types.javamath.bigdecimals.persistence.JavaMathBigDecimalEnti
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaMathBigDecimalEntity"
-)
+@Named("demo.JavaMathBigDecimalEntity")
+@DomainObject
 public class JavaMathBigDecimalJdo                                          // <.>
         extends JavaMathBigDecimalEntity {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa.java
index 9d2c095380..ca23e1d33d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/jpa/JavaMathBigDecimalJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javamath.bigdecimals.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javamath.bigdecimals.persistence.JavaMathBigDecimalEnti
       name = "JavaMathBigDecimalJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaMathBigDecimalEntity"
-)
+@Named("demo.JavaMathBigDecimalEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaMathBigDecimalJpa                                           // <.>
         extends JavaMathBigDecimalEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/persistence/JavaMathBigDecimalEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/persistence/JavaMathBigDecimalEntity.java
index 1f0018a969..d3cfa14304 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/persistence/JavaMathBigDecimalEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/persistence/JavaMathBigDecimalEntity.java
@@ -20,15 +20,16 @@ package demoapp.dom.types.javamath.bigdecimals.persistence;
 
 import java.math.BigDecimal;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javamath.bigdecimals.holder.JavaMathBigDecimalHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaMathBigDecimalEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaMathBigDecimalEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaMathBigDecimalEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/vm/JavaMathBigDecimalVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/vm/JavaMathBigDecimalVm.java
index 874545ffcd..36c0302bc7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/vm/JavaMathBigDecimalVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigdecimals/vm/JavaMathBigDecimalVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javamath.bigdecimals.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -33,6 +34,7 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
@@ -42,16 +44,15 @@ import demoapp.dom.types.javamath.bigdecimals.holder.JavaMathBigDecimalHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaMathBigDecimalVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaMathBigDecimalVm"
-)
-@lombok.NoArgsConstructor                                                       // <.>
+        nature=Nature.VIEW_MODEL)
+@NoArgsConstructor                                                       // <.>
 public class JavaMathBigDecimalVm
         implements HasAsciiDocDescription, JavaMathBigDecimalHolder2 {
 
 //end::class[]
-    public JavaMathBigDecimalVm(java.math.BigDecimal initialValue) {
+    public JavaMathBigDecimalVm(final java.math.BigDecimal initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 cd4de317de..d1bfa2367b 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
@@ -22,6 +22,7 @@ import java.math.BigInteger;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.javamath.bigintegers.vm.JavaMathBigIntegerVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaMathBigIntegers", editing=Editing.ENABLED)
+@Named("demo.JavaMathBigIntegers")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaMathBigIntegers implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/jdo/JavaMathBigIntegerJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/jdo/JavaMathBigIntegerJdo.java
index 246b37aa63..98afd77fb0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/jdo/JavaMathBigIntegerJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/jdo/JavaMathBigIntegerJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javamath.bigintegers.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javamath.bigintegers.persistence.JavaMathBigIntegerEnti
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaMathBigIntegerEntity"
-)
+@Named("demo.JavaMathBigIntegerEntity")
+@DomainObject
 public class JavaMathBigIntegerJdo                                          // <.>
         extends JavaMathBigIntegerEntity {
 
 //end::class[]
-    public JavaMathBigIntegerJdo(java.math.BigInteger initialValue) {
+    public JavaMathBigIntegerJdo(final java.math.BigInteger initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/jpa/JavaMathBigIntegerJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/jpa/JavaMathBigIntegerJpa.java
index 896b86e8f0..65787cfa83 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/jpa/JavaMathBigIntegerJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/jpa/JavaMathBigIntegerJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javamath.bigintegers.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javamath.bigintegers.persistence.JavaMathBigIntegerEnti
       name = "JavaMathBigIntegerJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaMathBigIntegerEntity"
-)
+@Named("demo.JavaMathBigIntegerEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaMathBigIntegerJpa
         extends JavaMathBigIntegerEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/persistence/JavaMathBigIntegerEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/persistence/JavaMathBigIntegerEntity.java
index 0800603155..012a3a325b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/persistence/JavaMathBigIntegerEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/persistence/JavaMathBigIntegerEntity.java
@@ -20,15 +20,16 @@ package demoapp.dom.types.javamath.bigintegers.persistence;
 
 import java.math.BigInteger;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javamath.bigintegers.holder.JavaMathBigIntegerHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaMathBigIntegerEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaMathBigIntegerEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaMathBigIntegerEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/vm/JavaMathBigIntegerVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/vm/JavaMathBigIntegerVm.java
index 023240d878..a57324f127 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/vm/JavaMathBigIntegerVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javamath/bigintegers/vm/JavaMathBigIntegerVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javamath.bigintegers.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,16 +43,15 @@ import demoapp.dom.types.javamath.bigintegers.holder.JavaMathBigIntegerHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaMathBigIntegerVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaMathBigIntegerVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaMathBigIntegerVm
         implements HasAsciiDocDescription, JavaMathBigIntegerHolder2 {
 
 //end::class[]
-    public JavaMathBigIntegerVm(java.math.BigInteger initialValue) {
+    public JavaMathBigIntegerVm(final java.math.BigInteger initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
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 aeb0bcb168..f5c5c7204a 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
@@ -22,6 +22,7 @@ import java.net.URL;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -48,7 +49,8 @@ import demoapp.dom.types.javanet.urls.vm.JavaNetUrlVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaNetUrls", editing=Editing.ENABLED)
+@Named("demo.JavaNetUrls")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaNetUrls implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/jdo/JavaNetUrlJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/jdo/JavaNetUrlJdo.java
index 8e97e4090b..7a7d298aec 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/jdo/JavaNetUrlJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/jdo/JavaNetUrlJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javanet.urls.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javanet.urls.persistence.JavaNetUrlEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaNetUrlEntity"
-)
+@Named("demo.JavaNetUrlEntity")
+@DomainObject
 public class JavaNetUrlJdo                                          // <.>
         extends JavaNetUrlEntity {
 
 //end::class[]
-    public JavaNetUrlJdo(java.net.URL initialValue) {
+    public JavaNetUrlJdo(final java.net.URL initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/jpa/JavaNetUrlJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/jpa/JavaNetUrlJpa.java
index 584194dd2f..c7339ba22d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/jpa/JavaNetUrlJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/jpa/JavaNetUrlJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javanet.urls.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javanet.urls.persistence.JavaNetUrlEntity;
       name = "JavaNetUrlJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaNetUrlEntity"
-)
+@Named("demo.JavaNetUrlEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaNetUrlJpa
         extends JavaNetUrlEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/persistence/JavaNetUrlEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/persistence/JavaNetUrlEntity.java
index fa7a0c35db..0b38157cd9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/persistence/JavaNetUrlEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/persistence/JavaNetUrlEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javanet.urls.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javanet.urls.holder.JavaNetUrlHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaNetUrlEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaNetUrlEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaNetUrlEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/vm/JavaNetUrlVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/vm/JavaNetUrlVm.java
index 3507246185..ba6c48c9fd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/vm/JavaNetUrlVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javanet/urls/vm/JavaNetUrlVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javanet.urls.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,16 +43,15 @@ import demoapp.dom.types.javanet.urls.holder.JavaNetUrlHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaNetUrlVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaNetUrlVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaNetUrlVm
         implements HasAsciiDocDescription, JavaNetUrlHolder2 {
 
 //end::class[]
-    public JavaNetUrlVm(java.net.URL initialValue) {
+    public JavaNetUrlVm(final java.net.URL initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/JavaSqlDates.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/JavaSqlDates.java
index ff2f03857a..5112de5e22 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/JavaSqlDates.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/JavaSqlDates.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.javasql.javasqldate;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javasql.javasqldate.vm.JavaSqlDateVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaSqlDates", editing=Editing.ENABLED)
+@Named("demo.JavaSqlDates")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaSqlDates implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/jdo/JavaSqlDateJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/jdo/JavaSqlDateJdo.java
index a80481b949..2867b1f6b0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/jdo/JavaSqlDateJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/jdo/JavaSqlDateJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javasql.javasqldate.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javasql.javasqldate.persistence.JavaSqlDateEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaSqlDateEntity"
-)
+@Named("demo.JavaSqlDateEntity")
+@DomainObject
 public class JavaSqlDateJdo                                             // <.>
         extends JavaSqlDateEntity {
 
 //end::class[]
-    public JavaSqlDateJdo(java.sql.Date initialValue) {
+    public JavaSqlDateJdo(final java.sql.Date initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/jpa/JavaSqlDateJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/jpa/JavaSqlDateJpa.java
index ebbae9df4a..3cce159896 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/jpa/JavaSqlDateJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/jpa/JavaSqlDateJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javasql.javasqldate.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javasql.javasqldate.persistence.JavaSqlDateEntity;
       name = "JavaSqlDateJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaSqlDateEntity"
-)
+@Named("demo.JavaSqlDateEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaSqlDateJpa
         extends JavaSqlDateEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/persistence/JavaSqlDateEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/persistence/JavaSqlDateEntity.java
index c1589d4dad..17689c36b1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/persistence/JavaSqlDateEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/persistence/JavaSqlDateEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javasql.javasqldate.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javasql.javasqldate.holder.JavaSqlDateHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaSqlDateEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaSqlDateEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaSqlDateEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/vm/JavaSqlDateVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/vm/JavaSqlDateVm.java
index 17c670c084..8280a906a5 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/vm/JavaSqlDateVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqldate/vm/JavaSqlDateVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javasql.javasqldate.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,16 +45,15 @@ import demoapp.dom.types.javasql.javasqldate.holder.JavaSqlDateHolder3;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaSqlDateVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaSqlDateVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaSqlDateVm
         implements HasAsciiDocDescription, JavaSqlDateHolder3 {
 
 //end::class[]
-    public JavaSqlDateVm(java.sql.Date initialValue) {
+    public JavaSqlDateVm(final java.sql.Date initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/JavaSqlTimestamps.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/JavaSqlTimestamps.java
index eb3734a9ab..3412dc9257 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/JavaSqlTimestamps.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/JavaSqlTimestamps.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.javasql.javasqltimestamp;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javasql.javasqltimestamp.vm.JavaSqlTimestampVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaSqlTimestamps", editing=Editing.ENABLED)
+@Named("demo.JavaSqlTimestamps")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaSqlTimestamps implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/jdo/JavaSqlTimestampJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/jdo/JavaSqlTimestampJdo.java
index 972848f728..5d4a61ec8e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/jdo/JavaSqlTimestampJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/jdo/JavaSqlTimestampJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javasql.javasqltimestamp.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javasql.javasqltimestamp.persistence.JavaSqlTimestampEn
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaSqlTimestampEntity"
-)
+@Named("demo.JavaSqlTimestampEntity")
+@DomainObject
 public class JavaSqlTimestampJdo                                          // <.>
         extends JavaSqlTimestampEntity {
 
 //end::class[]
-    public JavaSqlTimestampJdo(java.sql.Timestamp initialValue) {
+    public JavaSqlTimestampJdo(final java.sql.Timestamp initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/jpa/JavaSqlTimestampJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/jpa/JavaSqlTimestampJpa.java
index fdf34b3d7d..d796a1377b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/jpa/JavaSqlTimestampJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/jpa/JavaSqlTimestampJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javasql.javasqltimestamp.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javasql.javasqltimestamp.persistence.JavaSqlTimestampEn
       name = "JavaSqlTimestampJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaSqlTimestampEntity"
-)
+@Named("demo.JavaSqlTimestampEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaSqlTimestampJpa
         extends JavaSqlTimestampEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/persistence/JavaSqlTimestampEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/persistence/JavaSqlTimestampEntity.java
index 3df9d0be3b..a602295c94 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/persistence/JavaSqlTimestampEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/persistence/JavaSqlTimestampEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javasql.javasqltimestamp.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javasql.javasqltimestamp.holder.JavaSqlTimestampHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaSqlTimestampEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaSqlTimestampEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaSqlTimestampEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/vm/JavaSqlTimestampVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/vm/JavaSqlTimestampVm.java
index b86e47546d..0f7f52ea9d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/vm/JavaSqlTimestampVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javasql/javasqltimestamp/vm/JavaSqlTimestampVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javasql.javasqltimestamp.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,16 +45,15 @@ import demoapp.dom.types.javasql.javasqltimestamp.holder.JavaSqlTimestampHolder3
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaSqlTimestampVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaSqlTimestampVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaSqlTimestampVm
         implements HasAsciiDocDescription, JavaSqlTimestampHolder3 {
 
 //end::class[]
-    public JavaSqlTimestampVm(java.sql.Timestamp initialValue) {
+    public JavaSqlTimestampVm(final java.sql.Timestamp initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/JavaTimeLocalDates.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/JavaTimeLocalDates.java
index b836457fab..ac29c4391d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/JavaTimeLocalDates.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/JavaTimeLocalDates.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.javatime.javatimelocaldate;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javatime.javatimelocaldate.vm.JavaTimeLocalDateVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaTimeLocalDates", editing=Editing.ENABLED)
+@Named("demo.JavaTimeLocalDates")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaTimeLocalDates implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/jdo/JavaTimeLocalDateJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/jdo/JavaTimeLocalDateJdo.java
index a04f2e4bc9..00ba76b029 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/jdo/JavaTimeLocalDateJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/jdo/JavaTimeLocalDateJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimelocaldate.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javatime.javatimelocaldate.persistence.JavaTimeLocalDat
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeLocalDateEntity"
-)
+@Named("demo.JavaTimeLocalDateEntity")
+@DomainObject
 public class JavaTimeLocalDateJdo                                          // <.>
         extends JavaTimeLocalDateEntity {
 
 //end::class[]
-    public JavaTimeLocalDateJdo(java.time.LocalDate initialValue) {
+    public JavaTimeLocalDateJdo(final java.time.LocalDate initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/jpa/JavaTimeLocalDateJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/jpa/JavaTimeLocalDateJpa.java
index b72fd53292..8bf9749b37 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/jpa/JavaTimeLocalDateJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/jpa/JavaTimeLocalDateJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimelocaldate.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javatime.javatimelocaldate.persistence.JavaTimeLocalDat
       name = "JavaTimeLocalDateJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaTimeLocalDateEntity"
-)
+@Named("demo.JavaTimeLocalDateEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaTimeLocalDateJpa
         extends JavaTimeLocalDateEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/persistence/JavaTimeLocalDateEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/persistence/JavaTimeLocalDateEntity.java
index d1406f4141..6f58a32a8f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/persistence/JavaTimeLocalDateEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/persistence/JavaTimeLocalDateEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javatime.javatimelocaldate.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javatime.javatimelocaldate.holder.JavaTimeLocalDateHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeLocalDateEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaTimeLocalDateEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaTimeLocalDateEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/vm/JavaTimeLocalDateVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/vm/JavaTimeLocalDateVm.java
index ceb182efaf..81cde59503 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/vm/JavaTimeLocalDateVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldate/vm/JavaTimeLocalDateVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimelocaldate.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,16 +45,15 @@ import demoapp.dom.types.javatime.javatimelocaldate.holder.JavaTimeLocalDateHold
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaTimeLocalDateVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaTimeLocalDateVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaTimeLocalDateVm
         implements HasAsciiDocDescription, JavaTimeLocalDateHolder3 {
 
 //end::class[]
-    public JavaTimeLocalDateVm(java.time.LocalDate initialValue) {
+    public JavaTimeLocalDateVm(final java.time.LocalDate initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/JavaTimeLocalDateTimes.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/JavaTimeLocalDateTimes.java
index dd1df41bb6..d26b6c7af2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/JavaTimeLocalDateTimes.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/JavaTimeLocalDateTimes.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.javatime.javatimelocaldatetime;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javatime.javatimelocaldatetime.vm.JavaTimeLocalDateTime
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaTimeLocalDateTimes", editing=Editing.ENABLED)
+@Named("demo.JavaTimeLocalDateTimes")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaTimeLocalDateTimes implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/jdo/JavaTimeLocalDateTimeJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/jdo/JavaTimeLocalDateTimeJdo.java
index 6bcc361362..cb5433fbcc 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/jdo/JavaTimeLocalDateTimeJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/jdo/JavaTimeLocalDateTimeJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimelocaldatetime.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javatime.javatimelocaldatetime.persistence.JavaTimeLoca
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeLocalDateTimeEntity"
-)
+@Named("demo.JavaTimeLocalDateTimeEntity")
+@DomainObject
 public class JavaTimeLocalDateTimeJdo                                          // <.>
         extends JavaTimeLocalDateTimeEntity {
 
 //end::class[]
-    public JavaTimeLocalDateTimeJdo(java.time.LocalDateTime initialValue) {
+    public JavaTimeLocalDateTimeJdo(final java.time.LocalDateTime initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/jpa/JavaTimeLocalDateTimeJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/jpa/JavaTimeLocalDateTimeJpa.java
index 5fd29047e5..47efaa17a7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/jpa/JavaTimeLocalDateTimeJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/jpa/JavaTimeLocalDateTimeJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimelocaldatetime.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javatime.javatimelocaldatetime.persistence.JavaTimeLoca
       name = "JavaTimeLocalDateTimeJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaTimeLocalDateTimeEntity"
-)
+@Named("demo.JavaTimeLocalDateTimeEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaTimeLocalDateTimeJpa
         extends JavaTimeLocalDateTimeEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/persistence/JavaTimeLocalDateTimeEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/persistence/JavaTimeLocalDateTimeEntity.java
index d18f9e1001..31c804c5cc 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/persistence/JavaTimeLocalDateTimeEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/persistence/JavaTimeLocalDateTimeEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javatime.javatimelocaldatetime.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javatime.javatimelocaldatetime.holder.JavaTimeLocalDateTimeHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeLocalDateTimeEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaTimeLocalDateTimeEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaTimeLocalDateTimeEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/vm/JavaTimeLocalDateTimeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/vm/JavaTimeLocalDateTimeVm.java
index c1a0072ee7..4e8deae5de 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/vm/JavaTimeLocalDateTimeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaldatetime/vm/JavaTimeLocalDateTimeVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimelocaldatetime.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,16 +45,15 @@ import demoapp.dom.types.javatime.javatimelocaldatetime.holder.JavaTimeLocalDate
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaTimeLocalDateTimeVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaTimeLocalDateTimeVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaTimeLocalDateTimeVm
         implements HasAsciiDocDescription, JavaTimeLocalDateTimeHolder3 {
 
 //end::class[]
-    public JavaTimeLocalDateTimeVm(java.time.LocalDateTime initialValue) {
+    public JavaTimeLocalDateTimeVm(final java.time.LocalDateTime initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/JavaTimeLocalTimes.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/JavaTimeLocalTimes.java
index b6047a4812..5a08c1ed56 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/JavaTimeLocalTimes.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/JavaTimeLocalTimes.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.javatime.javatimelocaltime;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javatime.javatimelocaltime.vm.JavaTimeLocalTimeVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaTimeLocalTimes", editing=Editing.ENABLED)
+@Named("demo.JavaTimeLocalTimes")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaTimeLocalTimes implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/jdo/JavaTimeLocalTimeJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/jdo/JavaTimeLocalTimeJdo.java
index 6a47840925..d50d9b708c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/jdo/JavaTimeLocalTimeJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/jdo/JavaTimeLocalTimeJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimelocaltime.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -33,17 +34,17 @@ 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.javatime.javatimelocaltime.persistence.JavaTimeLocalTimeEntity;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom.types.javatime.javatimelocaltime.persistence.JavaTimeLocalTimeEntity;
+
 @Profile("demo-jdo")
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeLocalTimeEntity"
-)
+@Named("demo.JavaTimeLocalTimeEntity")
+@DomainObject
 public class JavaTimeLocalTimeJdo
         extends JavaTimeLocalTimeEntity {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/jpa/JavaTimeLocalTimeJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/jpa/JavaTimeLocalTimeJpa.java
index f6fb6e617c..f734a888ad 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/jpa/JavaTimeLocalTimeJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/jpa/JavaTimeLocalTimeJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimelocaltime.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -35,11 +36,12 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.persistence.jpa.applib.integration.IsisEntityListener;
 
-import demoapp.dom.types.javatime.javatimelocaltime.persistence.JavaTimeLocalTimeEntity;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 
+import demoapp.dom.types.javatime.javatimelocaltime.persistence.JavaTimeLocalTimeEntity;
+
 @Profile("demo-jpa")
 //tag::class[]
 @Entity
@@ -48,9 +50,8 @@ import lombok.Setter;
       name = "JavaTimeLocalTimeJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaTimeLocalTimeEntity"
-)
+@Named("demo.JavaTimeLocalTimeEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaTimeLocalTimeJpa
         extends JavaTimeLocalTimeEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/persistence/JavaTimeLocalTimeEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/persistence/JavaTimeLocalTimeEntity.java
index fe5248d00c..d0a6f225d6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/persistence/JavaTimeLocalTimeEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/persistence/JavaTimeLocalTimeEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javatime.javatimelocaltime.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javatime.javatimelocaltime.holder.JavaTimeLocalTimeHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeLocalTimeEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaTimeLocalTimeEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaTimeLocalTimeEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/vm/JavaTimeLocalTimeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/vm/JavaTimeLocalTimeVm.java
index 1cb87ab318..fd5dcc0efc 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/vm/JavaTimeLocalTimeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimelocaltime/vm/JavaTimeLocalTimeVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimelocaltime.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -34,19 +35,19 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.applib.jaxb.JavaTimeJaxbAdapters;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.types.javatime.javatimelocaltime.holder.JavaTimeLocalTimeHolder3;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.javatime.javatimelocaltime.holder.JavaTimeLocalTimeHolder3;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaTimeLocalTimeVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaTimeLocalTimeVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaTimeLocalTimeVm
         implements HasAsciiDocDescription, JavaTimeLocalTimeHolder3 {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/JavaTimeOffsetDateTimes.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/JavaTimeOffsetDateTimes.java
index 868b9622b2..5423cf691d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/JavaTimeOffsetDateTimes.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/JavaTimeOffsetDateTimes.java
@@ -22,6 +22,7 @@ import java.time.ZoneOffset;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -47,7 +48,8 @@ import demoapp.dom.types.javatime.javatimeoffsetdatetime.vm.JavaTimeOffsetDateTi
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaTimeOffsetDateTimes", editing=Editing.ENABLED)
+@Named("demo.JavaTimeOffsetDateTimes")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaTimeOffsetDateTimes implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/jdo/JavaTimeOffsetDateTimeJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/jdo/JavaTimeOffsetDateTimeJdo.java
index 41e95f7bf6..983ff33309 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/jdo/JavaTimeOffsetDateTimeJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/jdo/JavaTimeOffsetDateTimeJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimeoffsetdatetime.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javatime.javatimeoffsetdatetime.persistence.JavaTimeOff
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeOffsetDateTimeEntity"
-)
+@Named("demo.JavaTimeOffsetDateTimeEntity")
+@DomainObject
 public class JavaTimeOffsetDateTimeJdo                                          // <.>
         extends JavaTimeOffsetDateTimeEntity {
 
 //end::class[]
-    public JavaTimeOffsetDateTimeJdo(java.time.OffsetDateTime initialValue) {
+    public JavaTimeOffsetDateTimeJdo(final java.time.OffsetDateTime initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/jpa/JavaTimeOffsetDateTimeJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/jpa/JavaTimeOffsetDateTimeJpa.java
index d348aab977..4a2684002b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/jpa/JavaTimeOffsetDateTimeJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/jpa/JavaTimeOffsetDateTimeJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimeoffsetdatetime.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javatime.javatimeoffsetdatetime.persistence.JavaTimeOff
       name = "JavaTimeOffsetDateTimeJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaTimeOffsetDateTimeEntity"
-)
+@Named("demo.JavaTimeOffsetDateTimeEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaTimeOffsetDateTimeJpa
         extends JavaTimeOffsetDateTimeEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/persistence/JavaTimeOffsetDateTimeEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/persistence/JavaTimeOffsetDateTimeEntity.java
index 9574de00d2..3992eaa761 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/persistence/JavaTimeOffsetDateTimeEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/persistence/JavaTimeOffsetDateTimeEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javatime.javatimeoffsetdatetime.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javatime.javatimeoffsetdatetime.holder.JavaTimeOffsetDateTimeHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeOffsetTimeEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaTimeOffsetTimeEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaTimeOffsetDateTimeEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/vm/JavaTimeOffsetDateTimeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/vm/JavaTimeOffsetDateTimeVm.java
index c64a3477ec..37a948e5d8 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/vm/JavaTimeOffsetDateTimeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsetdatetime/vm/JavaTimeOffsetDateTimeVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimeoffsetdatetime.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,16 +45,15 @@ import demoapp.dom.types.javatime.javatimeoffsetdatetime.holder.JavaTimeOffsetDa
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaTimeOffsetDateTimeVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaTimeOffsetDateTimeVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaTimeOffsetDateTimeVm
         implements HasAsciiDocDescription, JavaTimeOffsetDateTimeHolder3 {
 
 //end::class[]
-    public JavaTimeOffsetDateTimeVm(java.time.OffsetDateTime initialValue) {
+    public JavaTimeOffsetDateTimeVm(final java.time.OffsetDateTime initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/JavaTimeOffsetTimes.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/JavaTimeOffsetTimes.java
index 727c005179..d6b582c60d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/JavaTimeOffsetTimes.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/JavaTimeOffsetTimes.java
@@ -22,6 +22,7 @@ import java.time.ZoneOffset;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -47,7 +48,8 @@ import demoapp.dom.types.javatime.javatimeoffsettime.vm.JavaTimeOffsetTimeVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaTimeOffsetTimes", editing=Editing.ENABLED)
+@Named("demo.JavaTimeOffsetTimes")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaTimeOffsetTimes implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/jdo/JavaTimeOffsetTimeJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/jdo/JavaTimeOffsetTimeJdo.java
index 82512cf280..7e7eddfd82 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/jdo/JavaTimeOffsetTimeJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/jdo/JavaTimeOffsetTimeJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimeoffsettime.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javatime.javatimeoffsettime.persistence.JavaTimeOffsetT
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeOffsetTimeEntity"
-)
+@Named("demo.JavaTimeOffsetTimeEntity")
+@DomainObject
 public class JavaTimeOffsetTimeJdo                                          // <.>
         extends JavaTimeOffsetTimeEntity {
 
 //end::class[]
-    public JavaTimeOffsetTimeJdo(java.time.OffsetTime initialValue) {
+    public JavaTimeOffsetTimeJdo(final java.time.OffsetTime initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/jpa/JavaTimeOffsetTimeJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/jpa/JavaTimeOffsetTimeJpa.java
index 7bd25cc69a..cbd673b73f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/jpa/JavaTimeOffsetTimeJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/jpa/JavaTimeOffsetTimeJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimeoffsettime.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javatime.javatimeoffsettime.persistence.JavaTimeOffsetT
       name = "JavaTimeOffsetTimeJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaTimeOffsetTimeEntity"
-)
+@Named("demo.JavaTimeOffsetTimeEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaTimeOffsetTimeJpa
         extends JavaTimeOffsetTimeEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/persistence/JavaTimeOffsetTimeEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/persistence/JavaTimeOffsetTimeEntity.java
index 2367c838c3..ae4e481844 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/persistence/JavaTimeOffsetTimeEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/persistence/JavaTimeOffsetTimeEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javatime.javatimeoffsettime.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javatime.javatimeoffsettime.holder.JavaTimeOffsetTimeHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeOffsetTimeEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaTimeOffsetTimeEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaTimeOffsetTimeEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/vm/JavaTimeOffsetTimeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/vm/JavaTimeOffsetTimeVm.java
index ae29fe1e0f..1f7c0d54c9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/vm/JavaTimeOffsetTimeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimeoffsettime/vm/JavaTimeOffsetTimeVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimeoffsettime.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,16 +45,15 @@ import demoapp.dom.types.javatime.javatimeoffsettime.holder.JavaTimeOffsetTimeHo
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaTimeOffsetTimeVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaTimeOffsetTimeVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaTimeOffsetTimeVm
         implements HasAsciiDocDescription, JavaTimeOffsetTimeHolder3 {
 
 //end::class[]
-    public JavaTimeOffsetTimeVm(java.time.OffsetTime initialValue) {
+    public JavaTimeOffsetTimeVm(final java.time.OffsetTime initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/JavaTimeZonedDateTimes.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/JavaTimeZonedDateTimes.java
index 9adcd135f1..ab391b61f1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/JavaTimeZonedDateTimes.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/JavaTimeZonedDateTimes.java
@@ -22,6 +22,7 @@ import java.time.ZoneOffset;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -47,7 +48,8 @@ import demoapp.dom.types.javatime.javatimezoneddatetime.vm.JavaTimeZonedDateTime
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaTimeZonedDateTimes", editing=Editing.ENABLED)
+@Named("demo.JavaTimeZonedDateTimes")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaTimeZonedDateTimes implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/jdo/JavaTimeZonedDateTimeJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/jdo/JavaTimeZonedDateTimeJdo.java
index c1c675b802..ed2c0e2a2e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/jdo/JavaTimeZonedDateTimeJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/jdo/JavaTimeZonedDateTimeJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimezoneddatetime.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javatime.javatimezoneddatetime.persistence.JavaTimeZone
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeZonedDateTimeEntity"
-)
+@Named("demo.JavaTimeZonedDateTimeEntity")
+@DomainObject
 public class JavaTimeZonedDateTimeJdo                                          // <.>
         extends JavaTimeZonedDateTimeEntity {
 
 //end::class[]
-    public JavaTimeZonedDateTimeJdo(java.time.ZonedDateTime initialValue) {
+    public JavaTimeZonedDateTimeJdo(final java.time.ZonedDateTime initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/jpa/JavaTimeZonedDateTimeJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/jpa/JavaTimeZonedDateTimeJpa.java
index e0f7cfc6f2..c22525a060 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/jpa/JavaTimeZonedDateTimeJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/jpa/JavaTimeZonedDateTimeJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimezoneddatetime.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javatime.javatimezoneddatetime.persistence.JavaTimeZone
       name = "JavaTimeZonedDateTimeJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaTimeZonedDateTimeEntity"
-)
+@Named("demo.JavaTimeZonedDateTimeEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaTimeZonedDateTimeJpa
         extends JavaTimeZonedDateTimeEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/persistence/JavaTimeZonedDateTimeEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/persistence/JavaTimeZonedDateTimeEntity.java
index f6baf95e26..a691438e42 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/persistence/JavaTimeZonedDateTimeEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/persistence/JavaTimeZonedDateTimeEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javatime.javatimezoneddatetime.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javatime.javatimezoneddatetime.holder.JavaTimeZonedDateTimeHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaTimeZonedDateTimeEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaTimeZonedDateTimeEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaTimeZonedDateTimeEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/vm/JavaTimeZonedDateTimeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/vm/JavaTimeZonedDateTimeVm.java
index 8d51038ad3..724711a230 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/vm/JavaTimeZonedDateTimeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javatime/javatimezoneddatetime/vm/JavaTimeZonedDateTimeVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javatime.javatimezoneddatetime.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,16 +45,15 @@ import demoapp.dom.types.javatime.javatimezoneddatetime.holder.JavaTimeZonedDate
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaTimeZonedDateTimeVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaTimeZonedDateTimeVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaTimeZonedDateTimeVm
         implements HasAsciiDocDescription, JavaTimeZonedDateTimeHolder3 {
 
 //end::class[]
-    public JavaTimeZonedDateTimeVm(java.time.ZonedDateTime initialValue) {
+    public JavaTimeZonedDateTimeVm(final java.time.ZonedDateTime initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/JavaUtilDates.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/JavaUtilDates.java
index d6a954daf6..a2bd63f694 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/JavaUtilDates.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/JavaUtilDates.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.javautil.javautildate;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,7 +47,8 @@ import demoapp.dom.types.javautil.javautildate.vm.JavaUtilDateVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaUtilDates", editing=Editing.ENABLED)
+@Named("demo.JavaUtilDates")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaUtilDates implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/jdo/JavaUtilDateJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/jdo/JavaUtilDateJdo.java
index bcb8660d83..06c067a0b1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/jdo/JavaUtilDateJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/jdo/JavaUtilDateJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javautil.javautildate.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javautil.javautildate.persistence.JavaUtilDateEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaUtilDateEntity"
-)
+@Named("demo.JavaUtilDateEntity")
+@DomainObject
 public class JavaUtilDateJdo                                          // <.>
         extends JavaUtilDateEntity {
 
 //end::class[]
-    public JavaUtilDateJdo(java.util.Date initialValue) {
+    public JavaUtilDateJdo(final java.util.Date initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/jpa/JavaUtilDateJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/jpa/JavaUtilDateJpa.java
index 6dd8eea7a7..bd55832e18 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/jpa/JavaUtilDateJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/jpa/JavaUtilDateJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javautil.javautildate.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javautil.javautildate.persistence.JavaUtilDateEntity;
       name = "JavaUtilDateJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaUtilDateEntity"
-)
+@Named("demo.JavaUtilDateEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaUtilDateJpa
         extends JavaUtilDateEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/persistence/JavaUtilDateEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/persistence/JavaUtilDateEntity.java
index 0b9cb5241a..05036be941 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/persistence/JavaUtilDateEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/persistence/JavaUtilDateEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javautil.javautildate.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javautil.javautildate.holder.JavaUtilDateHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaUtilDateEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaUtilDateEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaUtilDateEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/vm/JavaUtilDateVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/vm/JavaUtilDateVm.java
index adeaca5a8c..1bca2f1795 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/vm/JavaUtilDateVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/javautildate/vm/JavaUtilDateVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javautil.javautildate.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -44,16 +45,15 @@ import demoapp.dom.types.javautil.javautildate.holder.JavaUtilDateHolder3;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaUtilDateVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaUtilDateVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaUtilDateVm
         implements HasAsciiDocDescription, JavaUtilDateHolder3 {
 
 //end::class[]
-    public JavaUtilDateVm(java.util.Date initialValue) {
+    public JavaUtilDateVm(final java.util.Date initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/JavaUtilUuids.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/JavaUtilUuids.java
index 1660a60240..ffb0f42e2a 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/JavaUtilUuids.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/JavaUtilUuids.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.javautil.uuids;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -47,7 +48,8 @@ import demoapp.dom.types.javautil.uuids.vm.JavaUtilUuidVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JavaUtilUuids", editing=Editing.ENABLED)
+@Named("demo.JavaUtilUuids")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JavaUtilUuids implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/jdo/JavaUtilUuidJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/jdo/JavaUtilUuidJdo.java
index 208bcd7ac5..a471ff8481 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/jdo/JavaUtilUuidJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/jdo/JavaUtilUuidJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javautil.uuids.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.javautil.uuids.persistence.JavaUtilUuidEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JavaUtilUuidEntity"
-)
+@Named("demo.JavaUtilUuidEntity")
+@DomainObject
 public class JavaUtilUuidJdo                                          // <.>
         extends JavaUtilUuidEntity {
 
 //end::class[]
-    public JavaUtilUuidJdo(java.util.UUID initialValue) {
+    public JavaUtilUuidJdo(final java.util.UUID initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/jpa/JavaUtilUuidJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/jpa/JavaUtilUuidJpa.java
index 5a9aafa3a7..4a6a9324a4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/jpa/JavaUtilUuidJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/jpa/JavaUtilUuidJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javautil.uuids.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
@@ -49,9 +50,8 @@ import demoapp.dom.types.javautil.uuids.persistence.JavaUtilUuidEntity;
       name = "JavaUtilUuidJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.JavaUtilUuidEntity"
-)
+@Named("demo.JavaUtilUuidEntity")
+@DomainObject
 @NoArgsConstructor
 public class JavaUtilUuidJpa
         extends JavaUtilUuidEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/persistence/JavaUtilUuidEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/persistence/JavaUtilUuidEntity.java
index 7093366224..445e9754f1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/persistence/JavaUtilUuidEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/persistence/JavaUtilUuidEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.javautil.uuids.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.javautil.uuids.holder.JavaUtilUuidHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.JavaUtilUuidEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JavaUtilUuidEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JavaUtilUuidEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/vm/JavaUtilUuidVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/vm/JavaUtilUuidVm.java
index dda1dea5ba..91f93d8e1f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/vm/JavaUtilUuidVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/javautil/uuids/vm/JavaUtilUuidVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.javautil.uuids.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -42,16 +43,15 @@ import demoapp.dom.types.javautil.uuids.holder.JavaUtilUuidHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JavaUtilUuidVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JavaUtilUuidVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JavaUtilUuidVm
         implements HasAsciiDocDescription, JavaUtilUuidHolder2 {
 
 //end::class[]
-    public JavaUtilUuidVm(java.util.UUID initialValue) {
+    public JavaUtilUuidVm(final java.util.UUID initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/JodaDateTimes.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/JodaDateTimes.java
index 7bd6e4739f..4a1b57e4ad 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/JodaDateTimes.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/JodaDateTimes.java
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -50,7 +51,8 @@ import demoapp.dom.types.jodatime.jodadatetime.vm.JodaDateTimeVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JodaDateTimes", editing=Editing.ENABLED)
+@Named("demo.JodaDateTimes")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JodaDateTimes implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/jdo/JodaDateTimeJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/jdo/JodaDateTimeJdo.java
index bd81adca51..65441b1557 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/jdo/JodaDateTimeJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/jdo/JodaDateTimeJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.jodatime.jodadatetime.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.jodatime.jodadatetime.persistence.JodaDateTimeEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JodaDateTimeEntity"
-)
+@Named("demo.JodaDateTimeEntity")
+@DomainObject
 public class JodaDateTimeJdo                                          // <.>
         extends JodaDateTimeEntity {
 
 //end::class[]
-    public JodaDateTimeJdo(org.joda.time.DateTime initialValue) {
+    public JodaDateTimeJdo(final org.joda.time.DateTime initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/persistence/JodaDateTimeEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/persistence/JodaDateTimeEntity.java
index 69d944818b..610f0e88d3 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/persistence/JodaDateTimeEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/persistence/JodaDateTimeEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.jodatime.jodadatetime.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.jodatime.jodadatetime.holder.JodaDateTimeHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JodaDateTimeEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JodaDateTimeEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JodaDateTimeEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/vm/JodaDateTimeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/vm/JodaDateTimeVm.java
index ba3b673dc0..87e208126b 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/vm/JodaDateTimeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodadatetime/vm/JodaDateTimeVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.jodatime.jodadatetime.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -34,19 +35,19 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.valuetypes.jodatime.applib.jaxb.JodaTimeJaxbAdapters;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.types.jodatime.jodadatetime.holder.JodaDateTimeHolder3;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.jodatime.jodadatetime.holder.JodaDateTimeHolder3;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JodaDateTimeVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JodaDateTimeVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JodaDateTimeVm
         implements HasAsciiDocDescription, JodaDateTimeHolder3 {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/JodaLocalDates.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/JodaLocalDates.java
index c42dba9543..a589e86644 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/JodaLocalDates.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/JodaLocalDates.java
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -51,7 +52,8 @@ import demoapp.dom.types.jodatime.jodalocaldate.vm.JodaLocalDateVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JodaLocalDates", editing=Editing.ENABLED)
+@Named("demo.JodaLocalDates")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JodaLocalDates implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/jdo/JodaLocalDateJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/jdo/JodaLocalDateJdo.java
index 234b565983..a58117c719 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/jdo/JodaLocalDateJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/jdo/JodaLocalDateJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.jodatime.jodalocaldate.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.jodatime.jodalocaldate.persistence.JodaLocalDateEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JodaLocalDateEntity"
-)
+@Named("demo.JodaLocalDateEntity")
+@DomainObject
 public class JodaLocalDateJdo                                          // <.>
         extends JodaLocalDateEntity {
 
 //end::class[]
-    public JodaLocalDateJdo(org.joda.time.LocalDate initialValue) {
+    public JodaLocalDateJdo(final org.joda.time.LocalDate initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/persistence/JodaLocalDateEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/persistence/JodaLocalDateEntity.java
index b0650a3854..ca89a8a2a6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/persistence/JodaLocalDateEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/persistence/JodaLocalDateEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.jodatime.jodalocaldate.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.jodatime.jodalocaldate.holder.JodaLocalDateHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JodaLocalDateEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JodaLocalDateEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JodaLocalDateEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/vm/JodaLocalDateVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/vm/JodaLocalDateVm.java
index d487fd9f26..04dd51dd51 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/vm/JodaLocalDateVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldate/vm/JodaLocalDateVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.jodatime.jodalocaldate.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -34,19 +35,19 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.valuetypes.jodatime.applib.jaxb.JodaTimeJaxbAdapters;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.types.jodatime.jodalocaldate.holder.JodaLocalDateHolder3;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.jodatime.jodalocaldate.holder.JodaLocalDateHolder3;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JodaLocalDateVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JodaLocalDateVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JodaLocalDateVm
         implements HasAsciiDocDescription, JodaLocalDateHolder3 {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/JodaLocalDateTimes.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/JodaLocalDateTimes.java
index f81226afff..0874ed9684 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/JodaLocalDateTimes.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/JodaLocalDateTimes.java
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -51,7 +52,8 @@ import demoapp.dom.types.jodatime.jodalocaldatetime.vm.JodaLocalDateTimeVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JodaLocalDateTimes", editing=Editing.ENABLED)
+@Named("demo.JodaLocalDateTimes")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JodaLocalDateTimes implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/jdo/JodaLocalDateTimeJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/jdo/JodaLocalDateTimeJdo.java
index 7198a5c5ad..c272cb346f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/jdo/JodaLocalDateTimeJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/jdo/JodaLocalDateTimeJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.jodatime.jodalocaldatetime.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.jodatime.jodalocaldatetime.persistence.JodaLocalDateTim
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.JodaLocalDateTimeEntity"
-)
+@Named("demo.JodaLocalDateTimeEntity")
+@DomainObject
 public class JodaLocalDateTimeJdo                                          // <.>
         extends JodaLocalDateTimeEntity {
 
 //end::class[]
-    public JodaLocalDateTimeJdo(org.joda.time.LocalDateTime initialValue) {
+    public JodaLocalDateTimeJdo(final org.joda.time.LocalDateTime initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/persistence/JodaLocalDateTimeEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/persistence/JodaLocalDateTimeEntity.java
index 66712971d4..98b3f77479 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/persistence/JodaLocalDateTimeEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/persistence/JodaLocalDateTimeEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.jodatime.jodalocaldatetime.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.jodatime.jodalocaldatetime.holder.JodaLocalDateTimeHolder3;
 
-@DomainObject(
-        logicalTypeName = "demo.JodaLocalDateTimeEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JodaLocalDateTimeEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JodaLocalDateTimeEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/vm/JodaLocalDateTimeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/vm/JodaLocalDateTimeVm.java
index f093f0a29a..83a4df6e2e 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/vm/JodaLocalDateTimeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaldatetime/vm/JodaLocalDateTimeVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.jodatime.jodalocaldatetime.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -34,19 +35,19 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.valuetypes.jodatime.applib.jaxb.JodaTimeJaxbAdapters;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.types.jodatime.jodalocaldatetime.holder.JodaLocalDateTimeHolder3;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.jodatime.jodalocaldatetime.holder.JodaLocalDateTimeHolder3;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JodaLocalDateTimeVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.JodaLocalDateTimeVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JodaLocalDateTimeVm
         implements HasAsciiDocDescription, JodaLocalDateTimeHolder3 {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/JodaLocalTimes.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/JodaLocalTimes.java
index 2467b9f5b9..7edeea0366 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/JodaLocalTimes.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/JodaLocalTimes.java
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -51,7 +52,8 @@ import demoapp.dom.types.jodatime.jodalocaltime.vm.JodaLocalTimeVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
-@DomainObject(nature=Nature.VIEW_MODEL, logicalTypeName = "demo.JodaLocalTimes", editing=Editing.ENABLED)
+@Named("demo.JodaLocalTimes")
+@DomainObject(nature=Nature.VIEW_MODEL, editing=Editing.ENABLED)
 //@Log4j2
 public class JodaLocalTimes implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/jdo/JodaLocalTimeJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/jdo/JodaLocalTimeJdo.java
index e824f8a2f4..4c731aabcc 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/jdo/JodaLocalTimeJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/jdo/JodaLocalTimeJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.jodatime.jodalocaltime.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.Column;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
@@ -42,14 +43,13 @@ import demoapp.dom.types.jodatime.jodalocaltime.persistence.JodaLocalTimeEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-      logicalTypeName = "demo.JodaLocalTimeEntity"
-)
+@Named("demo.JodaLocalTimeEntity")
+@DomainObject
 public class JodaLocalTimeJdo                                          // <.>
       extends JodaLocalTimeEntity {
 
 //end::class[]
-  public JodaLocalTimeJdo(org.joda.time.LocalTime initialValue) {
+  public JodaLocalTimeJdo(final org.joda.time.LocalTime initialValue) {
       this.readOnlyProperty = initialValue;
       this.readWriteProperty = initialValue;
   }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/persistence/JodaLocalTimeEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/persistence/JodaLocalTimeEntity.java
index 4aceb7f67d..eed28da20d 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/persistence/JodaLocalTimeEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/persistence/JodaLocalTimeEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.jodatime.jodalocaltime.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.jodatime.jodalocaltime.holder.JodaLocalTimeHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.JodaLocalTimeEntity" // shared permissions with concrete sub class
-)
+@Named("demo.JodaLocalTimeEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class JodaLocalTimeEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/vm/JodaLocalTimeVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/vm/JodaLocalTimeVm.java
index ced3bcfd27..a93c9aeb5c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/vm/JodaLocalTimeVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/jodatime/jodalocaltime/vm/JodaLocalTimeVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.jodatime.jodalocaltime.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -34,19 +35,19 @@ import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.Title;
 import org.apache.isis.valuetypes.jodatime.applib.jaxb.JodaTimeJaxbAdapters;
 
-import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
-import demoapp.dom.types.jodatime.jodalocaltime.holder.JodaLocalTimeHolder2;
 import lombok.Getter;
 import lombok.Setter;
 
+import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
+import demoapp.dom.types.jodatime.jodalocaltime.holder.JodaLocalTimeHolder2;
+
 //tag::class[]
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.JodaLocalTimeVm")
 @DomainObject(
-      nature=Nature.VIEW_MODEL,
-      logicalTypeName = "demo.JodaLocalTimeVm"
-)
+      nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                                       // <.>
 public class JodaLocalTimeVm
       implements HasAsciiDocDescription, JodaLocalTimeHolder2 {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans.java
index a6da5ca756..a1da1e497c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/PrimitiveBooleans.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.primitive.booleans;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,11 +47,10 @@ import demoapp.dom.types.primitive.booleans.vm.PrimitiveBooleanVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveBooleans")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveBooleans",
-        editing=Editing.ENABLED
-)
+        editing=Editing.ENABLED)
 //@Log4j2
 public class PrimitiveBooleans implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdo.java
index f0e3b8b8be..2a39dd129f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jdo/PrimitiveBooleanJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.booleans.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -40,9 +41,8 @@ import demoapp.dom.types.primitive.booleans.persistence.PrimitiveBooleanEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveBooleanEntity"
-)
+@Named("demo.PrimitiveBooleanEntity")
+@DomainObject
 public class PrimitiveBooleanJdo                                        // <.>
         extends PrimitiveBooleanEntity {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jpa/PrimitiveBooleanJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jpa/PrimitiveBooleanJpa.java
index 4e86ac3b29..adc5f89302 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jpa/PrimitiveBooleanJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/jpa/PrimitiveBooleanJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.booleans.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -47,9 +48,8 @@ import demoapp.dom.types.primitive.booleans.persistence.PrimitiveBooleanEntity;
       name = "PrimitiveBooleanJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.PrimitiveBooleanEntity"
-)
+@Named("demo.PrimitiveBooleanEntity")
+@DomainObject
 @NoArgsConstructor
 public class PrimitiveBooleanJpa
         extends PrimitiveBooleanEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/persistence/PrimitiveBooleanEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/persistence/PrimitiveBooleanEntity.java
index b5afeaffb9..10020604d1 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/persistence/PrimitiveBooleanEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/persistence/PrimitiveBooleanEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.primitive.booleans.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.primitive.booleans.holder.PrimitiveBooleanHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveBooleanEntity" // shared permissions with concrete sub class
-)
+@Named("demo.PrimitiveBooleanEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class PrimitiveBooleanEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanVm.java
index e175f9c3e8..e203124e71 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/booleans/vm/PrimitiveBooleanVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.booleans.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -40,16 +41,15 @@ import demoapp.dom.types.primitive.booleans.holder.PrimitiveBooleanHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveBooleanVm")
 @DomainObject(
-        nature= Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveBooleanVm"
-)
+        nature= Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                               // <.>
 public class PrimitiveBooleanVm
         implements HasAsciiDocDescription, PrimitiveBooleanHolder2 {
 
 //end::class[]
-    public PrimitiveBooleanVm(boolean initialValue) {
+    public PrimitiveBooleanVm(final boolean initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/PrimitiveBytes.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/PrimitiveBytes.java
index 20a6e22d1c..8e98f09206 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/PrimitiveBytes.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/PrimitiveBytes.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.primitive.bytes;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,11 +47,10 @@ import demoapp.dom.types.primitive.bytes.vm.PrimitiveByteVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveBytes")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveBytes",
-        editing=Editing.ENABLED
-)
+        editing=Editing.ENABLED)
 //@Log4j2
 public class PrimitiveBytes implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdo.java
index cd99e72e41..aa571e1f68 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jdo/PrimitiveByteJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.bytes.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -40,14 +41,13 @@ import demoapp.dom.types.primitive.bytes.persistence.PrimitiveByteEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveByteEntity"
-)
+@Named("demo.PrimitiveByteEntity")
+@DomainObject
 public class PrimitiveByteJdo                                       // <.>
         extends PrimitiveByteEntity {
 
 //end::class[]
-    public PrimitiveByteJdo(byte initialValue) {
+    public PrimitiveByteJdo(final byte initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jpa/PrimitiveByteJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jpa/PrimitiveByteJpa.java
index 0232b67daf..5b613b45b0 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jpa/PrimitiveByteJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/jpa/PrimitiveByteJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.bytes.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -47,9 +48,8 @@ import demoapp.dom.types.primitive.bytes.persistence.PrimitiveByteEntity;
       name = "PrimitiveByteJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.PrimitiveByteEntity"
-)
+@Named("demo.PrimitiveByteEntity")
+@DomainObject
 @NoArgsConstructor
 public class PrimitiveByteJpa
         extends PrimitiveByteEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/persistence/PrimitiveByteEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/persistence/PrimitiveByteEntity.java
index e639e0373a..5e76861246 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/persistence/PrimitiveByteEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/persistence/PrimitiveByteEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.primitive.bytes.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.primitive.bytes.holder.PrimitiveByteHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveByteEntity" // shared permissions with concrete sub class
-)
+@Named("demo.PrimitiveByteEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class PrimitiveByteEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteVm.java
index b18f0ba665..77914c6bd7 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/bytes/vm/PrimitiveByteVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.bytes.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -40,16 +41,15 @@ import demoapp.dom.types.primitive.bytes.holder.PrimitiveByteHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveByteVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveByteVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveByteVm
         implements HasAsciiDocDescription, PrimitiveByteHolder2 {
 
 //end::class[]
-    public PrimitiveByteVm(byte initialValue) {
+    public PrimitiveByteVm(final byte initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars.java
index 5289049432..1a3b4540db 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/PrimitiveChars.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.primitive.chars;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,11 +47,10 @@ import demoapp.dom.types.primitive.chars.vm.PrimitiveCharVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveChars")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveChars",
-        editing=Editing.ENABLED
-)
+        editing=Editing.ENABLED)
 //@Log4j2
 public class PrimitiveChars implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdo.java
index 2bedb68c40..13b65ec7f2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jdo/PrimitiveCharJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.chars.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -40,14 +41,13 @@ import demoapp.dom.types.primitive.chars.persistence.PrimitiveCharEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveCharEntity"
-)
+@Named("demo.PrimitiveCharEntity")
+@DomainObject
 public class PrimitiveCharJdo                                       // <.>
     extends PrimitiveCharEntity {
 
 //end::class[]
-    public PrimitiveCharJdo(char initialValue) {
+    public PrimitiveCharJdo(final char initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jpa/PrimitiveCharJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jpa/PrimitiveCharJpa.java
index 550c50cf2a..4eced079b2 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jpa/PrimitiveCharJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/jpa/PrimitiveCharJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.chars.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -47,9 +48,8 @@ import demoapp.dom.types.primitive.chars.persistence.PrimitiveCharEntity;
       name = "PrimitiveCharJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.PrimitiveCharEntity"
-)
+@Named("demo.PrimitiveCharEntity")
+@DomainObject
 @NoArgsConstructor
 public class PrimitiveCharJpa
     extends PrimitiveCharEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/persistence/PrimitiveCharEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/persistence/PrimitiveCharEntity.java
index aad863b886..fc1dd15f3f 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/persistence/PrimitiveCharEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/persistence/PrimitiveCharEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.primitive.chars.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.primitive.chars.holder.PrimitiveCharHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveCharEntity" // shared permissions with concrete sub class
-)
+@Named("demo.PrimitiveCharEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class PrimitiveCharEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharVm.java
index 383d327ac3..f485e96fca 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/chars/vm/PrimitiveCharVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.chars.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -40,16 +41,15 @@ import demoapp.dom.types.primitive.chars.holder.PrimitiveCharHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveCharVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveCharVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveCharVm
         implements HasAsciiDocDescription, PrimitiveCharHolder2 {
 
 //end::class[]
-    public PrimitiveCharVm(char initialValue) {
+    public PrimitiveCharVm(final char initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles.java
index dd88ec3047..738817d7cd 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/PrimitiveDoubles.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.primitive.doubles;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,11 +47,10 @@ import demoapp.dom.types.primitive.doubles.vm.PrimitiveDoubleVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveDoubles")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveDoubles",
-        editing=Editing.ENABLED
-)
+        editing=Editing.ENABLED)
 //@Log4j2
 public class PrimitiveDoubles implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdo.java
index 28052d9f9e..74592c5546 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jdo/PrimitiveDoubleJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.doubles.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -40,14 +41,13 @@ import demoapp.dom.types.primitive.doubles.persistence.PrimitiveDoubleEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveDoubleEntity"
-)
+@Named("demo.PrimitiveDoubleEntity")
+@DomainObject
 public class PrimitiveDoubleJdo                                     // <.>
         extends PrimitiveDoubleEntity {
 
 //end::class[]
-    public PrimitiveDoubleJdo(double initialValue) {
+    public PrimitiveDoubleJdo(final double initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jpa/PrimitiveDoubleJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jpa/PrimitiveDoubleJpa.java
index 082bb21cf2..2162324ce9 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jpa/PrimitiveDoubleJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/jpa/PrimitiveDoubleJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.doubles.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -47,9 +48,8 @@ import demoapp.dom.types.primitive.doubles.persistence.PrimitiveDoubleEntity;
       name = "PrimitiveDoubleJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.PrimitiveDoubleEntity"
-)
+@Named("demo.PrimitiveDoubleEntity")
+@DomainObject
 @NoArgsConstructor
 public class PrimitiveDoubleJpa
         extends PrimitiveDoubleEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/persistence/PrimitiveDoubleEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/persistence/PrimitiveDoubleEntity.java
index a74c27a207..36fef4e677 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/persistence/PrimitiveDoubleEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/persistence/PrimitiveDoubleEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.primitive.doubles.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.primitive.doubles.holder.PrimitiveDoubleHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveDoubleEntity" // shared permissions with concrete sub class
-)
+@Named("demo.PrimitiveDoubleEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class PrimitiveDoubleEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleVm.java
index 4180116d85..31914c8d46 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/doubles/vm/PrimitiveDoubleVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.doubles.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -40,16 +41,15 @@ import demoapp.dom.types.primitive.doubles.holder.PrimitiveDoubleHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveDoubleVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveDoubleVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveDoubleVm
         implements HasAsciiDocDescription, PrimitiveDoubleHolder2 {
 
 //end::class[]
-    public PrimitiveDoubleVm(double initialValue) {
+    public PrimitiveDoubleVm(final double initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats.java
index 3e159101ba..22bac31ce6 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/PrimitiveFloats.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.primitive.floats;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,11 +47,10 @@ import demoapp.dom.types.primitive.floats.vm.PrimitiveFloatVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveFloats")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveFloats",
-        editing=Editing.ENABLED
-)
+        editing=Editing.ENABLED)
 //@Log4j2
 public class PrimitiveFloats implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdo.java
index 7fafdc549b..79e9339c99 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jdo/PrimitiveFloatJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.floats.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -40,14 +41,13 @@ import demoapp.dom.types.primitive.floats.persistence.PrimitiveFloatEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveFloatEntity"
-)
+@Named("demo.PrimitiveFloatEntity")
+@DomainObject
 public class PrimitiveFloatJdo                                      // <.>
         extends PrimitiveFloatEntity {
 
 //end::class[]
-    public PrimitiveFloatJdo(float initialValue) {
+    public PrimitiveFloatJdo(final float initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jpa/PrimitiveFloatJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jpa/PrimitiveFloatJpa.java
index 2039da6e8f..7ceb6a9bbb 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jpa/PrimitiveFloatJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/jpa/PrimitiveFloatJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.floats.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -47,9 +48,8 @@ import demoapp.dom.types.primitive.floats.persistence.PrimitiveFloatEntity;
       name = "PrimitiveFloatJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.PrimitiveFloatEntity"
-)
+@Named("demo.PrimitiveFloatEntity")
+@DomainObject
 @NoArgsConstructor
 public class PrimitiveFloatJpa
         extends PrimitiveFloatEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/persistence/PrimitiveFloatEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/persistence/PrimitiveFloatEntity.java
index 326d3d8acb..84af9ee2b4 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/persistence/PrimitiveFloatEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/persistence/PrimitiveFloatEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.primitive.floats.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.primitive.floats.holder.PrimitiveFloatHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveFloatEntity" // shared permissions with concrete sub class
-)
+@Named("demo.PrimitiveFloatEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class PrimitiveFloatEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatVm.java
index cfe8811de8..2f48be2e51 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/floats/vm/PrimitiveFloatVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.floats.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -40,16 +41,15 @@ import demoapp.dom.types.primitive.floats.holder.PrimitiveFloatHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveFloatVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveFloatVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveFloatVm
         implements HasAsciiDocDescription, PrimitiveFloatHolder2 {
 
 //end::class[]
-    public PrimitiveFloatVm(float initialValue) {
+    public PrimitiveFloatVm(final float initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts.java
index bc312f928d..7eb5625fde 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/PrimitiveInts.java
@@ -21,6 +21,7 @@ package demoapp.dom.types.primitive.ints;
 import java.util.List;
 
 import javax.inject.Inject;
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -46,11 +47,10 @@ import demoapp.dom.types.primitive.ints.vm.PrimitiveIntVm;
 @XmlRootElement(name = "Demo")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveInts")
 @DomainObject(
         nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveInts",
-        editing=Editing.ENABLED
-)
+        editing=Editing.ENABLED)
 //@Log4j2
 public class PrimitiveInts implements HasAsciiDocDescription {
 
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdo.java
index 0f2adfdeb4..2b5f80972c 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdo.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jdo/PrimitiveIntJdo.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.ints.jdo;
 
+import javax.inject.Named;
 import javax.jdo.annotations.DatastoreIdentity;
 import javax.jdo.annotations.IdGeneratorStrategy;
 import javax.jdo.annotations.IdentityType;
@@ -40,14 +41,13 @@ import demoapp.dom.types.primitive.ints.persistence.PrimitiveIntEntity;
 //tag::class[]
 @PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "demo")
 @DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveIntEntity"
-)
+@Named("demo.PrimitiveIntEntity")
+@DomainObject
 public class PrimitiveIntJdo                                        // <.>
         extends PrimitiveIntEntity {
 
 //end::class[]
-    public PrimitiveIntJdo(int initialValue) {
+    public PrimitiveIntJdo(final int initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
     }
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jpa/PrimitiveIntJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jpa/PrimitiveIntJpa.java
index 5674f937b7..5bacec5a43 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jpa/PrimitiveIntJpa.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/jpa/PrimitiveIntJpa.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.ints.jpa;
 
+import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.EntityListeners;
 import javax.persistence.GeneratedValue;
@@ -47,9 +48,8 @@ import demoapp.dom.types.primitive.ints.persistence.PrimitiveIntEntity;
       name = "PrimitiveIntJpa"
 )
 @EntityListeners(IsisEntityListener.class)
-@DomainObject(
-      logicalTypeName = "demo.PrimitiveIntEntity"
-)
+@Named("demo.PrimitiveIntEntity")
+@DomainObject
 @NoArgsConstructor
 public class PrimitiveIntJpa
         extends PrimitiveIntEntity {
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/persistence/PrimitiveIntEntity.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/persistence/PrimitiveIntEntity.java
index a5ff64a375..cdcadb9764 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/persistence/PrimitiveIntEntity.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/persistence/PrimitiveIntEntity.java
@@ -18,15 +18,16 @@
  */
 package demoapp.dom.types.primitive.ints.persistence;
 
+import javax.inject.Named;
+
 import org.apache.isis.applib.annotation.DomainObject;
 
 import demoapp.dom._infra.asciidocdesc.HasAsciiDocDescription;
 import demoapp.dom._infra.values.ValueHolder;
 import demoapp.dom.types.primitive.ints.holder.PrimitiveIntHolder2;
 
-@DomainObject(
-        logicalTypeName = "demo.PrimitiveIntEntity" // shared permissions with concrete sub class
-)
+@Named("demo.PrimitiveIntEntity") // shared permissions with concrete sub class
+@DomainObject
 public abstract class PrimitiveIntEntity
 implements
     HasAsciiDocDescription,
diff --git a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntVm.java b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntVm.java
index 7f9f4568d7..07bad29fed 100644
--- a/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntVm.java
+++ b/examples/demo/domain/src/main/java/demoapp/dom/types/primitive/ints/vm/PrimitiveIntVm.java
@@ -18,6 +18,7 @@
  */
 package demoapp.dom.types.primitive.ints.vm;
 
+import javax.inject.Named;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -40,16 +41,15 @@ import demoapp.dom.types.primitive.ints.holder.PrimitiveIntHolder2;
 @XmlRootElement(name = "root")
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
+@Named("demo.PrimitiveIntVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL,
-        logicalTypeName = "demo.PrimitiveIntVm"
-)
+        nature=Nature.VIEW_MODEL)
 @lombok.NoArgsConstructor                                           // <.>
 public class PrimitiveIntVm
         implements HasAsciiDocDescription, PrimitiveIntHolder2 {
 
 //end::class[]
-    public PrimitiveIntVm(int initialValue) {
+    public PrimitiveIntVm(final int initialValue) {
         this.readOnlyProperty = initialValue;
         this.readWriteProperty = initialValue;
... 2785 lines suppressed ...