You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/10/11 15:27:24 UTC

[isis] branch v2 updated (b748f92 -> f52c1de)

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

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


    from b748f92  ISIS-1976: finding a shorter name also fixes typo -> 'explicitIdOfType'
     add ca0ec90  ISIS-1977: fixes revision to 1.0.0-SNAPSHOT
     add 7fe86c9  ISIS-2003: first cut, specs and facet/attributes
     add 43932b1  ISIS-2003: first cut, specs and facet/attributes
     add 89199ae  adds FacetWithAttributes interface
     add c259ad6  ISIS-2003: fixes some compile issues, fine-tuning names
     add 92ffe9f  ISIS-2003: fine-tuning
     add cee7921  ISIS-2003: fixes class cast exception
     add 1b92c24  Merge branch 'ISIS-2003'
     add e0b92af  ISIS-2003: adds more control in serialization of metamodel
     add c770024  Merge branch 'ISIS-2003'
     add 0f8bfce  ISIS-2003: updates approvals
     add 68d36bf  ISIS-2003: adds further config options
     add 2d16839  Merge branch 'ISIS-2003'
     add 164ccc1  ISIS-2003: breaks out approvals into separate files
     add 18b0f4f  Merge branch 'ISIS-2003'
     add 3bcd905  ISIS-2003: uses folders instead of filenames for received vs approved
     add 4ac0f53  Merge branch 'ISIS-2003'
     add e01c85a  ISIS-2003: minor update to approvals for SimpleObjects
     add d7f81d5  ISIS-2003: makes facets non-mandatory for facetholders in mml.xsd
     add 66a9337  Merge branch 'ISIS-2003'
     add 4401240  ISIS-1974: introspect in serial
     add 7864506  ISIS-2005 fixes java.sql.Date rendered with -1 day offset
     add 813a313  ISIS-1974: fixes to ensure new algorithm generates same metamodel as previously.
     new 96c0ae7  Merge remote-tracking branch 'origin/master' into v2
     new f52c1de  ISIS-2003: fixes lockdown approvals for changes in metamodel

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


Summary of changes:
 .../isis/applib/annotation/Programmatic.java       |    2 +-
 .../fixturescripts/BuilderScriptAbstract.java      |    1 +
 .../applib/fixturescripts/clock/ClockFixture.java  |    2 +
 .../fixturescripts/clock/TickingClockFixture.java  |    2 +
 .../setup/PersonaEnumPersistAll.java               |    3 +
 .../teardown/TeardownFixtureAbstract.java          |    2 +
 .../services/metamodel/MetaModelService.java       |   86 +
 .../metamodel/MetaModelService_Config_Test.java    |   56 +
 .../apache/isis/core/metamodel/facetapi/Facet.java |    2 +-
 .../core/metamodel/facetapi/FacetAbstract.java     |   44 +-
 ...ntifiedHolder.java => FacetWithAttributes.java} |   13 +-
 .../isis/core/metamodel/facets/Annotations.java    |    2 +
 .../core/metamodel/facets/ImperativeFacet.java     |   11 +
 .../facets/SingleClassValueFacetAbstract.java      |    7 +
 .../facets/SingleIntValueFacetAbstract.java        |    8 +
 .../facets/SingleStringValueFacetAbstract.java     |    6 +
 .../metamodel/facets/SingleValueFacetAbstract.java |    7 +-
 .../metamodel/facets/WhereValueFacetAbstract.java  |    9 +
 ...ctionInvocationFacetForDomainEventAbstract.java |   12 +
 .../actions/command/CommandFacetAbstract.java      |    9 +
 .../method/ActionDefaultsFacetViaMethod.java       |   17 +-
 .../PromptStyleFacetForActionLayoutAnnotation.java |    7 +
 .../layout/PromptStyleFacetForActionXml.java       |    8 +
 .../NotContributedFacetAbstract.java               |    7 +
 ...tributedFacetDerivedFromDomainServiceFacet.java |    7 +
 ...viceMenuFacetDerivedFromDomainServiceFacet.java |    7 +
 .../position/ActionPositionFacetAbstract.java      |    7 +
 .../actions/prototype/PrototypeFacetAbstract.java  |    7 +
 .../ActionParameterValidationFacetViaMethod.java   |    6 +
 .../method/ActionValidationFacetViaMethod.java     |    6 +
 .../all/i18n/DescribedAsFacetTranslated.java       |   10 +-
 .../facets/all/i18n/NamedFacetTranslated.java      |    8 +
 .../facets/all/i18n/PluralFacetTranslated.java     |    7 +
 .../facets/all/named/NamedFacetAbstract.java       |    8 +
 .../CollectionAccessorFacetViaAccessor.java        |    6 +
 .../clear/CollectionClearFacetViaAccessor.java     |    6 +
 .../clear/CollectionClearFacetViaClearMethod.java  |    6 +
 ...ectionAddToFacetForDomainEventFromAbstract.java |    7 +
 ...nRemoveFromFacetForDomainEventFromAbstract.java |    8 +
 ...cetOnCollectionDerivedFromImmutableFactory.java |    9 +-
 .../modify/CollectionAddToFacetViaAccessor.java    |    6 +
 .../modify/CollectionAddToFacetViaMethod.java      |    6 +
 .../CollectionRemoveFromFacetViaAccessor.java      |    6 +
 .../modify/CollectionRemoveFromFacetViaMethod.java |    6 +
 .../CollectionValidateAddToFacetViaMethod.java     |    5 +
 ...CollectionValidateRemoveFromFacetViaMethod.java |    6 +
 .../members/cssclass/CssClassFacetAbstract.java    |   16 +-
 .../cssclassfa/CssClassFaFacetAbstract.java        |    5 +
 .../annotprop/DescribedAsFacetOnMemberFactory.java |    1 +
 .../members/disabled/DisabledFacetAbstract.java    |    9 +
 .../disabled/DisabledFacetAbstractImpl.java        |    7 +-
 .../DisableForSessionFacetViaMethod.java           |    6 +
 .../method/DisableForContextFacetViaMethod.java    |    6 +
 .../forsession/HideForSessionFacetViaMethod.java   |    6 +
 .../method/HideForContextFacetViaMethod.java       |    5 +
 .../members/order/MemberOrderFacetAbstract.java    |    8 +
 .../object/audit/AuditableFacetAbstract.java       |    6 +
 .../autocomplete/AutoCompleteFacetAbstract.java    |    8 +
 .../BookmarkPolicyFacetAbstract.java               |    6 +
 .../callbacks/CreatedCallbackFacetViaMethod.java   |    5 +
 .../callbacks/LoadedCallbackFacetViaMethod.java    |    6 +
 .../callbacks/LoadingCallbackFacetViaMethod.java   |    6 +
 .../callbacks/PersistedCallbackFacetViaMethod.java |    6 +
 .../PersistingCallbackFacetViaMethod.java          |    6 +
 .../callbacks/RemovedCallbackFacetViaMethod.java   |    6 +
 .../callbacks/RemovingCallbackFacetViaMethod.java  |    6 +
 .../callbacks/UpdatedCallbackFacetViaMethod.java   |    6 +
 .../callbacks/UpdatingCallbackFacetViaMethod.java  |   10 +-
 .../object/choices/enums/ChoicesFacetEnum.java     |    6 +
 .../choices/enums/EnumValueSemanticsProvider.java  |    5 +
 .../cssclass/method/CssClassFacetMethod.java       |    5 +
 .../object/defaults/DefaultedFacetAbstract.java    |    6 +
 .../method/DisabledObjectFacetViaMethod.java       |    6 +
 .../ImmutableFacetForDomainObjectAnnotation.java   |    8 +
 .../editing/ImmutableFacetFromConfiguration.java   |    7 +
 ...ObjectLayoutAnnotationUsingCssClassUiEvent.java |    8 +
 ...mainObjectLayoutAnnotationUsingIconUiEvent.java |    7 +
 ...ainObjectLayoutAnnotationUsingTitleUiEvent.java |    7 +
 .../domainservice/DomainServiceFacetAbstract.java  |    8 +
 ...conFacetDerivedFromDomainServiceAnnotation.java |    7 +
 .../DomainServiceLayoutFacetAbstract.java          |    8 +
 .../facets/object/facets/FacetsFacetAbstract.java  |    5 +
 .../hidden/method/HiddenObjectFacetViaMethod.java  |    5 +
 .../facets/object/icon/method/IconFacetMethod.java |    6 +
 .../facets/object/mixin/MixinFacetAbstract.java    |    6 +
 .../method/NavigableParentFacetMethod.java         |    7 +
 .../objectspecid/ObjectSpecIdFacetAbstract.java    |    7 +
 ...jectSpecIdFacetDerivedFromClassNameFactory.java |    6 +-
 .../facets/object/paged/PagedFacetAbstract.java    |    6 +
 .../promptStyle/PromptStyleFacetAsConfigured.java  |    8 +
 ....java => PromptStyleFacetFallBackToInline.java} |   16 +-
 .../RecreatableObjectFacetAbstract.java            |    6 +
 .../annotation/TitleFacetViaTitleAnnotation.java   |   23 +
 .../title/methods/TitleFacetViaTitleMethod.java    |    7 +
 .../title/methods/TitleFacetViaToStringMethod.java |    7 +
 ...cationFromMustSatisfyAnnotationOnTypeFacet.java |    5 +
 .../method/ValidateObjectFacetMethod.java          |    6 +
 .../object/value/MaxLengthFacetUsingParser.java    |    9 +-
 .../ValueSemanticsProviderAndFacetAbstract.java    |   11 +
 .../objectvalue/labelat/LabelAtFacetAbstract.java  |    6 +
 .../mandatory/MandatoryFacetAbstract.java          |    9 +
 .../multiline/MultiLineFacetAbstract.java          |    7 +
 .../MustSatisfySpecificationFacetAbstract.java     |    5 +
 .../RenderedAdjustedFacetAbstract.java             |    6 +
 .../ActionParameterAutoCompleteFacetViaMethod.java |    8 +
 ...rameterFromJavaxValidationDigitsAnnotation.java |    9 +
 .../ActionParameterChoicesFacetAbstract.java       |    1 +
 .../method/ActionChoicesFacetViaMethod.java        |    7 +
 .../ActionParameterChoicesFacetViaMethod.java      |    7 +
 ...ParameterDefaultFacetDerivedFromTypeFacets.java |    6 +
 ...arameterDefaultFacetDerivedFromTypeFactory.java |    2 +-
 .../ActionParameterDefaultsFacetViaMethod.java     |    6 +
 ...calLengthFacetForParameterLayoutAnnotation.java |   13 +-
 .../regex/RegExFacetForParameterAnnotation.java    |    5 +
 .../TypicalLengthFacetOnParameterAnnotation.java   |    7 +
 ...picalLengthFacetOnParameterDerivedFromType.java |    7 +
 .../PropertyOrCollectionAccessorFacetAbstract.java |    6 +
 .../accessor/PropertyAccessorFacetViaAccessor.java |    6 +
 .../method/PropertyAutoCompleteFacetMethod.java    |    9 +
 ...ropertyFromJavaxValidationDigitsAnnotation.java |    9 +
 .../method/PropertyChoicesFacetViaMethod.java      |    7 +
 ...pertyDefaultFacetDerivedFromDefaultedFacet.java |    6 +
 .../method/PropertyDefaultFacetViaMethod.java      |    6 +
 ...FacetOnPropertyDerivedFromImmutableFactory.java |   10 +-
 .../modify/PropertyDomainEventFacetAbstract.java   |    8 +
 ...tySetterOrClearFacetForDomainEventAbstract.java |   10 +-
 .../RegExFacetForPatternAnnotationOnProperty.java  |    7 +
 .../regex/RegExFacetForPropertyAnnotation.java     |    6 +
 ...romptStyleFacetForPropertyLayoutAnnotation.java |    7 +
 .../PromptStyleFacetForPropertyXml.java            |    8 +
 ...icalLengthFacetForPropertyLayoutAnnotation.java |   14 +-
 .../TypicalLengthFacetForPropertyXml.java          |   15 +-
 .../TypicalLengthFacetOnPropertyAnnotation.java    |    7 +
 ...ypicalLengthFacetOnPropertyDerivedFromType.java |    9 +-
 .../clear/PropertyClearFacetViaClearMethod.java    |    6 +
 .../clear/PropertyClearFacetViaSetterMethod.java   |    6 +
 ...PropertyInitializationFacetViaSetterMethod.java |    5 +
 .../modify/PropertySetterFacetViaModifyMethod.java |    5 +
 .../modify/PropertySetterFacetViaSetterMethod.java |    6 +
 .../method/PropertyValidateFacetViaMethod.java     |    5 +
 .../ValueSemanticsProviderAbstractTemporal.java    |    5 +
 .../BigDecimalValueSemanticsProvider.java          |    5 +
 .../BigIntegerValueSemanticsProvider.java          |    5 +
 .../bytes/ByteValueSemanticsProviderAbstract.java  |    6 +
 .../DoubleValueSemanticsProviderAbstract.java      |    6 +
 .../FloatValueSemanticsProviderAbstract.java       |    5 +
 .../integer/IntValueSemanticsProviderAbstract.java |    5 +
 .../longs/LongValueSemanticsProviderAbstract.java  |    5 +
 .../value/money/MoneyValueSemanticsProvider.java   |    6 +
 .../ShortValueSemanticsProviderAbstract.java       |    6 +
 .../interactions/InteractionAdvisorFacet.java      |    6 +
 ...onParameterDefaultsAndChoicesPostProcessor.java |  337 ++-
 ...arameterChoicesFacetFromParentedCollection.java |    5 +
 .../services/metamodel/MetaModelExporter.java      |  555 ++++
 .../metamodel/MetaModelServiceDefault.java         |   19 +-
 .../specloader/SpecificationCacheDefault.java      |   27 +-
 .../metamodel/specloader/SpecificationLoader.java  |   26 +-
 .../specimpl/ObjectActionContributee.java          |   11 +-
 .../specimpl/ObjectActionParameterAbstract.java    |    2 +-
 .../ObjectActionParameterContributeeAbstract.java  |   15 +-
 .../specloader/specimpl/ObjectMemberAbstract.java  |    3 +
 .../OneToManyActionParameterContributee.java       |    5 +-
 .../specimpl/OneToManyAssociationContributee.java  |    5 +
 .../specimpl/OneToManyAssociationMixedIn.java      |   16 +-
 .../OneToOneActionParameterContributee.java        |    5 +-
 .../specimpl/OneToOneAssociationContributee.java   |    5 +
 .../specimpl/dflt/ObjectSpecificationDefault.java  |   60 +-
 .../JdoDatastoreIdentityFacetAbstract.java         |    7 +
 .../JdoPersistenceCapableFacetAbstract.java        |    9 +
 .../facets/object/query/JdoQueryFacetAbstract.java |    6 +
 .../BigDecimalFacetDerivedFromJdoColumn.java       |   14 +-
 .../dflt/ProgrammingModelFacetsJava5.java          |   29 +-
 .../specloader/SpecificationCacheDefaultTest.java  |    6 +-
 .../system/session/IsisSessionFactoryBuilder.java  |    2 +-
 .../IsisComponentProvider.java                     |   71 +-
 .../IsisComponentProvider_within_Test.java         |    2 +-
 core/schema/pom.xml                                |    1 +
 .../resources/org/apache/isis/schema/bindings.xml  |   13 +
 .../apache/isis/schema/metamodel/metamodel-1.0.xsd |  301 +++
 example/application/simpleapp/application/pom.xml  |   15 +-
 .../integtests/mml/MetaModelService_IntegTest.java |  149 ++
 ...omainAppFixtureScriptsSpecificationProvider.xml |   45 +
 ...application.fixture.scenarios.DomainAppDemo.xml |  270 ++
 ...plication.services.homepage.HomePageService.xml |   44 +
 ...ication.services.homepage.HomePageViewModel.xml |  352 +++
 ...ainapp.modules.simple.dom.impl.SimpleObject.xml |  878 +++++++
 ...inapp.modules.simple.dom.impl.SimpleObjects.xml |  267 ++
 .../integtests/mml/approved/java.lang.Long.xml     |    2 +
 .../integtests/mml/approved/java.lang.Object.xml   |    2 +
 .../integtests/mml/approved/java.lang.String.xml   |    2 +
 .../integtests/mml/approved/java.net.URL.xml       |    2 +
 .../integtests/mml/approved/java.sql.Timestamp.xml |    2 +
 .../integtests/mml/approved/java.util.List.xml     |    2 +
 ....applib.services.layout.LayoutService$Style.xml |    2 +
 .../approved/org.apache.isis.applib.value.Clob.xml |    2 +
 ....apache.isis.applib.value.LocalResourcePath.xml |    2 +
 .../application/integtests/mml/approved/void.xml   |    2 +
 .../application/integtests/mml/received/.gitignore |    1 +
 .../integtests/{ => smoke}/Smoke_IntegTest.java    |    3 +-
 ...MetaModelService_IntegTest.exports.approved.xml | 2743 ++++++++++++++++++++
 .../application/simpleapp/module-simple/pom.xml    |    8 +-
 example/application/simpleapp/pom.xml              |    7 +
 example/application/simpleapp/webapp/pom.xml       |    8 +
 203 files changed, 7361 insertions(+), 213 deletions(-)
 create mode 100644 core/applib/src/test/java/org/apache/isis/applib/services/metamodel/MetaModelService_Config_Test.java
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/{IdentifiedHolder.java => FacetWithAttributes.java} (75%)
 copy core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/promptStyle/{PromptStyleFacetAsConfigured.java => PromptStyleFacetFallBackToInline.java} (74%)
 create mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
 create mode 100644 core/schema/src/main/resources/org/apache/isis/schema/metamodel/metamodel-1.0.xsd
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/MetaModelService_IntegTest.java
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.fixture.DomainAppFixtureScriptsSpecificationProvider.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.fixture.scenarios.DomainAppDemo.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.services.homepage.HomePageService.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.services.homepage.HomePageViewModel.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.modules.simple.dom.impl.SimpleObject.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.modules.simple.dom.impl.SimpleObjects.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/java.lang.Long.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/java.lang.Object.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/java.lang.String.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/java.net.URL.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/java.sql.Timestamp.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/java.util.List.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/org.apache.isis.applib.services.layout.LayoutService$Style.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/org.apache.isis.applib.value.Clob.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/org.apache.isis.applib.value.LocalResourcePath.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/void.xml
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/received/.gitignore
 rename example/application/simpleapp/application/src/test/java/domainapp/application/integtests/{ => smoke}/Smoke_IntegTest.java (95%)
 create mode 100644 example/application/simpleapp/application/src/test/java/domainapp/application/integtests/tests/mml/MetaModelService_IntegTest.exports.approved.xml


[isis] 02/02: ISIS-2003: fixes lockdown approvals for changes in metamodel

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

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

commit f52c1def02868203037080e9c2b1b8e2de01b748
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Oct 11 16:24:30 2018 +0100

    ISIS-2003: fixes lockdown approvals for changes in metamodel
---
 ...omainAppFixtureScriptsSpecificationProvider.xml |  11 +-
 ...application.fixture.scenarios.DomainAppDemo.xml | 108 +++---
 ...plication.services.homepage.HomePageService.xml |  11 +-
 ...ication.services.homepage.HomePageViewModel.xml | 128 +++----
 ...ainapp.modules.simple.dom.impl.SimpleObject.xml | 367 ++++++---------------
 ...inapp.modules.simple.dom.impl.SimpleObjects.xml | 107 ++----
 ....apache.isis.applib.value.LocalResourcePath.xml |   2 +
 7 files changed, 217 insertions(+), 517 deletions(-)

diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.fixture.DomainAppFixtureScriptsSpecificationProvider.xml b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.fixture.DomainAppFixtureScriptsSpecificationProvider.xml
index 4da4d8c..8354bda 100644
--- a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.fixture.DomainAppFixtureScriptsSpecificationProvider.xml
+++ b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.fixture.DomainAppFixtureScriptsSpecificationProvider.xml
@@ -5,6 +5,9 @@
             <mml:attr name="escaped">true</mml:attr>
             <mml:attr name="value">Domain App Fixture Scripts Specification Provider</mml:attr>
         </mml:facet>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobject.auditing.AuditableFacetFromConfiguration">
+            <mml:attr name="enablement">ENABLED</mml:attr>
+        </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
             <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
         </mml:facet>
@@ -14,19 +17,11 @@
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainservicelayout.annotation.DomainServiceLayoutFacetAnnotation">
             <mml:attr name="menuBar">PRIMARY</mml:attr>
-            <mml:attr name="menuOrder">2147483547</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.isis.core.metamodel.facets.object.grid.GridFacetDefault"/>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.icon.IconFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainservice.annotation.IconFacetDerivedFromDomainServiceAnnotation">
             <mml:attr name="repositoryFor">java.lang.Object</mml:attr>
         </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet" fqcn="org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFallback">
-            <mml:attr name="columns">[4,0,0,8]</mml:attr>
-            <mml:attr name="left">General</mml:attr>
-        </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.notpersistable.NotPersistableFacet" fqcn="org.apache.isis.core.metamodel.facets.fallback.NotPersistableFacetNull">
-            <mml:attr name="disabling">true</mml:attr>
-        </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet" fqcn="org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromClassName">
             <mml:attr name="derived">true</mml:attr>
             <mml:attr name="value">domainapp.application.fixture.DomainAppFixtureScriptsSpecificationProvider</mml:attr>
diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.fixture.scenarios.DomainAppDemo.xml b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.fixture.scenarios.DomainAppDemo.xml
index 4258961..ba64588 100644
--- a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.fixture.scenarios.DomainAppDemo.xml
+++ b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.fixture.scenarios.DomainAppDemo.xml
@@ -6,17 +6,17 @@
             <mml:attr name="originalText">Script</mml:attr>
             <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.domainobjectlayout.NamedFacetForViewModelLayoutAnnotation</mml:attr>
         </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
-            <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobject.auditing.AuditableFacetFromConfiguration">
+            <mml:attr name="enablement">ENABLED</mml:attr>
         </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.isis.core.metamodel.facets.object.grid.GridFacetDefault"/>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet" fqcn="org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFallback">
-            <mml:attr name="columns">[4,0,0,8]</mml:attr>
-            <mml:attr name="left">General</mml:attr>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobjectlayout.BookmarkPolicyFacetForViewModelLayoutAnnotation">
+            <mml:attr name="bookmarkPolicy">NOT_SPECIFIED</mml:attr>
+            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback</mml:attr>
         </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.notpersistable.NotPersistableFacet" fqcn="org.apache.isis.core.metamodel.facets.fallback.NotPersistableFacetNull">
-            <mml:attr name="disabling">true</mml:attr>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainservicelayout.annotation.DomainServiceLayoutFacetAnnotation">
+            <mml:attr name="menuBar">PRIMARY</mml:attr>
         </mml:facet>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.isis.core.metamodel.facets.object.grid.GridFacetDefault"/>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet" fqcn="org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromClassName">
             <mml:attr name="derived">true</mml:attr>
             <mml:attr name="value">domainapp.application.fixture.scenarios.DomainAppDemo</mml:attr>
@@ -49,29 +49,21 @@
     <mml:actions>
         <mml:act id="downloadLayoutXml">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
+                    <mml:attr name="eventType">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
                     <mml:attr name="intent.act">EXECUTE</mml:attr>
-                    <mml:attr name="methods">public java.lang.Object org.apache.isis.applib.services.layout.Object_downloadLayoutXml.act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
-                    <mml:attr name="onType">org.apache.isis.applib.services.layout.Object_downloadLayoutXml</mml:attr>
+                    <mml:attr name="methods">public java.lang.Object org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
+                    <mml:attr name="onType">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml</mml:attr>
                     <mml:attr name="returnType">java.lang.Object</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ASSOCIATION</mml:attr>
+                    <mml:attr name="contributed">AS_ACTION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
@@ -84,6 +76,7 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
                     <mml:attr name="value">SAFE</mml:attr>
                 </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
                     <mml:attr name="context">domainapp.application.fixture.scenarios.DomainAppDemo#downloadLayoutXml()</mml:attr>
                     <mml:attr name="originalText">Download Layout Xml</mml:attr>
@@ -104,11 +97,8 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
@@ -120,14 +110,10 @@
                 <mml:param xsi:type="mml:scalarParam" id="fileName" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                     <mml:facets>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
-                            <mml:attr name="context">org.apache.isis.applib.services.layout.Object_downloadLayoutXml#act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
+                            <mml:attr name="context">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml#act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
                             <mml:attr name="originalText">File name</mml:attr>
                             <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation</mml:attr>
                         </mml:facet>
-                        <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" fqcn="org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation">
-                            <mml:attr name="label">DEFAULT</mml:attr>
-                            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation</mml:attr>
-                        </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet" fqcn="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetDefault">
                             <mml:attr name="inverted">false</mml:attr>
                             <mml:attr name="semantics">REQUIRED</mml:attr>
@@ -136,7 +122,7 @@
                         </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet" fqcn="org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod">
                             <mml:attr name="intent.default0Act">DEFAULTS</mml:attr>
-                            <mml:attr name="methods">public java.lang.String org.apache.isis.applib.services.layout.Object_downloadLayoutXml.default0Act()</mml:attr>
+                            <mml:attr name="methods">public java.lang.String org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.default0Act()</mml:attr>
                         </mml:facet>
                     </mml:facets>
                     <mml:type>java.lang.String</mml:type>
@@ -151,7 +137,7 @@
                         </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet" fqcn="org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod">
                             <mml:attr name="intent.default1Act">DEFAULTS</mml:attr>
-                            <mml:attr name="methods">public org.apache.isis.applib.services.layout.LayoutService$Style org.apache.isis.applib.services.layout.Object_downloadLayoutXml.default1Act()</mml:attr>
+                            <mml:attr name="methods">public org.apache.isis.applib.services.layout.LayoutService$Style org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.default1Act()</mml:attr>
                         </mml:facet>
                     </mml:facets>
                     <mml:type>org.apache.isis.applib.services.layout.LayoutService$Style</mml:type>
@@ -160,29 +146,21 @@
         </mml:act>
         <mml:act id="openRestApi">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.mixins.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
+                    <mml:attr name="eventType">org.apache.isis.applib.mixins.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
                     <mml:attr name="intent.act">EXECUTE</mml:attr>
-                    <mml:attr name="methods">public java.net.URL org.apache.isis.applib.services.layout.Object_openRestApi.act() throws java.net.MalformedURLException</mml:attr>
-                    <mml:attr name="onType">org.apache.isis.applib.services.layout.Object_openRestApi</mml:attr>
-                    <mml:attr name="returnType">java.net.URL</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
+                    <mml:attr name="methods">public org.apache.isis.applib.value.LocalResourcePath org.apache.isis.applib.mixins.layout.Object_openRestApi.act()</mml:attr>
+                    <mml:attr name="onType">org.apache.isis.applib.mixins.layout.Object_openRestApi</mml:attr>
+                    <mml:attr name="returnType">org.apache.isis.applib.value.LocalResourcePath</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ASSOCIATION</mml:attr>
+                    <mml:attr name="contributed">AS_ACTION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
@@ -195,6 +173,7 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
                     <mml:attr name="value">SAFE</mml:attr>
                 </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
                     <mml:attr name="context">domainapp.application.fixture.scenarios.DomainAppDemo#openRestApi()</mml:attr>
                     <mml:attr name="originalText">Open Rest Api</mml:attr>
@@ -215,45 +194,34 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                 </mml:facet>
             </mml:facets>
-            <mml:returnType>java.net.URL</mml:returnType>
+            <mml:returnType>org.apache.isis.applib.value.LocalResourcePath</mml:returnType>
             <mml:params/>
         </mml:act>
         <mml:act id="rebuildMetamodel">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
+                    <mml:attr name="eventType">org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
                     <mml:attr name="intent.act">EXECUTE</mml:attr>
-                    <mml:attr name="methods">public void org.apache.isis.applib.services.layout.Object_rebuildMetamodel.act()</mml:attr>
-                    <mml:attr name="onType">org.apache.isis.applib.services.layout.Object_rebuildMetamodel</mml:attr>
+                    <mml:attr name="methods">public void org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel.act()</mml:attr>
+                    <mml:attr name="onType">org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel</mml:attr>
                     <mml:attr name="returnType">void</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ASSOCIATION</mml:attr>
+                    <mml:attr name="contributed">AS_ACTION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
@@ -266,6 +234,7 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
                     <mml:attr name="value">IDEMPOTENT</mml:attr>
                 </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
                     <mml:attr name="context">domainapp.application.fixture.scenarios.DomainAppDemo#rebuildMetamodel()</mml:attr>
                     <mml:attr name="originalText">Rebuild Metamodel</mml:attr>
@@ -286,11 +255,8 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.services.homepage.HomePageService.xml b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.services.homepage.HomePageService.xml
index 7317b44..611407d 100644
--- a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.services.homepage.HomePageService.xml
+++ b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.services.homepage.HomePageService.xml
@@ -5,6 +5,9 @@
             <mml:attr name="escaped">true</mml:attr>
             <mml:attr name="value">Home Page Service</mml:attr>
         </mml:facet>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobject.auditing.AuditableFacetFromConfiguration">
+            <mml:attr name="enablement">ENABLED</mml:attr>
+        </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
             <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
         </mml:facet>
@@ -14,19 +17,11 @@
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainservicelayout.annotation.DomainServiceLayoutFacetAnnotation">
             <mml:attr name="menuBar">PRIMARY</mml:attr>
-            <mml:attr name="menuOrder">2147483547</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.isis.core.metamodel.facets.object.grid.GridFacetDefault"/>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.icon.IconFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainservice.annotation.IconFacetDerivedFromDomainServiceAnnotation">
             <mml:attr name="repositoryFor">java.lang.Object</mml:attr>
         </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet" fqcn="org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFallback">
-            <mml:attr name="columns">[4,0,0,8]</mml:attr>
-            <mml:attr name="left">General</mml:attr>
-        </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.notpersistable.NotPersistableFacet" fqcn="org.apache.isis.core.metamodel.facets.fallback.NotPersistableFacetNull">
-            <mml:attr name="disabling">true</mml:attr>
-        </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet" fqcn="org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId">
             <mml:attr name="value">homepage.HomePageService</mml:attr>
         </mml:facet>
diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.services.homepage.HomePageViewModel.xml b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.services.homepage.HomePageViewModel.xml
index 0548356..707efe8 100644
--- a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.services.homepage.HomePageViewModel.xml
+++ b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.application.services.homepage.HomePageViewModel.xml
@@ -5,38 +5,37 @@
             <mml:attr name="escaped">true</mml:attr>
             <mml:attr name="value">Home Page View Model</mml:attr>
         </mml:facet>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobject.auditing.AuditableFacetFromConfiguration">
+            <mml:attr name="enablement">ENABLED</mml:attr>
+        </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
             <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.CreatedLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.CreatedLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectCreatedEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectCreatedEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.LoadedLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.LoadedLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectLoadedEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectLoadedEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.PersistedLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.PersistedLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectPersistedEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectPersistedEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.PersistingLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.PersistingLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectPersistingEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectPersistingEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.RemovingLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.RemovingLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectRemovingEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectRemovingEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectUpdatedEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectUpdatedEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectUpdatingEvent.Default</mml:attr>
-        </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.isis.core.metamodel.facets.object.grid.GridFacetDefault"/>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet" fqcn="org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFallback">
-            <mml:attr name="columns">[4,0,0,8]</mml:attr>
-            <mml:attr name="left">General</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectUpdatingEvent.Default</mml:attr>
         </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.notpersistable.NotPersistableFacet" fqcn="org.apache.isis.core.metamodel.facets.fallback.NotPersistableFacetNull">
-            <mml:attr name="disabling">true</mml:attr>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainservicelayout.annotation.DomainServiceLayoutFacetAnnotation">
+            <mml:attr name="menuBar">PRIMARY</mml:attr>
         </mml:facet>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.isis.core.metamodel.facets.object.grid.GridFacetDefault"/>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobject.objectspecid.ObjectSpecIdFacetForDomainObjectAnnotation">
             <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromClassName</mml:attr>
             <mml:attr name="value">domainapp.application.services.homepage.HomePageViewModel</mml:attr>
@@ -85,13 +84,13 @@
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionDomainEventFacetDefault</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.CollectionDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.CollectionDomainEvent.Default</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet" fqcn="org.apache.isis.core.metamodel.facets.collections.collection.modify.CollectionAddToFacetForDomainEventFromDefault">
                     <mml:attr name="collectionAddToFacet">org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacetViaAccessor</mml:attr>
                     <mml:attr name="getterFacet">org.apache.isis.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessor</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacetViaAccessor</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.CollectionDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.CollectionDomainEvent.Default</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacet" fqcn="org.apache.isis.core.metamodel.facets.collections.clear.CollectionClearFacetViaAccessor">
                     <mml:attr name="intent.getObjects">ACCESSOR</mml:attr>
@@ -101,10 +100,10 @@
                     <mml:attr name="collectionRemoveFromFacet">org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacetViaAccessor</mml:attr>
                     <mml:attr name="getterFacet">org.apache.isis.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessor</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacetViaAccessor</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.CollectionDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.CollectionDomainEvent.Default</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.collparam.semantics.CollectionSemanticsFacetDefault">
-                    <mml:attr name="value">LIST</mml:attr>
+                    <mml:attr name="value">LIST_INTERFACE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.paged.PagedFacet" fqcn="org.apache.isis.core.metamodel.facets.fallback.PagedFacetFromConfiguration">
                     <mml:attr name="derived">true</mml:attr>
@@ -114,7 +113,6 @@
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="inverted">false</mml:attr>
                     <mml:attr name="semantics">DISABLED</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
                     <mml:attr name="where">ANYWHERE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet" fqcn="org.apache.isis.core.metamodel.facets.collections.accessor.CollectionAccessorFacetViaAccessor">
@@ -133,29 +131,21 @@
     <mml:actions>
         <mml:act id="downloadLayoutXml">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
+                    <mml:attr name="eventType">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
                     <mml:attr name="intent.act">EXECUTE</mml:attr>
-                    <mml:attr name="methods">public java.lang.Object org.apache.isis.applib.services.layout.Object_downloadLayoutXml.act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
-                    <mml:attr name="onType">org.apache.isis.applib.services.layout.Object_downloadLayoutXml</mml:attr>
+                    <mml:attr name="methods">public java.lang.Object org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
+                    <mml:attr name="onType">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml</mml:attr>
                     <mml:attr name="returnType">java.lang.Object</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ASSOCIATION</mml:attr>
+                    <mml:attr name="contributed">AS_ACTION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
@@ -168,6 +158,7 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
                     <mml:attr name="value">SAFE</mml:attr>
                 </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
                     <mml:attr name="context">domainapp.application.services.homepage.HomePageViewModel#downloadLayoutXml()</mml:attr>
                     <mml:attr name="originalText">Download Layout Xml</mml:attr>
@@ -188,11 +179,8 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
@@ -204,14 +192,10 @@
                 <mml:param xsi:type="mml:scalarParam" id="fileName" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                     <mml:facets>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
-                            <mml:attr name="context">org.apache.isis.applib.services.layout.Object_downloadLayoutXml#act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
+                            <mml:attr name="context">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml#act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
                             <mml:attr name="originalText">File name</mml:attr>
                             <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation</mml:attr>
                         </mml:facet>
-                        <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" fqcn="org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation">
-                            <mml:attr name="label">DEFAULT</mml:attr>
-                            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation</mml:attr>
-                        </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet" fqcn="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetDefault">
                             <mml:attr name="inverted">false</mml:attr>
                             <mml:attr name="semantics">REQUIRED</mml:attr>
@@ -220,7 +204,7 @@
                         </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet" fqcn="org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod">
                             <mml:attr name="intent.default0Act">DEFAULTS</mml:attr>
-                            <mml:attr name="methods">public java.lang.String org.apache.isis.applib.services.layout.Object_downloadLayoutXml.default0Act()</mml:attr>
+                            <mml:attr name="methods">public java.lang.String org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.default0Act()</mml:attr>
                         </mml:facet>
                     </mml:facets>
                     <mml:type>java.lang.String</mml:type>
@@ -235,7 +219,7 @@
                         </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet" fqcn="org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod">
                             <mml:attr name="intent.default1Act">DEFAULTS</mml:attr>
-                            <mml:attr name="methods">public org.apache.isis.applib.services.layout.LayoutService$Style org.apache.isis.applib.services.layout.Object_downloadLayoutXml.default1Act()</mml:attr>
+                            <mml:attr name="methods">public org.apache.isis.applib.services.layout.LayoutService$Style org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.default1Act()</mml:attr>
                         </mml:facet>
                     </mml:facets>
                     <mml:type>org.apache.isis.applib.services.layout.LayoutService$Style</mml:type>
@@ -244,29 +228,21 @@
         </mml:act>
         <mml:act id="openRestApi">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.mixins.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
+                    <mml:attr name="eventType">org.apache.isis.applib.mixins.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
                     <mml:attr name="intent.act">EXECUTE</mml:attr>
-                    <mml:attr name="methods">public java.net.URL org.apache.isis.applib.services.layout.Object_openRestApi.act() throws java.net.MalformedURLException</mml:attr>
-                    <mml:attr name="onType">org.apache.isis.applib.services.layout.Object_openRestApi</mml:attr>
-                    <mml:attr name="returnType">java.net.URL</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
+                    <mml:attr name="methods">public org.apache.isis.applib.value.LocalResourcePath org.apache.isis.applib.mixins.layout.Object_openRestApi.act()</mml:attr>
+                    <mml:attr name="onType">org.apache.isis.applib.mixins.layout.Object_openRestApi</mml:attr>
+                    <mml:attr name="returnType">org.apache.isis.applib.value.LocalResourcePath</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ASSOCIATION</mml:attr>
+                    <mml:attr name="contributed">AS_ACTION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
@@ -279,6 +255,7 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
                     <mml:attr name="value">SAFE</mml:attr>
                 </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
                     <mml:attr name="context">domainapp.application.services.homepage.HomePageViewModel#openRestApi()</mml:attr>
                     <mml:attr name="originalText">Open Rest Api</mml:attr>
@@ -299,45 +276,34 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                 </mml:facet>
             </mml:facets>
-            <mml:returnType>java.net.URL</mml:returnType>
+            <mml:returnType>org.apache.isis.applib.value.LocalResourcePath</mml:returnType>
             <mml:params/>
         </mml:act>
         <mml:act id="rebuildMetamodel">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
+                    <mml:attr name="eventType">org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
                     <mml:attr name="intent.act">EXECUTE</mml:attr>
-                    <mml:attr name="methods">public void org.apache.isis.applib.services.layout.Object_rebuildMetamodel.act()</mml:attr>
-                    <mml:attr name="onType">org.apache.isis.applib.services.layout.Object_rebuildMetamodel</mml:attr>
+                    <mml:attr name="methods">public void org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel.act()</mml:attr>
+                    <mml:attr name="onType">org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel</mml:attr>
                     <mml:attr name="returnType">void</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ASSOCIATION</mml:attr>
+                    <mml:attr name="contributed">AS_ACTION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
@@ -350,6 +316,7 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
                     <mml:attr name="value">IDEMPOTENT</mml:attr>
                 </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
                     <mml:attr name="context">domainapp.application.services.homepage.HomePageViewModel#rebuildMetamodel()</mml:attr>
                     <mml:attr name="originalText">Rebuild Metamodel</mml:attr>
@@ -370,11 +337,8 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.modules.simple.dom.impl.SimpleObject.xml b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.modules.simple.dom.impl.SimpleObject.xml
index ad36bf2..16be26b 100644
--- a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.modules.simple.dom.impl.SimpleObject.xml
+++ b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.modules.simple.dom.impl.SimpleObject.xml
@@ -6,45 +6,42 @@
             <mml:attr name="value">Simple Object</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobjectlayout.CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent">
-            <mml:attr name="cssClassUiEventClass">org.apache.isis.applib.services.eventbus.CssClassUiEvent.Default</mml:attr>
+            <mml:attr name="cssClassUiEventClass">org.apache.isis.applib.events.ui.CssClassUiEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobject.auditing.AuditableFacetForDomainObjectAnnotation">
             <mml:attr name="enablement">ENABLED</mml:attr>
         </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
-            <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobjectlayout.BookmarkPolicyFacetForDomainObjectLayoutAnnotation">
+            <mml:attr name="bookmarkPolicy">NOT_SPECIFIED</mml:attr>
+            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.CreatedLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.CreatedLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectCreatedEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectCreatedEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.LoadedLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.LoadedLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectLoadedEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectLoadedEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.PersistedLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.PersistedLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectPersistedEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectPersistedEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.PersistingLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.PersistingLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectPersistingEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectPersistingEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.RemovingLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.RemovingLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectRemovingEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectRemovingEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.UpdatedLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectUpdatedEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectUpdatedEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingLifecycleEventFacet" fqcn="org.apache.isis.core.metamodel.facets.object.callbacks.UpdatingLifecycleEventFacetForDomainObjectAnnotation">
-            <mml:attr name="value">org.apache.isis.applib.services.eventbus.ObjectUpdatingEvent.Default</mml:attr>
+            <mml:attr name="value">org.apache.isis.applib.events.lifecycle.ObjectUpdatingEvent.Default</mml:attr>
+        </mml:facet>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainservicelayout.annotation.DomainServiceLayoutFacetAnnotation">
+            <mml:attr name="menuBar">PRIMARY</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.grid.GridFacet" fqcn="org.apache.isis.core.metamodel.facets.object.grid.GridFacetDefault"/>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.icon.IconFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobjectlayout.IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent">
-            <mml:attr name="iconUiEventClass">org.apache.isis.applib.services.eventbus.IconUiEvent.Default</mml:attr>
-        </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet" fqcn="org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFallback">
-            <mml:attr name="columns">[4,0,0,8]</mml:attr>
-            <mml:attr name="left">General</mml:attr>
-        </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.notpersistable.NotPersistableFacet" fqcn="org.apache.isis.core.metamodel.facets.fallback.NotPersistableFacetNull">
-            <mml:attr name="disabling">true</mml:attr>
+            <mml:attr name="iconUiEventClass">org.apache.isis.applib.events.ui.IconUiEvent.Default</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobject.objectspecid.ObjectSpecIdFacetForJdoPersistenceCapableAnnotation">
             <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromClassName</mml:attr>
@@ -57,13 +54,10 @@
             <mml:attr name="derived">true</mml:attr>
             <mml:attr name="value">25</mml:attr>
         </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.plural.PluralFacet" fqcn="org.apache.isis.core.metamodel.facets.object.plural.inferred.PluralFacetInferred">
-            <mml:attr name="derived">true</mml:attr>
-            <mml:attr name="value">Simple Objects</mml:attr>
-        </mml:facet>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.plural.PluralFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobjectlayout.PluralFacetForDomainObjectLayoutAnnotation"/>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.title.TitleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobjectlayout.TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent">
-            <mml:attr name="titleUiEventClass">org.apache.isis.applib.services.eventbus.TitleUiEvent.Default</mml:attr>
-            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.title.annotation.TitleFacetViaTitleAnnotation</mml:attr>
+            <mml:attr name="titleUiEventClass">org.apache.isis.applib.events.ui.TitleUiEvent.Default</mml:attr>
+            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.title.methods.TitleFacetViaTitleMethod</mml:attr>
         </mml:facet>
         <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
             <mml:attr name="disabling">true</mml:attr>
@@ -82,11 +76,6 @@
     <mml:properties>
         <mml:prop id="datanucleusIdLong">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
@@ -100,14 +89,11 @@
                     <mml:attr name="onType">org.apache.isis.core.metamodel.services.jdosupport.Persistable_datanucleusIdLong</mml:attr>
                     <mml:attr name="returnType">java.lang.Long</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ACTION</mml:attr>
+                    <mml:attr name="contributed">AS_ASSOCIATION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetFallback">
                     <mml:attr name="position">BELOW</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
@@ -127,7 +113,6 @@
                     <mml:attr name="inverted">false</mml:attr>
                     <mml:attr name="reason">Contributed property</mml:attr>
                     <mml:attr name="semantics">DISABLED</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
                     <mml:attr name="where">ANYWHERE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacet" fqcn="org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacetViaMethod">
@@ -146,19 +131,11 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
                     <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyLayoutAnnotation">
-                    <mml:attr name="label">LEFT</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFacetForPropertyLayoutAnnotation" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFacetForPropertyLayoutAnnotation">
                     <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
                     <mml:attr name="where">ALL_TABLES</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
@@ -168,11 +145,6 @@
         </mml:prop>
         <mml:prop id="datanucleusVersionLong">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
@@ -186,14 +158,11 @@
                     <mml:attr name="onType">org.apache.isis.core.metamodel.services.jdosupport.Persistable_datanucleusVersionLong</mml:attr>
                     <mml:attr name="returnType">java.lang.Long</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ACTION</mml:attr>
+                    <mml:attr name="contributed">AS_ASSOCIATION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetFallback">
                     <mml:attr name="position">BELOW</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
@@ -213,7 +182,6 @@
                     <mml:attr name="inverted">false</mml:attr>
                     <mml:attr name="reason">Contributed property</mml:attr>
                     <mml:attr name="semantics">DISABLED</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
                     <mml:attr name="where">ANYWHERE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacet" fqcn="org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacetViaMethod">
@@ -232,19 +200,11 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
                     <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyLayoutAnnotation">
-                    <mml:attr name="label">LEFT</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFacetForPropertyLayoutAnnotation" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFacetForPropertyLayoutAnnotation">
                     <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
                     <mml:attr name="where">ALL_TABLES</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
@@ -254,11 +214,6 @@
         </mml:prop>
         <mml:prop id="datanucleusVersionTimestamp">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
@@ -272,14 +227,11 @@
                     <mml:attr name="onType">org.apache.isis.core.metamodel.services.jdosupport.Persistable_datanucleusVersionTimestamp</mml:attr>
                     <mml:attr name="returnType">java.sql.Timestamp</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ACTION</mml:attr>
+                    <mml:attr name="contributed">AS_ASSOCIATION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetFallback">
                     <mml:attr name="position">BELOW</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
@@ -299,7 +251,6 @@
                     <mml:attr name="inverted">false</mml:attr>
                     <mml:attr name="reason">Contributed property</mml:attr>
                     <mml:attr name="semantics">DISABLED</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
                     <mml:attr name="where">ANYWHERE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacet" fqcn="org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacetViaMethod">
@@ -318,19 +269,11 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
                     <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.LabelAtFacetForPropertyLayoutAnnotation">
-                    <mml:attr name="label">LEFT</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFacetForPropertyLayoutAnnotation" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.HiddenFacetForPropertyLayoutAnnotation">
                     <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
                     <mml:attr name="where">ALL_TABLES</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
@@ -346,8 +289,14 @@
                     <mml:attr name="originalText">Name</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.fallback.NamedFacetDefault</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.disabled.DisabledFacetForPropertyAnnotation">
+                    <mml:attr name="disabling">true</mml:attr>
+                    <mml:attr name="inverted">false</mml:attr>
+                    <mml:attr name="semantics">DISABLED</mml:attr>
+                    <mml:attr name="where">EVERYWHERE</mml:attr>
+                </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet" fqcn="org.apache.isis.objectstore.jdo.metamodel.facets.prop.column.MandatoryFacetDerivedFromJdoColumn">
                     <mml:attr name="inverted">false</mml:attr>
@@ -355,9 +304,14 @@
                     <mml:attr name="validating">true</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet" fqcn="org.apache.isis.objectstore.jdo.metamodel.facets.prop.column.MaxLengthFacetDerivedFromJdoColumn">
+                    <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.properties.property.maxlength.MaxLengthFacetForPropertyAnnotation</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
                     <mml:attr name="value">40</mml:attr>
                 </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.mustsatisfyspec.MustSatisfySpecificationFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.mustsatisfy.MustSatisfySpecificationFacetForPropertyAnnotation">
+                    <mml:attr name="specifications">domainapp.modules.simple.dom.types.Name$NoExclamationMarks</mml:attr>
+                    <mml:attr name="validating">true</mml:attr>
+                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.typicallen.fromtype.TypicalLengthFacetOnPropertyDerivedFromType">
                     <mml:attr name="derived">true</mml:attr>
                     <mml:attr name="typicalLengthFacet">org.apache.isis.core.metamodel.facets.object.value.TypicalLengthFacetUsingParser</mml:attr>
@@ -370,41 +324,28 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.defaults.fromtype.PropertyDefaultFacetDerivedFromDefaultedFacet">
                     <mml:attr name="typeFacet">org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetUsingDefaultsProvider</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation" fqcn="org.apache.isis.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation" fqcn="org.apache.isis.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetForPropertyAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetDefault">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="getterFacet">org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.PropertyDomainEvent.Default</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.PropertyDomainEvent.Default</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromPropertyAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromDefault">
                     <mml:attr name="clearFacet">org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacetViaSetterMethod</mml:attr>
                     <mml:attr name="getterFacet">org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacetViaSetterMethod</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.PropertyDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.PropertyDomainEvent.Default</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacetViaSetterMethod">
                     <mml:attr name="intent.setName">MODIFY_PROPERTY</mml:attr>
                     <mml:attr name="methods">public void domainapp.modules.simple.dom.impl.SimpleObject.setName(java.lang.String)</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromDefault">
                     <mml:attr name="getterFacet">org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor</mml:attr>
                     <mml:attr name="setterFacet">org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacetViaSetterMethod</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacetViaSetterMethod</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.PropertyDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.PropertyDomainEvent.Default</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.properties.validating.PropertyValidateFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.validating.dflt.PropertyValidateFacetDefault">
                     <mml:attr name="validating">true</mml:attr>
@@ -428,11 +369,10 @@
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="inverted">true</mml:attr>
                     <mml:attr name="semantics">ENABLED</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
                     <mml:attr name="where">EVERYWHERE</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet" fqcn="org.apache.isis.objectstore.jdo.metamodel.facets.prop.column.MandatoryFacetDerivedFromJdoColumn">
                     <mml:attr name="inverted">true</mml:attr>
@@ -440,6 +380,7 @@
                     <mml:attr name="validating">true</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet" fqcn="org.apache.isis.objectstore.jdo.metamodel.facets.prop.column.MaxLengthFacetDerivedFromJdoColumn">
+                    <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.properties.property.maxlength.MaxLengthFacetForPropertyAnnotation</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
                     <mml:attr name="value">4000</mml:attr>
                 </mml:facet>
@@ -455,41 +396,28 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.defaults.fromtype.PropertyDefaultFacetDerivedFromDefaultedFacet">
                     <mml:attr name="typeFacet">org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetUsingDefaultsProvider</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation" fqcn="org.apache.isis.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation" fqcn="org.apache.isis.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetForPropertyAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyDomainEventFacetDefault">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="getterFacet">org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.PropertyDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.PropertyDomainEvent.Default</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromPropertyAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromDefault">
                     <mml:attr name="clearFacet">org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacetViaSetterMethod</mml:attr>
                     <mml:attr name="getterFacet">org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacetViaSetterMethod</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.PropertyDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.PropertyDomainEvent.Default</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacetViaSetterMethod">
                     <mml:attr name="intent.setNotes">MODIFY_PROPERTY</mml:attr>
                     <mml:attr name="methods">public void domainapp.modules.simple.dom.impl.SimpleObject.setNotes(java.lang.String)</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromPropertyAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.property.modify.PropertySetterFacetForDomainEventFromDefault">
                     <mml:attr name="getterFacet">org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessor</mml:attr>
                     <mml:attr name="setterFacet">org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacetViaSetterMethod</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacetViaSetterMethod</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.PropertyDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.PropertyDomainEvent.Default</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.properties.validating.PropertyValidateFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.validating.dflt.PropertyValidateFacetDefault">
                     <mml:attr name="validating">true</mml:attr>
@@ -506,32 +434,19 @@
     <mml:actions>
         <mml:act id="delete">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetDefault">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.ActionDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.ActionDomainEvent.Default</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.eventbus.ActionDomainEvent.Default</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromDefault">
+                    <mml:attr name="eventType">org.apache.isis.applib.events.domain.ActionDomainEvent.Default</mml:attr>
                     <mml:attr name="intent.delete">EXECUTE</mml:attr>
                     <mml:attr name="methods">public void domainapp.modules.simple.dom.impl.SimpleObject.delete()</mml:attr>
                     <mml:attr name="onType">domainapp.modules.simple.dom.impl.SimpleObject</mml:attr>
                     <mml:attr name="returnType">void</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetFallback">
                     <mml:attr name="position">BELOW</mml:attr>
                 </mml:facet>
@@ -550,12 +465,8 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                    <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
@@ -567,11 +478,6 @@
         </mml:act>
         <mml:act id="downloadJdoMetadata">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
@@ -585,11 +491,8 @@
                     <mml:attr name="onType">org.apache.isis.core.metamodel.services.jdosupport.Persistable_downloadJdoMetadata</mml:attr>
                     <mml:attr name="returnType">org.apache.isis.applib.value.Clob</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ASSOCIATION</mml:attr>
+                    <mml:attr name="contributed">AS_ACTION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
@@ -602,6 +505,7 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
                     <mml:attr name="value">SAFE</mml:attr>
                 </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
                     <mml:attr name="context">domainapp.modules.simple.dom.impl.SimpleObject#downloadJdoMetadata()</mml:attr>
                     <mml:attr name="originalText">Download Jdo Metadata</mml:attr>
@@ -622,11 +526,8 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
@@ -642,10 +543,6 @@
                             <mml:attr name="originalText">File name</mml:attr>
                             <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation</mml:attr>
                         </mml:facet>
-                        <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" fqcn="org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation">
-                            <mml:attr name="label">DEFAULT</mml:attr>
-                            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation</mml:attr>
-                        </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet" fqcn="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetDefault">
                             <mml:attr name="inverted">false</mml:attr>
                             <mml:attr name="semantics">REQUIRED</mml:attr>
@@ -663,29 +560,21 @@
         </mml:act>
         <mml:act id="downloadLayoutXml">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
+                    <mml:attr name="eventType">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.ActionDomainEvent</mml:attr>
                     <mml:attr name="intent.act">EXECUTE</mml:attr>
-                    <mml:attr name="methods">public java.lang.Object org.apache.isis.applib.services.layout.Object_downloadLayoutXml.act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
-                    <mml:attr name="onType">org.apache.isis.applib.services.layout.Object_downloadLayoutXml</mml:attr>
+                    <mml:attr name="methods">public java.lang.Object org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
+                    <mml:attr name="onType">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml</mml:attr>
                     <mml:attr name="returnType">java.lang.Object</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ASSOCIATION</mml:attr>
+                    <mml:attr name="contributed">AS_ACTION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
@@ -698,6 +587,7 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
                     <mml:attr name="value">SAFE</mml:attr>
                 </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
                     <mml:attr name="context">domainapp.modules.simple.dom.impl.SimpleObject#downloadLayoutXml()</mml:attr>
                     <mml:attr name="originalText">Download Layout Xml</mml:attr>
@@ -718,11 +608,8 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
@@ -734,14 +621,10 @@
                 <mml:param xsi:type="mml:scalarParam" id="fileName" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                     <mml:facets>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
-                            <mml:attr name="context">org.apache.isis.applib.services.layout.Object_downloadLayoutXml#act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
+                            <mml:attr name="context">org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml#act(java.lang.String,org.apache.isis.applib.services.layout.LayoutService$Style)</mml:attr>
                             <mml:attr name="originalText">File name</mml:attr>
                             <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation</mml:attr>
                         </mml:facet>
-                        <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" fqcn="org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation">
-                            <mml:attr name="label">DEFAULT</mml:attr>
-                            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation</mml:attr>
-                        </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet" fqcn="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetDefault">
                             <mml:attr name="inverted">false</mml:attr>
                             <mml:attr name="semantics">REQUIRED</mml:attr>
@@ -750,7 +633,7 @@
                         </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet" fqcn="org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod">
                             <mml:attr name="intent.default0Act">DEFAULTS</mml:attr>
-                            <mml:attr name="methods">public java.lang.String org.apache.isis.applib.services.layout.Object_downloadLayoutXml.default0Act()</mml:attr>
+                            <mml:attr name="methods">public java.lang.String org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.default0Act()</mml:attr>
                         </mml:facet>
                     </mml:facets>
                     <mml:type>java.lang.String</mml:type>
@@ -765,7 +648,7 @@
                         </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet" fqcn="org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethod">
                             <mml:attr name="intent.default1Act">DEFAULTS</mml:attr>
-                            <mml:attr name="methods">public org.apache.isis.applib.services.layout.LayoutService$Style org.apache.isis.applib.services.layout.Object_downloadLayoutXml.default1Act()</mml:attr>
+                            <mml:attr name="methods">public org.apache.isis.applib.services.layout.LayoutService$Style org.apache.isis.applib.mixins.layout.Object_downloadLayoutXml.default1Act()</mml:attr>
                         </mml:facet>
                     </mml:facets>
                     <mml:type>org.apache.isis.applib.services.layout.LayoutService$Style</mml:type>
@@ -774,29 +657,21 @@
         </mml:act>
         <mml:act id="openRestApi">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.mixins.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
+                    <mml:attr name="eventType">org.apache.isis.applib.mixins.layout.Object_openRestApi.ActionDomainEvent</mml:attr>
                     <mml:attr name="intent.act">EXECUTE</mml:attr>
-                    <mml:attr name="methods">public java.net.URL org.apache.isis.applib.services.layout.Object_openRestApi.act() throws java.net.MalformedURLException</mml:attr>
-                    <mml:attr name="onType">org.apache.isis.applib.services.layout.Object_openRestApi</mml:attr>
-                    <mml:attr name="returnType">java.net.URL</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
+                    <mml:attr name="methods">public org.apache.isis.applib.value.LocalResourcePath org.apache.isis.applib.mixins.layout.Object_openRestApi.act()</mml:attr>
+                    <mml:attr name="onType">org.apache.isis.applib.mixins.layout.Object_openRestApi</mml:attr>
+                    <mml:attr name="returnType">org.apache.isis.applib.value.LocalResourcePath</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ASSOCIATION</mml:attr>
+                    <mml:attr name="contributed">AS_ACTION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
@@ -809,6 +684,7 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
                     <mml:attr name="value">SAFE</mml:attr>
                 </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
                     <mml:attr name="context">domainapp.modules.simple.dom.impl.SimpleObject#openRestApi()</mml:attr>
                     <mml:attr name="originalText">Open Rest Api</mml:attr>
@@ -829,45 +705,34 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                 </mml:facet>
             </mml:facets>
-            <mml:returnType>java.net.URL</mml:returnType>
+            <mml:returnType>org.apache.isis.applib.value.LocalResourcePath</mml:returnType>
             <mml:params/>
         </mml:act>
         <mml:act id="rebuildMetamodel">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
+                    <mml:attr name="eventType">org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel.ActionDomainEvent</mml:attr>
                     <mml:attr name="intent.act">EXECUTE</mml:attr>
-                    <mml:attr name="methods">public void org.apache.isis.applib.services.layout.Object_rebuildMetamodel.act()</mml:attr>
-                    <mml:attr name="onType">org.apache.isis.applib.services.layout.Object_rebuildMetamodel</mml:attr>
+                    <mml:attr name="methods">public void org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel.act()</mml:attr>
+                    <mml:attr name="onType">org.apache.isis.applib.mixins.layout.Object_rebuildMetamodel</mml:attr>
                     <mml:attr name="returnType">void</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.NotContributedFacetForActionLayoutAnnotation">
-                    <mml:attr name="as">ASSOCIATION</mml:attr>
+                    <mml:attr name="contributed">AS_ACTION</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacet</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
@@ -880,6 +745,7 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
                     <mml:attr name="value">IDEMPOTENT</mml:attr>
                 </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
                     <mml:attr name="context">domainapp.modules.simple.dom.impl.SimpleObject#rebuildMetamodel()</mml:attr>
                     <mml:attr name="originalText">Rebuild Metamodel</mml:attr>
@@ -900,11 +766,8 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
@@ -919,32 +782,19 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.associateWith.AssociatedWithFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.associateWith.AssociatedWithFacetForActionAnnotation">
                     <mml:attr name="value">name</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetDefault">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.ActionDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.ActionDomainEvent.Default</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.eventbus.ActionDomainEvent.Default</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromDefault">
+                    <mml:attr name="eventType">org.apache.isis.applib.events.domain.ActionDomainEvent.Default</mml:attr>
                     <mml:attr name="intent.updateName">EXECUTE</mml:attr>
                     <mml:attr name="methods">public domainapp.modules.simple.dom.impl.SimpleObject domainapp.modules.simple.dom.impl.SimpleObject.updateName(java.lang.String)</mml:attr>
                     <mml:attr name="onType">domainapp.modules.simple.dom.impl.SimpleObject</mml:attr>
                     <mml:attr name="returnType">domainapp.modules.simple.dom.impl.SimpleObject</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.command.CommandFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.command.CommandFacetForActionAnnotation">
                     <mml:attr name="disabled">false</mml:attr>
                     <mml:attr name="executeIn">FOREGROUND</mml:attr>
@@ -953,9 +803,7 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetFallback">
                     <mml:attr name="position">BELOW</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.publishing.PublishedActionFacetForActionAnnotation">
-                    <mml:attr name="value">org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionPayloadFactoryDefault</mml:attr>
-                </mml:facet>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.publish.PublishedActionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.publishing.PublishedActionFacetForActionAnnotation"/>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
                     <mml:attr name="value">IDEMPOTENT</mml:attr>
                 </mml:facet>
@@ -976,12 +824,8 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                    <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
@@ -996,22 +840,12 @@
                             <mml:attr name="defaultFacets">org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacetUsingDefaultsProvider</mml:attr>
                             <mml:attr name="derived">true</mml:attr>
                         </mml:facet>
-                        <mml:facet id="org.apache.isis.core.metamodel.facets.actions.validate.ActionParameterValidationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.validate.method.ActionParameterValidationFacetViaMethod">
-                            <mml:attr name="intent.validate0UpdateName">CHECK_IF_VALID</mml:attr>
-                            <mml:attr name="methods">public org.apache.isis.applib.services.i18n.TranslatableString domainapp.modules.simple.dom.impl.SimpleObject.validate0UpdateName(java.lang.String)</mml:attr>
-                            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actions.validate.method.ActionParameterValidationFacetViaMethod</mml:attr>
-                            <mml:attr name="validating">true</mml:attr>
-                        </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.param.describedas.annotderived.DescribedAsFacetOnParameterDerivedFromType"/>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.all.named.NamedFacet" fqcn="org.apache.isis.core.metamodel.facets.all.i18n.NamedFacetTranslated">
                             <mml:attr name="context">domainapp.modules.simple.dom.impl.SimpleObject#updateName(java.lang.String)</mml:attr>
                             <mml:attr name="originalText">Name</mml:attr>
                             <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation</mml:attr>
                         </mml:facet>
-                        <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" fqcn="org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation">
-                            <mml:attr name="label">DEFAULT</mml:attr>
-                            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation</mml:attr>
-                        </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet" fqcn="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetDefault">
                             <mml:attr name="inverted">false</mml:attr>
                             <mml:attr name="semantics">REQUIRED</mml:attr>
@@ -1022,6 +856,11 @@
                             <mml:attr name="validating">true</mml:attr>
                             <mml:attr name="value">40</mml:attr>
                         </mml:facet>
+                        <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.mustsatisfyspec.MustSatisfySpecificationFacet" fqcn="org.apache.isis.core.metamodel.facets.param.parameter.mustsatisfy.MustSatisfySpecificationFacetForParameterAnnotation">
+                            <mml:attr name="specifications">domainapp.modules.simple.dom.types.Name$NoExclamationMarks</mml:attr>
+                            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.parameter.mustsatisfy.MustSatisfySpecificationFacetForParameterAnnotation</mml:attr>
+                            <mml:attr name="validating">true</mml:attr>
+                        </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet" fqcn="org.apache.isis.core.metamodel.facets.param.typicallen.fromtype.TypicalLengthFacetOnParameterDerivedFromType">
                             <mml:attr name="derived">true</mml:attr>
                             <mml:attr name="typicalLengthFacet">org.apache.isis.core.metamodel.facets.object.value.TypicalLengthFacetUsingParser</mml:attr>
diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.modules.simple.dom.impl.SimpleObjects.xml b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.modules.simple.dom.impl.SimpleObjects.xml
index f73b959..1809a79 100644
--- a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.modules.simple.dom.impl.SimpleObjects.xml
+++ b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/domainapp.modules.simple.dom.impl.SimpleObjects.xml
@@ -6,6 +6,9 @@
             <mml:attr name="originalText">Simple Objects</mml:attr>
             <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.domainservicelayout.NamedFacetForDomainServiceLayoutAnnotation</mml:attr>
         </mml:facet>
+        <mml:facet id="org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainobject.auditing.AuditableFacetFromConfiguration">
+            <mml:attr name="enablement">ENABLED</mml:attr>
+        </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
             <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
         </mml:facet>
@@ -21,13 +24,6 @@
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.icon.IconFacet" fqcn="org.apache.isis.core.metamodel.facets.object.domainservice.annotation.IconFacetDerivedFromDomainServiceAnnotation">
             <mml:attr name="repositoryFor">domainapp.modules.simple.dom.impl.SimpleObject</mml:attr>
         </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet" fqcn="org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFallback">
-            <mml:attr name="columns">[4,0,0,8]</mml:attr>
-            <mml:attr name="left">General</mml:attr>
-        </mml:facet>
-        <mml:facet id="org.apache.isis.core.metamodel.facets.object.notpersistable.NotPersistableFacet" fqcn="org.apache.isis.core.metamodel.facets.fallback.NotPersistableFacetNull">
-            <mml:attr name="disabling">true</mml:attr>
-        </mml:facet>
         <mml:facet id="org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet" fqcn="org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromDomainServiceAnnotationElseGetId">
             <mml:attr name="value">simple.SimpleObjectMenu</mml:attr>
         </mml:facet>
@@ -51,16 +47,6 @@
     <mml:actions>
         <mml:act id="create">
             <mml:facets>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
@@ -74,18 +60,15 @@
                     <mml:attr name="onType">domainapp.modules.simple.dom.impl.SimpleObjects</mml:attr>
                     <mml:attr name="returnType">domainapp.modules.simple.dom.impl.SimpleObject</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromDomainServiceFacet">
-                    <mml:attr name="as">EITHER</mml:attr>
+                    <mml:attr name="contributed">AS_NEITHER</mml:attr>
                     <mml:attr name="derived">true</mml:attr>
                     <mml:attr name="natureOfService">VIEW_MENU_ONLY</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetFallback">
                     <mml:attr name="position">BELOW</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetFallbackToNonIdempotent">
                     <mml:attr name="value">NON_IDEMPOTENT</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet" fqcn="org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberDerivedFromType"/>
@@ -103,12 +86,8 @@
                 <mml:facet id="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet" fqcn="org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback">
                     <mml:attr name="bookmarkPolicy">NEVER</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                    <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
@@ -129,10 +108,6 @@
                             <mml:attr name="originalText">Name</mml:attr>
                             <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation</mml:attr>
                         </mml:facet>
-                        <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" fqcn="org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation">
-                            <mml:attr name="label">DEFAULT</mml:attr>
-                            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation</mml:attr>
-                        </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet" fqcn="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetDefault">
                             <mml:attr name="inverted">false</mml:attr>
                             <mml:attr name="semantics">REQUIRED</mml:attr>
@@ -154,38 +129,25 @@
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetInferredFromGenerics</mml:attr>
                     <mml:attr name="value">domainapp.modules.simple.dom.impl.SimpleObject</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetDefault">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.ActionDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.ActionDomainEvent.Default</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.eventbus.ActionDomainEvent.Default</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromDefault">
+                    <mml:attr name="eventType">org.apache.isis.applib.events.domain.ActionDomainEvent.Default</mml:attr>
                     <mml:attr name="intent.findByName">EXECUTE</mml:attr>
                     <mml:attr name="methods">public java.util.List&lt;domainapp.modules.simple.dom.impl.SimpleObject&gt; domainapp.modules.simple.dom.impl.SimpleObjects.findByName(java.lang.String)</mml:attr>
                     <mml:attr name="onType">domainapp.modules.simple.dom.impl.SimpleObjects</mml:attr>
                     <mml:attr name="returnType">java.util.List</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromDomainServiceFacet">
-                    <mml:attr name="as">EITHER</mml:attr>
+                    <mml:attr name="contributed">AS_NEITHER</mml:attr>
                     <mml:attr name="derived">true</mml:attr>
                     <mml:attr name="natureOfService">VIEW_MENU_ONLY</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetFallback">
                     <mml:attr name="position">BELOW</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
@@ -207,11 +169,8 @@
                     <mml:attr name="bookmarkPolicy">AS_ROOT</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
@@ -232,10 +191,6 @@
                             <mml:attr name="originalText">Name</mml:attr>
                             <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.NamedFacetForParameterLayoutAnnotation</mml:attr>
                         </mml:facet>
-                        <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet" fqcn="org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation">
-                            <mml:attr name="label">DEFAULT</mml:attr>
-                            <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.param.layout.LabelAtFacetForParameterLayoutAnnotation</mml:attr>
-                        </mml:facet>
                         <mml:facet id="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet" fqcn="org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetDefault">
                             <mml:attr name="inverted">false</mml:attr>
                             <mml:attr name="semantics">REQUIRED</mml:attr>
@@ -257,38 +212,25 @@
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetInferredFromGenerics</mml:attr>
                     <mml:attr name="value">domainapp.modules.simple.dom.impl.SimpleObject</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation" fqcn="org.apache.isis.core.metamodel.facets.actions.action.hidden.HiddenFacetForActionAnnotation">
-                    <mml:attr name="hiding">true</mml:attr>
-                    <mml:attr name="when">ALWAYS</mml:attr>
-                    <mml:attr name="where">NOWHERE</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetForActionAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionDomainEventFacetDefault">
                     <mml:attr name="disabling">true</mml:attr>
                     <mml:attr name="hiding">true</mml:attr>
                     <mml:attr name="validating">true</mml:attr>
-                    <mml:attr name="value">org.apache.isis.applib.services.eventbus.ActionDomainEvent.Default</mml:attr>
+                    <mml:attr name="value">org.apache.isis.applib.events.domain.ActionDomainEvent.Default</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromActionAnnotation">
-                    <mml:attr name="eventType">org.apache.isis.applib.services.eventbus.ActionDomainEvent.Default</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventFromDefault">
+                    <mml:attr name="eventType">org.apache.isis.applib.events.domain.ActionDomainEvent.Default</mml:attr>
                     <mml:attr name="intent.listAll">EXECUTE</mml:attr>
                     <mml:attr name="methods">public java.util.List&lt;domainapp.modules.simple.dom.impl.SimpleObject&gt; domainapp.modules.simple.dom.impl.SimpleObjects.listAll()</mml:attr>
                     <mml:attr name="onType">domainapp.modules.simple.dom.impl.SimpleObjects</mml:attr>
                     <mml:attr name="returnType">java.util.List</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.bulk.BulkFacetForActionAnnotation">
-                    <mml:attr name="value">REGULAR_ONLY</mml:attr>
-                </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromDomainServiceFacet">
-                    <mml:attr name="as">EITHER</mml:attr>
+                    <mml:attr name="contributed">AS_NEITHER</mml:attr>
                     <mml:attr name="derived">true</mml:attr>
                     <mml:attr name="natureOfService">VIEW_MENU_ONLY</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.layout.ActionPositionFacetForActionLayoutAnnotation">
+                <mml:facet id="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetFallback">
                     <mml:attr name="position">BELOW</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet" fqcn="org.apache.isis.core.metamodel.facets.actions.action.semantics.ActionSemanticsFacetForActionAnnotation">
@@ -310,11 +252,8 @@
                     <mml:attr name="bookmarkPolicy">AS_ROOT</mml:attr>
                     <mml:attr name="underlyingFacet">org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacetFallback</mml:attr>
                 </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetFallBackToInline">
-                    <mml:attr name="derived">true</mml:attr>
-                </mml:facet>
-                <mml:facet id="org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet" fqcn="org.apache.isis.core.metamodel.facets.properties.propertylayout.UnchangingFacetOnPropertyFromLayoutProperties">
-                    <mml:attr name="value">false</mml:attr>
+                <mml:facet id="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacet" fqcn="org.apache.isis.core.metamodel.facets.object.promptStyle.PromptStyleFacetAsConfigured">
+                    <mml:attr name="promptStyle">INLINE</mml:attr>
                 </mml:facet>
                 <mml:facet id="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacet" fqcn="org.apache.isis.core.runtime.authorization.standard.AuthorizationFacetImpl">
                     <mml:attr name="disabling">true</mml:attr>
diff --git a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/org.apache.isis.applib.value.LocalResourcePath.xml b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/org.apache.isis.applib.value.LocalResourcePath.xml
new file mode 100644
index 0000000..4da95e3
--- /dev/null
+++ b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/approved/org.apache.isis.applib.value.LocalResourcePath.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<mml:domainClassDto id="org.apache.isis.applib.value.LocalResourcePath" xmlns:mml="http://isis.apache.org/schema/metamodel"/>


[isis] 01/02: Merge remote-tracking branch 'origin/master' into v2

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

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

commit 96c0ae7f8fff807451225902960f93fbe16f3486
Merge: b748f92 813a313
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Oct 11 15:24:27 2018 +0100

    Merge remote-tracking branch 'origin/master' into v2

 .../isis/applib/annotation/Programmatic.java       |    2 +-
 .../fixturescripts/BuilderScriptAbstract.java      |    1 +
 .../applib/fixturescripts/clock/ClockFixture.java  |    2 +
 .../fixturescripts/clock/TickingClockFixture.java  |    2 +
 .../setup/PersonaEnumPersistAll.java               |    3 +
 .../teardown/TeardownFixtureAbstract.java          |    2 +
 .../services/metamodel/MetaModelService.java       |   86 +
 .../metamodel/MetaModelService_Config_Test.java    |   56 +
 .../apache/isis/core/metamodel/facetapi/Facet.java |    2 +-
 .../core/metamodel/facetapi/FacetAbstract.java     |   44 +-
 .../FacetWithAttributes.java}                      |   21 +-
 .../isis/core/metamodel/facets/Annotations.java    |    2 +
 .../core/metamodel/facets/ImperativeFacet.java     |   11 +
 .../facets/SingleClassValueFacetAbstract.java      |    7 +
 .../facets/SingleIntValueFacetAbstract.java        |    8 +
 .../facets/SingleStringValueFacetAbstract.java     |    6 +
 .../metamodel/facets/SingleValueFacetAbstract.java |    7 +-
 .../metamodel/facets/WhereValueFacetAbstract.java  |    9 +
 ...ctionInvocationFacetForDomainEventAbstract.java |   12 +
 .../actions/command/CommandFacetAbstract.java      |    9 +
 .../method/ActionDefaultsFacetViaMethod.java       |   17 +-
 .../PromptStyleFacetForActionLayoutAnnotation.java |    7 +
 .../layout/PromptStyleFacetForActionXml.java       |    8 +
 .../NotContributedFacetAbstract.java               |    7 +
 ...tributedFacetDerivedFromDomainServiceFacet.java |    7 +
 ...viceMenuFacetDerivedFromDomainServiceFacet.java |    7 +
 .../position/ActionPositionFacetAbstract.java      |    7 +
 .../actions/prototype/PrototypeFacetAbstract.java  |    7 +
 .../ActionParameterValidationFacetViaMethod.java   |    6 +
 .../method/ActionValidationFacetViaMethod.java     |    6 +
 .../all/i18n/DescribedAsFacetTranslated.java       |   10 +-
 .../facets/all/i18n/NamedFacetTranslated.java      |    8 +
 .../facets/all/i18n/PluralFacetTranslated.java     |    7 +
 .../facets/all/named/NamedFacetAbstract.java       |    8 +
 .../CollectionAccessorFacetViaAccessor.java        |    6 +
 .../clear/CollectionClearFacetViaAccessor.java     |    6 +
 .../clear/CollectionClearFacetViaClearMethod.java  |    6 +
 ...ectionAddToFacetForDomainEventFromAbstract.java |    7 +
 ...nRemoveFromFacetForDomainEventFromAbstract.java |    8 +
 ...cetOnCollectionDerivedFromImmutableFactory.java |    9 +-
 .../modify/CollectionAddToFacetViaAccessor.java    |    6 +
 .../modify/CollectionAddToFacetViaMethod.java      |    6 +
 .../CollectionRemoveFromFacetViaAccessor.java      |    6 +
 .../modify/CollectionRemoveFromFacetViaMethod.java |    6 +
 .../CollectionValidateAddToFacetViaMethod.java     |    5 +
 ...CollectionValidateRemoveFromFacetViaMethod.java |    6 +
 .../members/cssclass/CssClassFacetAbstract.java    |   16 +-
 .../cssclassfa/CssClassFaFacetAbstract.java        |    5 +
 .../annotprop/DescribedAsFacetOnMemberFactory.java |    1 +
 .../members/disabled/DisabledFacetAbstract.java    |    9 +
 .../disabled/DisabledFacetAbstractImpl.java        |    7 +-
 .../DisableForSessionFacetViaMethod.java           |    6 +
 .../method/DisableForContextFacetViaMethod.java    |    6 +
 .../forsession/HideForSessionFacetViaMethod.java   |    6 +
 .../method/HideForContextFacetViaMethod.java       |    5 +
 .../members/order/MemberOrderFacetAbstract.java    |    8 +
 .../object/audit/AuditableFacetAbstract.java       |    6 +
 .../autocomplete/AutoCompleteFacetAbstract.java    |    8 +
 .../BookmarkPolicyFacetAbstract.java               |    6 +
 .../callbacks/CreatedCallbackFacetViaMethod.java   |    5 +
 .../callbacks/LoadedCallbackFacetViaMethod.java    |    6 +
 .../callbacks/LoadingCallbackFacetViaMethod.java   |    6 +
 .../callbacks/PersistedCallbackFacetViaMethod.java |    6 +
 .../PersistingCallbackFacetViaMethod.java          |    6 +
 .../callbacks/RemovedCallbackFacetViaMethod.java   |    6 +
 .../callbacks/RemovingCallbackFacetViaMethod.java  |    6 +
 .../callbacks/UpdatedCallbackFacetViaMethod.java   |    6 +
 .../callbacks/UpdatingCallbackFacetViaMethod.java  |   10 +-
 .../object/choices/enums/ChoicesFacetEnum.java     |    6 +
 .../choices/enums/EnumValueSemanticsProvider.java  |    5 +
 .../cssclass/method/CssClassFacetMethod.java       |    5 +
 .../object/defaults/DefaultedFacetAbstract.java    |    6 +
 .../method/DisabledObjectFacetViaMethod.java       |    6 +
 .../ImmutableFacetForDomainObjectAnnotation.java   |    8 +
 .../editing/ImmutableFacetFromConfiguration.java   |    7 +
 ...ObjectLayoutAnnotationUsingCssClassUiEvent.java |    8 +
 ...mainObjectLayoutAnnotationUsingIconUiEvent.java |    7 +
 ...ainObjectLayoutAnnotationUsingTitleUiEvent.java |    7 +
 .../domainservice/DomainServiceFacetAbstract.java  |    8 +
 ...conFacetDerivedFromDomainServiceAnnotation.java |    7 +
 .../DomainServiceLayoutFacetAbstract.java          |    8 +
 .../facets/object/facets/FacetsFacetAbstract.java  |    5 +
 .../hidden/method/HiddenObjectFacetViaMethod.java  |    5 +
 .../facets/object/icon/method/IconFacetMethod.java |    6 +
 .../facets/object/mixin/MixinFacetAbstract.java    |    6 +
 .../method/NavigableParentFacetMethod.java         |    7 +
 .../objectspecid/ObjectSpecIdFacetAbstract.java    |    7 +
 ...jectSpecIdFacetDerivedFromClassNameFactory.java |    6 +-
 .../facets/object/paged/PagedFacetAbstract.java    |    6 +
 .../promptStyle/PromptStyleFacetAsConfigured.java  |    8 +
 ....java => PromptStyleFacetFallBackToInline.java} |   16 +-
 .../RecreatableObjectFacetAbstract.java            |    6 +
 .../annotation/TitleFacetViaTitleAnnotation.java   |   23 +
 .../title/methods/TitleFacetViaTitleMethod.java    |    7 +
 .../title/methods/TitleFacetViaToStringMethod.java |    7 +
 ...cationFromMustSatisfyAnnotationOnTypeFacet.java |    5 +
 .../method/ValidateObjectFacetMethod.java          |    6 +
 .../object/value/MaxLengthFacetUsingParser.java    |    9 +-
 .../ValueSemanticsProviderAndFacetAbstract.java    |   11 +
 .../objectvalue/labelat/LabelAtFacetAbstract.java  |    6 +
 .../mandatory/MandatoryFacetAbstract.java          |    9 +
 .../multiline/MultiLineFacetAbstract.java          |    7 +
 .../MustSatisfySpecificationFacetAbstract.java     |    5 +
 .../RenderedAdjustedFacetAbstract.java             |    6 +
 .../ActionParameterAutoCompleteFacetViaMethod.java |    8 +
 ...rameterFromJavaxValidationDigitsAnnotation.java |    9 +
 .../ActionParameterChoicesFacetAbstract.java       |    1 +
 .../method/ActionChoicesFacetViaMethod.java        |    7 +
 .../ActionParameterChoicesFacetViaMethod.java      |    7 +
 ...ParameterDefaultFacetDerivedFromTypeFacets.java |    6 +
 ...arameterDefaultFacetDerivedFromTypeFactory.java |    2 +-
 .../ActionParameterDefaultsFacetViaMethod.java     |    6 +
 ...calLengthFacetForParameterLayoutAnnotation.java |   13 +-
 .../regex/RegExFacetForParameterAnnotation.java    |    5 +
 .../TypicalLengthFacetOnParameterAnnotation.java   |    7 +
 ...picalLengthFacetOnParameterDerivedFromType.java |    7 +
 .../PropertyOrCollectionAccessorFacetAbstract.java |    6 +
 .../accessor/PropertyAccessorFacetViaAccessor.java |    6 +
 .../method/PropertyAutoCompleteFacetMethod.java    |    9 +
 ...ropertyFromJavaxValidationDigitsAnnotation.java |    9 +
 .../method/PropertyChoicesFacetViaMethod.java      |    7 +
 ...pertyDefaultFacetDerivedFromDefaultedFacet.java |    6 +
 .../method/PropertyDefaultFacetViaMethod.java      |    6 +
 ...FacetOnPropertyDerivedFromImmutableFactory.java |   10 +-
 .../modify/PropertyDomainEventFacetAbstract.java   |    8 +
 ...tySetterOrClearFacetForDomainEventAbstract.java |   10 +-
 .../RegExFacetForPatternAnnotationOnProperty.java  |    7 +
 .../regex/RegExFacetForPropertyAnnotation.java     |    6 +
 ...romptStyleFacetForPropertyLayoutAnnotation.java |    7 +
 .../PromptStyleFacetForPropertyXml.java            |    8 +
 ...icalLengthFacetForPropertyLayoutAnnotation.java |   14 +-
 .../TypicalLengthFacetForPropertyXml.java          |   15 +-
 .../TypicalLengthFacetOnPropertyAnnotation.java    |    7 +
 ...ypicalLengthFacetOnPropertyDerivedFromType.java |    9 +-
 .../clear/PropertyClearFacetViaClearMethod.java    |    6 +
 .../clear/PropertyClearFacetViaSetterMethod.java   |    6 +
 ...PropertyInitializationFacetViaSetterMethod.java |    5 +
 .../modify/PropertySetterFacetViaModifyMethod.java |    5 +
 .../modify/PropertySetterFacetViaSetterMethod.java |    6 +
 .../method/PropertyValidateFacetViaMethod.java     |    5 +
 .../ValueSemanticsProviderAbstractTemporal.java    |    5 +
 .../BigDecimalValueSemanticsProvider.java          |    5 +
 .../BigIntegerValueSemanticsProvider.java          |    5 +
 .../bytes/ByteValueSemanticsProviderAbstract.java  |    6 +
 .../DoubleValueSemanticsProviderAbstract.java      |    6 +
 .../FloatValueSemanticsProviderAbstract.java       |    5 +
 .../integer/IntValueSemanticsProviderAbstract.java |    5 +
 .../longs/LongValueSemanticsProviderAbstract.java  |    5 +
 .../value/money/MoneyValueSemanticsProvider.java   |    6 +
 .../ShortValueSemanticsProviderAbstract.java       |    6 +
 .../interactions/InteractionAdvisorFacet.java      |    6 +
 ...onParameterDefaultsAndChoicesPostProcessor.java |  337 ++-
 ...arameterChoicesFacetFromParentedCollection.java |    5 +
 .../services/metamodel/MetaModelExporter.java      |  555 ++++
 .../metamodel/MetaModelServiceDefault.java         |   19 +-
 .../specloader/SpecificationCacheDefault.java      |   27 +-
 .../metamodel/specloader/SpecificationLoader.java  |   26 +-
 .../specimpl/ObjectActionContributee.java          |   11 +-
 .../specimpl/ObjectActionParameterAbstract.java    |    2 +-
 .../ObjectActionParameterContributeeAbstract.java  |   15 +-
 .../specloader/specimpl/ObjectMemberAbstract.java  |    3 +
 .../OneToManyActionParameterContributee.java       |    5 +-
 .../specimpl/OneToManyAssociationContributee.java  |    5 +
 .../specimpl/OneToManyAssociationMixedIn.java      |   16 +-
 .../OneToOneActionParameterContributee.java        |    5 +-
 .../specimpl/OneToOneAssociationContributee.java   |    5 +
 .../specimpl/dflt/ObjectSpecificationDefault.java  |   60 +-
 .../JdoDatastoreIdentityFacetAbstract.java         |    7 +
 .../JdoPersistenceCapableFacetAbstract.java        |    9 +
 .../facets/object/query/JdoQueryFacetAbstract.java |    6 +
 .../BigDecimalFacetDerivedFromJdoColumn.java       |   14 +-
 .../dflt/ProgrammingModelFacetsJava5.java          |   29 +-
 .../specloader/SpecificationCacheDefaultTest.java  |    6 +-
 .../system/session/IsisSessionFactoryBuilder.java  |    2 +-
 .../IsisComponentProvider.java                     |   71 +-
 .../IsisComponentProvider_within_Test.java         |    2 +-
 core/schema/pom.xml                                |    1 +
 .../resources/org/apache/isis/schema/bindings.xml  |   13 +
 .../apache/isis/schema/metamodel/metamodel-1.0.xsd |  301 +++
 example/application/simpleapp/application/pom.xml  |   15 +-
 .../integtests/mml/MetaModelService_IntegTest.java |  149 ++
 ...omainAppFixtureScriptsSpecificationProvider.xml |   50 +
 ...application.fixture.scenarios.DomainAppDemo.xml |  304 +++
 ...plication.services.homepage.HomePageService.xml |   49 +
 ...ication.services.homepage.HomePageViewModel.xml |  388 +++
 ...ainapp.modules.simple.dom.impl.SimpleObject.xml | 1039 ++++++++
 ...inapp.modules.simple.dom.impl.SimpleObjects.xml |  328 +++
 .../integtests/mml/approved/java.lang.Long.xml     |    2 +
 .../integtests/mml/approved/java.lang.Object.xml   |    2 +
 .../integtests/mml/approved/java.lang.String.xml   |    2 +
 .../integtests/mml/approved/java.net.URL.xml       |    2 +
 .../integtests/mml/approved/java.sql.Timestamp.xml |    2 +
 .../integtests/mml/approved/java.util.List.xml     |    2 +
 ....applib.services.layout.LayoutService$Style.xml |    2 +
 .../approved/org.apache.isis.applib.value.Clob.xml |    2 +
 .../application/integtests/mml/approved/void.xml   |    2 +
 .../application/integtests/mml/received/.gitignore |    1 +
 .../integtests/{ => smoke}/Smoke_IntegTest.java    |    3 +-
 ...MetaModelService_IntegTest.exports.approved.xml | 2743 ++++++++++++++++++++
 .../application/simpleapp/module-simple/pom.xml    |    8 +-
 example/application/simpleapp/pom.xml              |    7 +
 example/application/simpleapp/webapp/pom.xml       |    8 +
 202 files changed, 7662 insertions(+), 220 deletions(-)

diff --cc core/applib/src/main/java/org/apache/isis/applib/fixturescripts/BuilderScriptAbstract.java
index c0a0776,ff5fa4d..58aa8f8
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/BuilderScriptAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/BuilderScriptAbstract.java
@@@ -20,11 -20,13 +20,12 @@@ package org.apache.isis.applib.fixtures
  
  import java.util.List;
  
 -import com.google.common.collect.Lists;
 -
  import org.apache.isis.applib.annotation.Programmatic;
 +import org.apache.isis.commons.internal.collections._Lists;
  
+ @Programmatic
  public abstract class BuilderScriptAbstract<T,F extends BuilderScriptAbstract<T,F>>
 -        extends FixtureScript implements WithPrereqs<T,F>, FixtureScriptWithExecutionStrategy {
 +extends FixtureScript implements WithPrereqs<T,F>, FixtureScriptWithExecutionStrategy {
  
      private final FixtureScripts.MultipleExecutionStrategy executionStrategy;
  
diff --cc core/applib/src/main/java/org/apache/isis/applib/fixturescripts/clock/TickingClockFixture.java
index 3ec3821,c4d3720..13dea78
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/clock/TickingClockFixture.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/clock/TickingClockFixture.java
@@@ -31,11 -32,12 +32,12 @@@ import org.apache.isis.applib.fixturesc
  import org.apache.isis.applib.fixturescripts.FixtureScripts;
  
  
+ @Programmatic
  public class TickingClockFixture
 -        extends FixtureScript
 -        implements FixtureScriptWithExecutionStrategy {
 +extends FixtureScript
 +implements FixtureScriptWithExecutionStrategy {
  
 -    //region > date property
 +    // -- date property
      private String date;
      public String getDate() {
          return date;
diff --cc core/applib/src/main/java/org/apache/isis/applib/fixturescripts/setup/PersonaEnumPersistAll.java
index b398ece,55061a5..be43cee
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/setup/PersonaEnumPersistAll.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/setup/PersonaEnumPersistAll.java
@@@ -20,16 -20,19 +20,19 @@@ package org.apache.isis.applib.fixtures
  
  import java.util.List;
  
 -import com.google.common.collect.Lists;
+ 
+ import org.apache.isis.applib.annotation.Programmatic;
  import org.apache.isis.applib.fixturescripts.BuilderScriptAbstract;
  import org.apache.isis.applib.fixturescripts.FixtureScript;
  import org.apache.isis.applib.fixturescripts.FixtureScriptWithExecutionStrategy;
  import org.apache.isis.applib.fixturescripts.FixtureScripts;
  import org.apache.isis.applib.fixturescripts.PersonaWithBuilderScript;
 +import org.apache.isis.commons.internal.collections._Lists;
  
+ @Programmatic
  public class PersonaEnumPersistAll<E extends Enum<E> & PersonaWithBuilderScript<T,F>, T, F extends BuilderScriptAbstract<T,F>>
 -        extends FixtureScript
 -        implements FixtureScriptWithExecutionStrategy {
 +extends FixtureScript
 +implements FixtureScriptWithExecutionStrategy {
  
      private final Class<E> personaEnumClass;
  
diff --cc core/applib/src/main/java/org/apache/isis/applib/fixturescripts/teardown/TeardownFixtureAbstract.java
index 3792802,b9d131a..a6577ad
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/teardown/TeardownFixtureAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/teardown/TeardownFixtureAbstract.java
@@@ -21,13 -21,16 +21,15 @@@ package org.apache.isis.applib.fixtures
  import javax.inject.Inject;
  import javax.jdo.metadata.TypeMetadata;
  
 -import com.google.common.base.Strings;
 -
+ import org.apache.isis.applib.annotation.Programmatic;
  import org.apache.isis.applib.fixturescripts.FixtureScript;
  import org.apache.isis.applib.services.jdosupport.IsisJdoSupport;
 +import org.apache.isis.commons.internal.base._Strings;
  
+ @Programmatic
  public abstract class TeardownFixtureAbstract extends FixtureScript {
  
 -    protected void deleteFrom(final Class cls) {
 +    protected void deleteFrom(final Class<?> cls) {
          preDeleteFrom(cls);
          final TypeMetadata metadata = isisJdoSupport.getJdoPersistenceManager().getPersistenceManagerFactory()
                  .getMetadata(cls.getName());
diff --cc core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
index 5550093,3263ba7..79593ac
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelService.java
@@@ -18,12 -18,10 +18,17 @@@
   */
  package org.apache.isis.applib.services.metamodel;
  
++import java.util.Collections;
+ import java.util.List;
+ 
 +import org.apache.isis.applib.AppManifest;
 +import org.apache.isis.applib.AppManifest2;
  import org.apache.isis.applib.annotation.DomainObject;
  import org.apache.isis.applib.annotation.Programmatic;
 +import org.apache.isis.applib.services.bookmark.Bookmark;
 +import org.apache.isis.applib.services.command.CommandDtoProcessor;
++import org.apache.isis.commons.internal.collections._Lists;
++import org.apache.isis.schema.metamodel.v1.MetamodelDto;
  
  /**
   * This service provides a formal API into Isis' metamodel.
@@@ -58,77 -56,7 +63,158 @@@ public interface MetaModelService 
       * </p>
       */
      @Programmatic
 -    List<DomainMember> export();
 +    DomainModel getDomainModel();
  
 +    @Programmatic
 +    Sort sortOf(Class<?> domainType, Mode mode);
 +
 +    @Programmatic
 +    Sort sortOf(Bookmark bookmark, Mode mode);
 +
 +    enum Sort {
 +        VIEW_MODEL,
 +        JDO_ENTITY,
 +        DOMAIN_SERVICE,
 +        MIXIN,
 +        VALUE,
 +        COLLECTION,
 +        UNKNOWN;
 +
 +        public boolean isDomainService() {
 +            return this == DOMAIN_SERVICE;
 +        }
 +
 +        public boolean isMixin() {
 +            return this == MIXIN;
 +        }
 +
 +        public boolean isViewModel() {
 +            return this == VIEW_MODEL;
 +        }
 +
 +        public boolean isValue() {
 +            return this == VALUE;
 +        }
 +
 +        public boolean isCollection() {
 +            return this == COLLECTION;
 +        }
 +
 +        public boolean isJdoEntity() {
 +            return this == JDO_ENTITY;
 +        }
 +
 +        public boolean isUnknown() {
 +            return this == UNKNOWN;
 +        }
 +
 +    }
 +
 +    enum Mode {
 +        /**
 +         * If the {@link #sortOf(Class, Mode) sort of} object type is unknown, then throw an exception.
 +         */
 +        STRICT,
 +        /**
 +         * If the {@link #sortOf(Class, Mode) sort of} object type is unknown, then return {@link Sort#UNKNOWN}.
 +         */
 +        RELAXED
 +    }
 +
 +    /**
 +     * @return as {@link #getAppManifest()}, downcasted (else null).
 +     */
 +    @Programmatic
 +    AppManifest2 getAppManifest2();
 +
 +    /**
 +     * @return the {@link AppManifest} used to bootstrap the application.
 +     */
 +    @Programmatic
 +    AppManifest getAppManifest();
 +
 +    @Programmatic
 +    CommandDtoProcessor commandDtoProcessorFor(String memberIdentifier);
 +
++    public static class Config {
++
++        private static final int IGNORE_NOOP_FACETS = 1;
++        private static final int IGNORE_INTERFACES = 2;
++        private static final int IGNORE_ABSTRACT_CLASSES = 4;
++        private static final int IGNORE_BUILT_IN_VALUE_TYPES = 8;
++        private static final int IGNORE_MIXINS = 16;
++
++        private final int mask;
++        private final List<String> packagePrefixes;
++
++        public Config() {
++            this(0, Collections.emptyList());
++        }
++        private Config(final int mask, final List<String> packagePrefixes) {
++            this.mask = mask;
++            this.packagePrefixes = Collections.unmodifiableList(packagePrefixes);
++        }
++        private Config(final int mask) {
++            this(mask, null);
++        }
++
++
++        public Config withIgnoreNoop() {
++            return newConfigWith(IGNORE_NOOP_FACETS);
++        }
++
++        public Config withIgnoreInterfaces() {
++            return newConfigWith(IGNORE_INTERFACES);
++        }
++        public Config withIgnoreAbstractClasses() {
++            return newConfigWith(IGNORE_ABSTRACT_CLASSES);
++        }
++        public Config withIgnoreBuiltInValueTypes() {
++            return newConfigWith(IGNORE_BUILT_IN_VALUE_TYPES);
++        }
++        public Config withIgnoreMixins() {
++            return newConfigWith(IGNORE_MIXINS);
++        }
++
++        private Config newConfigWith(final int x) {
++            return new Config(mask | x, packagePrefixes);
++        }
++
++        public Config withPackagePrefix(final String packagePrefix) {
++            final List<String> prefixes = _Lists.newArrayList(this.packagePrefixes);
++            prefixes.add(packagePrefix);
++            return new Config(mask, prefixes);
++        }
++
++        public boolean isIgnoreNoop() {
++            return hasFlag(IGNORE_NOOP_FACETS);
++        }
++
++        public boolean isIgnoreInterfaces() {
++            return hasFlag(IGNORE_INTERFACES);
++        }
++
++        public boolean isIgnoreAbstractClasses() {
++            return hasFlag(IGNORE_ABSTRACT_CLASSES);
++        }
++        public boolean isIgnoreBuiltInValueTypes() {
++            return hasFlag(IGNORE_BUILT_IN_VALUE_TYPES);
++        }
++        public boolean isIgnoreMixins() {
++            return hasFlag(IGNORE_MIXINS);
++        }
++
++        public List<String> getPackagePrefixes() {
++            return packagePrefixes;
++        }
++
++        private boolean hasFlag(final int x) {
++            return (mask & x) == x;
++        }
++
++    }
++
++    @Programmatic
++    MetamodelDto exportMetaModel(final Config config);
+ 
  }
diff --cc core/applib/src/test/java/org/apache/isis/applib/services/metamodel/MetaModelService_Config_Test.java
index 0000000,0000000..a846d89
new file mode 100644
--- /dev/null
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/metamodel/MetaModelService_Config_Test.java
@@@ -1,0 -1,0 +1,56 @@@
++package org.apache.isis.applib.services.metamodel;
++
++import org.junit.Test;
++
++import static org.hamcrest.Matchers.emptyCollectionOf;
++import static org.hamcrest.Matchers.equalTo;
++import static org.hamcrest.Matchers.is;
++import static org.junit.Assert.assertNotSame;
++import static org.junit.Assert.assertThat;
++
++public class MetaModelService_Config_Test {
++
++    @Test
++    public void ignore_noop() throws Exception {
++
++        // when
++        MetaModelService.Config config = new MetaModelService.Config();
++        // then
++        assertThat(config.isIgnoreNoop(), is(equalTo(false)));
++
++        // and when
++        MetaModelService.Config config2 = config.withIgnoreNoop();
++
++        // then
++        assertNotSame(config, config2);
++        assertThat(config.isIgnoreNoop(), is(equalTo(false)));
++        assertThat(config2.isIgnoreNoop(), is(equalTo(true)));
++    }
++
++    @Test
++    public void packages_prefixes() throws Exception {
++
++        // when
++        MetaModelService.Config config = new MetaModelService.Config();
++        // then
++        assertThat(config.getPackagePrefixes(), is(emptyCollectionOf(String.class)));
++
++        // and when
++        MetaModelService.Config config2 = config.withPackagePrefix("org.foo");
++
++        // then
++        assertNotSame(config, config2);
++        assertThat(config2.getPackagePrefixes().size(), is(equalTo(1)));
++        assertThat(config2.getPackagePrefixes().get(0), is(equalTo("org.foo")));
++
++        // and when
++        MetaModelService.Config config3 = config2.withPackagePrefix("org.bar");
++
++        // then
++        assertNotSame(config, config3);
++        assertNotSame(config2, config3);
++        assertThat(config3.getPackagePrefixes().size(), is(equalTo(2)));
++        assertThat(config3.getPackagePrefixes().get(0), is(equalTo("org.foo")));
++        assertThat(config3.getPackagePrefixes().get(1), is(equalTo("org.bar")));
++    }
++}
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
index fdaf4a2,0d3c2d9..2e0d10f
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetAbstract.java
@@@ -19,13 -19,16 +19,15 @@@
  
  package org.apache.isis.core.metamodel.facetapi;
  
- import static org.apache.isis.commons.internal.base._With.requires;
- 
+ import java.util.Map;
 +import java.util.Objects;
 +import java.util.stream.Stream;
  
  import org.apache.isis.core.commons.ensure.Ensure;
 -import org.apache.isis.core.commons.matchers.IsisMatchers;
  
 -import static org.apache.isis.core.commons.ensure.Ensure.ensureThatArg;
 -import static org.hamcrest.CoreMatchers.is;
 -import static org.hamcrest.CoreMatchers.not;
 -import static org.hamcrest.CoreMatchers.nullValue;
++import static org.apache.isis.commons.internal.base._With.requires;
++
+ 
  public abstract class FacetAbstract implements Facet {
  
      public enum Derivation {
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetWithAttributes.java
index e0a25da,1c208fc..823bdf4
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetWithAttributes.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facetapi/FacetWithAttributes.java
@@@ -17,21 -17,16 +17,14 @@@
   *  under the License.
   */
  
- package org.apache.isis.core.metamodel.facets.object.promptStyle;
+ package org.apache.isis.core.metamodel.facetapi;
  
- import org.apache.isis.applib.annotation.PromptStyle;
- import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+ import java.util.Map;
  
- public class PromptStyleFacetAsConfigured extends PromptStyleFacetAbstract {
- 
-     private final PromptStyle promptStyle;
 -import org.apache.isis.applib.services.metamodel.MetaModelService6;
--
-     public PromptStyleFacetAsConfigured(final PromptStyle promptStyle, final FacetHolder holder) {
-         super(holder);
-         this.promptStyle = promptStyle;
-     }
+ /**
 - * For serialization of metamodel into XML, see {@link org.apache.isis.applib.services.metamodel.MetaModelService6#exportMetaModel(MetaModelService6.Config)}.
++ * For serialization of metamodel into XML, see {@link org.apache.isis.applib.services.metamodel.MetaModelService#exportMetaModel(MetaModelService.Config)}.
+  */
+ public interface FacetWithAttributes {
  
-     @Override public PromptStyle value() {
-         return promptStyle;
-     }
+     void appendAttributesTo(Map<String,Object> attributeMap);
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
index b104d13,dcf04d9..7032cb5
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
@@@ -583,8 -282,8 +584,9 @@@ public final class Annotations  
                      PropertyLayout.class,
                      Collection.class,
                      CollectionLayout.class,
+                     Programmatic.class,
                      MemberOrder.class,
 +                    Pattern.class,
                      javax.annotation.Nullable.class,
                      Title.class,
                      XmlJavaTypeAdapter.class,
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
index acfbf08,7db9584..e92e10c
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ImperativeFacet.java
@@@ -21,11 -21,13 +21,12 @@@ package org.apache.isis.core.metamodel.
  
  import java.lang.reflect.Method;
  import java.util.List;
 +import java.util.function.Predicate;
 +import java.util.stream.Stream;
+ import java.util.Map;
  
 -import com.google.common.collect.Lists;
 -
 -import org.apache.isis.applib.filter.Filter;
 -import org.apache.isis.applib.filter.Filters;
  import org.apache.isis.applib.services.wrapper.WrapperFactory;
 +import org.apache.isis.commons.internal.collections._Lists;
  import org.apache.isis.core.commons.lang.ObjectExtensions;
  import org.apache.isis.core.metamodel.facetapi.DecoratingFacet;
  import org.apache.isis.core.metamodel.facetapi.Facet;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhereValueFacetAbstract.java
index 2c2a979,0000000..87cf046
mode 100644,000000..100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhereValueFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhereValueFacetAbstract.java
@@@ -1,47 -1,0 +1,56 @@@
 +/*
 + *  Licensed to the Apache Software Foundation (ASF) under one
 + *  or more contributor license agreements.  See the NOTICE file
 + *  distributed with this work for additional information
 + *  regarding copyright ownership.  The ASF licenses this file
 + *  to you under the Apache License, Version 2.0 (the
 + *  "License"); you may not use this file except in compliance
 + *  with the License.  You may obtain a copy of the License at
 + *
 + *        http://www.apache.org/licenses/LICENSE-2.0
 + *
 + *  Unless required by applicable law or agreed to in writing,
 + *  software distributed under the License is distributed on an
 + *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 + *  KIND, either express or implied.  See the License for the
 + *  specific language governing permissions and limitations
 + *  under the License.
 + */
 +
 +package org.apache.isis.core.metamodel.facets;
 +
++import java.util.Map;
++
 +import org.apache.isis.applib.annotation.Where;
 +import org.apache.isis.core.metamodel.facetapi.Facet;
 +import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 +import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 +
 +public abstract class WhereValueFacetAbstract extends FacetAbstract implements WhereValueFacet {
 +    private final Where where;
 +
 +    public WhereValueFacetAbstract(
 +            final Class<? extends Facet> facetType,
 +            final FacetHolder holder,
 +            final Where where) {
 +        super(facetType, holder, Derivation.NOT_DERIVED);
 +        this.where = where;
 +    }
 +
 +    @Override
 +    public Where where() {
 +        return where;
 +    }
 +
 +    @Override
 +    protected String toStringValues() {
 +        return super.toStringValues() + "; where =" + where.getFriendlyName();
 +    }
++
++    @Override
++    public void appendAttributesTo(final Map<String, Object> attributeMap) {
++        super.appendAttributesTo(attributeMap);
++        attributeMap.put("where", where);
++    }
++
 +}
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index e96e02e,11d6253..af036a4
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@@ -29,9 -26,11 +29,11 @@@ import java.util.Arrays
  import java.util.Collection;
  import java.util.Collections;
  import java.util.List;
 +import java.util.function.Consumer;
 +import java.util.stream.Collectors;
 +import java.util.stream.Stream;
+ import java.util.Map;
 -import java.util.concurrent.Callable;
+ 
 -import com.google.common.base.Strings;
 -import com.google.common.collect.Lists;
  
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/CommandFacetAbstract.java
index ad63162,5444bae..ca55e8e
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/CommandFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/command/CommandFacetAbstract.java
@@@ -19,6 -19,10 +19,8 @@@
  
  package org.apache.isis.core.metamodel.facets.actions.command;
  
+ import java.util.Map;
+ 
 -import org.apache.isis.applib.annotation.Command.ExecuteIn;
 -import org.apache.isis.applib.annotation.Command.Persistence;
  import org.apache.isis.applib.annotation.CommandExecuteIn;
  import org.apache.isis.applib.annotation.CommandPersistence;
  import org.apache.isis.applib.services.command.CommandDtoProcessor;
@@@ -111,4 -115,11 +113,11 @@@ public abstract class CommandFacetAbstr
          }
      }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
 -        attributeMap.put("executeIn", CommandExecuteIn.from(executeIn));
 -        attributeMap.put("persistence", CommandPersistence.from(persistence));
++        attributeMap.put("executeIn", executeIn);
++        attributeMap.put("persistence", persistence);
+         attributeMap.put("disabled", isDisabled());
+         attributeMap.put("dtoProcessor", processor);
+     }
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
index 205fe4a,d4d553e..6f9bb4c
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/PromptStyleFacetForActionLayoutAnnotation.java
@@@ -19,7 -19,7 +19,8 @@@
  
  package org.apache.isis.core.metamodel.facets.actions.layout;
  
 +import java.util.List;
+ import java.util.Map;
  
  import org.apache.isis.applib.annotation.ActionLayout;
  import org.apache.isis.applib.annotation.PromptStyle;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/NotContributedFacetAbstract.java
index a744725,242c369..5c3c29b
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/NotContributedFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/NotContributedFacetAbstract.java
@@@ -19,7 -19,9 +19,9 @@@
  
  package org.apache.isis.core.metamodel.facets.actions.notcontributed;
  
+ import java.util.Map;
+ 
 -import org.apache.isis.applib.annotation.NotContributed.As;
 +import org.apache.isis.applib.annotation.Contributed;
  import org.apache.isis.core.metamodel.facetapi.Facet;
  import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@@ -59,8 -55,12 +61,13 @@@ public abstract class NotContributedFac
  
      @Override
      public boolean toAssociations() {
 -        return value() == As.EITHER || value() == As.ASSOCIATION;
 +        // not contributed to associations if...
 +        return contributed() == Contributed.AS_NEITHER || contributed() == Contributed.AS_ACTION;
      }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
 -        attributeMap.put("as", as);
++        attributeMap.put("contributed", contributed);
+     }
+ 
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacet.java
index 4e69583,a4c010c..e00f676
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromDomainServiceFacet.java
@@@ -18,9 -18,10 +18,10 @@@
   */
  package org.apache.isis.core.metamodel.facets.actions.notcontributed.derived;
  
+ import java.util.Map;
  
 +import org.apache.isis.applib.annotation.Contributed;
  import org.apache.isis.applib.annotation.NatureOfService;
 -import org.apache.isis.applib.annotation.NotContributed;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacetAbstract;
  
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacet.java
index 1830eeb,3011fb7..9526ddb
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notinservicemenu/derived/NotInServiceMenuFacetDerivedFromDomainServiceFacet.java
@@@ -19,8 -19,10 +19,10 @@@
  package org.apache.isis.core.metamodel.facets.actions.notinservicemenu.derived;
  
  
+ import java.util.Map;
+ 
  import org.apache.isis.applib.annotation.NatureOfService;
 -import org.apache.isis.applib.events.VisibilityEvent;
 +import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.NotInServiceMenuFacetAbstract;
  import org.apache.isis.core.metamodel.interactions.VisibilityContext;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/prototype/PrototypeFacetAbstract.java
index 58cd62e,79dd129..e743413
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/prototype/PrototypeFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/prototype/PrototypeFacetAbstract.java
@@@ -19,7 -19,9 +19,9 @@@
  
  package org.apache.isis.core.metamodel.facets.actions.prototype;
  
 +import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
+ import java.util.Map;
+ 
 -import org.apache.isis.applib.events.VisibilityEvent;
  import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
  import org.apache.isis.core.metamodel.facetapi.Facet;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
index 6b8dc5e,e4bcfbd..219bb31
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
@@@ -22,8 -22,10 +22,9 @@@ package org.apache.isis.core.metamodel.
  import java.lang.reflect.Method;
  import java.util.Collections;
  import java.util.List;
+ import java.util.Map;
  
 -import com.google.common.collect.Lists;
 -
 +import org.apache.isis.commons.internal.collections._Lists;
  import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
  import org.apache.isis.core.commons.config.IsisConfiguration;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetViaAccessor.java
index a83fb7a,bf23715..83d1ffe
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/clear/CollectionClearFacetViaAccessor.java
@@@ -23,9 -23,10 +23,10 @@@ import java.lang.reflect.Method
  import java.util.Collection;
  import java.util.Collections;
  import java.util.List;
+ import java.util.Map;
  
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 -import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 +import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.ImperativeFacet;
  import org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacetAbstract;
@@@ -74,8 -74,13 +75,13 @@@ public class CollectionClearFacetViaAcc
      // Dependencies (from constructor)
      // /////////////////////////////////////////////////////////
  
 -    protected AdapterManager getAdapterManager() {
 -        return adapterManager;
 +    protected ObjectAdapterProvider getObjectAdapterProvider() {
 +        return adapterProvider;
      }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         ImperativeFacet.Util.appendAttributesTo(this, attributeMap);
+     }
+ 
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
index 7059ea5,1b67a62..1d33b5e
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
@@@ -19,12 -19,10 +19,13 @@@
  
  package org.apache.isis.core.metamodel.facets.collections.collection.modify;
  
 +import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
 +
+ import java.util.Map;
  import java.util.Set;
 -import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
 -import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
 +
 +import org.apache.isis.applib.events.domain.AbstractDomainEvent;
 +import org.apache.isis.applib.events.domain.CollectionDomainEvent;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
  import org.apache.isis.core.metamodel.facetapi.Facet;
@@@ -48,6 -46,6 +49,7 @@@ implements CollectionAddToFacet 
  
      private final PropertyOrCollectionAccessorFacet getterFacet;
      private final CollectionAddToFacet collectionAddToFacet;
++    // TODO: seems to be unused, remove?
      private final CollectionDomainEventFacetAbstract collectionDomainEventFacet;
  
      public CollectionAddToFacetForDomainEventFromAbstract(
@@@ -111,9 -108,21 +113,14 @@@
                  referencedObject);
      }
  
 -    private Class<? extends CollectionDomainEvent<?, ?>> eventType() {
 -        return value();
 +    public <S, T> Class<? extends CollectionDomainEvent<S, T>> getEventType() {
 +        return uncheckedCast(value());
      }
  
 -    /**
 -     * Optional hook to allow the facet implementation for the deprecated {@link org.apache.isis.applib.annotation.PostsCollectionAddedToEvent} annotation
 -     * to discard the event if of a different type.
 -     */
 -    protected CollectionDomainEvent<?, ?> verify(CollectionDomainEvent<?, ?> event) {
 -        return event;
 -    }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         attributeMap.put("getterFacet", getterFacet);
+         attributeMap.put("collectionAddToFacet", collectionAddToFacet);
+     }
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
index d38bb50,1418f84..60f4882
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
@@@ -19,13 -19,11 +19,15 @@@
  
  package org.apache.isis.core.metamodel.facets.collections.collection.modify;
  
 +import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
 +
  import java.util.Collection;
 +
 +import org.apache.isis.applib.events.domain.AbstractDomainEvent;
 +import org.apache.isis.applib.events.domain.CollectionDomainEvent;
 +import org.apache.isis.commons.internal.base._Casts;
+ import java.util.Map;
+ 
 -import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
 -import org.apache.isis.applib.services.eventbus.CollectionDomainEvent;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
  import org.apache.isis.core.metamodel.facetapi.Facet;
@@@ -47,6 -45,6 +49,7 @@@ implements CollectionRemoveFromFacet 
  
      private final PropertyOrCollectionAccessorFacet getterFacet;
      private final CollectionRemoveFromFacet collectionRemoveFromFacet;
++    // TODO: seems to be unused, remove?
      private final CollectionDomainEventFacetAbstract collectionDomainEventFacet;
  
      private final DomainEventHelper domainEventHelper;
@@@ -110,8 -108,21 +113,13 @@@
                  referencedObject);
      }
  
 -    private Class<? extends CollectionDomainEvent<?, ?>> eventType() {
 -        return value();
 -    }
 -
 -    /**
 -     * Optional hook to allow the facet implementation for the deprecated {@link org.apache.isis.applib.annotation.PostsCollectionRemovedFromEvent} annotation
 -     * to discard the event if of a different type.
 -     */
 -    protected CollectionDomainEvent<?, ?> verify(CollectionDomainEvent<?, ?> event) {
 -        return event;
 +    public <S, T> Class<? extends CollectionDomainEvent<S, T>> getEventType() {
 +        return _Casts.uncheckedCast(value());
      }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         attributeMap.put("getterFacet", getterFacet);
+         attributeMap.put("collectionRemoveFromFacet", collectionRemoveFromFacet);
+     }
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java
index 0b0272e,ed69c23..e89a158
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclass/CssClassFacetAbstract.java
@@@ -38,7 -40,12 +41,12 @@@ public abstract class CssClassFacetAbst
      }
  
      @Override
 -    public String cssClass(final ObjectAdapter objectAdapter) {
 +    public String cssClass(final ManagedObject objectAdapter) {
-         return value;
+         return cssClass;
+     }
+ 
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         attributeMap.put("cssClass", cssClass);
      }
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaFacetAbstract.java
index 36c3f42,07d3c6f..72da98c
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/cssclassfa/CssClassFaFacetAbstract.java
@@@ -17,13 -17,14 +17,14 @@@
  
  package org.apache.isis.core.metamodel.facets.members.cssclassfa;
  
+ import java.util.Map;
  import java.util.Set;
  import java.util.regex.Pattern;
 +import java.util.stream.Collectors;
 +import java.util.stream.Stream;
  
 -import com.google.common.base.Joiner;
 -import com.google.common.base.Splitter;
 -import com.google.common.collect.Sets;
 -
 +import org.apache.isis.commons.internal.base._Strings;
 +import org.apache.isis.commons.internal.collections._Sets;
  import org.apache.isis.core.metamodel.facetapi.Facet;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.SingleStringValueFacetAbstract;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java
index d00c1ed,55b87d0..58f56e0
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/describedas/annotprop/DescribedAsFacetOnMemberFactory.java
@@@ -36,7 -46,13 +36,8 @@@ public class DescribedAsFacetOnMemberFa
      @Override
      public void process(final ProcessMethodContext processMethodContext) {
  
 -        DescribedAsFacet facet = createFromMetadataPropertiesIfPossible(processMethodContext);
 -        
 -        if(facet == null) {
 -            facet = validator.flagIfPresent(createFromAnnotationIfPossible(processMethodContext), processMethodContext);
 -        }
 -
 +        DescribedAsFacet facet = createFromAnnotationOnReturnTypeIfPossible(processMethodContext);
+         // facet derived from type moved to post-processor
  
          // no-op if null
          FacetUtil.addFacet(facet);
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java
index af11e2e,967bc42..1524db7
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstract.java
@@@ -19,14 -19,17 +19,16 @@@
  
  package org.apache.isis.core.metamodel.facets.members.disabled;
  
+ import java.util.Map;
+ 
 -import org.apache.isis.applib.annotation.When;
  import org.apache.isis.applib.annotation.Where;
 -import org.apache.isis.applib.events.UsabilityEvent;
 -import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 +import org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
  import org.apache.isis.core.metamodel.facetapi.Facet;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 -import org.apache.isis.core.metamodel.facets.WhenAndWhereValueFacetAbstract;
 +import org.apache.isis.core.metamodel.facets.WhereValueFacetAbstract;
  import org.apache.isis.core.metamodel.interactions.ActionUsabilityContext;
  import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 +import org.apache.isis.core.metamodel.spec.ManagedObject;
  import org.apache.isis.core.metamodel.specloader.specimpl.OneToManyAssociationContributee;
  import org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationContributee;
  
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractImpl.java
index a561969,fdf7349..3f7059d
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/DisabledFacetAbstractImpl.java
@@@ -19,10 -19,14 +19,12 @@@
  
  package org.apache.isis.core.metamodel.facets.members.disabled;
  
+ import java.util.Map;
+ 
 -import com.google.common.base.Strings;
 -
 -import org.apache.isis.applib.annotation.When;
  import org.apache.isis.applib.annotation.Where;
 -import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 +import org.apache.isis.commons.internal.base._Strings;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 +import org.apache.isis.core.metamodel.spec.ManagedObject;
  
  public abstract class DisabledFacetAbstractImpl extends DisabledFacetAbstract {
  
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
index d486782,801ad67..0b17f5a
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/disabled/method/DisableForContextFacetViaMethod.java
@@@ -22,11 -22,11 +22,12 @@@ package org.apache.isis.core.metamodel.
  import java.lang.reflect.Method;
  import java.util.Collections;
  import java.util.List;
+ import java.util.Map;
  
 -import org.apache.isis.applib.events.UsabilityEvent;
  import org.apache.isis.applib.services.i18n.TranslatableString;
  import org.apache.isis.applib.services.i18n.TranslationService;
 +import org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
 +import org.apache.isis.commons.internal.base._NullSafe;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.ImperativeFacet;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
index eb31b5b,60e69da..a66f6dc
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/hidden/method/HideForContextFacetViaMethod.java
@@@ -22,9 -22,9 +22,10 @@@ package org.apache.isis.core.metamodel.
  import java.lang.reflect.Method;
  import java.util.Collections;
  import java.util.List;
+ import java.util.Map;
  
 -import org.apache.isis.applib.events.VisibilityEvent;
 +import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
 +import org.apache.isis.commons.internal.base._NullSafe;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.ImperativeFacet;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/order/MemberOrderFacetAbstract.java
index 70813ba,d2402d0..79f66c1
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/order/MemberOrderFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/order/MemberOrderFacetAbstract.java
@@@ -19,8 -19,10 +19,10 @@@
  
  package org.apache.isis.core.metamodel.facets.members.order;
  
+ import java.util.Map;
+ 
 -import com.google.common.base.Strings;
  import org.apache.isis.applib.services.i18n.TranslationService;
 +import org.apache.isis.commons.internal.base._Strings;
  import org.apache.isis.core.metamodel.facetapi.Facet;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
index 29628c5,84e689a..58eb67f
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
@@@ -23,7 -23,7 +23,8 @@@ import java.lang.reflect.InvocationTarg
  import java.lang.reflect.Method;
  import java.util.Collections;
  import java.util.List;
 +import java.util.stream.Stream;
+ import java.util.Map;
  
  import org.apache.isis.core.commons.authentication.AuthenticationSession;
  import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatingCallbackFacetViaMethod.java
index 5de5ea7,d084818..2271f5e
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatingCallbackFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/callbacks/UpdatingCallbackFacetViaMethod.java
@@@ -19,10 -19,11 +19,11 @@@
  package org.apache.isis.core.metamodel.facets.object.callbacks;
  
  import java.lang.reflect.Method;
--import java.util.ArrayList;
  import java.util.Collections;
  import java.util.List;
+ import java.util.Map;
  
++import org.apache.isis.commons.internal.collections._Lists;
  import org.apache.isis.core.commons.lang.Wormhole;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@@ -31,7 -31,7 +32,7 @@@ import org.apache.isis.core.metamodel.s
  
  public class UpdatingCallbackFacetViaMethod extends UpdatingCallbackFacetAbstract implements ImperativeFacet {
  
--    private final List<Method> methods = new ArrayList<Method>();
++    private final List<Method> methods = _Lists.newArrayList();
  
      public UpdatingCallbackFacetViaMethod(final Method method, final FacetHolder holder) {
          super(holder);
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
index 5f7a2b6,0e6a25b..2305fc4
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
@@@ -19,7 -19,9 +19,9 @@@
  
  package org.apache.isis.core.metamodel.facets.object.domainobject.editing;
  
 +import java.util.List;
+ import java.util.Map;
+ 
 -import com.google.common.base.Strings;
  
  import org.apache.isis.applib.annotation.DomainObject;
  import org.apache.isis.applib.annotation.Editing;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetFromConfiguration.java
index 3ecd978,4e2cbfa..c689925
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetFromConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetFromConfiguration.java
@@@ -19,7 -19,11 +19,9 @@@
  
  package org.apache.isis.core.metamodel.facets.object.domainobject.editing;
  
 +import org.apache.isis.commons.internal.base._Strings;
+ import java.util.Map;
+ 
 -import com.google.common.base.Strings;
 -import org.apache.isis.applib.annotation.When;
 -import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.facetapi.Facet;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facetapi.FacetUtil;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java
index 3b6cd2f,2f90964..7b41042
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/CssClassFacetViaDomainObjectLayoutAnnotationUsingCssClassUiEvent.java
@@@ -19,7 -19,10 +19,11 @@@
  
  package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
  
 +import java.util.List;
+ import java.util.Map;
+ 
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
  
  import org.apache.isis.applib.NonRecoverableException;
  import org.apache.isis.applib.annotation.DomainObjectLayout;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
index 4251718,10a7a9f..5645e40
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/IconFacetViaDomainObjectLayoutAnnotationUsingIconUiEvent.java
@@@ -19,7 -19,10 +19,9 @@@
  
  package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
  
 +import java.util.List;
+ import java.util.Map;
+ 
 -import org.slf4j.Logger;
 -import org.slf4j.LoggerFactory;
  
  import org.apache.isis.applib.NonRecoverableException;
  import org.apache.isis.applib.annotation.DomainObjectLayout;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
index 275c1ef,87b2023..3ccd5fd
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
@@@ -19,7 -19,10 +19,9 @@@
  
  package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
  
 +import java.util.List;
+ import java.util.Map;
+ 
 -import org.slf4j.Logger;
 -import org.slf4j.LoggerFactory;
  
  import org.apache.isis.applib.NonRecoverableException;
  import org.apache.isis.applib.annotation.DomainObjectLayout;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/IconFacetDerivedFromDomainServiceAnnotation.java
index 5d1df90,baecf75..975d4ff
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/IconFacetDerivedFromDomainServiceAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainservice/annotation/IconFacetDerivedFromDomainServiceAnnotation.java
@@@ -18,10 -18,11 +18,11 @@@
   */
  package org.apache.isis.core.metamodel.facets.object.domainservice.annotation;
  
+ import java.util.Map;
  
 -import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.object.icon.IconFacetAbstract;
 +import org.apache.isis.core.metamodel.spec.ManagedObject;
  
  
  public class IconFacetDerivedFromDomainServiceAnnotation extends IconFacetAbstract {
@@@ -34,7 -35,13 +35,13 @@@
      }
  
      @Override
 -    public String iconName(ObjectAdapter object) {
 +    public String iconName(ManagedObject object) {
          return repositoryFor.getName();
      }
+ 
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         attributeMap.put("repositoryFor", repositoryFor);
+     }
+ 
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethod.java
index bcc48b1,02bbd8e..002d4cb
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/hidden/method/HiddenObjectFacetViaMethod.java
@@@ -20,8 -20,9 +20,9 @@@
  package org.apache.isis.core.metamodel.facets.object.hidden.method;
  
  import java.lang.reflect.Method;
+ import java.util.Map;
  
 -import org.apache.isis.applib.events.VisibilityEvent;
 +import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facetapi.FacetUtil;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
index 11378ec,1bd2963..75f26e1
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
@@@ -124,7 -125,12 +125,12 @@@ public abstract class MixinFacetAbstrac
      }
  
      private TitleService getTitleService() {
 -        return servicesInjector.lookupService(TitleService.class);
 +        return servicesInjector.lookupServiceElseFail(TitleService.class);
      }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         attributeMap.put("mixinType", mixinType);
+         attributeMap.put("constructorType", constructorType);
+     }
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetMethod.java
index d42ea7a,0000000..34fd87e
mode 100644,000000..100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/navparent/method/NavigableParentFacetMethod.java
@@@ -1,53 -1,0 +1,60 @@@
 +/*
 + *  Licensed to the Apache Software Foundation (ASF) under one
 + *  or more contributor license agreements.  See the NOTICE file
 + *  distributed with this work for additional information
 + *  regarding copyright ownership.  The ASF licenses this file
 + *  to you under the Apache License, Version 2.0 (the
 + *  "License"); you may not use this file except in compliance
 + *  with the License.  You may obtain a copy of the License at
 + *
 + *        http://www.apache.org/licenses/LICENSE-2.0
 + *
 + *  Unless required by applicable law or agreed to in writing,
 + *  software distributed under the License is distributed on an
 + *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 + *  KIND, either express or implied.  See the License for the
 + *  specific language governing permissions and limitations
 + *  under the License.
 + */
 +
 +package org.apache.isis.core.metamodel.facets.object.navparent.method;
 +
 +import java.lang.invoke.MethodHandle;
 +import java.lang.reflect.Method;
++import java.util.Map;
 +
 +import org.apache.isis.core.commons.reflection.Reflect;
 +import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 +import org.apache.isis.core.metamodel.facets.object.navparent.NavigableParentFacetAbstract;
 +
 +/**
 + *
 + * @since 2.0.0
 + *
 + */
 +public class NavigableParentFacetMethod extends NavigableParentFacetAbstract {
 +
 +    private final MethodHandle methodHandle;
 +
 +    public NavigableParentFacetMethod(final Method method, final FacetHolder holder) throws IllegalAccessException {
 +        super(holder);
 +        this.methodHandle = Reflect.handleOf(method);
 +    }
 +
 +    @Override
 +    public Object navigableParent(Object object) {
 +        try {
 +            return methodHandle.invoke(object);
 +        } catch (final Throwable ex) {
 +            return null;
 +        }
 +    }
 +
 +
++    @Override
++    public void appendAttributesTo(final Map<String, Object> attributeMap) {
++        super.appendAttributesTo(attributeMap);
++        attributeMap.put("methodHandle", methodHandle);
++    }
++
 +}
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetAbstract.java
index 859aa6a,6ef4a83..d65ccdb
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetAbstract.java
@@@ -121,4 -129,8 +122,9 @@@ public abstract class RecreatableObject
          }
      }
  
 -    @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
++    @Override
++    public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         attributeMap.put("recreationMechanism", recreationMechanism);
+     }
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
index e43b56d,ccb99d2..caa543c
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/annotation/TitleFacetViaTitleAnnotation.java
@@@ -20,16 -20,20 +20,18 @@@
  package org.apache.isis.core.metamodel.facets.object.title.annotation;
  
  import java.util.List;
+ import java.util.Map;
 -
 -import com.google.common.base.Function;
 -import com.google.common.base.Joiner;
 -import com.google.common.base.Objects;
 -import com.google.common.base.Strings;
 -import com.google.common.collect.Lists;
 +import java.util.Objects;
 +import java.util.function.Function;
  
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
  import org.apache.isis.applib.annotation.Title;
 +import org.apache.isis.commons.internal.base._Strings;
++import org.apache.isis.commons.internal.collections._Lists;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 -import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 +import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.Annotations;
  import org.apache.isis.core.metamodel.facets.object.title.TitleFacetAbstract;
@@@ -78,12 -86,26 +80,26 @@@ public class TitleFacetViaTitleAnnotati
              return new TitleComponent(prepend, append, titleEvaluator, abbreviateTo);
          }
  
+         @Override
+         public String toString() {
 -            final List<String> parts = Lists.newArrayList();
 -            if(prepend != null && !Strings.isNullOrEmpty(prepend.trim())) {
++            final List<String> parts = _Lists.newArrayList();
++            if(prepend != null && !_Strings.isNullOrEmpty(prepend.trim())) {
+                 parts.add("prepend=" + prepend);
+             }
 -            if(append != null && !Strings.isNullOrEmpty(append.trim())) {
++            if(append != null && !_Strings.isNullOrEmpty(append.trim())) {
+                 parts.add("append=" + append);
+             }
+             if(abbreviateTo != Integer.MAX_VALUE) {
+                 parts.add("abbreviateTo=" + abbreviateTo);
+             }
 -            return Joiner.on(";").join(parts);
++            return String.join(";", parts);
+         }
      }
  
 -    public TitleFacetViaTitleAnnotation(final List<TitleComponent> components, final FacetHolder holder, final AdapterManager adapterManager) {
 +    public TitleFacetViaTitleAnnotation(final List<TitleComponent> components, final FacetHolder holder, final ObjectAdapterProvider adapterProvider) {
          super(holder);
          this.components = components;
 -        this.adapterManager = adapterManager;
 +        this.adapterProvider = adapterProvider;
      }
  
      @Override
@@@ -141,4 -163,11 +157,11 @@@
              return "Failed Title";
          }
      }
+ 
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
 -        if(components != null && !Strings.isNullOrEmpty(components.toString())) {
++        if(components != null && !_Strings.isNullOrEmpty(components.toString())) {
+             attributeMap.put("components", components);
+         }
+     }
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaToStringMethod.java
index 91178dc,0ef699b..ac51885
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaToStringMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/title/methods/TitleFacetViaToStringMethod.java
@@@ -22,7 -22,9 +22,8 @@@ package org.apache.isis.core.metamodel.
  import java.lang.reflect.Method;
  import java.util.Collections;
  import java.util.List;
+ import java.util.Map;
  
 -import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.ImperativeFacet;
  import org.apache.isis.core.metamodel.facets.object.title.TitleFacetAbstract;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/validating/mustsatisfyspec/MustSatisfySpecificationFromMustSatisfyAnnotationOnTypeFacet.java
index 2f75ba2,45211c9..d09a91e
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/validating/mustsatisfyspec/MustSatisfySpecificationFromMustSatisfyAnnotationOnTypeFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/validating/mustsatisfyspec/MustSatisfySpecificationFromMustSatisfyAnnotationOnTypeFacet.java
@@@ -20,10 -20,12 +20,11 @@@
  package org.apache.isis.core.metamodel.facets.object.validating.mustsatisfyspec;
  
  import java.util.List;
+ import java.util.Map;
  
 -import org.apache.isis.applib.events.ValidityEvent;
  import org.apache.isis.applib.services.i18n.TranslationService;
 +import org.apache.isis.applib.services.wrapper.events.ValidityEvent;
  import org.apache.isis.applib.spec.Specification;
 -import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.facetapi.Facet;
  import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetUsingParser.java
index 2f56c80,0000000..757284d
mode 100644,000000..100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetUsingParser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/MaxLengthFacetUsingParser.java
@@@ -1,66 -1,0 +1,69 @@@
 +/*
 + *  Licensed to the Apache Software Foundation (ASF) under one
 + *  or more contributor license agreements.  See the NOTICE file
 + *  distributed with this work for additional information
 + *  regarding copyright ownership.  The ASF licenses this file
 + *  to you under the Apache License, Version 2.0 (the
 + *  "License"); you may not use this file except in compliance
 + *  with the License.  You may obtain a copy of the License at
 + *
 + *        http://www.apache.org/licenses/LICENSE-2.0
 + *
 + *  Unless required by applicable law or agreed to in writing,
 + *  software distributed under the License is distributed on an
 + *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 + *  KIND, either express or implied.  See the License for the
 + *  specific language governing permissions and limitations
 + *  under the License.
 + */
 +
 +package org.apache.isis.core.metamodel.facets.object.value;
 +
++import java.util.Map;
++
 +import org.apache.isis.applib.adapters.Parser;
 +import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 +import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacetAbstract;
 +import org.apache.isis.core.metamodel.services.ServicesInjector;
 +
 +public class MaxLengthFacetUsingParser extends MaxLengthFacetAbstract{
 +
 +    private final Parser<?> parser;
 +    private final ServicesInjector dependencyInjector;
 +
 +    public MaxLengthFacetUsingParser(final Parser<?> parser, final FacetHolder holder, final ServicesInjector dependencyInjector) {
 +        super(parser.maxLength(), holder);
 +        this.parser = parser;
 +        this.dependencyInjector = dependencyInjector;
 +    }
 +
 +    @Override
 +    protected String toStringValues() {
 +        getDependencyInjector().injectServicesInto(parser);
 +        return parser.toString();
 +    }
 +
 +    @Override
 +    public int value() {
 +        getDependencyInjector().injectServicesInto(parser);
 +        return parser.maxLength();
 +    }
 +
 +    @Override
 +    public String toString() {
 +        return "maxLength=" + value();
 +    }
 +
-     // //////////////////////////////////////////////////////
-     // Dependencies (from constructor)
-     // //////////////////////////////////////////////////////
 +
 +    /**
 +     * @return the dependencyInjector
 +     */
 +    public ServicesInjector getDependencyInjector() {
 +        return dependencyInjector;
 +    }
 +
++    @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
++        super.appendAttributesTo(attributeMap);
++        attributeMap.put("parser", parser);
++    }
 +}
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java
index 6d1dadc,1648a38..6985da3
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mandatory/MandatoryFacetAbstract.java
@@@ -19,7 -19,9 +19,9 @@@
  
  package org.apache.isis.core.metamodel.facets.objectvalue.mandatory;
  
 +import org.apache.isis.applib.services.wrapper.events.ValidityEvent;
+ import java.util.Map;
+ 
 -import org.apache.isis.applib.events.ValidityEvent;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.facetapi.Facet;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@@ -81,6 -82,6 +83,7 @@@ public abstract class MandatoryFacetAbs
          if (!(context instanceof PropertyModifyContext) && !(context instanceof ActionArgValidityContext)) {
              return null;
          }
++        // TODO: IntelliJ says the following is always false, so looks like it can be removed...
          if (!(context instanceof ProposedHolder)) {
              // shouldn't happen, since both the above should hold a proposed
              // value/argument
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
index 60eacb6,5669b77..1f77560
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/objectvalue/mustsatisfyspec/MustSatisfySpecificationFacetAbstract.java
@@@ -20,11 -20,14 +20,12 @@@
  package org.apache.isis.core.metamodel.facets.objectvalue.mustsatisfyspec;
  
  import java.util.List;
+ import java.util.Map;
  
 -import com.google.common.collect.Lists;
 -
 -import org.apache.isis.applib.events.ValidityEvent;
  import org.apache.isis.applib.services.i18n.TranslationService;
 +import org.apache.isis.applib.services.wrapper.events.ValidityEvent;
  import org.apache.isis.applib.spec.Specification;
 -import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 +import org.apache.isis.commons.internal.collections._Lists;
  import org.apache.isis.core.metamodel.facetapi.Facet;
  import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
index a9accca,84494ba33..40ad6c5
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
@@@ -22,12 -22,14 +22,13 @@@ package org.apache.isis.core.metamodel.
  import java.lang.reflect.Method;
  import java.util.Collections;
  import java.util.List;
+ import java.util.Map;
  
 -import com.google.common.collect.Iterables;
 -import com.google.common.collect.Lists;
 -
 +import org.apache.isis.commons.internal._Constants;
 +import org.apache.isis.commons.internal.collections._Lists;
  import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 -import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 +import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
  import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
  import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
index cd16e85,58148a3..deb9e12
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
@@@ -22,8 -22,11 +22,9 @@@ package org.apache.isis.core.metamodel.
  import java.lang.reflect.Method;
  import java.util.Collections;
  import java.util.List;
+ import java.util.Map;
  
 -import com.google.common.collect.Iterables;
 -import com.google.common.collect.Lists;
 -
 +import org.apache.isis.commons.internal.collections._Lists;
  import org.apache.isis.core.commons.authentication.AuthenticationSession;
  import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index 4115c94,8741507..c499aed
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@@ -22,12 -22,14 +22,13 @@@ package org.apache.isis.core.metamodel.
  import java.lang.reflect.Method;
  import java.util.Collections;
  import java.util.List;
+ import java.util.Map;
  
 -import com.google.common.collect.Iterables;
 -import com.google.common.collect.Lists;
 -
 +import org.apache.isis.commons.internal._Constants;
 +import org.apache.isis.commons.internal.collections._Lists;
  import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 -import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 +import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
  import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
  import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
index 5618a0d,b7eebee..4317fe6
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
@@@ -22,9 -22,10 +22,10 @@@ package org.apache.isis.core.metamodel.
  import java.lang.reflect.Method;
  import java.util.Collections;
  import java.util.List;
+ import java.util.Map;
  
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 -import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 +import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.ImperativeFacet;
  import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacetAbstract;
@@@ -69,8 -71,13 +70,13 @@@ public class ActionParameterDefaultsFac
      // Dependencies
      // /////////////////////////////////////////////////////////
  
 -    protected AdapterManager getAdapterManager() {
 -        return adapterManager;
 +    protected ObjectAdapterProvider getObjectAdapterProvider() {
 +        return adapterProvider;
      }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         ImperativeFacet.Util.appendAttributesTo(this, attributeMap);
+     }
+ 
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/TypicalLengthFacetForParameterLayoutAnnotation.java
index 0c5111c,6820d47..e36e820
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/TypicalLengthFacetForParameterLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/layout/TypicalLengthFacetForParameterLayoutAnnotation.java
@@@ -19,7 -19,7 +19,8 @@@
  
  package org.apache.isis.core.metamodel.facets.param.layout;
  
 +import java.util.List;
+ import java.util.Map;
  
  import org.apache.isis.applib.annotation.ParameterLayout;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@@ -28,19 -28,15 +29,19 @@@ import org.apache.isis.core.metamodel.f
  
  public class TypicalLengthFacetForParameterLayoutAnnotation extends TypicalLengthFacetAbstract {
  
 -    public static TypicalLengthFacet create(ParameterLayout parameterLayout, FacetHolder holder) {
 -        if(parameterLayout == null) {
 -            return null;
 -        }
 -        final int typicalLength = parameterLayout.typicalLength();
 -        return typicalLength != -1 ? new TypicalLengthFacetForParameterLayoutAnnotation(typicalLength, holder) : null;
 +    public static TypicalLengthFacet create(
 +            final List<ParameterLayout> parameterLayouts,
 +            final FacetHolder holder) {
 +
 +        return parameterLayouts.stream()
 +                .map(ParameterLayout::typicalLength)
 +                .filter(typicalLength -> typicalLength != -1)
 +                .findFirst()
 +                .map(typicalLength -> new TypicalLengthFacetForParameterLayoutAnnotation(typicalLength, holder))
 +                .orElse(null);
      }
  
-     private final int typicalLength;
+     private final int value;
  
      public TypicalLengthFacetForParameterLayoutAnnotation(int typicalLength, FacetHolder holder) {
          super(holder, Derivation.NOT_DERIVED);
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/regex/RegExFacetForParameterAnnotation.java
index e963e55,9cd5718..85e27ad
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/regex/RegExFacetForParameterAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/regex/RegExFacetForParameterAnnotation.java
@@@ -19,12 -19,14 +19,13 @@@
  
  package org.apache.isis.core.metamodel.facets.param.parameter.regex;
  
 -import java.util.Map;
 +import java.util.List;
  import java.util.regex.Pattern;
  
 -import com.google.common.base.Strings;
 -
++import java.util.Map;
  import org.apache.isis.applib.annotation.Parameter;
 +import org.apache.isis.commons.internal.base._Strings;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 -import org.apache.isis.core.metamodel.facets.Annotations;
  import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacet;
  import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacetAbstract;
  
@@@ -59,10 -62,25 +60,14 @@@ public class RegExFacetForParameterAnno
          this.pattern = Pattern.compile(pattern, patternFlags);
      }
  
 -    /**
 -     * Unused (for the TitledFacet)
 -     */
 -    @Override
 -    public String format(String text) {
 -        return text;
 -    }
 -
      @Override
      public boolean doesNotMatch(final String text) {
 -        if (text == null) {
 -            return true;
 -        }
 -        return !pattern.matcher(text).matches();
 +        return text == null || !pattern.matcher(text).matches();
      }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         attributeMap.put("pattern", pattern);
+     }
  
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
index b147a35,5f9bc1b..da8fa2b
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
@@@ -22,8 -22,11 +22,9 @@@ package org.apache.isis.core.metamodel.
  import java.lang.reflect.Method;
  import java.util.Collections;
  import java.util.List;
+ import java.util.Map;
  
 -import com.google.common.collect.Iterables;
 -import com.google.common.collect.Lists;
 -
 +import org.apache.isis.commons.internal.collections._Lists;
  import org.apache.isis.core.commons.authentication.AuthenticationSession;
  import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
index ceb6c6a,ffe8464..d90a2d4
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
@@@ -93,8 -88,14 +94,14 @@@ public class PropertyChoicesFacetViaMet
      // Dependencies
      // ////////////////////////////////////////////
  
 -    protected AdapterManager getAdapterManager() {
 -        return adapterManager;
 +    protected ObjectAdapterProvider getObjectAdapterProvider() {
 +        return adapterProvider;
      }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         ImperativeFacet.Util.appendAttributesTo(this, attributeMap);
+         attributeMap.put("choicesType", choicesClass);
+     }
+ 
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/fromtype/PropertyDefaultFacetDerivedFromDefaultedFacet.java
index 27abaf5,98cdfb9..9c34a5e
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/fromtype/PropertyDefaultFacetDerivedFromDefaultedFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/fromtype/PropertyDefaultFacetDerivedFromDefaultedFacet.java
@@@ -19,12 -19,14 +19,14 @@@
  
  package org.apache.isis.core.metamodel.facets.properties.defaults.fromtype;
  
+ import java.util.Map;
+ 
  import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 -import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
 +import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
  import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 -import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
  import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacet;
 +import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
  
  public class PropertyDefaultFacetDerivedFromDefaultedFacet extends FacetAbstract implements PropertyDefaultFacet {
  
@@@ -55,8 -55,12 +57,12 @@@
      // Dependencies (from constructor)
      // /////////////////////////////////////////////////////
  
 -    public AdapterManager getAdapterManager() {
 -        return adapterManager;
 +    public ObjectAdapterProvider getObjectAdapterProvider() {
 +        return adapterProvider;
      }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         attributeMap.put("typeFacet", typeFacet);
+     }
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
index 903568e,fc7b348..92a3c33
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
@@@ -94,8 -95,13 +95,13 @@@ public class PropertyDefaultFacetViaMet
          return specificationLoader;
      }
  
 -    protected AdapterManager getAdapterManager() {
 -        return adapterManager;
 +    protected ObjectAdapterProvider getObjectAdapterProvider() {
 +        return adapterProvider;
      }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         ImperativeFacet.Util.appendAttributesTo(this, attributeMap);
+     }
+ 
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
index 1b711c9,4857840..544da97
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertyDomainEventFacetAbstract.java
@@@ -19,14 -19,16 +19,16 @@@
  
  package org.apache.isis.core.metamodel.facets.properties.property.modify;
  
 +import org.apache.isis.applib.events.domain.AbstractDomainEvent;
 +import org.apache.isis.applib.events.domain.PropertyDomainEvent;
+ import java.util.Map;
+ 
 -import org.apache.isis.applib.events.UsabilityEvent;
 -import org.apache.isis.applib.events.ValidityEvent;
 -import org.apache.isis.applib.events.VisibilityEvent;
 -import org.apache.isis.applib.services.eventbus.AbstractDomainEvent;
 -import org.apache.isis.applib.services.eventbus.PropertyDomainEvent;
  import org.apache.isis.applib.services.i18n.TranslatableString;
  import org.apache.isis.applib.services.i18n.TranslationService;
 -import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 +import org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
 +import org.apache.isis.applib.services.wrapper.events.ValidityEvent;
 +import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
 +import org.apache.isis.commons.internal.base._Casts;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
  import org.apache.isis.core.metamodel.facets.DomainEventHelper;
@@@ -125,11 -126,25 +127,17 @@@ extends SingleClassValueFacetAbstract i
  
      private static Object proposedFrom(ValidityContext<? extends ValidityEvent> ic) {
          final ProposedHolder ph = (ProposedHolder) ic;
 -        final ObjectAdapter proposedAdapter = ph.getProposed();
 -        return proposedAdapter != null? proposedAdapter.getObject(): null;
 +        final ManagedObject proposedAdapter = ph.getProposed();
 +        return proposedAdapter != null? proposedAdapter.getPojo(): null;
      }
  
 -    private Class<?> eventType() {
 -        return value();
 -    }
 -
 -    /**
 -     * For testing.
 -     */
 -    public Class<? extends PropertyDomainEvent<?, ?>> getEventType() {
 -        Class eventType = eventType();
 -        return eventType;
 +    public <S, T> Class<? extends PropertyDomainEvent<S, T>> getEventType() {
 +        return _Casts.uncheckedCast(value());
      }
+ 
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         attributeMap.put("getterFacet", getterFacet);
+     }
+ 
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index 1f1ed60,fd44952..7a723bc
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@@ -19,13 -19,11 +19,14 @@@
  
  package org.apache.isis.core.metamodel.facets.properties.property.modify;
  
 +import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
- 
  import java.sql.Timestamp;
+ import java.util.Map;
+ 
 -import com.google.common.base.Objects;
 +import java.util.Objects;
  
 +import org.apache.isis.applib.events.domain.AbstractDomainEvent;
 +import org.apache.isis.applib.events.domain.PropertyDomainEvent;
  import org.apache.isis.applib.services.clock.ClockService;
  import org.apache.isis.applib.services.command.Command;
  import org.apache.isis.applib.services.command.CommandContext;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForPatternAnnotationOnProperty.java
index 1443380,0000000..d891717
mode 100644,000000..100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForPatternAnnotationOnProperty.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForPatternAnnotationOnProperty.java
@@@ -1,70 -1,0 +1,77 @@@
 +/*
 + *  Licensed to the Apache Software Foundation (ASF) under one
 + *  or more contributor license agreements.  See the NOTICE file
 + *  distributed with this work for additional information
 + *  regarding copyright ownership.  The ASF licenses this file
 + *  to you under the Apache License, Version 2.0 (the
 + *  "License"); you may not use this file except in compliance
 + *  with the License.  You may obtain a copy of the License at
 + *
 + *        http://www.apache.org/licenses/LICENSE-2.0
 + *
 + *  Unless required by applicable law or agreed to in writing,
 + *  software distributed under the License is distributed on an
 + *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 + *  KIND, either express or implied.  See the License for the
 + *  specific language governing permissions and limitations
 + *  under the License.
 + */
 +
 +package org.apache.isis.core.metamodel.facets.properties.property.regex;
 +
 +import java.util.List;
 +import java.util.regex.Pattern;
 +
 +import org.apache.isis.commons.internal.base._Strings;
++import java.util.Map;
++
 +import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 +import org.apache.isis.core.metamodel.facets.Annotations;
 +import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacet;
 +import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacetAbstract;
 +
 +public class RegExFacetForPatternAnnotationOnProperty extends RegExFacetAbstract {
 +
 +    private final Pattern pattern;
 +
 +    public static RegExFacet create(
 +            final List<javax.validation.constraints.Pattern> patterns,
 +            final Class<?> returnType, final FacetHolder holder) {
 +
 +        if (!Annotations.isString(returnType)) {
 +            return null;
 +        }
 +
 +        return patterns.stream()
 +                .filter(pattern -> _Strings.emptyToNull(pattern.regexp()) != null)
 +                .findFirst()
 +                .map(pattern ->
 +                new RegExFacetForPatternAnnotationOnProperty(
 +                        pattern.regexp(), pattern.flags(), pattern.message(), holder))
 +                .orElse(null);
 +    }
 +
 +    private RegExFacetForPatternAnnotationOnProperty(
 +            final String regexp,
 +            final javax.validation.constraints.Pattern.Flag[] flags,
 +            final String replacement,
 +            final FacetHolder holder) {
 +        super(regexp, flags, replacement, holder);
 +        pattern = Pattern.compile(regexp(), patternFlags());
 +    }
 +
 +
 +    @Override
 +    public boolean doesNotMatch(final String text) {
 +        if (text == null) {
 +            return true;
 +        }
 +        return !pattern.matcher(text).matches();
 +    }
 +
++    @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
++        super.appendAttributesTo(attributeMap);
++        attributeMap.put("pattern", pattern);
++    }
++
 +}
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForPropertyAnnotation.java
index d93ee45,d10d984..15122f5
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/regex/RegExFacetForPropertyAnnotation.java
@@@ -19,11 -19,12 +19,13 @@@
  
  package org.apache.isis.core.metamodel.facets.properties.property.regex;
  
 -import java.util.Map;
 +import java.util.List;
  import java.util.regex.Pattern;
  
 -import com.google.common.base.Strings;
++import java.util.Map;
+ 
  import org.apache.isis.applib.annotation.Property;
 +import org.apache.isis.commons.internal.base._Strings;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.Annotations;
  import org.apache.isis.core.metamodel.facets.objectvalue.regex.RegExFacet;
@@@ -59,8 -73,15 +61,12 @@@ public class RegExFacetForPropertyAnnot
  
      @Override
      public boolean doesNotMatch(final String text) {
 -        if (text == null) {
 -            return true;
 -        }
 -        return !pattern.matcher(text).matches();
 +        return text == null || !pattern.matcher(text).matches();
      }
  
+     @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
+         super.appendAttributesTo(attributeMap);
+         attributeMap.put("pattern", pattern);
+     }
  
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
index 3178760,bb67b98..9b2eff9
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/PromptStyleFacetForPropertyLayoutAnnotation.java
@@@ -19,7 -19,7 +19,8 @@@
  
  package org.apache.isis.core.metamodel.facets.properties.propertylayout;
  
 +import java.util.List;
+ import java.util.Map;
  
  import org.apache.isis.applib.annotation.PromptStyle;
  import org.apache.isis.applib.annotation.PropertyLayout;
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyLayoutAnnotation.java
index ccb23ac,e44fce3..a52cb14
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/propertylayout/TypicalLengthFacetForPropertyLayoutAnnotation.java
@@@ -19,7 -19,7 +19,8 @@@
  
  package org.apache.isis.core.metamodel.facets.properties.propertylayout;
  
 +import java.util.List;
+ import java.util.Map;
  
  import org.apache.isis.applib.annotation.PropertyLayout;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@@ -28,23 -28,19 +29,23 @@@ import org.apache.isis.core.metamodel.f
  
  public class TypicalLengthFacetForPropertyLayoutAnnotation extends TypicalLengthFacetAbstract {
  
 -    public static TypicalLengthFacet create(PropertyLayout propertyLayout, FacetHolder holder) {
 -        if(propertyLayout == null) {
 -            return null;
 -        }
 -        final int typicalLength = propertyLayout.typicalLength();
 -        return typicalLength != -1 ? new TypicalLengthFacetForPropertyLayoutAnnotation(typicalLength, holder) : null;
 +    public static TypicalLengthFacet create(
 +            final List<PropertyLayout> propertyLayouts,
 +            final FacetHolder holder) {
 +
 +        return propertyLayouts.stream()
 +                .map(PropertyLayout::typicalLength)
 +                .filter(typicalLength -> typicalLength != -1)
 +                .findFirst()
 +                .map(typicalLength -> new TypicalLengthFacetForPropertyLayoutAnnotation(typicalLength, holder))
 +                .orElse(null);
      }
  
-     private final int typicalLength;
+     private final int value;
  
-     private TypicalLengthFacetForPropertyLayoutAnnotation(int typicalLength, FacetHolder holder) {
+     private TypicalLengthFacetForPropertyLayoutAnnotation(int value, FacetHolder holder) {
          super(holder, Derivation.NOT_DERIVED);
-         this.typicalLength = typicalLength;
+         this.value = value;
      }
  
      @Override
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionCollectionParameterDefaultsAndChoicesPostProcessor.java
index 7eac761,b9e79ea..c6e91cb
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionCollectionParameterDefaultsAndChoicesPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/postprocessors/param/ActionCollectionParameterDefaultsAndChoicesPostProcessor.java
@@@ -46,9 -84,11 +82,11 @@@ import org.apache.isis.core.metamodel.s
  
  /**
   * Sets up all the {@link Facet}s for an action in a single shot.
+  *
+  * TODO: rename this class because it does much more than its name suggests.
   */
  public class ActionCollectionParameterDefaultsAndChoicesPostProcessor implements ObjectSpecificationPostProcessor,
 -        ServicesInjectorAware {
 +ServicesInjectorAware {
  
      private DeploymentCategoryProvider deploymentCategoryProvider;
      private SpecificationLoader specificationLoader;
@@@ -60,12 -100,54 +98,54 @@@
  
          // all the actions of this type
          final List<ActionType> actionTypes = inferActionTypes();
 -        List<ObjectAction> objectActions = objectSpecification.getObjectActions(actionTypes, Contributed.INCLUDED, Filters.<ObjectAction>any());
++        final Stream<ObjectAction> objectActions = objectSpecification.streamObjectActions(actionTypes, Contributed.INCLUDED);
  
          // and all the collections of this type
 -        final List<OneToManyAssociation> collections = objectSpecification.getCollections(Contributed.INCLUDED);
 +        final Stream<OneToManyAssociation> collections = objectSpecification.streamCollections(Contributed.INCLUDED);
  
+         // and all the properties of this type
 -        final List<OneToOneAssociation> properties = objectSpecification.getProperties(Contributed.INCLUDED);
++        final Stream<OneToOneAssociation> properties = objectSpecification.streamProperties(Contributed.INCLUDED);
+ 
+         // for each action, ...
 -        for (final ObjectAction objectAction : objectActions) {
++        objectActions.forEach(objectAction -> {
+ 
+             // ... for each action parameter
+             final List<ObjectActionParameter> parameters = objectAction.getParameters();
+ 
+             for (final ObjectActionParameter parameter : parameters) {
+ 
+                 deriveParameterDefaultFacetFromType(parameter);
+                 deriveParameterChoicesFromExistingChoices(parameter);
+                 deriveParameterDescribedAsFromType(parameter);
+                 deriveParameterTypicalLengthFromType(parameter);
+             }
+ 
+             deriveActionDescribedAsFromType(objectAction);
+ 
+             // previously was also copying ImmutableFacet from spec onto Action (as for properties and collections ...
+             // corresponds to CopyImmutableFacetOntoMembersFactory.  However, ImmutableFacet only ever disables for
+             // properties and collections, so no point in copying over.
+ 
 -        }
++        });
+ 
+         // for each property, ...
 -        for (final OneToOneAssociation property : properties) {
++        properties.forEach(property -> {
+             derivePropertyChoicesFromExistingChoices(property);
+             derivePropertyDefaultsFromType(property);
+             derivePropertyTypicalLengthFromType(property);
+             derivePropertyOrCollectionDescribedAsFromType(property);
+             derivePropertyOrCollectionImmutableFromSpec(property);
+             derivePropertyDisabledFromImmutable(property);
 -        }
++        });
+ 
+ 
          // for each collection, ...
 -        for (final OneToManyAssociation collection : collections) {
 +        collections.forEach(collection->{
+ 
+             derivePropertyOrCollectionDescribedAsFromType(collection);
+             derivePropertyOrCollectionImmutableFromSpec(collection);
+             deriveCollectionDisabledFromImmutable(collection);
+ 
              // ... see if any of its actions has a collection parameter of the same type
              //
              // eg Order#getItems() and Order#removeItems(List<OrderItem>)
@@@ -108,45 -190,249 +188,250 @@@
                  // similarly for compatible scalar parameters, install a choices facet (if there isn't one already)
                  // using the associated collection for its values.
                  for (final ObjectActionParameter scalarParam : compatibleScalarParams) {
-                     addChoicesFacetIfNoneAlready(collection, scalarParam);
+                     addCollectionParamChoicesFacetIfNoneAlready(collection, scalarParam);
                  }
 -            }
 -        }
 +            });
 +        });
 +
      }
  
-     private void addDefaultsFacetIfNoneAlready(final ObjectActionParameter collectionParam) {
-         final ActionParameterDefaultsFacet defaultsFacet =
-                 collectionParam.getFacet(ActionParameterDefaultsFacet.class);
-         if (existsAndNotDerived(defaultsFacet)) {
-             // don't overwrite existing facet
-         } else {
-             FacetUtil.addFacet(new ActionParameterDefaultsFacetFromAssociatedCollection(collectionParam));
+     private FacetedMethod facetedMethodFor(final ObjectMember objectMember) {
+         // TODO: hacky, need to copy facet onto underlying peer, not to the action/association itself.
+         final ObjectMemberAbstract objectActionImpl = (ObjectMemberAbstract) objectMember;
+         return objectActionImpl.getFacetedMethod();
+     }
+     private TypedHolder peerFor(final ObjectActionParameter param) {
+         // TODO: hacky, need to copy facet onto underlying peer, not to the param itself.
+         final ObjectActionParameterAbstract objectActionImpl = (ObjectActionParameterAbstract) param;
+         return objectActionImpl.getPeer();
+     }
+ 
+     /**
+      * Replaces some of the functionality in {@link DescribedAsFacetOnMemberFactory}.
+      */
+     private void deriveActionDescribedAsFromType(final ObjectAction objectAction) {
+         if(objectAction.containsDoOpFacet(DescribedAsFacet.class)) {
+             return;
+         }
+         final ObjectSpecification returnSpec = objectAction.getReturnType();
+         final DescribedAsFacet specFacet = returnSpec.getFacet(DescribedAsFacet.class);
+         //TODO: this ought to check if a do-op; if you come across this, you can probably change it (just taking smaller steps for now)
+         //if(existsAndIsDoOp(specFacet)) {
+         if(specFacet != null) {
+             FacetUtil.addFacet(new DescribedAsFacetOnMemberDerivedFromType(specFacet, facetedMethodFor(objectAction)));
          }
      }
  
-     private void addChoicesFacetIfNoneAlready(
-             final OneToManyAssociation otma,
-             final ObjectActionParameter scalarOrCollectionParam) {
+     /**
+      * Replaces {@link org.apache.isis.core.metamodel.facets.param.defaults.fromtype.ActionParameterDefaultFacetDerivedFromTypeFactory}
+      */
+     private void deriveParameterDefaultFacetFromType(final ObjectActionParameter parameter) {
  
-         final ActionParameterChoicesFacet choicesFacet = scalarOrCollectionParam
-                 .getFacet(ActionParameterChoicesFacet.class);
-         final ActionParameterAutoCompleteFacet autoCompleteFacet = scalarOrCollectionParam
-                 .getFacet(ActionParameterAutoCompleteFacet.class);
+         if (parameter.containsDoOpFacet(ActionDefaultsFacet.class)) {
+             return;
+         }
+ 
+         // this loop within the outer loop (for every param) is really weird,
+         // but arises from porting the old facet factory
+         final ObjectAction objectAction = parameter.getAction();
+         final List<ObjectSpecification> parameterSpecs = objectAction.getParameterTypes();
+         final DefaultedFacet[] parameterTypeDefaultedFacets = new DefaultedFacet[parameterSpecs.size()];
+         boolean hasAtLeastOneDefault = false;
+         for (int i = 0; i < parameterSpecs.size(); i++) {
+             final ObjectSpecification parameterSpec = parameterSpecs.get(i);
+             parameterTypeDefaultedFacets[i] = parameterSpec.getFacet(DefaultedFacet.class);
+             hasAtLeastOneDefault = hasAtLeastOneDefault | (parameterTypeDefaultedFacets[i] != null);
+         }
+         if (hasAtLeastOneDefault) {
+             FacetUtil.addFacet(
+                 new ActionParameterDefaultFacetDerivedFromTypeFacets(parameterTypeDefaultedFacets, peerFor(parameter)));
+         }
+     }
+ 
+     /**
+      * Replaces {@link ActionParameterChoicesFacetDerivedFromChoicesFacetFactory}.
+      */
+     private void deriveParameterChoicesFromExistingChoices(final ObjectActionParameter parameter) {
+         if(parameter.containsDoOpFacet(ActionParameterChoicesFacet.class)) {
+             return;
+         }
+         final ObjectSpecification paramSpec = parameter.getSpecification();
+         final ChoicesFacet specFacet = paramSpec.getFacet(ChoicesFacet.class);
+         if(existsAndIsDoOp(specFacet)) {
+             FacetUtil.addFacet(
+                 new ActionParameterChoicesFacetDerivedFromChoicesFacet(
+                     peerFor(parameter),
 -                    getDeploymentCategory(), specificationLoader, authenticationSessionProvider, adapterManager));
++                    getDeploymentCategory(), specificationLoader, authenticationSessionProvider, adapterProvider));
+         }
+     }
  
-         if (existsAndNotDerived(choicesFacet) || existsAndNotDerived(autoCompleteFacet)) {
-             // don't overwrite existing choices or autoComplete facet
-         } else {
+     /**
+      * Replaces {@link DescribedAsFacetOnParameterAnnotationElseDerivedFromTypeFactory}
+      */
+     private void deriveParameterDescribedAsFromType(final ObjectActionParameter parameter) {
+         if(parameter.containsDoOpFacet(DescribedAsFacet.class)) {
+             return;
+         }
+         final ObjectSpecification paramSpec = parameter.getSpecification();
+         final DescribedAsFacet specFacet = paramSpec.getFacet(DescribedAsFacet.class);
+ 
+         //TODO: this ought to check if a do-op; if you come across this, you can probably change it (just taking smaller steps for now)
+         //if(existsAndIsDoOp(specFacet)) {
+         if(specFacet != null) {
+             FacetUtil.addFacet(new DescribedAsFacetOnParameterDerivedFromType(specFacet, peerFor(parameter)));
+         }
+     }
+ 
+     /**
+      * Replaces {@link TypicalLengthFacetOnParameterDerivedFromTypeFacetFactory}
+      */
+     private void deriveParameterTypicalLengthFromType(final ObjectActionParameter parameter) {
+         if(parameter.containsDoOpFacet(TypicalLengthFacet.class)) {
+             return;
+         }
+         final ObjectSpecification paramSpec = parameter.getSpecification();
+         final TypicalLengthFacet specFacet = paramSpec.getFacet(TypicalLengthFacet.class);
+         if(existsAndIsDoOp(specFacet)) {
+             FacetUtil.addFacet(new TypicalLengthFacetOnParameterDerivedFromType(specFacet, peerFor(parameter)));
+         }
+     }
+ 
+     /**
+      * Replaces {@link PropertyChoicesFacetDerivedFromChoicesFacetFactory}
+      */
+     private void derivePropertyChoicesFromExistingChoices(final OneToOneAssociation property) {
+         if(property.containsDoOpFacet(PropertyChoicesFacet.class)) {
+             return;
+         }
+         final ObjectSpecification propertySpec = property.getSpecification();
+         final ChoicesFacet specFacet = propertySpec.getFacet(ChoicesFacet.class);
+         if(existsAndIsDoOp(specFacet)) {
              FacetUtil.addFacet(
-                     new ActionParameterChoicesFacetFromParentedCollection(
-                             scalarOrCollectionParam, otma,
-                             getDeploymentCategory(), specificationLoader,
-                             authenticationSessionProvider, adapterProvider ));
+                     new PropertyChoicesFacetDerivedFromChoicesFacet(facetedMethodFor(property), specificationLoader));
          }
      }
  
-     private static boolean existsAndNotDerived(final Facet facet) {
-         return facet != null && !facet.isNoop() && !facet.isNoop();
+     /**
+      * Replaces {@link PropertyDefaultFacetDerivedFromTypeFactory}
+      */
+     private void derivePropertyDefaultsFromType(final OneToOneAssociation property) {
+         if(property.containsDoOpFacet(PropertyDefaultFacet.class)) {
+             return;
+         }
+         final ObjectSpecification propertySpec = property.getSpecification();
+         final DefaultedFacet specFacet = propertySpec.getFacet(DefaultedFacet.class);
+         if(existsAndIsDoOp(specFacet)) {
+             FacetUtil.addFacet(
+                 new PropertyDefaultFacetDerivedFromDefaultedFacet(
 -                        specFacet, facetedMethodFor(property), adapterManager));
++                        specFacet, facetedMethodFor(property), adapterProvider));
+         }
+     }
+ 
+     /**
+      * replaces {@link TypicalLengthFacetOnPropertyDerivedFromTypeFacetFactory}
+      */
+     private void derivePropertyTypicalLengthFromType(final OneToOneAssociation property) {
+         if(property.containsDoOpFacet(TypicalLengthFacet.class)) {
+             return;
+         }
+         final ObjectSpecification propertySpec = property.getSpecification();
+         final TypicalLengthFacet specFacet = propertySpec.getFacet(TypicalLengthFacet.class);
+         if(existsAndIsDoOp(specFacet)) {
+             FacetUtil.addFacet(
+                     new TypicalLengthFacetOnPropertyDerivedFromType(specFacet, facetedMethodFor(property)));
+         }
+     }
+ 
+     /**
+      * Replaces some of the functionality in {@link DescribedAsFacetOnMemberFactory}.
+      */
+     private void derivePropertyOrCollectionDescribedAsFromType(final ObjectAssociation objectAssociation) {
+         if(objectAssociation.containsDoOpFacet(DescribedAsFacet.class)) {
+             return;
+         }
+         final ObjectSpecification returnSpec = objectAssociation.getSpecification();
+         final DescribedAsFacet specFacet = returnSpec.getFacet(DescribedAsFacet.class);
+         //TODO: this ought to check if a do-op; if you come across this, you can probably change it (just taking smaller steps for now)
+         //if(existsAndIsDoOp(specFacet)) {
+         if(specFacet != null) {
+             FacetUtil.addFacet(
+                     new DescribedAsFacetOnMemberDerivedFromType(specFacet, facetedMethodFor(objectAssociation)));
+         }
+     }
+ 
+     /**
+      * Replaces {@link DisabledFacetOnPropertyDerivedFromImmutableFactory}
+      */
+     private void derivePropertyDisabledFromImmutable(final OneToOneAssociation property) {
+         if(property.containsDoOpFacet(DisabledFacet.class)) {
+             return;
+         }
+         final ObjectSpecification onType = property.getOnType();
+         final ImmutableFacet specFacet = onType.getFacet(ImmutableFacet.class);
+         if(existsAndIsDoOp(specFacet)) {
+             FacetUtil.addFacet(
 -                    new DisabledFacetOnPropertyDerivedFromImmutable(specFacet, facetedMethodFor(property)));
++                    new DisabledFacetOnPropertyDerivedFromImmutable(facetedMethodFor(property)));
+         }
+     }
+ 
+     /**
+      * Replaces {@link CopyImmutableFacetOntoMembersFactory}
+      *
+      * TODO: this looks to be redundant, see {@link #derivePropertyDisabledFromImmutable(OneToOneAssociation)} and {@link #deriveCollectionDisabledFromImmutable(OneToManyAssociation)}.  What differs is the implementation of the disabling facet (DisabledFacetOn... vs ImmutableFacetFor...).
+      */
+     private void derivePropertyOrCollectionImmutableFromSpec(final ObjectAssociation objectAssociation) {
+         if(objectAssociation.containsDoOpFacet(DisabledFacet.class)) {
+             return;
+         }
+         final ObjectSpecification owningSpec = objectAssociation.getOnType();
+         final ImmutableFacet specFacet = owningSpec.getFacet(ImmutableFacet.class);
+         if(existsAndIsDoOp(specFacet)) {
+             specFacet.copyOnto(facetedMethodFor(objectAssociation));
+         }
+     }
+ 
+ 
+     /**
+      * Replaces {@link DisabledFacetOnCollectionDerivedFromImmutableFactory}
+      */
+     private void deriveCollectionDisabledFromImmutable(final OneToManyAssociation collection) {
+         if(collection.containsDoOpFacet(DisabledFacet.class)) {
+             return;
+         }
+         final ObjectSpecification onType = collection.getOnType();
+         final ImmutableFacet specFacet = onType.getFacet(ImmutableFacet.class);
+         if(existsAndIsDoOp(specFacet)) {
+             FacetUtil.addFacet(
+                     new DisabledFacetOnCollectionDerivedFromImmutable(specFacet, facetedMethodFor(collection)));
+         }
+     }
+ 
+ 
+ 
+     private void addCollectionParamDefaultsFacetIfNoneAlready(final ObjectActionParameter collectionParam) {
+         if(collectionParam.containsDoOpFacet(ActionParameterDefaultsFacet.class)) {
+             return;
+         }
+         FacetUtil.addFacet(new ActionParameterDefaultsFacetFromAssociatedCollection(collectionParam));
+     }
+ 
+     private void addCollectionParamChoicesFacetIfNoneAlready(
+             final OneToManyAssociation otma,
+             final ObjectActionParameter scalarOrCollectionParam) {
+         if (scalarOrCollectionParam.containsDoOpFacet(ActionParameterChoicesFacet.class) ||
+             scalarOrCollectionParam.containsDoOpFacet(ActionParameterAutoCompleteFacet.class)) {
+             return;
+         }
+ 
+         FacetUtil.addFacet(
+                 new ActionParameterChoicesFacetFromParentedCollection(
+                         scalarOrCollectionParam, otma,
+                         getDeploymentCategory(), specificationLoader,
 -                        authenticationSessionProvider, adapterManager ));
++                        authenticationSessionProvider, adapterProvider));
+     }
+ 
+     private static boolean existsAndIsDoOp(final Facet facet) {
+         return facet != null && !facet.isNoop();
      }
  
      private List<ActionType> inferActionTypes() {
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
index 0000000,27736d4..3e4b327
mode 000000,100644..100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelExporter.java
@@@ -1,0 -1,574 +1,555 @@@
+ /*
+  *  Licensed to the Apache Software Foundation (ASF) under one
+  *  or more contributor license agreements.  See the NOTICE file
+  *  distributed with this work for additional information
+  *  regarding copyright ownership.  The ASF licenses this file
+  *  to you under the Apache License, Version 2.0 (the
+  *  "License"); you may not use this file except in compliance
+  *  with the License.  You may obtain a copy of the License at
+  *
+  *        http://www.apache.org/licenses/LICENSE-2.0
+  *
+  *  Unless required by applicable law or agreed to in writing,
+  *  software distributed under the License is distributed on an
+  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  *  KIND, either express or implied.  See the License for the
+  *  specific language governing permissions and limitations
+  *  under the License.
+  */
+ package org.apache.isis.core.metamodel.services.metamodel;
+ 
+ import java.lang.reflect.Method;
+ import java.lang.reflect.Modifier;
+ import java.util.Collections;
+ import java.util.Comparator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.regex.Pattern;
+ 
 -import com.google.common.base.Joiner;
 -import com.google.common.base.Strings;
 -import com.google.common.collect.Lists;
 -import com.google.common.collect.Maps;
 -
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
+ 
+ import org.apache.isis.applib.annotation.NatureOfService;
 -import org.apache.isis.applib.annotation.PublishedAction;
 -import org.apache.isis.applib.annotation.PublishedObject;
+ import org.apache.isis.applib.services.command.CommandDtoProcessor;
 -import org.apache.isis.applib.services.metamodel.MetaModelService6;
++import org.apache.isis.applib.services.metamodel.MetaModelService;
+ import org.apache.isis.applib.spec.Specification;
++import org.apache.isis.commons.internal.base._Strings;
++import org.apache.isis.commons.internal.collections._Lists;
++import org.apache.isis.commons.internal.collections._Maps;
+ import org.apache.isis.core.metamodel.facetapi.Facet;
+ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+ import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacet;
+ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+ import org.apache.isis.core.metamodel.spec.feature.Contributed;
+ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 -import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+ import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+ import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+ import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
+ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+ import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+ import org.apache.isis.objectstore.jdo.metamodel.facets.object.query.JdoNamedQuery;
+ import org.apache.isis.schema.metamodel.v1.Action;
+ import org.apache.isis.schema.metamodel.v1.Collection;
+ import org.apache.isis.schema.metamodel.v1.DomainClassDto;
+ import org.apache.isis.schema.metamodel.v1.FacetAttr;
+ import org.apache.isis.schema.metamodel.v1.Member;
+ import org.apache.isis.schema.metamodel.v1.MetamodelDto;
+ import org.apache.isis.schema.metamodel.v1.Param;
+ import org.apache.isis.schema.metamodel.v1.Property;
+ import org.apache.isis.schema.metamodel.v1.ScalarParam;
+ import org.apache.isis.schema.metamodel.v1.VectorParam;
+ import org.apache.isis.schema.utils.CommonDtoUtils;
+ 
+ class MetaModelExporter {
+ 
+     @SuppressWarnings("unused")
+     private final static Logger LOG = LoggerFactory.getLogger(MetaModelExporter.class);
+ 
+     SpecificationLoader specificationLookup;
+ 
+     public MetaModelExporter(final SpecificationLoader specificationLookup) {
+         this.specificationLookup = specificationLookup;
+     }
+ 
+     /**
+      * The metamodel is populated in two phases, first to create a {@link DomainClassDto} for each ObjectSpecification,
+      * and then to populate the members of those domain class types.
+      *
+      * <p>
+      *     This is because the members (and action parameters) all reference the {@link DomainClassDto}s, so these need
+      *     to exist first.
+      * </p>
+      */
 -    MetamodelDto exportMetaModel(final MetaModelService6.Config config) {
++    MetamodelDto exportMetaModel(final MetaModelService.Config config) {
+         MetamodelDto metamodelDto = new MetamodelDto();
+ 
+         // phase 1: create a domainClassType for each ObjectSpecification
+         // these are added into a map for lookups in phase 2
 -        final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec = Maps.newHashMap();
++        final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec = _Maps.newHashMap();
+         for (final ObjectSpecification specification : specificationLookup.allSpecifications()) {
+             if(notInPackagePrefixes(specification, config)) {
+                 continue;
+             }
+             if(config.isIgnoreMixins() && specification.isMixin()) {
+                 continue;
+             }
+             if(config.isIgnoreInterfaces() && specification.getCorrespondingClass().isInterface()) {
+                 continue;
+             }
+             if(config.isIgnoreAbstractClasses() && Modifier.isAbstract(specification.getCorrespondingClass().getModifiers())) {
+                 continue;
+             }
+             if(config.isIgnoreBuiltInValueTypes() && isValueType(specification)) {
+                 continue;
+             }
+ 
+             DomainClassDto domainClassType = asXsdType(specification, config);
+             domainClassByObjectSpec.put(specification, domainClassType);
+         }
+ 
+         // phase 2: now flesh out the domain class types, passing the map for lookups of the domainClassTypes that
+         // correspond to each object members types.
 -        for (final ObjectSpecification specification : Lists.newArrayList(domainClassByObjectSpec.keySet())) {
++        for (final ObjectSpecification specification : _Lists.newArrayList(domainClassByObjectSpec.keySet())) {
+             addFacetsAndMembersTo(specification, domainClassByObjectSpec, config);
+         }
+ 
+         // phase 2.5: check no duplicates
 -        final Map<String, ObjectSpecification> objectSpecificationByDomainClassId = Maps.newHashMap();
 -        final List<String> buf = Lists.newArrayList();
++        final Map<String, ObjectSpecification> objectSpecificationByDomainClassId = _Maps.newHashMap();
++        final List<String> buf = _Lists.newArrayList();
+         for (final Map.Entry<ObjectSpecification, DomainClassDto> entry : domainClassByObjectSpec.entrySet()) {
+             final ObjectSpecification objectSpecification = entry.getKey();
+             final DomainClassDto domainClassDto = entry.getValue();
+             final String id = domainClassDto.getId();
+             final ObjectSpecification existing = objectSpecificationByDomainClassId.get(id);
+             if(existing != null) {
+                 if(!existing.getCorrespondingClass().isEnum()) {
+                     buf.add(String.format("%s mapped to %s and %s", id, existing, objectSpecification));
+                 }
+             } else {
+                 objectSpecificationByDomainClassId.put(id, objectSpecification);
+             }
+         }
+         if(buf.size() > 0) {
 -            throw new IllegalStateException(Joiner.on("\n").join(buf));
++            throw new IllegalStateException(String.join("\n", buf));
+         }
+ 
+         // phase 3: now copy all domain classes into the metamodel
 -        for (final DomainClassDto domainClass : Lists.newArrayList(domainClassByObjectSpec.values())) {
++        for (final DomainClassDto domainClass : _Lists.newArrayList(domainClassByObjectSpec.values())) {
+             metamodelDto.getDomainClassDto().add(domainClass);
+         }
+ 
+         sortDomainClasses(metamodelDto.getDomainClassDto());
+ 
+         return metamodelDto;
+     }
+ 
+     private boolean notInPackagePrefixes(
 -            final ObjectSpecification specification, final MetaModelService6.Config config) {
++            final ObjectSpecification specification, final MetaModelService.Config config) {
+         return !inPackagePrefixes(specification, config);
+     }
+ 
+     private boolean inPackagePrefixes(
+             final ObjectSpecification specification,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+         final String canonicalName = specification.getCorrespondingClass().getCanonicalName();
+         for (final String s : config.getPackagePrefixes()) {
+             if(canonicalName.startsWith(s)) {
+                 return true;
+             }
+         }
+         return false;
+     }
+ 
+     private DomainClassDto asXsdType(
+             final ObjectSpecification specification,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+ 
+         final DomainClassDto domainClass = new DomainClassDto();
+ 
+         domainClass.setId(specification.getFullIdentifier());
+ 
+         if(specification.isService()) {
+             domainClass.setService(true);
+         }
+ 
+         return domainClass;
+     }
+ 
+     private void addFacetsAndMembersTo(
+             final ObjectSpecification specification,
+             final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+ 
+         final DomainClassDto domainClass = lookupDomainClass(specification, domainClassByObjectSpec, config);
+         if(domainClass.getFacets() == null) {
+             domainClass.setFacets(new org.apache.isis.schema.metamodel.v1.FacetHolder.Facets());
+         }
+         addFacets(specification, domainClass.getFacets(), config);
+ 
+         if(specification.isValueOrIsParented() || isEnum(specification)) {
+             return;
+         }
+ 
+         if (specification.isService()) {
+             if(!hasNatureOfServiceOfDomain(specification)) {
+                 addActions(specification, domainClassByObjectSpec, config);
+             }
+         } else {
+             addProperties(specification, domainClassByObjectSpec, config);
+             addCollections(specification, domainClassByObjectSpec, config);
+             addActions(specification, domainClassByObjectSpec, config);
+         }
+     }
+ 
+     private boolean isEnum(final ObjectSpecification specification) {
+         return specification.getCorrespondingClass().isEnum();
+     }
+ 
+     private boolean hasNatureOfServiceOfDomain(final ObjectSpecification specification) {
+         final DomainServiceFacet domainServiceFacet = specification.getFacet(DomainServiceFacet.class);
+         return domainServiceFacet != null && domainServiceFacet.getNatureOfService() == NatureOfService.DOMAIN;
+     }
+ 
+     private void addProperties(
+             final ObjectSpecification specification,
+             final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+         final DomainClassDto domainClass = lookupDomainClass(specification, domainClassByObjectSpec, config);
+ 
 -        final List<ObjectAssociation> oneToOneAssociations =
 -                specification.getAssociations(Contributed.INCLUDED, ObjectAssociation.Filters.PROPERTIES);
+         if(domainClass.getProperties() == null) {
+             domainClass.setProperties(new DomainClassDto.Properties());
+         }
++
+         final List<Property> properties = domainClass.getProperties().getProp();
 -        for (final ObjectAssociation association : oneToOneAssociations) {
 -            final OneToOneAssociation otoa = (OneToOneAssociation) association;
 -            properties.add(asXsdType(otoa, domainClassByObjectSpec, config));
 -        }
++        specification.streamProperties(Contributed.INCLUDED)
++                .map(otoa -> asXsdType(otoa, domainClassByObjectSpec, config))
++                .forEach(properties::add);
++
+         sortMembers(properties);
+     }
+ 
+     private void addCollections(
+             final ObjectSpecification specification,
+             final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+         final DomainClassDto domainClass = lookupDomainClass(specification, domainClassByObjectSpec, config);
 -        final List<ObjectAssociation> oneToManyAssociations =
 -                specification.getAssociations(Contributed.INCLUDED, ObjectAssociation.Filters.COLLECTIONS);
++
+         if(domainClass.getCollections() == null) {
+             domainClass.setCollections(new DomainClassDto.Collections());
+         }
++
+         final List<Collection> collections = domainClass.getCollections().getColl();
 -        for (final ObjectAssociation association : oneToManyAssociations) {
 -            final OneToManyAssociation otma = (OneToManyAssociation) association;
 -            collections.add(asXsdType(otma, domainClassByObjectSpec, config));
 -        }
++        specification.streamCollections(Contributed.INCLUDED)
++                .map(otma -> asXsdType(otma, domainClassByObjectSpec, config))
++                .forEach(collections::add);
++
+         sortMembers(collections);
+     }
+ 
+     private void addActions(
+             final ObjectSpecification specification,
+             final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+         final DomainClassDto domainClass = lookupDomainClass(specification, domainClassByObjectSpec, config);
 -        final List<ObjectAction> objectActions =
 -                specification.getObjectActions(Contributed.INCLUDED);
++
+         if(domainClass.getActions() == null) {
+             domainClass.setActions(new DomainClassDto.Actions());
+         }
++
+         final List<Action> actions = domainClass.getActions().getAct();
 -        for (final ObjectAction action : objectActions) {
 -            actions.add(asXsdType(action, domainClassByObjectSpec, config));
 -        }
++        specification.streamObjectActions(Contributed.INCLUDED)
++                .map(action ->asXsdType(action, domainClassByObjectSpec, config))
++                .forEach(actions::add);
++
+         sortMembers(actions);
+     }
+ 
+     private Property asXsdType(
+             final OneToOneAssociation otoa,
+             final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+ 
+         Property propertyType = new Property();
+         propertyType.setId(otoa.getId());
+         propertyType.setFacets(new org.apache.isis.schema.metamodel.v1.FacetHolder.Facets());
+         final ObjectSpecification specification = otoa.getSpecification();
+         final DomainClassDto value = lookupDomainClass(specification, domainClassByObjectSpec, config);
+         propertyType.setType(value);
+ 
+         addFacets(otoa, propertyType.getFacets(), config);
+         return propertyType;
+     }
+ 
+     private Collection asXsdType(
+             final OneToManyAssociation otoa,
+             final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+         Collection collectionType = new Collection();
+         collectionType.setId(otoa.getId());
+         collectionType.setFacets(new org.apache.isis.schema.metamodel.v1.FacetHolder.Facets());
+         final ObjectSpecification specification = otoa.getSpecification();
+         final DomainClassDto value = lookupDomainClass(specification, domainClassByObjectSpec, config);
+         collectionType.setType(value);
+ 
+         addFacets(otoa, collectionType.getFacets(), config);
+         return collectionType;
+     }
+ 
+     private Action asXsdType(
+             final ObjectAction oa,
+             final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+         Action actionType = new Action();
+         actionType.setId(oa.getId());
+         actionType.setFacets(new org.apache.isis.schema.metamodel.v1.FacetHolder.Facets());
+         actionType.setParams(new Action.Params());
+ 
+         final ObjectSpecification specification = oa.getReturnType();
+         final DomainClassDto value = lookupDomainClass(specification, domainClassByObjectSpec, config);
+         actionType.setReturnType(value);
+ 
+         addFacets(oa, actionType.getFacets(), config);
+ 
+         final List<ObjectActionParameter> parameters = oa.getParameters();
+         final List<Param> params = actionType.getParams().getParam();
+         for (final ObjectActionParameter parameter : parameters) {
+             params.add(asXsdType(parameter, domainClassByObjectSpec, config));
+         }
+         return actionType;
+     }
+ 
+     private DomainClassDto lookupDomainClass(
+             final ObjectSpecification specification,
+             final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+         DomainClassDto value = domainClassByObjectSpec.get(specification);
+         if(value == null) {
+             final DomainClassDto domainClass = asXsdType(specification, config);
+             domainClassByObjectSpec.put(specification, domainClass);
+             value = domainClass;
+         }
+         return value;
+     }
+ 
+     private Param asXsdType(
+             final ObjectActionParameter parameter,
+             final Map<ObjectSpecification, DomainClassDto> domainClassByObjectSpec,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+ 
+         Param parameterType = parameter instanceof OneToOneActionParameter
+                                     ? new ScalarParam()
+                                     : new VectorParam();
+         parameterType.setId(parameter.getId());
+         parameterType.setFacets(new org.apache.isis.schema.metamodel.v1.FacetHolder.Facets());
+ 
+         final ObjectSpecification specification = parameter.getSpecification();
+         final DomainClassDto value = lookupDomainClass(specification, domainClassByObjectSpec, config);
+         parameterType.setType(value);
+ 
+         addFacets(parameter, parameterType.getFacets(), config);
+         return parameterType;
+     }
+ 
+     private void addFacets(
+             final FacetHolder facetHolder,
+             final org.apache.isis.schema.metamodel.v1.FacetHolder.Facets facets,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+ 
 -        final Class<? extends Facet>[] facetTypes = facetHolder.getFacetTypes();
 -        for (final Class<? extends Facet> facetType : facetTypes) {
 -            final Facet facet = facetHolder.getFacet(facetType);
 -            if(!facet.isNoop() || !config.isIgnoreNoop()) {
 -                facets.getFacet().add(asXsdType(facet, config));
 -            }
 -        }
 -        sortFacets(facets.getFacet());
++        final List<org.apache.isis.schema.metamodel.v1.Facet> facetList = facets.getFacet();
++        facetHolder.streamFacets()
++                .filter(facet -> !facet.isNoop() || !config.isIgnoreNoop())
++                .map(facet -> asXsdType(facet, config))
++                .forEach(facetList::add);
++
++        sortFacets(facetList);
+     }
+ 
+     private org.apache.isis.schema.metamodel.v1.Facet asXsdType(
+             final Facet facet,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+         final org.apache.isis.schema.metamodel.v1.Facet facetType = new org.apache.isis.schema.metamodel.v1.Facet();
+         facetType.setId(facet.facetType().getCanonicalName());
+         facetType.setFqcn(facet.getClass().getCanonicalName());
+ 
+         addFacetAttributes(facet, facetType, config);
+ 
+         return facetType;
+     }
+ 
+     private void addFacetAttributes(
+             final Facet facet,
+             final org.apache.isis.schema.metamodel.v1.Facet facetType,
 -            final MetaModelService6.Config config) {
++            final MetaModelService.Config config) {
+ 
 -        Map<String, Object> attributeMap = Maps.newTreeMap();
++        Map<String, Object> attributeMap = _Maps.newTreeMap();
+         facet.appendAttributesTo(attributeMap);
+ 
+         for (final String key : attributeMap.keySet()) {
+             Object attributeObj = attributeMap.get(key);
+             if(attributeObj == null) {
+                 continue;
+             }
+ 
+             String str = asStr(attributeObj);
+             addAttribute(facetType,key, str);
+         }
+ 
+         sortFacetAttributes(facetType.getAttr());
+     }
+ 
+     private void addAttribute(
+             final org.apache.isis.schema.metamodel.v1.Facet facetType,
+             final String key, final String str) {
+         if(str == null) {
+             return;
+         }
+         FacetAttr attributeDto = new FacetAttr();
+         attributeDto.setName(key);
+         attributeDto.setValue(str);
+         facetType.getAttr().add(attributeDto);
+     }
+ 
+     private void sortFacetAttributes(final List<FacetAttr> attributes) {
+         Collections.sort(attributes, new Comparator<FacetAttr>() {
+             @Override
+             public int compare(final FacetAttr o1, final FacetAttr o2) {
+                 return o1.getName().compareTo(o2.getName());
+             }
+         });
+     }
+ 
+     private static void sortDomainClasses(final List<DomainClassDto> specifications) {
+         Collections.sort(specifications, new Comparator<DomainClassDto>() {
+             @Override
+             public int compare(final DomainClassDto o1, final DomainClassDto o2) {
+                 return o1.getId().compareTo(o2.getId());
+             }
+         });
+     }
+ 
+     private void sortMembers(final List<? extends Member> members) {
+         Collections.sort(members, new Comparator<Member>() {
+             @Override public int compare(final Member o1, final Member o2) {
+                 return o1.getId().compareTo(o2.getId());
+             }
+         });
+     }
+ 
+     private void sortFacets(final List<org.apache.isis.schema.metamodel.v1.Facet> facets) {
+         Collections.sort(facets, new Comparator<org.apache.isis.schema.metamodel.v1.Facet>() {
+             @Override public int compare(final org.apache.isis.schema.metamodel.v1.Facet o1, final org.apache.isis.schema.metamodel.v1.Facet o2) {
+                 return o1.getId().compareTo(o2.getId());
+             }
+         });
+     }
+ 
+     private boolean isValueType(final ObjectSpecification specification) {
+         return CommonDtoUtils.VALUE_TYPES.contains(specification.getCorrespondingClass());
+     }
+ 
+ 
+     private String asStr(final Object attributeObj) {
+         String str;
+         if(attributeObj instanceof Method) {
+             str = asStr((Method) attributeObj);
+         } else if(attributeObj instanceof String) {
+             str = asStr((String) attributeObj);
+         } else if(attributeObj instanceof Enum) {
+             str = asStr((Enum) attributeObj);
+         } else if(attributeObj instanceof Class) {
+             str = asStr((Class) attributeObj);
+         } else if(attributeObj instanceof Specification) {
+             str = asStr((Specification) attributeObj);
+         } else if(attributeObj instanceof Facet) {
+             str = asStr((Facet) attributeObj);
+         } else if(attributeObj instanceof JdoNamedQuery) {
+             str = asStr((JdoNamedQuery) attributeObj);
+         } else if(attributeObj instanceof Pattern) {
+             str = asStr((Pattern) attributeObj);
 -        } else if(attributeObj instanceof PublishedObject.PayloadFactory) {
 -            str = asStr((PublishedObject.PayloadFactory) attributeObj);
 -        } else if(attributeObj instanceof PublishedAction.PayloadFactory) {
 -            str = asStr((PublishedAction.PayloadFactory) attributeObj);
+         } else if(attributeObj instanceof CommandDtoProcessor) {
+             str = asStr((CommandDtoProcessor) attributeObj);
+         } else if(attributeObj instanceof ObjectSpecification) {
+             str = asStr((ObjectSpecification) attributeObj);
+         } else if(attributeObj instanceof ObjectMember) {
+             str = asStr((ObjectMember) attributeObj);
+         } else if(attributeObj instanceof List) {
+             str = asStr((List<?>) attributeObj);
+         } else if(attributeObj instanceof Object[]) {
+             str = asStr((Object[]) attributeObj);
+         } else  {
+             str = "" + attributeObj;
+         }
+         return str;
+     }
+ 
+     private String asStr(final String attributeObj) {
 -        return Strings.emptyToNull(attributeObj);
++        return _Strings.emptyToNull(attributeObj);
+     }
+ 
+     private String asStr(final Specification attributeObj) {
+         return attributeObj.getClass().getName();
+     }
+ 
+     private String asStr(final ObjectSpecification attributeObj) {
+         return attributeObj.getFullIdentifier();
+     }
+ 
+     private String asStr(final JdoNamedQuery attributeObj) {
+         return attributeObj.getName();
+     }
+ 
+     private String asStr(final CommandDtoProcessor attributeObj) {
+         return attributeObj.getClass().getName();
+     }
+ 
 -    private String asStr(final PublishedAction.PayloadFactory attributeObj) {
 -        return attributeObj.getClass().getName();
 -    }
 -
 -    private String asStr(final PublishedObject.PayloadFactory attributeObj) {
 -        return attributeObj.getClass().getName();
 -    }
 -
+     private String asStr(final Pattern attributeObj) {
+         return attributeObj.pattern();
+     }
+ 
+     private String asStr(final Facet attributeObj) {
+         return attributeObj.getClass().getName();
+     }
+ 
+     private String asStr(final ObjectMember attributeObj) {
+         return attributeObj.getId();
+     }
+ 
+     private String asStr(final Class attributeObj) {
+         return attributeObj.getCanonicalName();
+     }
+ 
+     private String asStr(final Enum attributeObj) {
+         return attributeObj.name();
+     }
+ 
+     private String asStr(final Method attributeObj) {
+         return attributeObj.toGenericString();
+     }
+ 
+     private String asStr(final Object[] list) {
+         if(list.length == 0) {
+             return null; // skip
+         }
 -        List<String> strings = Lists.newArrayList();
++        List<String> strings = _Lists.newArrayList();
+         for (final Object o : list) {
+             String s = asStr(o);
+             strings.add(s);
+         }
 -        return Joiner.on(";").join(strings);
++        return String.join(";", strings);
+     }
+ 
+     private String asStr(final List<?> list) {
+         if(list.isEmpty()) {
+             return null; // skip
+         }
 -        List<String> strings = Lists.newArrayList();
++        List<String> strings = _Lists.newArrayList();
+         for (final Object o : list) {
+             String s = asStr(o);
+             strings.add(s);
+         }
 -        return Joiner.on(";").join(strings);
++        return String.join(";", strings);
+     }
+ 
+ 
 -
+ }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
index 588ddde,ab1894c..7d59d8b
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/metamodel/MetaModelServiceDefault.java
@@@ -21,9 -21,13 +21,13 @@@ package org.apache.isis.core.metamodel.
  import java.util.Collection;
  import java.util.Collections;
  import java.util.List;
++
 +import java.util.stream.Collectors;
 +import java.util.stream.Stream;
+ import java.util.Map;
+ 
+ import javax.annotation.PostConstruct;
  
 -import com.google.common.collect.Lists;
 -
 -import org.datanucleus.enhancement.Persistable;
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
@@@ -58,14 -60,20 +63,21 @@@ import org.apache.isis.schema.metamodel
  @DomainService(
          nature = NatureOfService.DOMAIN,
          menuOrder = "" + Integer.MAX_VALUE
-         )
 -)
 -public class MetaModelServiceDefault implements MetaModelService6 {
++    )
 +public class MetaModelServiceDefault implements MetaModelService {
  
      @SuppressWarnings("unused")
      private final static Logger LOG = LoggerFactory.getLogger(MetaModelServiceDefault.class);
  
+     private MetaModelExporter metaModelExporter;
+ 
+     @PostConstruct
+     @Programmatic
+     public void init(Map<String,String> properties) {
+         metaModelExporter = new MetaModelExporter(specificationLookup);
+     }
  
 +    @Override
      @Programmatic
      public Class<?> fromObjectType(final String objectType) {
          if(objectType == null) {
@@@ -286,7 -291,9 +298,10 @@@
      @javax.inject.Inject
      AppManifestProvider appManifestProvider;
  
- 
+     @Override
+     public MetamodelDto exportMetaModel(final Config config) {
+         return metaModelExporter.exportMetaModel(config);
+     }
  
 +
  }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefault.java
index 0f53f69,5447214..577368c
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefault.java
@@@ -31,16 -32,17 +31,17 @@@ import org.apache.isis.core.metamodel.s
  /**
   * This is populated in two parts.
   *
-  * Initially the #specByClassName is populated using {@link #cache(String, ObjectSpecification)}.  This allows
-  * {@link #allSpecifications()} to return a list of specs.
+  * Initially the <tt>specByClassName</tt> map is populated using {@link #cache(String, ObjectSpecification)}.
+  * This allows {@link #allSpecifications()} to return a list of specs.
+  * Later on, {@link #init()} called which populates #classNameBySpecId.
   *
-  * Later on, {@link #init(Map)} is called which populates #classNameBySpecId.
+  * Attempting to call {@link #getByObjectType(ObjectSpecId)} before {@link #init() initialisation} will result in an
+  * {@link IllegalStateException}.
   *
-  * TODO: the information passed to #init actually comes from the cache itself (the caller calls #allSpecifications() first) so this could be simplified
   */
  class SpecificationCacheDefault {
 -    
 -    private final Map<String, ObjectSpecification> specByClassName = Maps.newHashMap();
 +
 +    private final Map<String, ObjectSpecification> specByClassName = _Maps.newHashMap();
      private Map<ObjectSpecId, String> classNameBySpecId;
  
      public ObjectSpecification get(final String className) {
@@@ -69,12 -71,23 +70,24 @@@
          return className != null ? specByClassName.get(className) : null;
      }
  
-     /**
-      */
-     synchronized void init(final Map<ObjectSpecId, ObjectSpecification> specById) {
+     synchronized void init() {
+         final Collection<ObjectSpecification> objectSpecifications = allSpecifications();
 -        final Map<ObjectSpecId, ObjectSpecification> specById = Maps.newHashMap();
++        final Map<ObjectSpecId, ObjectSpecification> specById = _Maps.newHashMap();
+         for (final ObjectSpecification objSpec : objectSpecifications) {
+             final ObjectSpecId objectSpecId = objSpec.getSpecId();
+             if (objectSpecId == null) {
+                 continue;
+             }
+             specById.put(objectSpecId, objSpec);
+         }
+ 
+         internalInit(specById);
+     }
+ 
+     void internalInit(final Map<ObjectSpecId, ObjectSpecification> specById) {
 -        final Map<ObjectSpecId, String> classNameBySpecId = Maps.newHashMap();
 -        final Map<String, ObjectSpecification> specByClassName = Maps.newHashMap();
 +        final Map<ObjectSpecId, String> classNameBySpecId = _Maps.newHashMap();
 +        final Map<String, ObjectSpecification> specByClassName = _Maps.newHashMap();
 +
          for (ObjectSpecId objectSpecId : specById.keySet()) {
              final ObjectSpecification objectSpec = specById.get(objectSpecId);
              final String className = objectSpec.getCorrespondingClass().getName();
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index a171c51,2ce4dbc..acc7097
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@@ -17,12 -17,16 +17,11 @@@
  package org.apache.isis.core.metamodel.specloader;
  
  import java.util.Collection;
 -import java.util.Collections;
  import java.util.List;
- import java.util.Map;
  import java.util.concurrent.Callable;
  import java.util.concurrent.Future;
 -
 -import com.google.common.base.Function;
 -import com.google.common.base.Predicate;
 -import com.google.common.collect.FluentIterable;
 -import com.google.common.collect.ImmutableList;
 -import com.google.common.collect.Lists;
 +import java.util.stream.Collectors;
 +import java.util.stream.Stream;
  
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
@@@ -31,8 -35,6 +30,7 @@@ import org.apache.isis.applib.AppManife
  import org.apache.isis.applib.annotation.DomainService;
  import org.apache.isis.applib.annotation.NatureOfService;
  import org.apache.isis.applib.annotation.Programmatic;
 +import org.apache.isis.commons.internal.collections._Lists;
- import org.apache.isis.commons.internal.collections._Maps;
  import org.apache.isis.core.commons.components.ApplicationScopedComponent;
  import org.apache.isis.core.commons.config.IsisConfiguration;
  import org.apache.isis.core.commons.ensure.Assert;
@@@ -221,10 -247,14 +219,11 @@@ public class SpecificationLoader implem
  
  
          // for debugging only
-         final Collection<ObjectSpecification> cachedSpecificationsAfter = allCachedSpecifications();
+         final Collection<ObjectSpecification> cachedSpecificationsAfter = cache.allSpecifications();
 -        ImmutableList<ObjectSpecification> cachedAfterNotBefore = FluentIterable.from(cachedSpecificationsAfter)
 -                .filter(new Predicate<ObjectSpecification>() {
 -                    @Override
 -                    public boolean apply(final ObjectSpecification objectSpecification) {
 -                        return !cachedSpecifications.contains(objectSpecification);
 -                    }
 -                }).toList();
 +        List<ObjectSpecification> cachedAfterNotBefore = cachedSpecificationsAfter.stream()
 +                .filter(spec -> !cachedSpecifications.contains(spec))
 +                .collect(Collectors.toList());
++
          LOG.info(String.format("cachedSpecificationsAfter.size = %d ; cachedAfterNotBefore.size = %d",
                  cachedSpecificationsAfter.size(), cachedAfterNotBefore.size()));
  
@@@ -254,21 -284,11 +253,8 @@@
      }
  
  
-     private void cacheBySpecId(final Collection<ObjectSpecification> objectSpecifications) {
-         final Map<ObjectSpecId, ObjectSpecification> specById = _Maps.newHashMap();
-         for (final ObjectSpecification objSpec : objectSpecifications) {
-             final ObjectSpecId objectSpecId = objSpec.getSpecId();
-             if (objectSpecId == null) {
-                 continue;
-             }
-             specById.put(objectSpecId, objSpec);
-         }
- 
-         cache.init(specById);
-     }
- 
  
 -
 -    //endregion
 -
 -    //region > shutdown
 +    // -- shutdown
  
      @Programmatic
      public void shutdown() {
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
index 2184547,b0156e9..9c7c87c
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
@@@ -135,14 -129,14 +130,14 @@@ public class ObjectActionContributee ex
  
              final ObjectActionParameterContributee contributedParam =
                      serviceParameter.getPeer().getFeatureType() == FeatureType.ACTION_PARAMETER_SCALAR
 -                            ? new OneToOneActionParameterContributee(
 -                                    servicePojo, serviceParameter, contributeeParamNum, this)
 -                            : new OneToManyActionParameterContributee(
 -                                    servicePojo, serviceParameter, contributeeParamNum, this);
 +                    ? new OneToOneActionParameterContributee(
-                             getServiceAdapter(), serviceParameter, contributeeParamNum, this)
-                             : new OneToManyActionParameterContributee(
-                                     getServiceAdapter(), serviceParameter, contributeeParamNum, this);
++                            servicePojo, serviceParameter, contributeeParamNum, this)
++                    : new OneToManyActionParameterContributee(
++                            servicePojo, serviceParameter, contributeeParamNum, this);
  
 -            contributeeParameters.add(contributedParam);
 +                            contributeeParameters.add(contributedParam);
  
 -            contributeeParamNum++;
 +                            contributeeParamNum++;
          }
          return contributeeParameters;
      }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
index 76dbe96,3527c89..9865105e
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
@@@ -25,10 -25,10 +25,10 @@@ import org.apache.isis.core.metamodel.f
  import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
  
  public abstract class ObjectActionParameterContributeeAbstract
 -        extends ObjectActionParameterAbstract
 -        implements ObjectActionParameterContributee {
 +extends ObjectActionParameterAbstract
 +implements ObjectActionParameterContributee {
  
-     private final ObjectAdapter serviceAdapter;
+     private final Object servicePojo;
      private final ObjectActionParameter serviceActionParameter;
      private final ObjectActionContributee contributeeAction;
  
@@@ -52,12 -53,14 +53,16 @@@
                  interactionInitiatedBy);
      }
  
+     protected ObjectAdapter getServiceAdapter() {
+         return getObjectPersistor().adapterFor(servicePojo);
+     }
+ 
 +    @Override
      protected ObjectAdapter targetForDefaultOrChoices(final ObjectAdapter adapter) {
-         return serviceAdapter;
+         return getServiceAdapter();
      }
  
 +    @Override
      protected List<ObjectAdapter> argsForDefaultOrChoices(
              final ObjectAdapter contributee,
              final List<ObjectAdapter> argumentsIfAvailable) {
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index d4eee78,fe9b14d..f914547
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@@ -116,10 -113,13 +116,13 @@@ public abstract class ObjectMemberAbstr
          return featureType;
      }
  
 -    //endregion
  
 -    //region > Facets
 +
 +    // -- Facets
  
+     /**
+      * Not API.
+      */
      public FacetedMethod getFacetedMethod() {
          return facetedMethod;
      }
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterContributee.java
index da84bce,ed5e622..5d3ca65
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyActionParameterContributee.java
@@@ -23,11 -22,11 +22,11 @@@ import org.apache.isis.core.metamodel.f
  import org.apache.isis.core.metamodel.spec.feature.OneToManyActionParameter;
  
  public class OneToManyActionParameterContributee
 -        extends ObjectActionParameterContributeeAbstract
 -        implements OneToManyActionParameter {
 +extends ObjectActionParameterContributeeAbstract
 +implements OneToManyActionParameter {
  
      public OneToManyActionParameterContributee(
-             final ObjectAdapter serviceAdapter,
+             final Object servicePojo,
              final ObjectActionParameterAbstract serviceActionParameter,
              final int contributeeParamNumber,
              final ObjectActionContributee contributeeAction) {
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
index c37efce,f71777e..9f3867d
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@@ -205,15 -207,19 +205,19 @@@ public class OneToManyAssociationMixedI
      }
  
      @Override
+     public ObjectSpecification getOnType() {
+         return mixedInType;
+     }
+ 
+     @Override
      public ObjectSpecification getMixinType() {
          return getSpecificationLoader().loadSpecification(mixinType);
- 
      }
  
 -    //endregion
 +
  
      private PublishingServiceInternal getPublishingServiceInternal() {
 -        return getServicesInjector().lookupService(PublishingServiceInternal.class);
 +        return getServicesInjector().lookupServiceElseFail(PublishingServiceInternal.class);
      }
  
  
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
index e60a142,b98d326..f6fc3ef
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
@@@ -21,11 -20,11 +20,11 @@@ import org.apache.isis.core.metamodel.f
  import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
  
  public class OneToOneActionParameterContributee
 -        extends ObjectActionParameterContributeeAbstract
 -        implements OneToOneActionParameter {
 +extends ObjectActionParameterContributeeAbstract
 +implements OneToOneActionParameter {
  
      public OneToOneActionParameterContributee(
-             final ObjectAdapter serviceAdapter,
+             final Object servicePojo,
              final ObjectActionParameterAbstract serviceActionParameter,
              final int contributeeParamNumber,
              final ObjectActionContributee contributeeAction) {
diff --cc core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index e0ca905,28b5a39..22948ea
--- 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,13 -31,14 +30,16 @@@ import java.util.stream.Stream
  import org.slf4j.Logger;
  import org.slf4j.LoggerFactory;
  
 +import org.apache.isis.applib.Identifier;
 +import org.apache.isis.applib.annotation.NatureOfService;
 +import org.apache.isis.commons.internal.base._Lazy;
 +import org.apache.isis.commons.internal.collections._Lists;
 +import org.apache.isis.commons.internal.collections._Maps;
+ import org.apache.isis.applib.annotation.HomePage;
+ import org.apache.isis.applib.annotation.NatureOfService;
 -import org.apache.isis.applib.filter.Filter;
 -import org.apache.isis.applib.filter.Filters;
+ import org.apache.isis.applib.fixturescripts.FixtureScript;
  import org.apache.isis.core.commons.lang.StringExtensions;
  import org.apache.isis.core.commons.util.ToString;
 -import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
  import org.apache.isis.core.metamodel.facetapi.Facet;
  import org.apache.isis.core.metamodel.facetapi.FacetHolder;
  import org.apache.isis.core.metamodel.facets.FacetedMethod;
@@@ -201,16 -205,20 +205,19 @@@ public class ObjectSpecificationDefaul
          }
      }
  
 -    //endregion
  
- 
 -    //region > create associations and actions
 -    private List<ObjectAssociation> createAssociations(Properties properties) {
 -        final List<ObjectAssociation> associations = Lists.newArrayList();
 +    // -- create associations and actions
 +    private List<ObjectAssociation> createAssociations() {
-         final List<FacetedMethod> associationFacetedMethods = facetedMethodsBuilder.getAssociationFacetedMethods();
 +        final List<ObjectAssociation> associations = _Lists.newArrayList();
-         for (FacetedMethod facetedMethod : associationFacetedMethods) {
-             final ObjectAssociation association = createAssociation(facetedMethod);
-             if(association != null) {
-                 associations.add(association);
+         if(skipAssociationsAndActions()) {
+             // add no associations
+         } else {
 -            final List<FacetedMethod> associationFacetedMethods = facetedMethodsBuilder.getAssociationFacetedMethods(properties);
++            final List<FacetedMethod> associationFacetedMethods = facetedMethodsBuilder.getAssociationFacetedMethods();
+             for (FacetedMethod facetedMethod : associationFacetedMethods) {
+                 final ObjectAssociation association = createAssociation(facetedMethod);
+                 if(association != null) {
+                     associations.add(association);
+                 }
              }
          }
          return associations;
@@@ -227,13 -234,17 +233,17 @@@
          }
      }
  
 -    private List<ObjectAction> createActions(Properties metadataProperties) {
 -        final List<ObjectAction> actions = Lists.newArrayList();
 +    private List<ObjectAction> createActions() {
-         final List<FacetedMethod> actionFacetedMethods = facetedMethodsBuilder.getActionFacetedMethods();
 +        final List<ObjectAction> actions = _Lists.newArrayList();
-         for (FacetedMethod facetedMethod : actionFacetedMethods) {
-             final ObjectAction action = createAction(facetedMethod);
-             if(action != null) {
-                 actions.add(action);
+         if(skipAssociationsAndActions()) {
+             // create no actions
+         } else {
 -            final List<FacetedMethod> actionFacetedMethods = facetedMethodsBuilder.getActionFacetedMethods(metadataProperties);
++            final List<FacetedMethod> actionFacetedMethods = facetedMethodsBuilder.getActionFacetedMethods();
+             for (FacetedMethod facetedMethod : actionFacetedMethods) {
+                 final ObjectAction action = createAction(facetedMethod);
+                 if(action != null) {
+                     actions.add(action);
+                 }
              }
          }
          return actions;
@@@ -248,9 -259,34 +258,35 @@@
          }
      }
  
+     private boolean skipAssociationsAndActions() {
+         return isFixtureScript() || isDomainServiceWithDomainNatureOfServiceNotHomePage();
+     }
+ 
+     // TODO: this is a bit horrible; maybe instead introduce a new NatureOfService for home page services (also for seed services?)
+     private boolean isDomainServiceWithDomainNatureOfServiceNotHomePage() {
+         final DomainServiceFacet domainServiceFacet = this.getFacet(DomainServiceFacet.class);
+         if (domainServiceFacet == null) {
+             return false;
+         }
+         if (domainServiceFacet.getNatureOfService() != NatureOfService.DOMAIN) {
+             return false;
+         }
+         // domain services that have a single method annotated with @HomePage ARE introspected.
+         final Method[] methods = getCorrespondingClass().getDeclaredMethods();
+         if (methods.length != 1) {
+             return true;
+         }
+         return methods[0].getAnnotation(HomePage.class) == null;
+     }
+ 
+     private boolean isFixtureScript() {
+         return FixtureScript.class.isAssignableFrom(getCorrespondingClass());
+     }
+ 
+     //endregion
  
 -    //region > isXxx
 +
 +    // -- isXxx
  
      @Override
      public boolean isViewModel() {
diff --cc core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 9f53194,ab64d00..cbf4969
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@@ -80,11 -102,22 +79,12 @@@ import org.apache.isis.core.metamodel.f
  import org.apache.isis.core.metamodel.facets.object.ignore.javalang.RemoveMethodsFacetFactory;
  import org.apache.isis.core.metamodel.facets.object.ignore.jdo.RemoveJdoEnhancementTypesFacetFactory;
  import org.apache.isis.core.metamodel.facets.object.ignore.jdo.RemoveJdoPrefixedMethodsFacetFactory;
 -import org.apache.isis.core.metamodel.facets.object.immutable.immutablemarkerifc.ImmutableFacetMarkerInterfaceFactory;
 -import org.apache.isis.core.metamodel.facets.object.mask.annotation.MaskFacetOnTypeAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.object.maxlen.annotation.MaxLengthFacetOnTypeAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFactory;
++
 +import org.apache.isis.core.metamodel.facets.object.immutable.immutableannot.CopyImmutableFacetOntoMembersFactory;
  import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacetForMixinAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.object.multiline.annotation.MultiLineFacetOnTypeAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.object.named.annotation.NamedFacetOnTypeAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.object.notpersistable.notpersistableannot.NotPersistableFacetAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.object.notpersistable.notpersistablemarkerifc.NotPersistableFacetMarkerInterfaceFactory;
 +import org.apache.isis.core.metamodel.facets.object.navparent.annotation.NavigableParentAnnotationFacetFactory;
  import org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromClassNameFactory;
  import org.apache.isis.core.metamodel.facets.object.objectvalidprops.impl.ObjectValidPropertiesFacetImplFactory;
 -import org.apache.isis.core.metamodel.facets.object.paged.annotation.PagedFacetOnTypeAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.object.parented.aggregated.AggregatedAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.object.parseable.annotcfg.ParseableFacetAnnotationElseConfigurationFactory;
 -import org.apache.isis.core.metamodel.facets.object.plural.annotation.PluralAnnotationFacetFactory;
 -import org.apache.isis.core.metamodel.facets.object.plural.staticmethod.PluralFacetStaticMethodFactory;
  import org.apache.isis.core.metamodel.facets.object.recreatable.DisabledFacetOnCollectionDerivedFromViewModelFacetFactory;
  import org.apache.isis.core.metamodel.facets.object.recreatable.DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory;
  import org.apache.isis.core.metamodel.facets.object.recreatable.RecreatableObjectFacetFactory;
@@@ -94,29 -130,30 +94,23 @@@ import org.apache.isis.core.metamodel.f
  import org.apache.isis.core.metamodel.facets.object.value.annotcfg.ValueFacetAnnotationOrConfigurationFactory;
  import org.apache.isis.core.metamodel.facets.param.autocomplete.method.ActionParameterAutoCompleteFacetViaMethodFactory;
  import org.apache.isis.core.metamodel.facets.param.bigdecimal.javaxvaldigits.BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory;
- import org.apache.isis.core.metamodel.facets.param.choices.enums.ActionParameterChoicesFacetDerivedFromChoicesFacetFactory;
  import org.apache.isis.core.metamodel.facets.param.choices.method.ActionChoicesFacetViaMethodFactory;
  import org.apache.isis.core.metamodel.facets.param.choices.methodnum.ActionParameterChoicesFacetViaMethodFactory;
- import org.apache.isis.core.metamodel.facets.param.defaults.fromtype.ActionParameterDefaultFacetDerivedFromTypeFactory;
  import org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethodFactory;
- import org.apache.isis.core.metamodel.facets.param.describedas.annotderived.DescribedAsFacetOnParameterAnnotationElseDerivedFromTypeFactory;
  import org.apache.isis.core.metamodel.facets.param.layout.ParameterLayoutFacetFactory;
  import org.apache.isis.core.metamodel.facets.param.mandatory.dflt.MandatoryFacetOnParametersDefaultFactory;
 -import org.apache.isis.core.metamodel.facets.param.multiline.annotation.MultiLineFacetOnParameterAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.param.named.annotation.NamedFacetOnParameterAnnotationFactory;
  import org.apache.isis.core.metamodel.facets.param.parameter.ParameterAnnotationFacetFactory;
 -import org.apache.isis.core.metamodel.facets.param.renderedasdaybefore.annotation.RenderedAsDayBeforeFacetOnParameterAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.param.typicallen.annotation.TypicalLengthFacetOnParameterAnnotationFactory;
 -import org.apache.isis.core.metamodel.facets.param.validating.maskannot.MaskFacetOnParameterAnnotationFactory;
 +import org.apache.isis.core.metamodel.facets.param.typicallen.fromtype.TypicalLengthFacetOnParameterDerivedFromTypeFacetFactory;
  import org.apache.isis.core.metamodel.facets.properties.accessor.PropertyAccessorFacetViaAccessorFactory;
  import org.apache.isis.core.metamodel.facets.properties.autocomplete.method.PropertyAutoCompleteFacetMethodFactory;
  import org.apache.isis.core.metamodel.facets.properties.bigdecimal.javaxvaldigits.BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory;
- import org.apache.isis.core.metamodel.facets.properties.choices.enums.PropertyChoicesFacetDerivedFromChoicesFacetFactory;
  import org.apache.isis.core.metamodel.facets.properties.choices.method.PropertyChoicesFacetViaMethodFactory;
- import org.apache.isis.core.metamodel.facets.properties.defaults.fromtype.PropertyDefaultFacetDerivedFromTypeFactory;
  import org.apache.isis.core.metamodel.facets.properties.defaults.method.PropertyDefaultFacetViaMethodFactory;
- import org.apache.isis.core.metamodel.facets.properties.disabled.fromimmutable.DisabledFacetOnPropertyDerivedFromImmutableFactory;
  import org.apache.isis.core.metamodel.facets.properties.disabled.inferred.DisabledFacetOnPropertyInferredFactory;
  import org.apache.isis.core.metamodel.facets.properties.mandatory.dflt.MandatoryFacetOnProperyDefaultFactory;
 -import org.apache.isis.core.metamodel.facets.properties.mandatory.staticmethod.MandatoryFacetOnPropertyStaticMethodFactory;
 -import org.apache.isis.core.metamodel.facets.properties.multiline.annotation.MultiLineFacetOnPropertyFactory;
  import org.apache.isis.core.metamodel.facets.properties.property.PropertyAnnotationFacetFactory;
  import org.apache.isis.core.metamodel.facets.properties.propertylayout.PropertyLayoutFacetFactory;
 -import org.apache.isis.core.metamodel.facets.properties.renderedasdaybefore.annotation.RenderedAsDayBeforeAnnotationOnPropertyFacetFactory;
 -import org.apache.isis.core.metamodel.facets.properties.typicallen.annotation.TypicalLengthOnPropertyFacetFactory;
 +import org.apache.isis.core.metamodel.facets.properties.typicallen.fromtype.TypicalLengthFacetOnPropertyDerivedFromTypeFacetFactory;
  import org.apache.isis.core.metamodel.facets.properties.update.PropertyModifyFacetFactory;
  import org.apache.isis.core.metamodel.facets.properties.update.PropertySetAndClearFacetFactory;
  import org.apache.isis.core.metamodel.facets.properties.validating.dflt.PropertyValidateFacetDefaultFactory;
@@@ -259,19 -300,32 +253,19 @@@ public final class ProgrammingModelFace
  
          addFactory(new ValidateObjectFacetMethodFactory());
          addFactory(new ObjectValidPropertiesFacetImplFactory());
 -        
 -        addFactory(new PluralFacetStaticMethodFactory());
 -        
 -        addFactory(new org.apache.isis.core.metamodel.facets.object.named.staticmethod.NamedFacetStaticMethodFactory());
  
          addFactory(new MemberOrderFacetFactory());
 -        
 -        addFactory(new ActionOrderFacetAnnotationFactory());
 -        
 -        addFactory(new FieldOrderFacetAnnotationFactory());
 -        addFactory(new MemberGroupLayoutFacetFactory());
 -
 -        addFactory(new AggregatedAnnotationFactory());
 -        
 -        addFactory(new BookmarkPolicyFacetViaBookmarkableAnnotationElseFallbackFactory());
 +
 +        addFactory(new BookmarkPolicyFacetFallbackFactory());
          addFactory(new HomePageFacetAnnotationFactory());
 -        addFactory(new ChoicesFacetFromBoundedMarkerInterfaceFactory());
  
          addFactory(new DefaultedFacetAnnotationElseConfigurationFactory());
-         addFactory(new PropertyDefaultFacetDerivedFromTypeFactory());
-         addFactory(new ActionParameterDefaultFacetDerivedFromTypeFactory());
+         //addFactory(new PropertyDefaultFacetDerivedFromTypeFactory()); ... logic moved to post-processor
+         //addFactory(new ActionParameterDefaultFacetDerivedFromTypeFactory()); ... logic moved to post-processor
  
 -        
 -        addFactory(new DescribedAsFacetOnTypeAnnotationFactory());
 +
          addFactory(new DescribedAsFacetOnMemberFactory());
-         addFactory(new DescribedAsFacetOnParameterAnnotationElseDerivedFromTypeFactory());
+         //addFactory(new DescribedAsFacetOnParameterAnnotationElseDerivedFromTypeFactory()); ... logic moved to post-processor
  
          addFactory(new BigDecimalFacetOnParameterFromJavaxValidationAnnotationFactory());
          addFactory(new BigDecimalFacetOnPropertyFromJavaxValidationDigitsAnnotationFactory());
@@@ -289,10 -362,11 +283,10 @@@
          addFactory(new HiddenObjectFacetViaMethodFactory());
          addFactory(new DisabledObjectFacetViaMethodFactory());
  
-         addFactory(new CopyImmutableFacetOntoMembersFactory());
+         // addFactory(new CopyImmutableFacetOntoMembersFactory()); ... logic moved to post-processor
 -        addFactory(new ImmutableFacetMarkerInterfaceFactory());
  
          addFactory(new RecreatableObjectFacetFactory());
 -        addFactory(new XmlJavaTypeAdapterFacetFactory());
 +        addFactory(new JaxbFacetFactory());
          addFactory(new MixinFacetForMixinAnnotationFactory());
  
  
@@@ -334,10 -420,48 +328,9 @@@
          addFactory(new CollectionLayoutFacetFactory());
  
  
 -        addFactory(new NamedFacetOnTypeAnnotationFactory());
 -        addFactory(new NamedFacetOnMemberFactory());
 -        
 -        addFactory(new NamedFacetOnParameterAnnotationFactory());
 -
 -        addFactory(new NotPersistableFacetAnnotationFactory());
 -        addFactory(new NotPersistableFacetMarkerInterfaceFactory());
 -
 -        addFactory(new ParseableFacetAnnotationElseConfigurationFactory());
 -        
 -        addFactory(new PluralAnnotationFacetFactory());
 -
 -        addFactory(new PagedFacetOnTypeAnnotationFactory());
 -
 -        addFactory(new PagedFacetOnCollectionFactory());
 -
 -        addFactory(new PagedFacetOnActionFactory());
 -
--        // must come after any facets that install titles
-         addFactory(new TypicalLengthFacetOnPropertyDerivedFromTypeFacetFactory());
-         addFactory(new TypicalLengthFacetOnParameterDerivedFromTypeFacetFactory());
 -        
 -        addFactory(new MaskFacetOnTypeAnnotationFactory());
 -        addFactory(new MaskFacetOnPropertyAnnotationFactory());
 -        
 -        addFactory(new MaskFacetOnParameterAnnotationFactory());
 -
 -        // must come after any facets that install titles, and after mask
 -        // if takes precedence over mask.
 -        
 -        addFactory(new RegExFacetOnTypeAnnotationFactory());
 -
+         // addFactory(new TypicalLengthFacetOnPropertyDerivedFromTypeFacetFactory()); ... logic moved to post-processor
+         // addFactory(new TypicalLengthFacetOnParameterDerivedFromTypeFacetFactory()); ... logic moved to post-processor
  
 -        
 -        addFactory(new TypicalLengthFacetOnTypeAnnotationFactory());
 -        addFactory(new TypicalLengthOnPropertyFacetFactory());
 -        
 -        addFactory(new TypicalLengthFacetOnParameterAnnotationFactory());
 -        
 -        addFactory(new RenderedAsDayBeforeAnnotationOnPropertyFacetFactory());
 -        
 -        addFactory(new RenderedAsDayBeforeFacetOnParameterAnnotationFactory());
  
          // built-in value types for Java language
          addFactory(new BooleanPrimitiveValueFacetUsingSemanticsProviderFactory());
diff --cc core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java
index ac05bb2,4ea8619..6951018
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java
@@@ -21,10 -21,8 +21,8 @@@ package org.apache.isis.core.metamodel.
  import java.util.Collection;
  import java.util.Map;
  
 -import com.google.common.collect.Maps;
 +import org.apache.isis.commons.internal.collections._Maps;
  
- import org.apache.isis.core.metamodel.spec.ObjectSpecId;
- import org.apache.isis.core.metamodel.spec.ObjectSpecification;
  import org.jmock.Expectations;
  import org.jmock.auto.Mock;
  import org.junit.After;
@@@ -106,10 -106,10 +106,10 @@@ public class SpecificationCacheDefaultT
  
      @Test
      public void getByObjectType_whenSet() {
 -        Map<ObjectSpecId, ObjectSpecification> specByObjectType = Maps.newHashMap();
 +        Map<ObjectSpecId, ObjectSpecification> specByObjectType = _Maps.newHashMap();
          specByObjectType.put(ObjectSpecId.of("CUS"), customerSpec);
          
-         specificationCache.init(specByObjectType);
+         specificationCache.internalInit(specByObjectType);
          final ObjectSpecification objectSpec = specificationCache.getByObjectType(ObjectSpecId.of("CUS"));
          
          assertSame(objectSpec, customerSpec);
diff --cc core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java
index 30ac450,6ca987e..c3f144a
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java
@@@ -258,32 -256,34 +258,32 @@@ public class IsisSessionFactoryBuilder 
                              return "CommandDtoUtils.init()";
                          }
                      }
 +                ); 
  
 -            );
  
 +            // wait on this thread for tasks to complete
              ThreadPoolSupport.getInstance().joinGatherFailures(futures);
+             specificationLoader.postProcess();
  
              persistenceSessionFactory.catalogNamedQueries(specificationLoader);
  
              isisSessionFactory.constructServices();
  
              isisSessionFactory.doInSession(
 -                    new Runnable() {
 -                        @Override
 -                        public void run() {
 -                            try {
 -                                specificationLoader.validateAndAssert();
 -
 -                            } catch (final MetaModelInvalidException ex) {
 -                                // no need to use a higher level, such as error(...); the calling code will expose any metamodel
 -                                // validation errors in their own particular way.
 -                                if(LOG.isDebugEnabled()) {
 -                                    LOG.debug("Meta model invalid", ex);
 -                                }
 -                                IsisContext.setMetaModelInvalidException(ex);
 +                    () -> {
-                         specificationLoader.postProcess();
 +                        try {
 +                            specificationLoader.validateAndAssert();
 +
 +                        } catch (final MetaModelInvalidException ex) {
 +                            // no need to use a higher level, such as error(...); the calling code will expose any metamodel
 +                            // validation errors in their own particular way.
 +                            if(LOG.isDebugEnabled()) {
 +                                LOG.debug("Meta model invalid", ex);
                              }
 +                            _Context.putSingleton(MetaModelInvalidException.class, ex);
                          }
                      }
 -            );
 +                    );
  
  
          } catch (final IsisSystemException ex) {
diff --cc core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
index 52e8e19,680cf05..fc15470
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider.java
@@@ -23,29 -23,42 +23,35 @@@ import java.util.Collection
  import java.util.List;
  import java.util.Map;
  import java.util.Set;
 +import java.util.function.Function;
 +import java.util.stream.Collectors;
 +import java.util.stream.Stream;
  
  import javax.annotation.Nullable;
+ import javax.jdo.annotations.PersistenceCapable;
  import javax.xml.bind.annotation.XmlElement;
  
 -import com.google.common.base.Function;
 -import com.google.common.base.Joiner;
 -import com.google.common.base.Predicate;
 -import com.google.common.collect.FluentIterable;
 -import com.google.common.collect.Iterables;
 -import com.google.common.collect.Lists;
 -import com.google.common.collect.Sets;
 -
 -import org.reflections.Reflections;
 -import org.reflections.vfs.Vfs;
--
  import org.apache.isis.applib.AppManifest;
  import org.apache.isis.applib.annotation.DomainObject;
+ import org.apache.isis.applib.annotation.DomainObjectLayout;
  import org.apache.isis.applib.annotation.DomainService;
+ import org.apache.isis.applib.annotation.DomainServiceLayout;
  import org.apache.isis.applib.annotation.Mixin;
  import org.apache.isis.applib.annotation.Nature;
+ import org.apache.isis.applib.annotation.Programmatic;
  import org.apache.isis.applib.annotation.ViewModel;
+ import org.apache.isis.applib.annotation.ViewModelLayout;
+ import org.apache.isis.applib.fixturescripts.DiscoverableFixtureScript;
  import org.apache.isis.applib.fixturescripts.FixtureScript;
 -import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections;
 +import org.apache.isis.commons.internal.base._NullSafe;
 +import org.apache.isis.commons.internal.collections._Lists;
 +import org.apache.isis.commons.internal.collections._Sets;
  import org.apache.isis.core.commons.config.IsisConfiguration;
  import org.apache.isis.core.commons.config.IsisConfigurationDefault;
  import org.apache.isis.core.commons.factory.InstanceUtil;
 -import org.apache.isis.core.commons.lang.ClassUtil;
 +import org.apache.isis.core.commons.lang.ClassFunctions;
  import org.apache.isis.core.metamodel.facetapi.MetaModelRefiner;
+ import org.apache.isis.core.metamodel.facets.Annotations;
 -import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
  import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
  import org.apache.isis.core.metamodel.services.ServicesInjector;
  import org.apache.isis.core.metamodel.specloader.ReflectorConstants;
@@@ -128,33 -139,64 +134,55 @@@ public abstract class IsisComponentProv
      }
  
      private void findAndRegisterTypes(final AppManifest appManifest) {
 -        final Iterable<String> modulePackages = modulePackageNamesFrom(appManifest);
 +        final Stream<String> modulePackages = modulePackageNamesFrom(appManifest);
          final AppManifest.Registry registry = AppManifest.Registry.instance();
  
 -        final List<String> moduleAndFrameworkPackages = Lists.newArrayList();
 +        final List<String> moduleAndFrameworkPackages = _Lists.newArrayList();
          moduleAndFrameworkPackages.addAll(AppManifest.Registry.FRAMEWORK_PROVIDED_SERVICES);
 -        Iterables.addAll(moduleAndFrameworkPackages, modulePackages);
 -
 -        Vfs.setDefaultURLTypes(ClassDiscoveryServiceUsingReflections.getUrlTypes());
 -
 -        final Reflections reflections = new Reflections(moduleAndFrameworkPackages);
 -
 -        final Set<Class<?>> domainServiceTypes = Sets.newLinkedHashSet();
 -        domainServiceTypes.addAll(reflections.getTypesAnnotatedWith(DomainService.class));
 -        domainServiceTypes.addAll(reflections.getTypesAnnotatedWith(DomainServiceLayout.class));
 -
 -        final Set<Class<?>> persistenceCapableTypes = Sets.newLinkedHashSet();
 -        persistenceCapableTypes.addAll(reflections.getTypesAnnotatedWith(PersistenceCapable.class));
 -
 -        // the fixtureScript types are introspected just to provide a drop-down when running fixture scripts
 -        // in prototyping mode (though they may be introspected lazily if actually run).
 -        // we therefore try to limit the set of fixture types eagerly introspected at startup
 -        final Set<Class<? extends FixtureScript>> fixtureScriptTypes = Sets.newLinkedHashSet();
 -        fixtureScriptTypes.addAll(
 -            FluentIterable.from(reflections.getSubTypesOf(FixtureScript.class)).
 -                filter(new Predicate<Class<?>>(){
 -                    @Override
 -                    public boolean apply(@Nullable final Class<?> aClass) {
 -                        // ignore as a fixture script if annotated with @Programmatic
 -                        // (though directly implementing DiscoverableFixtureScript takes precedence and will NOT ignore)
 -                        return DiscoverableFixtureScript.class.isAssignableFrom(aClass) ||
 -                        Annotations.getAnnotation(aClass, Programmatic.class) == null;
 -                    }
 +        
 +        modulePackages.forEach(moduleAndFrameworkPackages::add);
 +
 +        final ClassDiscovery discovery = ClassDiscoveryPlugin.get().discover(moduleAndFrameworkPackages);
 +
-         final Set<Class<?>> domainServiceTypes = discovery.getTypesAnnotatedWith(DomainService.class);
++        final Set<Class<?>> domainServiceTypes = _Sets.newLinkedHashSet();
++        domainServiceTypes.addAll(discovery.getTypesAnnotatedWith(DomainService.class));
++        domainServiceTypes.addAll(discovery.getTypesAnnotatedWith(DomainServiceLayout.class));
++
 +        final Set<Class<?>> persistenceCapableTypes = PersistenceCapableTypeFinder.find(discovery);
-         final Set<Class<? extends FixtureScript>> fixtureScriptTypes = discovery.getSubTypesOf(FixtureScript.class);
++
++        final Set<Class<? extends FixtureScript>> fixtureScriptTypes = discovery.getSubTypesOf(FixtureScript.class)
++                .stream()
++                .filter(aClass -> {
++                    // the fixtureScript types are introspected just to provide a drop-down when running fixture scripts
++                    // in prototyping mode (though they may be introspected lazily if actually run).
++                    // we therefore try to limit the set of fixture types eagerly introspected at startup
++                    //
++                    // specifically, we ignore as a fixture script if annotated with @Programmatic
++                    // (though directly implementing DiscoverableFixtureScript takes precedence and will NOT ignore)
++                    return DiscoverableFixtureScript.class.isAssignableFrom(aClass) ||
++                            Annotations.getAnnotation(aClass, Programmatic.class) == null;
+                 })
 -                .toList());
 -
 -        final Set<Class<?>> domainObjectTypes = Sets.newLinkedHashSet();
 -        domainObjectTypes.addAll(reflections.getTypesAnnotatedWith(DomainObject.class));
 -        domainObjectTypes.addAll(reflections.getTypesAnnotatedWith(DomainObjectLayout.class));
 -
 -        final Set<Class<?>> mixinTypes = Sets.newHashSet();
 -        mixinTypes.addAll(reflections.getTypesAnnotatedWith(Mixin.class));
 -        mixinTypes.addAll(
 -                Lists.newArrayList(Iterables.filter(domainObjectTypes, new Predicate<Class<?>>() {
 -                    @Override
 -                    public boolean apply(@Nullable final Class<?> input) {
 -                        if(input == null) { return false; }
 -                        final DomainObject annotation = input.getAnnotation(DomainObject.class);
 -                        return annotation != null && annotation.nature() == Nature.MIXIN;
 -                    }
 -                }))
 -        );
 -
 -        final Set<Class<?>> viewModelTypes = Sets.newLinkedHashSet();
 -        viewModelTypes.addAll(reflections.getTypesAnnotatedWith(ViewModel.class));
 -        viewModelTypes.addAll(reflections.getTypesAnnotatedWith(ViewModelLayout.class));
 -
 -        final Set<Class<?>> xmlElementTypes = Sets.newLinkedHashSet();
 -        xmlElementTypes.addAll(reflections.getTypesAnnotatedWith(XmlElement.class));
++                .collect(Collectors.toSet());
++
++        final Set<Class<?>> domainObjectTypes = _Sets.newLinkedHashSet();
++        domainObjectTypes.addAll(discovery.getTypesAnnotatedWith(DomainObject.class));
++        domainObjectTypes.addAll(discovery.getTypesAnnotatedWith(DomainObjectLayout.class));
 +
 +        final Set<Class<?>> mixinTypes = _Sets.newHashSet();
 +        mixinTypes.addAll(discovery.getTypesAnnotatedWith(Mixin.class));
- 
-         final Set<Class<?>> domainObjectTypes = discovery.getTypesAnnotatedWith(DomainObject.class);
 +        domainObjectTypes.stream()
 +        .filter(input -> {
 +            final DomainObject annotation = input.getAnnotation(DomainObject.class);
-             return annotation.nature() == Nature.MIXIN;
++            return annotation != null && annotation.nature() == Nature.MIXIN;
 +        })
 +        .forEach(mixinTypes::add);
 +
-         final Set<Class<?>> viewModelTypes = discovery.getTypesAnnotatedWith(ViewModel.class);
-         final Set<Class<?>> xmlElementTypes = discovery.getTypesAnnotatedWith(XmlElement.class);
++        final Set<Class<?>> viewModelTypes = _Sets.newLinkedHashSet();
++        viewModelTypes.addAll(discovery.getTypesAnnotatedWith(ViewModel.class));
++        viewModelTypes.addAll(discovery.getTypesAnnotatedWith(ViewModelLayout.class));
++
++        final Set<Class<?>> xmlElementTypes = _Sets.newLinkedHashSet();
++        xmlElementTypes.addAll(discovery.getTypesAnnotatedWith(XmlElement.class));
  
          // add in any explicitly registered services...
          domainServiceTypes.addAll(appManifest.getAdditionalServices());
@@@ -166,43 -208,55 +194,52 @@@
  
          // for a tiny bit of efficiency, we append a '.' to each package name here, outside the loops
          List<String> packagesWithDotSuffix =
 -            FluentIterable.from(moduleAndFrameworkPackages).transform(new Function<String, String>() {
 -                @Nullable @Override
 -                public String apply(@Nullable final String s) {
 -                    return s != null ? s + "." : null;
 -                }
 -            }).toList();
 +                _Lists.map(moduleAndFrameworkPackages, (@Nullable final String s) -> {
 +                        return s != null ? s + "." : null;
 +                });
  
-         registry.setDomainServiceTypes(within(packagesWithDotSuffix, domainServiceTypes));
-         registry.setPersistenceCapableTypes(within(packagesWithDotSuffix, persistenceCapableTypes));
-         registry.setFixtureScriptTypes(within(packagesWithDotSuffix, fixtureScriptTypes));
-         registry.setMixinTypes(within(packagesWithDotSuffix, mixinTypes));
-         registry.setDomainObjectTypes(within(packagesWithDotSuffix, domainObjectTypes));
-         registry.setViewModelTypes(within(packagesWithDotSuffix, viewModelTypes));
-         registry.setXmlElementTypes(within(packagesWithDotSuffix, xmlElementTypes));
+         registry.setDomainServiceTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, domainServiceTypes));
+         registry.setPersistenceCapableTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, persistenceCapableTypes));
+         registry.setFixtureScriptTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, fixtureScriptTypes));
+         registry.setMixinTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, mixinTypes));
+         registry.setDomainObjectTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, domainObjectTypes));
+         registry.setViewModelTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, viewModelTypes));
+         registry.setXmlElementTypes(withinPackageAndNotAnonymous(packagesWithDotSuffix, xmlElementTypes));
      }
  
-     static <T> Set<Class<? extends T>> within(
+     static <T> Set<Class<? extends T>> withinPackageAndNotAnonymous(
              final List<String> packagesWithDotSuffix,
              final Set<Class<? extends T>> classes) {
 -        Set<Class<? extends T>> classesWithin = Sets.newLinkedHashSet();
 +        Set<Class<? extends T>> classesWithin = _Sets.newLinkedHashSet();
          for (Class<? extends T> clz : classes) {
              final String className = clz.getName();
-             if(containedWithin(packagesWithDotSuffix, className)) {
+             if(containedWithin(packagesWithDotSuffix, className) && notAnonymous(clz)) {
                  classesWithin.add(clz);
              }
          }
          return classesWithin;
      }
+ 
      static private boolean containedWithin(final List<String> packagesWithDotSuffix, final String className) {
          for (String packageWithDotSuffix : packagesWithDotSuffix) {
 -            if(className.startsWith(packageWithDotSuffix)) {
 +            if (className.startsWith(packageWithDotSuffix)) {
                  return true;
              }
          }
          return false;
      }
  
+     private static <T> boolean notAnonymous(final Class<? extends T> clz) {
+         try {
+             return !clz.isAnonymousClass();
+         } catch(NoClassDefFoundError error) {
+             return false; // ignore, assume anonymous
+         }
+     }
+ 
      private void specifyServicesAndRegisteredEntitiesUsing(final AppManifest appManifest) {
 -        final Iterable<String> packageNames = modulePackageNamesFrom(appManifest);
 -        final String packageNamesCsv = Joiner.on(',').join(packageNames);
 +        final Stream<String> packageNames = modulePackageNamesFrom(appManifest);
 +        final String packageNamesCsv = packageNames.collect(Collectors.joining(","));
  
          putConfigurationProperty(ServicesInstallerFromAnnotation.PACKAGE_PREFIX_KEY, packageNamesCsv);
          putConfigurationProperty(RegisterEntities.PACKAGE_PREFIX_KEY, packageNamesCsv);
diff --cc core/runtime/src/test/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider_within_Test.java
index 56ac042,88816e2..f67b411
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider_within_Test.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProvider_within_Test.java
@@@ -40,8 -40,8 +40,8 @@@ public class IsisComponentProvider_with
          final String budgetAssignmentPackageWithDot =
                  SomeServiceNotToInclude.class.getPackage().getName()  + ".";
  
-         final Set<Class<?>> within = IsisComponentProvider.within(Arrays.asList(budgetPackageWithDot),
+         final Set<Class<?>> within = IsisComponentProvider.withinPackageAndNotAnonymous(Arrays.asList(budgetPackageWithDot),
 -                Sets.newHashSet(SomeServiceToInclude.class, SomeServiceNotToInclude.class));
 +                _Sets.of(SomeServiceToInclude.class, SomeServiceNotToInclude.class));
  
          Assert.assertThat(within.size(), is(equalTo(1)));
      }
diff --cc example/application/simpleapp/application/pom.xml
index 3a58e4f,b9cb60d..6a4823f
--- a/example/application/simpleapp/application/pom.xml
+++ b/example/application/simpleapp/application/pom.xml
@@@ -103,7 -103,12 +103,7 @@@
              <artifactId>simpleapp-module-simple</artifactId>
          </dependency>
  
-         <!-- test -->
 -        <dependency>
 -            <groupId>org.apache.isis.core</groupId>
 -            <artifactId>isis-core-wrapper</artifactId>
 -        </dependency>
 -
+         <!-- TESTS -->
          <dependency>
              <groupId>${project.groupId}</groupId>
              <artifactId>simpleapp-module-simple</artifactId>
@@@ -118,6 -123,26 +118,19 @@@
              <scope>test</scope>
          </dependency>
  
+         <dependency>
+             <groupId>com.approvaltests</groupId>
+             <artifactId>approvaltests</artifactId>
 -            <version>2.0.0</version>
 -            <scope>test</scope>
 -        </dependency>
 -
 -        <dependency>
 -            <groupId>org.datanucleus</groupId>
 -            <artifactId>datanucleus-core</artifactId>
+             <scope>test</scope>
+         </dependency>
+ 
+         <dependency>
+             <groupId>org.hsqldb</groupId>
+             <artifactId>hsqldb</artifactId>
+             <scope>test</scope>
+         </dependency>
+ 
+ 
      </dependencies>
  
  </project>
diff --cc example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/MetaModelService_IntegTest.java
index 0000000,cd48c3f..1d1af23
mode 000000,100644..100644
--- a/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/MetaModelService_IntegTest.java
+++ b/example/application/simpleapp/application/src/test/java/domainapp/application/integtests/mml/MetaModelService_IntegTest.java
@@@ -1,0 -1,149 +1,149 @@@
+ /*
+  *  Licensed to the Apache Software Foundation (ASF) under one
+  *  or more contributor license agreements.  See the NOTICE file
+  *  distributed with this work for additional information
+  *  regarding copyright ownership.  The ASF licenses this file
+  *  to you under the Apache License, Version 2.0 (the
+  *  "License"); you may not use this file except in compliance
+  *  with the License.  You may obtain a copy of the License at
+  *
+  *        http://www.apache.org/licenses/LICENSE-2.0
+  *
+  *  Unless required by applicable law or agreed to in writing,
+  *  software distributed under the License is distributed on an
+  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  *  KIND, either express or implied.  See the License for the
+  *  specific language governing permissions and limitations
+  *  under the License.
+  */
+ package domainapp.application.integtests.mml;
+ 
+ import java.io.File;
+ import java.util.List;
+ 
+ import javax.inject.Inject;
+ 
+ import org.approvaltests.namer.StackTraceNamer;
+ import org.approvaltests.reporters.DiffReporter;
+ import org.approvaltests.reporters.QuietReporter;
+ import org.approvaltests.reporters.UseReporter;
+ import org.approvaltests.writers.ApprovalTextWriter;
+ import org.junit.Before;
+ import org.junit.Test;
+ 
+ import org.apache.isis.applib.services.jaxb.JaxbService;
 -import org.apache.isis.applib.services.metamodel.MetaModelService6;
++import org.apache.isis.applib.services.metamodel.MetaModelService;
+ import org.apache.isis.schema.metamodel.v1.DomainClassDto;
+ import org.apache.isis.schema.metamodel.v1.MetamodelDto;
+ 
+ import domainapp.application.integtests.DomainAppIntegTestAbstract;
+ import static org.approvaltests.Approvals.getReporter;
+ import static org.approvaltests.Approvals.verify;
+ import static org.hamcrest.CoreMatchers.is;
+ import static org.hamcrest.CoreMatchers.notNullValue;
+ import static org.junit.Assume.assumeThat;
+ 
+ public class MetaModelService_IntegTest extends DomainAppIntegTestAbstract {
+ 
+     @Inject
 -    MetaModelService6 metaModelService6;
++    MetaModelService metaModelService;
+     @Inject
+     JaxbService jaxbService;
+ 
+     @Before
+     public void setUp() throws Exception {
+ 
+     }
+ 
+ 
+     //
+     // learn...
+     //
+     @UseReporter(QuietReporter.class)
+     @Test
+     public void _1_learn() throws Exception {
+ 
+         assumeThat(System.getProperty("lockdown.learn"), is(notNullValue()));
+ 
+         // when
+         MetamodelDto metamodelDto =
 -                metaModelService6.exportMetaModel(
 -                        new MetaModelService6.Config()
++                metaModelService.exportMetaModel(
++                        new MetaModelService.Config()
+                                 .withIgnoreNoop()
+                                 .withIgnoreAbstractClasses()
+                                 .withIgnoreBuiltInValueTypes()
+                                 .withIgnoreInterfaces()
+                                 .withPackagePrefix("domainapp")
+                 );
+ 
+         // then
+         final List<DomainClassDto> domainClassDto = metamodelDto.getDomainClassDto();
+         for (final DomainClassDto domainClass : domainClassDto) {
+             try {
+                 verifyClass(domainClass);
+             } catch (Error e) {
+                 //ignore ... learning.
+             }
+         }
+     }
+ 
+ 
+     //
+     // verify ...
+     //
+     @UseReporter(DiffReporter.class)
+     @Test
+     public void _2_verify() throws Exception {
+ 
+         //assumeThat(System.getProperty("lockdown.verify"), is(notNullValue()));
+ 
+         // when
+         MetamodelDto metamodelDto =
 -                metaModelService6.exportMetaModel(
 -                        new MetaModelService6.Config()
++                metaModelService.exportMetaModel(
++                        new MetaModelService.Config()
+                                 .withIgnoreNoop()
+                                 .withIgnoreAbstractClasses()
+                                 .withIgnoreBuiltInValueTypes()
+                                 .withIgnoreInterfaces()
+                                 .withPackagePrefix("domainapp")
+                 );
+ 
+         // then
+         final List<DomainClassDto> domainClassDto = metamodelDto.getDomainClassDto();
+         for (final DomainClassDto domainClass : domainClassDto) {
+             verifyClass(domainClass);
+         }
+     }
+ 
+     private void verifyClass(final DomainClassDto domainClass) {
+         String asXml = jaxbService.toXml(domainClass);
+         verify(new ApprovalTextWriter(asXml, "xml"){
+             @Override public String writeReceivedFile(final String received) throws Exception {
+                 return super.writeReceivedFile(received);
+             }
+ 
+             @Override public String getReceivedFilename(final String base) {
+                 return toFilename("received", base);
+             }
+ 
+             @Override public String getApprovalFilename(final String base) {
+                 return toFilename("approved", base);
+             }
+ 
+             private String toFilename(final String prefix, final String base) {
+                 final File file = new File(base);
+                 final File parentFile = file.getParentFile();
+                 final String localName = file.getName();
+                 final File newDir = new File(parentFile, prefix);
+                 final File newFile = new File(newDir, localName + ".xml");
+                 return newFile.toString();
+             }
+ 
+         }, new StackTraceNamer() {
+             @Override public String getApprovalName() {
+                 return domainClass.getId();
+             }
+         }, getReporter());
+     }
+ 
+ }
diff --cc example/application/simpleapp/pom.xml
index 1cbd1b9,304676b..31c8ebb
--- a/example/application/simpleapp/pom.xml
+++ b/example/application/simpleapp/pom.xml
@@@ -150,6 -138,6 +150,13 @@@
                  <scope>provided</scope>
              </dependency>
  
++            <dependency>
++                <groupId>com.approvaltests</groupId>
++                <artifactId>approvaltests</artifactId>
++                <version>2.0.0</version>
++                <scope>test</scope>
++            </dependency>
++
          </dependencies>
      </dependencyManagement>