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

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

commit 6b8d9a6ac0772df64939c4e3406d883e3bb8b6c1
Author: andi-huber <[email protected]>
AuthorDate: Thu Jan 15 13:19:05 2026 +0100

    CAUSEWAY-3955: [v2] refactors internally no longer to use deprecations
    in HasObjectSpecification
---
 .../_testing/MetaModelContext_forTesting.java      |  2 +-
 .../context/MetaModelContext_usingSpring.java      |  2 +-
 .../core/metamodel/execution/PropertyModifier.java |  2 +-
 .../actions/action/invocation/IdentifierUtil.java  |  2 +-
 .../facets/collections/CollectionFacet.java        |  2 +-
 .../choices/ChoicesFacetFromBoundedAbstract.java   |  2 +-
 .../facets/object/grid/GridFacetDefault.java       |  4 ++--
 .../impl/ObjectValidPropertiesFacetImpl.java       |  2 +-
 .../ident/CssClassFacetFromProjectionFacet.java    |  2 +-
 .../ident/IconFacetFromProjectionFacet.java        |  2 +-
 .../title/methods/TitleFacetViaTitleMethod.java    |  2 +-
 .../title/parser/TitleFacetFromValueFacet.java     |  4 ++--
 .../ViewModelFacetForDomainObjectAnnotation.java   |  2 +-
 .../ViewModelFacetForXmlRootElementAnnotation.java |  2 +-
 .../metamodel/interactions/InteractionHead.java    |  4 ++--
 .../interactions/ObjectValidityContext.java        |  2 +-
 .../interactions/managed/ActionInteraction.java    |  4 ++--
 .../interactions/managed/ManagedMember.java        |  2 +-
 .../managed/PendingParamsSnapshot.java             |  2 +-
 .../core/metamodel/object/Bookmarkable.java        |  2 +-
 .../core/metamodel/object/ManagedObjects.java      |  8 ++++----
 .../core/metamodel/object/MmAssertionUtils.java    |  4 ++--
 .../core/metamodel/object/MmEntityUtils.java       | 16 ++++++++--------
 .../core/metamodel/object/MmSpecUtils.java         |  2 +-
 .../core/metamodel/object/MmValueUtils.java        |  4 ++--
 .../core/metamodel/object/MmVisibilityUtils.java   |  4 ++--
 .../core/metamodel/object/_InternalTitleUtil.java  |  6 +++---
 .../object/_ManagedObjectEntityBookmarked.java     |  8 ++++----
 .../object/_ManagedObjectEntityHybrid.java         | 10 +++++-----
 .../object/_ManagedObjectEntityTransient.java      |  2 +-
 .../core/metamodel/object/_ManagedObjectValue.java |  2 +-
 .../metamodel/object/_ManagedObjectViewmodel.java  |  2 +-
 .../metamodel/objectmanager/ObjectCreator.java     |  4 ++--
 .../metamodel/objectmanager/ObjectManager.java     |  4 ++--
 .../memento/ObjectMementoForScalar.java            |  4 ++--
 .../authorization/AuthorizationFacetAbstract.java  |  4 ++--
 .../services/title/TitleServiceDefault.java        |  4 ++--
 .../core/metamodel/spec/feature/ObjectAction.java  |  6 +++---
 .../specloader/specimpl/ObjectActionDefault.java   |  2 +-
 .../specloader/specimpl/ObjectActionMixedIn.java   |  2 +-
 .../specimpl/ObjectSpecificationAbstract.java      |  2 +-
 .../specimpl/dflt/_AssociationsAsColumns.java      |  2 +-
 .../tabular/interactive/DataTableInteractive.java  |  4 ++--
 .../causeway/core/metamodel/util/Facets.java       |  2 +-
 .../core/metamodel/util/snapshot/XmlSnapshot.java  |  8 ++++----
 .../RecreatableObjectFacetFactoryTest.java         |  2 +-
 .../command/CommandExecutorServiceDefault.java     |  4 ++--
 .../executor/MemberExecutorServiceDefault.java     |  2 +-
 .../bootstrap/MenuBarsServiceBootstrap.java        | 12 ++++++------
 .../publish/LifecycleCallbackNotifier.java         |  2 +-
 .../InvocationHandlerforAsyncWrapRegular.java      |  4 ++--
 .../wrapper/WrapperFactoryDefault.java             |  4 ++--
 .../DelegatingInvocationHandlerAbstract.java       |  2 +-
 .../handlers/DomainObjectInvocationHandler.java    |  6 +++---
 .../menubars/bootstrap/MenuBarsServiceBSTest.java  |  2 +-
 .../changetracking/EntityChangeTrackerDefault.java |  2 +-
 .../commons/integration/changetracking/_Xray.java  |  2 +-
 .../version/EntityVersionAccessorDefault.java      |  2 +-
 .../jdo/datanucleus/changetracking/_Utils.java     |  2 +-
 .../interaction/DomainObjectTesterFactory.java     |  4 ++--
 .../JpaGeneratedLongIdEntityLifecycleTest.java     |  2 +-
 ...JpaNonGeneratedStringIdEntityLifecycleTest.java |  2 +-
 .../value/ActionInteractionProbeImpl.java          |  4 ++--
 .../value/PropertyInteractionProbeImpl.java        |  2 +-
 .../viewers/common/wkt/InteractionTestWkt.java     |  2 +-
 .../viewer/commons/model/action/UiActionForm.java  |  2 +-
 .../viewer/commons/model/layout/UiGridLayout.java  |  4 ++--
 .../services/menu/MenuUiServiceDefault.java        |  4 ++--
 .../common/query/meta/CommonMetaFetcher.java       |  6 +++---
 .../viewer/controller/ResourceController.java      |  4 ++--
 .../domainobjects/DomainObjectReprRenderer.java    | 22 +++++++++++-----------
 .../domainobjects/DomainServiceLinkTo.java         |  2 +-
 .../rendering/domainobjects/ListReprRenderer.java  |  2 +-
 .../domainobjects/ObjectActionReprRenderer.java    |  2 +-
 .../domainobjects/ObjectAndActionInvocation.java   |  4 ++--
 .../ObjectCollectionReprRenderer.java              |  2 +-
 .../domainobjects/ObjectPropertyReprRenderer.java  |  4 ++--
 .../domainobjects/ScalarValueReprRenderer.java     |  2 +-
 ...ntentNegotiationServiceOrgApacheCausewayV2.java | 10 +++++-----
 .../service/valuerender/JsonValueConverter.java    |  2 +-
 .../JsonValueEncoderServiceDefault.java            | 10 +++++-----
 .../domainobjects/JsonValueEncoderTest.java        | 14 +++++++-------
 .../resources/DomainObjectResourceServerside.java  |  4 ++--
 .../resources/ObjectAdapterUpdateHelper.java       |  2 +-
 .../wicket/model/models/ScalarParameterModel.java  |  2 +-
 .../viewer/wicket/model/models/UiObjectWkt.java    |  2 +-
 .../interaction/HasBookmarkedOwnerAbstract.java    |  2 +-
 .../interaction/act/ActionInteractionWkt.java      |  2 +-
 .../interaction/prop/PropertyInteractionWkt.java   |  2 +-
 .../actionresponse/ActionResultResponseType.java   |  4 ++--
 .../ajaxtable/CausewayAjaxDataTable.java           |  2 +-
 .../ajaxtable/columns/SingularColumn.java          |  2 +-
 .../components/entity/fieldset/PropertyGroup.java  |  2 +-
 .../entity/icontitle/EntityIconAndTitlePanel.java  |  8 ++++----
 .../wicket/ui/components/layout/bs/col/Col.java    |  2 +-
 .../scalars/markup/MarkupPanelFactories.java       |  2 +-
 .../ui/components/unknown/UnknownModelPanel.java   |  2 +-
 .../widgets/linkandlabel/ActionLink.java           |  2 +-
 .../viewer/wicket/ui/pages/entity/EntityPage.java  |  2 +-
 99 files changed, 184 insertions(+), 184 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
index 4174afa7ea7..65f7f4d0d53 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
@@ -552,7 +552,7 @@ private final Map<String, ManagedObject> 
collectBeansOfKnownSort() {
         services.stream()
         .map(service->ManagedObject.service(service.specification, 
service.pojo))
         .forEach(serviceAdapter->
-            map.put(serviceAdapter.getSpecification().getLogicalTypeName(), 
serviceAdapter));
+            map.put(serviceAdapter.objSpec().getLogicalTypeName(), 
serviceAdapter));
         return map;
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java
index 23ee4ceed92..cd91f3cbb53 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java
@@ -202,7 +202,7 @@ private Map<String, ManagedObject> 
collectBeansOfKnownSort() {
                 .streamRegisteredBeans()
                 .map(this::toManagedObject)
                 .collect(Collectors.toMap(
-                        
service->service.getSpecification().getLogicalTypeName(),
+                        service->service.objSpec().getLogicalTypeName(),
                         v->v,
                         (o,n)->n,
                         LinkedHashMap::new));
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/PropertyModifier.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/PropertyModifier.java
index d43cded7ea4..81d854fe7bd 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/PropertyModifier.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/execution/PropertyModifier.java
@@ -181,7 +181,7 @@ public Object execute(final PropertyEdit currentExecution) {
         final ManagedObject newValueAfterEventPolling =
                 isValueModifiedByEvent
                         // properly handles the pojo==null case
-                        ? 
ManagedObject.adaptSingular(newValue.getSpecification(), 
newValuePojoPossiblyUpdated)
+                        ? ManagedObject.adaptSingular(newValue.objSpec(), 
newValuePojoPossiblyUpdated)
                         : newValue;
 
         // set event onto the execution
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/IdentifierUtil.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/IdentifierUtil.java
index c5503468c23..7bcc030ac1c 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/IdentifierUtil.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/actions/action/invocation/IdentifierUtil.java
@@ -110,7 +110,7 @@ public String logicalMemberIdentifierFor(
                 if (interactionHead instanceof ActionInteractionHead) {
                     ObjectAction objectActionOnMixee =
                             ((ActionInteractionHead) 
interactionHead).getMetaModel();
-                    ObjectSpecification specificationOfMixee = 
interactionHead.getOwner().getSpecification();
+                    ObjectSpecification specificationOfMixee = 
interactionHead.getOwner().objSpec();
                     return logicalMemberIdentifierFor(specificationOfMixee, 
objectActionOnMixee);
                 }
             }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFacet.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFacet.java
index 4bddbe6b6f4..50d5fba6d08 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/collections/CollectionFacet.java
@@ -107,7 +107,7 @@ public static Optional<CollectionFacet> lookup(@Nullable 
final ManagedObject con
         if(container==null) {
             return Optional.empty();
         }
-        return container.getSpecification().lookupFacet(CollectionFacet.class);
+        return container.objSpec().lookupFacet(CollectionFacet.class);
     }
 
     public static int elementCount(@Nullable final ManagedObject container) {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
index 6f5e2ee95ef..f56d6a693d7 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
@@ -85,7 +85,7 @@ public String invalidates(final ValidityContext context) {
         }
 
         final ObjectSpecification objectSpec = getObjectSpecification();
-        return objectSpec == target.getSpecification()? null: "Invalid type";
+        return objectSpec == target.objSpec()? null: "Invalid type";
     }
 
     private ObjectSpecification getObjectSpecification() {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/GridFacetDefault.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/GridFacetDefault.java
index 09699c5f06f..11b18ab39b5 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/GridFacetDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/grid/GridFacetDefault.java
@@ -92,12 +92,12 @@ private void guardAgainstObjectOfDifferentType(final 
@Nullable ManagedObject obj
             return; // cannot introspect
         }
 
-        if(!getSpecification().equals(objectAdapter.getSpecification())) {
+        if(!getSpecification().equals(objectAdapter.objSpec())) {
             throw _Exceptions.unrecoverable(
                     "getGrid(adapter) was called passing an adapter (type: 
%s), "
                     + "for which this GridFacet (type: %s) is not responsible; 
"
                     + "indicates that some framework internals are wired up in 
a wrong way",
-                    
objectAdapter.getSpecification().getCorrespondingClass().getName(),
+                    objectAdapter.objSpec().getCorrespondingClass().getName(),
                     getSpecification().getCorrespondingClass().getName());
         }
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImpl.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImpl.java
index b58684a649c..ad5ae8a48f0 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImpl.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/objectvalidprops/impl/ObjectValidPropertiesFacetImpl.java
@@ -45,7 +45,7 @@ public String invalidReason(
         final StringBuilder buf = new StringBuilder();
         final ManagedObject adapter = context.getTarget();
 
-        adapter.getSpecification().streamProperties(MixedIn.EXCLUDED)
+        adapter.objSpec().streamProperties(MixedIn.EXCLUDED)
         .filter(property->property.isVisible(adapter, 
context.getInitiatedBy(), where).isVetoed()) // ignore hidden properties
         .filter(property->property.isUsable(adapter, context.getInitiatedBy(), 
where).isVetoed())  // ignore disabled properties
         .forEach(property->{
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/CssClassFacetFromProjectionFacet.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/CssClassFacetFromProjectionFacet.java
index 87d1b545865..cd43a179bf8 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/CssClassFacetFromProjectionFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/CssClassFacetFromProjectionFacet.java
@@ -43,7 +43,7 @@ public CssClassFacetFromProjectionFacet(
     @Override
     public String cssClass(final ManagedObject targetAdapter) {
         val projectedAdapter = projectionFacet.projected(targetAdapter);
-        val cssClassFacet = 
projectedAdapter.getSpecification().getFacet(CssClassFacet.class);
+        val cssClassFacet = 
projectedAdapter.objSpec().getFacet(CssClassFacet.class);
         return cssClassFacet != null 
                 ? cssClassFacet.cssClass(projectedAdapter) 
                 : null;
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/IconFacetFromProjectionFacet.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/IconFacetFromProjectionFacet.java
index b87a09c5ccc..00cbd4c50e5 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/IconFacetFromProjectionFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/projection/ident/IconFacetFromProjectionFacet.java
@@ -44,7 +44,7 @@ public IconFacetFromProjectionFacet(
     @Override
     public String iconName(final ManagedObject targetAdapter) {
         val projectedAdapter = projectionFacet.projected(targetAdapter);
-        return 
projectedAdapter.getSpecification().getIconName(projectedAdapter);
+        return projectedAdapter.objSpec().getIconName(projectedAdapter);
     }
 
     @Override
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java
index a241f76919e..d62c6ff8065 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java
@@ -95,7 +95,7 @@ public String title(final TitleRenderRequest 
titleRenderRequest) {
                     .map(CausewaySystemEnvironment::isUnitTesting)
                     .orElse(false);
             if(!isUnitTesting) {
-                log.warn("Failed Title {}", owningAdapter.getSpecification(), 
ex);
+                log.warn("Failed Title {}", owningAdapter.objSpec(), ex);
             }
             return "Failed Title";
         }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/parser/TitleFacetFromValueFacet.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/parser/TitleFacetFromValueFacet.java
index a7a22949932..452f7067439 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/parser/TitleFacetFromValueFacet.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/parser/TitleFacetFromValueFacet.java
@@ -65,7 +65,7 @@ public String title(final TitleRenderRequest renderRequest) {
          * and alternatively object-support method 'title()',
          * by letting the SpecificationLoader introspect enum types and 
populate the meta-model
          * with TitleFacets (that have higher priority than this one). */
-        
if(renderRequest.getObject().getSpecification().getCorrespondingClass().isEnum())
 {
+        
if(renderRequest.getObject().objSpec().getCorrespondingClass().isEnum()) {
             return Enums.getFriendlyNameOf((Enum<?>)pojo);
         }
 
@@ -111,7 +111,7 @@ public String title(final TitleRenderRequest renderRequest) 
{
         .map(renderer->(Renderer) renderer)
         
.map(renderer->renderer.titlePresentation(valueFacet.createValueSemanticsContext(feature),
 pojo))
         .orElseGet(()->String.format("Value type %s has no value semantics for 
title rendering.",
-                
renderRequest.getObject().getSpecification().getCorrespondingClass()));
+                renderRequest.getObject().objSpec().getCorrespondingClass()));
 
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java
index e1dc96abf0a..b8039123740 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForDomainObjectAnnotation.java
@@ -128,7 +128,7 @@ public String serialize(final ManagedObject viewModel) {
 
         final _Mementos.Memento memento = newMemento();
 
-        val viewmodelSpec = viewModel.getSpecification();
+        val viewmodelSpec = viewModel.objSpec();
 
         streamPersistableProperties(viewmodelSpec)
         .forEach(property->{
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
index 84eabf5e08f..a398fad4c34 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForXmlRootElementAnnotation.java
@@ -82,7 +82,7 @@ protected String serialize(final ManagedObject managedObject) 
{
                     + "--- XML ---\n"
                     + "%s"
                     + "-----------\n",
-                    managedObject.getSpecification().getLogicalTypeName(),
+                    managedObject.objSpec().getLogicalTypeName(),
                     xml);
         });
         return encoded;
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java
index 2586c896c92..d066fcddc20 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/InteractionHead.java
@@ -76,11 +76,11 @@ public Optional<ManagedObject> getMixee() {
     /** factory with consistency checks */
     private static InteractionHead of(final @NonNull ManagedObject owner, 
final @NonNull ManagedObject target) {
         if(ManagedObjects.isSpecified(owner)
-                && owner.getSpecification().getBeanSort().isMixin()) {
+                && owner.objSpec().getBeanSort().isMixin()) {
             throw _Exceptions.unrecoverable("unexpected: owner is a mixin %s", 
owner);
         }
         if(ManagedObjects.isSpecified(target)
-                && target.getSpecification().getBeanSort().isMixin()
+                && target.objSpec().getBeanSort().isMixin()
                 && target.getPojo()==null) {
             throw _Exceptions.unrecoverable("target not spec. %s", target);
         }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/ObjectValidityContext.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/ObjectValidityContext.java
index 152ab9e7666..d2e6e4cd216 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/ObjectValidityContext.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/ObjectValidityContext.java
@@ -41,7 +41,7 @@ public ObjectValidityContext(
         super(InteractionContextType.OBJECT_VALIDATE,
                 InteractionHead.regular(targetAdapter),
                 identifier,
-                ()->targetAdapter.getSpecification().getSingularName(),
+                ()->targetAdapter.objSpec().getSingularName(),
                 interactionInitiatedBy);
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ActionInteraction.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ActionInteraction.java
index 440ca60e5d6..170d3122be9 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ActionInteraction.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ActionInteraction.java
@@ -215,7 +215,7 @@ public static ActionInteraction startAsBoundToProperty(
                 //XXX guard against memberId collision,
                 // such that if there is a conflict, the conventional member 
wins
                 // (maybe improve programming model so this cannot happen)
-                && propertyOwner.getSpecification().getAction(memberId, 
MixedIn.INCLUDED).isEmpty()) {
+                && propertyOwner.objSpec().getAction(memberId, 
MixedIn.INCLUDED).isEmpty()) {
 
             val compositeValueNullable = prop.get(propertyOwner);
             val compositeValue =
@@ -253,7 +253,7 @@ public static ActionInteraction startAsBoundToParameter(
                 //XXX guard against memberId collision,
                 // such that if there is a conflict, the conventional member 
wins
                 // (maybe improve programming model so this cannot happen)
-                && actionOwner.getSpecification().getAction(memberId, 
MixedIn.INCLUDED).isEmpty()) {
+                && actionOwner.objSpec().getAction(memberId, 
MixedIn.INCLUDED).isEmpty()) {
 
             val compositeValueNullable = 
parameterNegotiationModel.getParamValue(paramIndex);
             val compositeValue =
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedMember.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedMember.java
index ddb8fb23ac1..2daa25d1a71 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedMember.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/ManagedMember.java
@@ -159,7 +159,7 @@ protected static <T extends ObjectMember> Optional<T> 
lookup(
             final @NonNull Identifier.Type memberType,
             final @NonNull String memberId) {
 
-        val onwerSpec = owner.getSpecification();
+        val onwerSpec = owner.objSpec();
         switch (memberType) {
         case ACTION:     return 
_Casts.uncheckedCast(onwerSpec.getAction(memberId));
         case PROPERTY:   return 
_Casts.uncheckedCast(onwerSpec.getProperty(memberId));
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/PendingParamsSnapshot.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/PendingParamsSnapshot.java
index efc0c3281dd..1ad1c0b5a83 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/PendingParamsSnapshot.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/interactions/managed/PendingParamsSnapshot.java
@@ -145,7 +145,7 @@ private Can<Bookmark> bookmark(
                                 
paramModel.getMetaModel().getFeatureIdentifier()));
                 if(isPlural) {
                     cardinalityConstraints[paramModel.getParamNr()] =
-                            
Objects.requireNonNull(((PackedManagedObject)paramValue).getLogicalType());
+                            
Objects.requireNonNull(((PackedManagedObject)paramValue).logicalType());
                 }
             }
             return isPlural
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/Bookmarkable.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/Bookmarkable.java
index 178da70a86f..3bf8f54dbe0 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/Bookmarkable.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/Bookmarkable.java
@@ -44,7 +44,7 @@ default boolean isBookmarkSupported() {
 
     default Bookmark getBookmarkElseFail() {
         return getBookmark().orElseThrow(()->
-              _Exceptions.unrecoverable("failed to bookmark %s", 
((ManagedObject)this).getSpecification()));
+              _Exceptions.unrecoverable("failed to bookmark %s", 
((ManagedObject)this).objSpec()));
     }
 
     /**
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjects.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjects.java
index a7161db33e7..acec416c221 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjects.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/ManagedObjects.java
@@ -169,14 +169,14 @@ public boolean isInstanceOf(
             return ((PackedManagedObject)object).unpack().stream()
             .allMatch(element->isInstanceOf(element, elementType));
         }
-        val objectActualType = 
ClassUtils.resolvePrimitiveIfNecessary(object.getSpecification().getCorrespondingClass());
+        val objectActualType = 
ClassUtils.resolvePrimitiveIfNecessary(object.objSpec().getCorrespondingClass());
         return upperBound.isAssignableFrom(objectActualType);
     }
 
     // -- IDENTIFICATION
 
     public Optional<ObjectSpecification> spec(final @Nullable ManagedObject 
managedObject) {
-        return isSpecified(managedObject) ? 
Optional.of(managedObject.getSpecification()) : Optional.empty();
+        return isSpecified(managedObject) ? 
Optional.of(managedObject.objSpec()) : Optional.empty();
     }
 
     public Optional<Bookmark> bookmark(final @Nullable ManagedObject 
managedObject) {
@@ -238,7 +238,7 @@ public String stringifyElseUnidentified(
             final @NonNull String separator) {
         return stringify(managedObject, separator)
                 .orElseGet(()->isSpecified(managedObject)
-                        ? 
managedObject.getSpecification().getLogicalTypeName() + separator + "?"
+                        ? managedObject.objSpec().getLogicalTypeName() + 
separator + "?"
                         : "?" + separator + "?");
     }
 
@@ -436,7 +436,7 @@ public Try<String> imperativeText(
             return Try.success(null);
         }
 
-        val mmc = object.getSpecification().getMetaModelContext();
+        val mmc = object.objSpec().getMetaModelContext();
 
         val result =  Try.call(()->{
             final Object returnValue = 
MmInvokeUtils.invokeNoArg(method.method(), object);
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmAssertionUtils.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmAssertionUtils.java
index 0e78902f170..769b53ac160 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmAssertionUtils.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmAssertionUtils.java
@@ -43,7 +43,7 @@ public void assertExactTypeSpecification(final @Nullable 
ManagedObject obj) {
         }
         val pojo = ManagedObjects.peekAtPojoOf(obj);
         val requiredType = pojo.getClass();
-        val actualSpec = obj.getSpecification();
+        val actualSpec = obj.objSpec();
         _Assert.assertEquals(requiredType, actualSpec.getCorrespondingClass());
     }
 
@@ -90,7 +90,7 @@ public void assertExactType(
                 return object;
             }
             val upperBound = 
ClassUtils.resolvePrimitiveIfNecessary(elementType.getCorrespondingClass());
-            val objectActualType = 
ClassUtils.resolvePrimitiveIfNecessary(object.getSpecification().getCorrespondingClass());
+            val objectActualType = 
ClassUtils.resolvePrimitiveIfNecessary(object.objSpec().getCorrespondingClass());
             throw _Exceptions.illegalArgument("Object has incompatible type 
%s, "
                     + "must be an instance of %s.",
                     objectActualType.getName(),
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmEntityUtils.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmEntityUtils.java
index b9edbbdae3f..b9297613b34 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmEntityUtils.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmEntityUtils.java
@@ -45,7 +45,7 @@ public Optional<PersistenceStack> 
getPersistenceStandard(final @Nullable Managed
         if(adapter==null) {
             return Optional.empty();
         }
-        val spec = adapter.getSpecification();
+        val spec = adapter.objSpec();
         if(spec==null || !spec.isEntity()) {
             return Optional.empty();
         }
@@ -63,14 +63,14 @@ public EntityState getEntityState(final @Nullable 
ManagedObject adapter) {
 
     public void persistInCurrentTransaction(final ManagedObject managedObject) 
{
         requiresEntity(managedObject);
-        val spec = managedObject.getSpecification();
+        val spec = managedObject.objSpec();
         val entityFacet = spec.entityFacetElseFail();
         entityFacet.persist(managedObject.getPojo());
     }
 
     public void deleteInCurrentTransaction(final ManagedObject managedObject) {
         requiresEntity(managedObject);
-        val spec = managedObject.getSpecification();
+        val spec = managedObject.objSpec();
         val entityFacet = spec.entityFacetElseFail();
         entityFacet.delete(managedObject.getPojo());
     }
@@ -79,7 +79,7 @@ public void requiresEntity(final ManagedObject managedObject) 
{
         if(ManagedObjects.isNullOrUnspecifiedOrEmpty(managedObject)) {
             throw _Exceptions.illegalArgument("requires an entity object but 
got null, unspecified or empty");
         }
-        val spec = managedObject.getSpecification();
+        val spec = managedObject.objSpec();
         if(!spec.isEntity()) {
             throw _Exceptions.illegalArgument("not an entity type %s 
(sort=%s)",
                     spec.getCorrespondingClass(),
@@ -134,7 +134,7 @@ public ManagedObject requiresAttached(final @NonNull 
ManagedObject managedObject
                     EntityState.ATTACHED,
                     entityState,
                     ()-> String.format("entity %s is required to be attached 
(not detached)",
-                            
managedObject.getSpecification().getLogicalTypeName()));
+                            managedObject.objSpec().getLogicalTypeName()));
         }
         return managedObject;
     }
@@ -146,7 +146,7 @@ public void requiresWhenFirstIsBookmarkableSecondIsAlso(
         if(!ManagedObjects.isIdentifiable(first) || 
!ManagedObjects.isSpecified(second)) {
             return;
         }
-        val secondSpec = second.getSpecification();
+        val secondSpec = second.objSpec();
         if(secondSpec.isParented() || !secondSpec.isEntity()) {
             return;
         }
@@ -162,7 +162,7 @@ public void requiresWhenFirstIsBookmarkableSecondIsAlso(
     // -- PROPERTY CHANGE PUBLISHING
 
     public Stream<OneToOneAssociation> 
streamPropertiesEnabledForChangePublishing(final @NonNull ManagedObject entity) 
{
-        return entity.getSpecification().streamProperties(MixedIn.EXCLUDED)
+        return entity.objSpec().streamProperties(MixedIn.EXCLUDED)
             
.filter(property->!EntityPropertyChangePublishingPolicyFacet.isExcludedFromPublishing(property));
     }
 
@@ -174,7 +174,7 @@ public Stream<PropertyChangeRecordId> 
streamPropertyChangeRecordIdsForChangePubl
     public Optional<OneToOneAssociation> 
lookupPropertyEnabledForChangePublishing(
             final @NonNull ManagedObject entity, final String propertyName) {
         return entity
-                .getSpecification()
+                .objSpec()
                 .getProperty(propertyName, MixedIn.EXCLUDED)
                 .filter(property -> 
!EntityPropertyChangePublishingPolicyFacet.isExcludedFromPublishing(property));
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtils.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtils.java
index 90e925594e4..908af2e7f7e 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtils.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmSpecUtils.java
@@ -46,7 +46,7 @@ public ManagedObject enforceMostSpecificSpecOn(final @NonNull 
ManagedObject obj)
         }
         val pojo = ManagedObjects.peekAtPojoOf(obj);
         val requiredType = pojo.getClass();
-        val currentSpec = obj.getSpecification();
+        val currentSpec = obj.objSpec();
         if(currentSpec.getCorrespondingClass().equals(requiredType)) {
             return obj;
         }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmValueUtils.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmValueUtils.java
index db26e3d5595..fb31ee6b155 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmValueUtils.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmValueUtils.java
@@ -64,7 +64,7 @@ public String htmlStringForValueType(
             return "";
         }
 
-        val spec = adapter.getSpecification();
+        val spec = adapter.objSpec();
         val valueFacet = spec.valueFacet().orElse(null);
         if(valueFacet==null) {
             return String.format("missing ValueFacet %s", 
spec.getCorrespondingClass());
@@ -125,7 +125,7 @@ private Optional<ValueFacet> valueFacet(final @Nullable 
ManagedObject valueObjec
         if(!ManagedObjects.isSpecified(valueObject)) {
             return Optional.empty();
         }
-        return valueFacet(valueObject.getSpecification());
+        return valueFacet(valueObject.objSpec());
     }
 
 }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmVisibilityUtils.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmVisibilityUtils.java
index 57cd30a1375..bf6246f5a9c 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmVisibilityUtils.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/MmVisibilityUtils.java
@@ -97,7 +97,7 @@ public static boolean isVisible(
             // a choices list could include a null (eg example in 
ToDoItems#choices1Categorized()); want to show as "visible"
             return true;
         }
-        val spec = adapter.getSpecification();
+        val spec = adapter.objSpec();
         if(spec.isEntity()) {
             if(MmEntityUtils.getEntityState(adapter).isTransientOrRemoved()) {
                 return false;
@@ -122,7 +122,7 @@ private static VisibilityContext 
createVisibleInteractionContext(
 
         return new ObjectVisibilityContext(
                 InteractionHead.regular(objectAdapter),
-                objectAdapter.getSpecification().getFeatureIdentifier(),
+                objectAdapter.objSpec().getFeatureIdentifier(),
                 interactionInitiatedBy,
                 where,
                 InteractionUtils.determineIfHiddenPolicyFrom(objectAdapter),
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_InternalTitleUtil.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_InternalTitleUtil.java
index def034e61eb..e71afad5044 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_InternalTitleUtil.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_InternalTitleUtil.java
@@ -42,7 +42,7 @@ String titleString(@NonNull final TitleRenderRequest 
titleRenderRequest) {
             return managedObject.getTitle();
         }
 
-        val objSpec = managedObject.getSpecification();
+        val objSpec = managedObject.objSpec();
 
         return objSpec.isSingular()
             ? objectTitleString(titleRenderRequest)
@@ -65,13 +65,13 @@ private String objectTitleString(@NonNull final 
TitleRenderRequest titleRenderRe
         if (managedObject.getPojo() instanceof String) {
             return (String) managedObject.getPojo();
         }
-        val spec = managedObject.getSpecification();
+        val spec = managedObject.objSpec();
         return Optional.ofNullable(spec.getTitle(titleRenderRequest))
                 .orElseGet(()->getDefaultTitle(managedObject));
     }
 
     private String getDefaultTitle(final ManagedObject managedObject) {
-        return "A" + (" " + 
managedObject.getSpecification().getSingularName()).toLowerCase();
+        return "A" + (" " + 
managedObject.objSpec().getSingularName()).toLowerCase();
     }
 
     private String formatAnyCardinalityAsTitle(@NonNull final 
ObjectSpecification objSpec, @NonNull final ManagedObject managedObject) {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java
index 6e811d6cffc..28bb6a4d930 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java
@@ -83,7 +83,7 @@ public Object getPojo() {
 
         val entityState = entityFacet.getEntityState(pojo);
         if(!entityState.isPersistable()) {
-            throw _Exceptions.illegalState("not persistable %s", 
getSpecification());
+            throw _Exceptions.illegalState("not persistable %s", objSpec());
         }
         if(entityState.isAttached()) {
             return pojo; // is attached
@@ -134,13 +134,13 @@ private Object refetchPojo(final EntityState entityState) 
{
             throw new ObjectNotFoundException("" + bookmark);
         }
 
-        _XrayEvent.event("Entity %s refetched from persistence.", 
getSpecification());
+        _XrayEvent.event("Entity %s refetched from persistence.", objSpec());
 
         return refetchedPojo;
     }
 
     private EntityFacet entityFacet() {
-        return getSpecification().entityFacetElseFail();
+        return objSpec().entityFacetElseFail();
     }
 
     @SuppressWarnings("deprecation")
@@ -163,7 +163,7 @@ private Bookmark createBookmark() {
                     "The persistence layer does not recognize given object %s, 
"
                     + "meaning the object has no identifier that associates it 
with the persistence layer. "
                     + "(most likely, because the object is detached, eg. was 
not persisted after being new-ed up)",
-                    getSpecification());
+                    objSpec());
 
             // in case of the exception getting swallowed, also write a log
             log.error(msg);
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java
index 5414dc0c02e..8b270c34d3f 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityHybrid.java
@@ -75,14 +75,14 @@ static MorphState valueOf(final EntityState entityState) {
 
     _ManagedObjectEntityHybrid(
             final @NonNull _ManagedObjectEntityTransient _transient) {
-        super(ManagedObject.Specialization.ENTITY, 
_transient.getSpecification());
+        super(ManagedObject.Specialization.ENTITY, _transient.objSpec());
         this.variant = _transient;
         this.morphState = MorphState.TRANSIENT;
     }
 
     _ManagedObjectEntityHybrid(
             final @NonNull _ManagedObjectEntityBookmarked bookmarked) {
-        super(ManagedObject.Specialization.ENTITY, 
bookmarked.getSpecification());
+        super(ManagedObject.Specialization.ENTITY, bookmarked.objSpec());
         this.variant = bookmarked;
         this.morphState = MorphState.BOOKMARKED;
         _Assert.assertTrue(bookmarked.getBookmark().isPresent(),
@@ -152,7 +152,7 @@ public Object peekAtPojo() {
     protected boolean isInjectionPointsResolved() {
         // overriding the default for optimization, let the EntityFacet handle 
injection
         // as a side-effect potentially injects if required
-        return getSpecification().entityFacetElseFail()
+        return objSpec().entityFacetElseFail()
                 .isInjectionPointsResolved(peekAtPojo());
     }
 
@@ -197,7 +197,7 @@ private void reassessVariant(final EntityState entityState, 
final Object pojo) {
 
     // morph into attached
     private void makeBookmarked(final Object pojo) {
-        val attached = new _ManagedObjectEntityBookmarked(getSpecification(), 
pojo, Optional.empty());
+        val attached = new _ManagedObjectEntityBookmarked(objSpec(), pojo, 
Optional.empty());
         this.variant = attached;
         _Assert.assertTrue(attached.getBookmark().isPresent(),
                 ()->"bookmarked entity must have bookmark");
@@ -205,7 +205,7 @@ private void makeBookmarked(final Object pojo) {
 
     // morph into attached
     private void makeRemoved() {
-        val removed = new _ManagedObjectEntityRemoved(getSpecification());
+        val removed = new _ManagedObjectEntityRemoved(objSpec());
         this.variant = removed;
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityTransient.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityTransient.java
index 5d8a63b9b9d..b8ae9a283fc 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityTransient.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityTransient.java
@@ -66,7 +66,7 @@ public Object peekAtPojo() {
     // -- HELPER
 
     private EntityFacet entityFacet() {
-        return getSpecification().entityFacetElseFail();
+        return objSpec().entityFacetElseFail();
     }
 
 }
\ No newline at end of file
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectValue.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectValue.java
index 2a7eb8ee0a4..38da84e774f 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectValue.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectValue.java
@@ -66,7 +66,7 @@ public boolean isBookmarkMemoized() {
     // -- HELPER
 
     private ValueFacet<?> valueFacet() {
-        return getSpecification().valueFacetElseFail();
+        return objSpec().valueFacetElseFail();
     }
 
     private Bookmark createBookmark() {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectViewmodel.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectViewmodel.java
index d9df359dd97..aedf8c95c17 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectViewmodel.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectViewmodel.java
@@ -88,7 +88,7 @@ private void replaceBookmark(final UnaryOperator<Bookmark> 
replacer) {
     }
 
     private Optional<Bookmark> createBookmark() {
-        return 
Optional.ofNullable(getSpecification().viewmodelFacetElseFail().serializeToBookmark(this));
+        return 
Optional.ofNullable(objSpec().viewmodelFacetElseFail().serializeToBookmark(this));
     }
 
     // -- REFRESH OPTIMIZATION
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
index 67146c89853..7e78b604f3a 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectCreator.java
@@ -79,10 +79,10 @@ public ManagedObject createObject(final ObjectSpecification 
spec) {
             val domainObject = ManagedObject.adaptSingular(spec, pojo);
 
             // initialize new object
-            
domainObject.getSpecification().streamAssociations(MixedIn.EXCLUDED)
+            domainObject.objSpec().streamAssociations(MixedIn.EXCLUDED)
             .forEach(field->field.toDefault(domainObject));
 
-            if (domainObject.getSpecification().isEntity()) {
+            if (domainObject.objSpec().isEntity()) {
                 getPersistenceLifecyclePublisher().onPostCreate(domainObject);
             }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManager.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManager.java
index c00a523fc34..519f5872673 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManager.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManager.java
@@ -67,7 +67,7 @@ default Optional<ObjectMemento> mementify(final @Nullable 
ManagedObject object)
     default ObjectMemento mementifyElseFail(final @NonNull ManagedObject 
object) {
         return object.getMemento()
                 .orElseThrow(()->
-                    _Exceptions.unrecoverable("failed to create memento for  
%s", object.getSpecification()));
+                    _Exceptions.unrecoverable("failed to create memento for  
%s", object.objSpec()));
     }
 
     //TODO why not use loadObject(bookmark) instead
@@ -121,7 +121,7 @@ default Optional<ManagedObject> loadObject(final @Nullable 
Bookmark bookmark) {
      */
     default Bookmark bookmark(final @NonNull ManagedObject managedObj) {
         return ManagedObjects.bookmark(managedObj)
-                .orElseGet(()->Bookmark.empty(managedObj.getLogicalType()));
+                .orElseGet(()->Bookmark.empty(managedObj.logicalType()));
     }
     /**
      * Introduced for de-serializing action parameter values from bookmarks 
and vice versa.
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/memento/ObjectMementoForScalar.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/memento/ObjectMementoForScalar.java
index eb175b3c449..fbac3b4af05 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/memento/ObjectMementoForScalar.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/memento/ObjectMementoForScalar.java
@@ -94,10 +94,10 @@ private ObjectMementoForScalar(
 
     private ObjectMementoForScalar(final @NonNull ManagedObject adapter) {
 
-        this.logicalType = adapter.getLogicalType();
+        this.logicalType = adapter.logicalType();
         this.title = MmTitleUtils.titleOf(adapter);
 
-        val spec = adapter.getSpecification();
+        val spec = adapter.objSpec();
 
         if(spec.isIdentifiable()
                 || spec.isParented() ) {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacetAbstract.java
index b194d13039d..fdc24245b98 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacetAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/postprocessors/allbutparam/authorization/AuthorizationFacetAbstract.java
@@ -51,7 +51,7 @@ public AuthorizationFacetAbstract(
     @Override
     public String hides(final VisibilityContext ic) {
 
-        if(ic.getHead().getOwner().getSpecification().isValue()) {
+        if(ic.getHead().getOwner().objSpec().isValue()) {
             return null; // never hide value-types
         }
 
@@ -72,7 +72,7 @@ public String hides(final VisibilityContext ic) {
     @Override
     public Optional<VetoReason> disables(final UsabilityContext ic) {
 
-        if(ic.getHead().getOwner().getSpecification().isValue()) {
+        if(ic.getHead().getOwner().objSpec().isValue()) {
             return Optional.empty(); // never disable value-types
         }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitleServiceDefault.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitleServiceDefault.java
index 2acaa5f77e6..3fecb61a2b6 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitleServiceDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitleServiceDefault.java
@@ -70,7 +70,7 @@ public String titleOf(final Object domainObject) {
             // here we just mean NOT-ATTACHED (and not the concrete DETACHED 
entity state)
             return "[DETACHED]";
         } else {
-            return objectAdapter.getSpecification().getTitle(
+            return objectAdapter.objSpec().getTitle(
                     TitleRenderRequest.builder()
                     .object(objectAdapter)
                     .build());
@@ -91,7 +91,7 @@ public String iconNameOf(final Object domainObject) {
             return "unspecified";
         }
 
-        return objectAdapter.getSpecification().getIconName(objectAdapter);
+        return objectAdapter.objSpec().getIconName(objectAdapter);
     }
 
     //-- HELPER
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java
index 35f99444883..665dd2fa241 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/spec/feature/ObjectAction.java
@@ -380,7 +380,7 @@ public static Optional<FaLayersProvider> 
cssClassFaFactoryFor(
         public static Stream<ObjectAction> streamTopBarActions(
                 final ManagedObject adapter) {
 
-            val spec = adapter.getSpecification();
+            val spec = adapter.objSpec();
 
             return spec.streamRuntimeActions(MixedIn.INCLUDED)
             .filter(Predicates
@@ -394,7 +394,7 @@ public static Stream<ObjectAction> findForAssociation(
                 final ManagedObject adapter,
                 final ObjectAssociation association) {
 
-            val spec = adapter.getSpecification();
+            val spec = adapter.objSpec();
 
             return spec.streamRuntimeActions(MixedIn.INCLUDED)
             .filter(Predicates.isSameLayoutGroupAs(association))
@@ -423,7 +423,7 @@ public static String friendlyNameFor(
 
             if(mixeeAdapter != null) {
                 val mixinSpec = action.getDeclaringType();
-                val ownerSpec = mixeeAdapter.getSpecification();
+                val ownerSpec = mixeeAdapter.objSpec();
                 return ownerSpec.lookupMixedInMember(mixinSpec)
                         
.map(mixedInMember->mixedInMember.getFriendlyName(mixeeAdapter.asSupplier()))
                         .orElseThrow(_Exceptions::unexpectedCodeReach);
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionDefault.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionDefault.java
index 87b6bb27e05..a0b0a9a317c 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -551,7 +551,7 @@ public void setupCommand(
             final InteractionHead head,
             final Can<ManagedObject> argumentAdapters) {
 
-        if(head.getOwner().getSpecification().isValue()) {
+        if(head.getOwner().objSpec().isValue()) {
             return; // do not record value type mixin actions
         }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 90eda5fb087..659eeee8422 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -178,7 +178,7 @@ public ManagedObject execute(
 
         final ManagedObject owner = head.getOwner();
         final ManagedObject target = mixinAdapterFor(mixinType, owner);
-        _Assert.assertEquals(target.getSpecification(), 
head.getTarget().getSpecification(),
+        _Assert.assertEquals(target.objSpec(), head.getTarget().objSpec(),
                 "head has the wrong target (should be a mixed-in adapter, but 
is the mixee adapter)");
 
         if(!interactionInitiatedBy.isPassThrough()) {
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index ce215161d2d..e60f806b3d6 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -478,7 +478,7 @@ private void notifySubscribersIfEntity(
     @Override
     public String getIconName(final ManagedObject domainObject) {
         if(ManagedObjects.isSpecified(domainObject)) {
-            _Assert.assertEquals(domainObject.getSpecification(), this);
+            _Assert.assertEquals(domainObject.objSpec(), this);
         }
         return iconFacet != null
                 ? iconFacet.iconName(domainObject)
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/dflt/_AssociationsAsColumns.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/dflt/_AssociationsAsColumns.java
index 3bbd3e0277c..ca9fe2ff8b7 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/dflt/_AssociationsAsColumns.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/specloader/specimpl/dflt/_AssociationsAsColumns.java
@@ -62,7 +62,7 @@ public final Stream<ObjectAssociation> 
streamAssociationsForColumnRendering(
         // the type that has the properties and collections that make up this 
table's columns
         val elementClass = elementType.getCorrespondingClass();
 
-        val parentSpecIfAny = parentObject.getSpecification();
+        val parentSpecIfAny = parentObject.objSpec();
 
         val assocById = _Maps.<String, ObjectAssociation>newLinkedHashMap();
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/interactive/DataTableInteractive.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/interactive/DataTableInteractive.java
index 393e402c30d..2857da80e2f 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/interactive/DataTableInteractive.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/tabular/interactive/DataTableInteractive.java
@@ -225,7 +225,7 @@ public void clearToggleAll() {
     private boolean ignoreHidden(final ManagedObject adapter) {
         final InteractionResult visibleResult =
                 InteractionUtils.isVisibleResult(
-                        adapter.getSpecification(),
+                        adapter.objSpec(),
                         createVisibleInteractionContext(adapter));
         return visibleResult.isNotVetoing();
     }
@@ -233,7 +233,7 @@ private boolean ignoreHidden(final ManagedObject adapter) {
     private VisibilityContext createVisibleInteractionContext(final 
ManagedObject objectAdapter) {
         return new ObjectVisibilityContext(
                 InteractionHead.regular(objectAdapter),
-                objectAdapter.getSpecification().getFeatureIdentifier(),
+                objectAdapter.objSpec().getFeatureIdentifier(),
                 InteractionInitiatedBy.USER,
                 Where.ALL_TABLES,
                 InteractionUtils.determineIfHiddenPolicyFrom(objectAdapter),
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
index b827844c578..4abe0826cf6 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/Facets.java
@@ -306,7 +306,7 @@ public OptionalInt multilineNumberOfLines(final 
ObjectFeature feature) {
 
     //XXX could be moved to ManagedObject directly
     public ManagedObject projected(final ManagedObject objectAdapter) {
-        return 
objectAdapter.getSpecification().lookupFacet(ProjectionFacet.class)
+        return objectAdapter.objSpec().lookupFacet(ProjectionFacet.class)
             .map(projectionFacet->projectionFacet.projected(objectAdapter))
             .orElse(objectAdapter);
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/snapshot/XmlSnapshot.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/snapshot/XmlSnapshot.java
index 348bd77487c..c497e1bb1c6 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/snapshot/XmlSnapshot.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/util/snapshot/XmlSnapshot.java
@@ -206,7 +206,7 @@ private Place appendXml(final ManagedObject object) {
             log.debug("appendXml({})", log("obj", object));
         }
 
-        final String fullyQualifiedClassName = 
object.getSpecification().getFullIdentifier();
+        final String fullyQualifiedClassName = 
object.objSpec().getFullIdentifier();
 
         schema.setUri(fullyQualifiedClassName); // derive URI from fully 
qualified name
 
@@ -446,7 +446,7 @@ private boolean includeField(final Place place, final 
Vector<String> fieldNames,
         }
 
         // locate the field in the object's class
-        final ObjectSpecification nos = object.getSpecification();
+        final ObjectSpecification nos = object.objSpec();
         // HACK: really want a ObjectSpecification.hasField method to
         // check first.
         val field = nos.getAssociation(fieldName).orElse(null);
@@ -628,7 +628,7 @@ Place objectToElement(final ManagedObject adapter) {
             log.debug("objectToElement({})", log("object", adapter));
         }
 
-        final ObjectSpecification spec = adapter.getSpecification();
+        final ObjectSpecification spec = adapter.objSpec();
 
         if (log.isDebugEnabled()) {
             log.debug("objectToElement(NO): create element and 
causeway:title");
@@ -702,7 +702,7 @@ Place objectToElement(final ManagedObject adapter) {
                 try {
                     value = valueAssociation.get(adapter, 
InteractionInitiatedBy.PASS_THROUGH);
 
-                    val valueSpec = value.getSpecification();
+                    val valueSpec = value.objSpec();
 
                     // XML
                     causewayMetaModel.setAttributesForValue(xmlValueElement, 
valueSpec.getShortIdentifier());
diff --git 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
index e9c7559a52e..d17c90c1d76 100644
--- 
a/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
+++ 
b/core/metamodel/src/test/java/org/apache/causeway/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
@@ -93,7 +93,7 @@ void viewModelInterfacePickedUpOnClassAndDefaultsToAlways() {
                 val customerBookmark = 
viewModelFacet.serializeToBookmark(customer);
 
                 val customerRecreated = viewModelFacet.instantiate(
-                        customer.getSpecification(), 
Optional.of(customerBookmark));
+                        customer.objSpec(), Optional.of(customerBookmark));
 
                 assertEquals(customerPojo.getName(), 
((Customer)(customerRecreated.getPojo())).getName());
             }
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/command/CommandExecutorServiceDefault.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/command/CommandExecutorServiceDefault.java
index 1cdc3dbf240..2e3939ff496 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/command/CommandExecutorServiceDefault.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/command/CommandExecutorServiceDefault.java
@@ -274,7 +274,7 @@ private static ObjectAction findObjectAction(
             final ManagedObject targetAdapter,
             final String logicalMemberIdentifier) throws RuntimeException {
 
-        val objectSpecification = targetAdapter.getSpecification();
+        val objectSpecification = targetAdapter.objSpec();
 
         // we use the local identifier because the fullyQualified version 
includes the class name.
         // that is a problem for us if the property is inherited, because it 
will be the class name of the declaring
@@ -297,7 +297,7 @@ private static OneToOneAssociation findOneToOneAssociation(
         // superclass, rather than the concrete class of the target that we 
are inspecting here.
         val localPropertyId = localPartOf(logicalMemberIdentifier);
 
-        val objectSpecification = targetAdapter.getSpecification();
+        val objectSpecification = targetAdapter.objSpec();
 
         val property = findOneToOneAssociationElseNull(objectSpecification, 
localPropertyId);
         if(property == null) {
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java
index 7c868a04f9e..1bf634af145 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/executor/MemberExecutorServiceDefault.java
@@ -193,7 +193,7 @@ private ManagedObject invokeActionInternally(
         })
         .ifPresent(scalarNonEmpty->{
             _Assert.assertTrue(scalarNonEmpty.getBookmark().isPresent(), ()->{
-                var returnTypeSpec = scalarNonEmpty.getSpecification();
+                var returnTypeSpec = scalarNonEmpty.objSpec();
                 var violation = returnTypeSpec.isEntity()
                         ? 
MessageTemplate.ACTION_METHOD_RETURNING_TRANSIENT_ENTITY_NOT_ALLOWED
                         : 
MessageTemplate.ACTION_METHOD_RETURNING_NON_BOOKMARKABLE_OBJECT_NOT_ALLOWED;
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
index f1c5beb4da7..8ba6df21822 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBootstrap.java
@@ -187,7 +187,7 @@ private BSMenuBars updateFacetsFromActionLayoutXml(final 
BSMenuBars menuBarsFrom
         .filter(this::isVisibleAdapterForMenu)
         .forEach(serviceAdapter->{
 
-            val serviceSpec = serviceAdapter.getSpecification();
+            val serviceSpec = serviceAdapter.objSpec();
 
             serviceSpec.streamAnyActions(MixedIn.INCLUDED)
             .forEach(objectAction->{
@@ -288,7 +288,7 @@ private BSMenuBars menuBarsFromAnnotationsOnly() {
     }
 
     private boolean isVisibleAdapterForMenu(final ManagedObject objectAdapter) 
{
-        val spec = objectAdapter.getSpecification();
+        val spec = objectAdapter.objSpec();
         if (spec.isHidden()) {
             // however, this isn't the same as HiddenObjectFacet, so doesn't 
filter out
             // services that have an imperative hidden() method.
@@ -346,7 +346,7 @@ private static List<BSMenu> 
buildMenuItemsFromAnnotationsOnly(
 
                 val objectAction = serviceAndAction.getObjectAction();
                 //val service = serviceAndAction.getServiceAdapter();
-                val logicalTypeName = 
serviceAndAction.getServiceAdapter().getSpecification().getLogicalTypeName();
+                val logicalTypeName = 
serviceAndAction.getServiceAdapter().objSpec().getLogicalTypeName();
                 val actionLayoutData = new 
ServiceActionLayoutData(logicalTypeName, objectAction.getId());
 
                 val named = objectAction
@@ -383,7 +383,7 @@ private static Set<String> serviceNamesInOrder(
 
         // first, order as defined in causeway.properties
         for (ManagedObject serviceAdapter : serviceAdapters) {
-            val serviceSpec = serviceAdapter.getSpecification();
+            val serviceSpec = serviceAdapter.objSpec();
             // assuming services always provide singular NounForm
             String serviceName = serviceSpec.getSingularName();
             serviceNameOrder.add(serviceName);
@@ -434,7 +434,7 @@ private Stream<ServiceAndAction> streamServiceActions(
             final ManagedObject serviceAdapter,
             final ActionScope actionType) {
 
-        final ObjectSpecification serviceSpec = 
serviceAdapter.getSpecification();
+        final ObjectSpecification serviceSpec = serviceAdapter.objSpec();
         final Stream<ObjectAction> objectActions = 
serviceSpec.streamDeclaredActions(actionType, MixedIn.INCLUDED);
 
         return objectActions
@@ -454,7 +454,7 @@ private Stream<ServiceAndAction> streamServiceActions(
     private static Predicate<ManagedObject> with(final 
DomainServiceLayout.MenuBar menuBar) {
         return (final ManagedObject input) -> {
             final DomainServiceLayoutFacet facet =
-                    
input.getSpecification().getFacet(DomainServiceLayoutFacet.class);
+                    input.objSpec().getFacet(DomainServiceLayoutFacet.class);
             return facet != null && facet.getMenuBar() == menuBar;
         };
     }
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/publish/LifecycleCallbackNotifier.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/publish/LifecycleCallbackNotifier.java
index 14ffa89acfa..7fd9a4f2546 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/publish/LifecycleCallbackNotifier.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/publish/LifecycleCallbackNotifier.java
@@ -122,7 +122,7 @@ private void dispatch(
             final Class<? extends LifecycleEventFacet> 
lifecycleEventFacetClass) {
 
         ManagedObjects.asSpecified(entity)
-        .map(ManagedObject::getSpecification)
+        .map(ManagedObject::objSpec)
         .ifPresent(spec->{
 
             spec.lookupFacet(callbackFacetType)
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/InvocationHandlerforAsyncWrapRegular.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/InvocationHandlerforAsyncWrapRegular.java
index 33419c01657..3e9e8cf5ca4 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/InvocationHandlerforAsyncWrapRegular.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/InvocationHandlerforAsyncWrapRegular.java
@@ -44,7 +44,7 @@ public InvocationHandlerforAsyncWrapRegular(
             final AsyncControl<R> asyncControl,
             final @NonNull T targetPojo,
             final ManagedObject targetAdapter) {
-        super(metaModelContext, interactionIdGenerator, commonExecutorService, 
asyncControl, targetPojo, targetAdapter.getSpecification());
+        super(metaModelContext, interactionIdGenerator, commonExecutorService, 
asyncControl, targetPojo, targetAdapter.objSpec());
         this.targetAdapter = targetAdapter;
     }
 
@@ -82,7 +82,7 @@ MemberAndTarget locateMemberAndTarget(
             final _GenericResolver.ResolvedMethod method,
             final ManagedObject targetAdapter) {
 
-        final var objectMember = 
targetAdapter.getSpecification().getMember(method).orElse(null);
+        final var objectMember = 
targetAdapter.objSpec().getMember(method).orElse(null);
         if(objectMember == null) {
             return MemberAndTarget.notFound();
         }
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java
index f0015157962..8e070d629b5 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java
@@ -280,7 +280,7 @@ public <T,R> T asyncWrap(
             final AsyncControl<R> asyncControl) {
 
         val targetAdapter = 
adaptAndGuardAgainstWrappingNotSupported(targetPojo);
-        final var targetSpecification = targetAdapter.getSpecification();
+        final var targetSpecification = targetAdapter.objSpec();
         if(targetSpecification.isMixin()) {
             throw _Exceptions.illegalArgument("cannot wrap a mixin instance 
directly, "
                     + "use WrapperFactory.asyncWrapMixin(...) instead");
@@ -356,7 +356,7 @@ private ManagedObject 
adaptAndGuardAgainstWrappingNotSupported(
 
         final var adapter = getObjectManager().adapt(domainObject);
         if(ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)
-                || 
!adapter.getSpecification().getBeanSort().isWrappingSupported()) {
+                || !adapter.objSpec().getBeanSort().isWrappingSupported()) {
             throw _Exceptions.illegalArgument("Cannot wrap an object of type 
%s",
                     domainObject.getClass().getName());
         }
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DelegatingInvocationHandlerAbstract.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DelegatingInvocationHandlerAbstract.java
index 5575100b92a..10586a2be6c 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DelegatingInvocationHandlerAbstract.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DelegatingInvocationHandlerAbstract.java
@@ -71,7 +71,7 @@ protected ManagedObject 
adaptAndGuardAgainstWrappingNotSupported(final Object do
         }
         val adapter = metaModelContext.getObjectManager().adapt(domainObject);
         if(ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)
-                || 
!adapter.getSpecification().getBeanSort().isWrappingSupported()) {
+                || !adapter.objSpec().getBeanSort().isWrappingSupported()) {
             throw _Exceptions.illegalArgument("Cannot wrap an object of type 
%s",
                     domainObject.getClass().getName());
         }
diff --git 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
index 49061465dfb..030e7cd69cd 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -294,7 +294,7 @@ private static ObjectMember determineMixinMember(
         if(domainObjectAdapter == null) {
             return null;
         }
-        val specification = domainObjectAdapter.getSpecification();
+        val specification = domainObjectAdapter.objSpec();
         val objectActions = specification.streamAnyActions(MixedIn.INCLUDED);
         val objectAssociations = 
specification.streamAssociations(MixedIn.INCLUDED);
 
@@ -324,7 +324,7 @@ private boolean isEnhancedEntityMethod(final Method method) 
{
 
     private Object handleTitleMethod(final ManagedObject targetAdapter) {
 
-        val targetNoSpec = targetAdapter.getSpecification();
+        val targetNoSpec = targetAdapter.objSpec();
         val titleContext = targetNoSpec
                 .createTitleInteractionContext(targetAdapter, 
InteractionInitiatedBy.FRAMEWORK);
         val titleEvent = titleContext.createInteractionEvent();
@@ -343,7 +343,7 @@ private Object handleSaveMethod(
         });
 
 
-        val spec = targetAdapter.getSpecification();
+        val spec = targetAdapter.objSpec();
         if(spec.isEntity()) {
             return runExecutionTask(proxyObject, ()->{
                 MmEntityUtils.persistInCurrentTransaction(targetAdapter);
diff --git 
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java
 
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java
index 07336911326..8c2b40cd4dd 100644
--- 
a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java
+++ 
b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java
@@ -77,7 +77,7 @@ protected void afterSetUp() {
                 .anyMatch(bean->bean.getBeanClass().equals(Bar.class)));
 
         assertTrue(getMetaModelContext().streamServiceAdapters()
-                
.anyMatch(domainObject->domainObject.getSpecification().getCorrespondingClass().equals(Bar.class)));
+                
.anyMatch(domainObject->domainObject.objSpec().getCorrespondingClass().equals(Bar.class)));
     }
 
     @Test
diff --git 
a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/EntityChangeTrackerDefault.java
 
b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/EntityChangeTrackerDefault.java
index 4a18e7a56a1..997e1e54515 100644
--- 
a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/EntityChangeTrackerDefault.java
+++ 
b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/EntityChangeTrackerDefault.java
@@ -313,7 +313,7 @@ private boolean isEntityExcludedForChangePublishing(final 
ManagedObject entity)
             return true;
         }
 
-        
if(!EntityChangePublishingFacet.isPublishingEnabled(entity.getSpecification())) 
{
+        if(!EntityChangePublishingFacet.isPublishingEnabled(entity.objSpec())) 
{
             return true; // ignore entities that are not enabled for entity 
change publishing
         }
 
diff --git 
a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/_Xray.java
 
b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/_Xray.java
index 558cade3348..4bba92c97aa 100644
--- 
a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/_Xray.java
+++ 
b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/changetracking/_Xray.java
@@ -108,7 +108,7 @@ private static void addSequence(
                 ManagedObjects.isNullOrUnspecifiedOrEmpty(entity)
                     ? "<empty>"
                     : String.format("%s:\n%s",
-                            entity.getSpecification().getLogicalTypeName(),
+                            entity.objSpec().getLogicalTypeName(),
                             "" + entity.getPojo()));
 
         _XrayEvent.event(enteringLabel);
diff --git 
a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/version/EntityVersionAccessorDefault.java
 
b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/version/EntityVersionAccessorDefault.java
index cfa705993b5..8f6fe5169d5 100644
--- 
a/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/version/EntityVersionAccessorDefault.java
+++ 
b/persistence/commons/src/main/java/org/apache/causeway/persistence/commons/integration/version/EntityVersionAccessorDefault.java
@@ -40,7 +40,7 @@ public class EntityVersionAccessorDefault implements 
EntityVersionAccessor {
     @Override
     public Object versionOf(Object domainObject) {
         ManagedObject managedObject = objectManager.adapt(domainObject);
-        EntityFacet facet = 
managedObject.getSpecification().getFacet(EntityFacet.class);
+        EntityFacet facet = 
managedObject.objSpec().getFacet(EntityFacet.class);
         if (facet != null) {
             return facet.versionOf(domainObject);
         }
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/changetracking/_Utils.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/changetracking/_Utils.java
index c8ecb8eb96c..7e185b17820 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/changetracking/_Utils.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/changetracking/_Utils.java
@@ -58,7 +58,7 @@ ManagedObject adaptEntity(
 
         val objectManager = mmc.getObjectManager();
         val entity = objectManager.adapt(entityPojo);
-        _Assert.assertTrue(entity.getSpecification().isEntity());
+        _Assert.assertTrue(entity.objSpec().isEntity());
         return entity;
     }
 
diff --git 
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/util/interaction/DomainObjectTesterFactory.java
 
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/util/interaction/DomainObjectTesterFactory.java
index 36dd3349322..b7108c5b044 100644
--- 
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/util/interaction/DomainObjectTesterFactory.java
+++ 
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/util/interaction/DomainObjectTesterFactory.java
@@ -111,7 +111,7 @@ public <T> ActionTester<T> 
actionTesterForSpecificInteraction(
             final @NonNull ActionInteraction actionInteraction) {
         val managedAction = actionInteraction.getManagedActionElseFail();
         assertEquals(domainObjectType,
-                
managedAction.getOwner().getSpecification().getCorrespondingClass());
+                managedAction.getOwner().objSpec().getCorrespondingClass());
         val actionTester = getServiceInjector().injectServicesInto(
                 new ActionTester<>(domainObjectType, actionInteraction, 
managedAction));
         actionTester.init();
@@ -623,7 +623,7 @@ public DataTableTester tableTester(
         @SuppressWarnings("unchecked")
         static void updatePojo(final ManagedValue managedValue, final 
UnaryOperator replacer) {
             managedValue.update(v->ManagedObject.adaptSingular(
-                    v.getSpecification(),
+                    v.objSpec(),
                     replacer.apply(v.getPojo())));
         }
 
diff --git 
a/regressiontests/persistence-jpa/src/test/java/org/apache/causeway/testdomain/persistence/jpa/entitylifecycle/JpaGeneratedLongIdEntityLifecycleTest.java
 
b/regressiontests/persistence-jpa/src/test/java/org/apache/causeway/testdomain/persistence/jpa/entitylifecycle/JpaGeneratedLongIdEntityLifecycleTest.java
index 2fb06977d4a..4f295c9af10 100644
--- 
a/regressiontests/persistence-jpa/src/test/java/org/apache/causeway/testdomain/persistence/jpa/entitylifecycle/JpaGeneratedLongIdEntityLifecycleTest.java
+++ 
b/regressiontests/persistence-jpa/src/test/java/org/apache/causeway/testdomain/persistence/jpa/entitylifecycle/JpaGeneratedLongIdEntityLifecycleTest.java
@@ -76,7 +76,7 @@ void detached_shouldBeProperlyDetected() {
         val entity = objectManager.adapt(
                 repository.detachedEntity(new 
JpaEntityGeneratedLongId("test")));
 
-        assertTrue(entity.getSpecification().isEntity());
+        assertTrue(entity.objSpec().isEntity());
         assertEquals(
                 EntityState.TRANSIENT_OR_REMOVED,
                 MmEntityUtils.getEntityState(entity));
diff --git 
a/regressiontests/persistence-jpa/src/test/java/org/apache/causeway/testdomain/persistence/jpa/entitylifecycle/JpaNonGeneratedStringIdEntityLifecycleTest.java
 
b/regressiontests/persistence-jpa/src/test/java/org/apache/causeway/testdomain/persistence/jpa/entitylifecycle/JpaNonGeneratedStringIdEntityLifecycleTest.java
index da1a19dbbd0..3a59333c10c 100644
--- 
a/regressiontests/persistence-jpa/src/test/java/org/apache/causeway/testdomain/persistence/jpa/entitylifecycle/JpaNonGeneratedStringIdEntityLifecycleTest.java
+++ 
b/regressiontests/persistence-jpa/src/test/java/org/apache/causeway/testdomain/persistence/jpa/entitylifecycle/JpaNonGeneratedStringIdEntityLifecycleTest.java
@@ -76,7 +76,7 @@ void detached_shouldBeProperlyDetected() {
         val entity = objectManager.adapt(
                 repository.detachedEntity(new 
JpaEntityNonGeneratedStringId("test")));
 
-        assertTrue(entity.getSpecification().isEntity());
+        assertTrue(entity.objSpec().isEntity());
         assertEquals(
                 EntityState.TRANSIENT_OR_REMOVED,
                 MmEntityUtils.getEntityState(entity));
diff --git 
a/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/ActionInteractionProbeImpl.java
 
b/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/ActionInteractionProbeImpl.java
index 029d5e84462..10c87ea7efd 100644
--- 
a/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/ActionInteractionProbeImpl.java
+++ 
b/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/ActionInteractionProbeImpl.java
@@ -70,7 +70,7 @@ public void testCommandWithNonEmptyArg(
         val parameterRecorded = valueMarshaller.recoverParameterFrom(paramId, 
parameterRecordedDto);
         assertNotNull(parameterRecorded);
 
-        assertEquals(valueType, 
parameterRecorded.getSpecification().getCorrespondingClass(), ()->
+        assertEquals(valueType, 
parameterRecorded.objSpec().getCorrespondingClass(), ()->
             String.format("command value parsing type mismatch '%s'",
                     _Utils.valueDtoToXml(parameterRecordedDto)));
 
@@ -102,7 +102,7 @@ public void testCommandWithEmptyArg(
         val parameterRecorded = valueMarshaller.recoverParameterFrom(paramId, 
parameterRecordedDto);
         assertNotNull(parameterRecorded);
 
-        assertEquals(valueType, 
parameterRecorded.getSpecification().getCorrespondingClass(), ()->
+        assertEquals(valueType, 
parameterRecorded.objSpec().getCorrespondingClass(), ()->
             String.format("command value parsing type mismatch '%s'",
                     _Utils.valueDtoToXml(parameterRecordedDto)));
 
diff --git 
a/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/PropertyInteractionProbeImpl.java
 
b/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/PropertyInteractionProbeImpl.java
index 4e12901f1a9..864a168dc6d 100644
--- 
a/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/PropertyInteractionProbeImpl.java
+++ 
b/regressiontests/value/src/test/java/org/apache/causeway/testdomain/value/PropertyInteractionProbeImpl.java
@@ -237,7 +237,7 @@ public void testCommand(
         val newValueRecorded = 
valueMarshaller.recoverPropertyFrom(propertyDto);
         assertNotNull(newValueRecorded);
 
-        assertEquals(valueType, 
newValueRecorded.getSpecification().getCorrespondingClass(), ()->
+        assertEquals(valueType, 
newValueRecorded.objSpec().getCorrespondingClass(), ()->
             String.format("command value parsing type mismatch '%s'",
                     _Utils.valueDtoToXml(newValueRecordedDto)));
 
diff --git 
a/regressiontests/viewers-common/src/test/java/org/apache/causeway/testdomain/viewers/common/wkt/InteractionTestWkt.java
 
b/regressiontests/viewers-common/src/test/java/org/apache/causeway/testdomain/viewers/common/wkt/InteractionTestWkt.java
index fe138767f41..eaa4e175cd3 100644
--- 
a/regressiontests/viewers-common/src/test/java/org/apache/causeway/testdomain/viewers/common/wkt/InteractionTestWkt.java
+++ 
b/regressiontests/viewers-common/src/test/java/org/apache/causeway/testdomain/viewers/common/wkt/InteractionTestWkt.java
@@ -123,7 +123,7 @@ void shouldHaveARequestCycle() {
     @Test
     void propertyModels_shouldBeInSyncWithInteractionAPI() {
 
-        val objectSpec = domainObject.getSpecification();
+        val objectSpec = domainObject.objSpec();
         val entityModel = UiObjectWkt.ofAdapter(domainObject);
 
         assertEquals(domainObject.getBookmark().get(), 
entityModel.getOwnerBookmark());
diff --git 
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/UiActionForm.java
 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/UiActionForm.java
index 81eb4f94bf1..4c4f876757b 100644
--- 
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/UiActionForm.java
+++ 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/action/UiActionForm.java
@@ -62,7 +62,7 @@ default Consent getVisibilityConsent() {
         }
 
         // check whether action owner type is hidden
-        if (getActionOwner().getSpecification().isHidden()) {
+        if (getActionOwner().objSpec().isHidden()) {
             return Veto.DEFAULT;
         }
 
diff --git 
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/layout/UiGridLayout.java
 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/layout/UiGridLayout.java
index f33c465c619..33d8e9d2a7f 100644
--- 
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/layout/UiGridLayout.java
+++ 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/layout/UiGridLayout.java
@@ -81,7 +81,7 @@ public <C, T> void visit(final Visitor<C, T> visitor) {
     }
 
     private Optional<BSGrid> initGridData() {
-        return Facets.bootstrapGrid(managedObject.getSpecification(), 
managedObject)
+        return Facets.bootstrapGrid(managedObject.objSpec(), managedObject)
         .map(this::attachAssociatedActions);
     }
 
@@ -91,7 +91,7 @@ private BSGrid attachAssociatedActions(final BSGrid bSGrid) {
         val primedActions = bSGrid.getAllActionsById();
         final Set<String> actionIdsAlreadyAdded = 
_Sets.newHashSet(primedActions.keySet());
 
-        managedObject.getSpecification().streamProperties(MixedIn.INCLUDED)
+        managedObject.objSpec().streamProperties(MixedIn.INCLUDED)
         .forEach(property->{
             Optional.ofNullable(
                     bSGrid.getAllPropertiesById().get(property.getId()))
diff --git 
a/viewers/commons/services/src/main/java/org/apache/causeway/viewer/commons/services/menu/MenuUiServiceDefault.java
 
b/viewers/commons/services/src/main/java/org/apache/causeway/viewer/commons/services/menu/MenuUiServiceDefault.java
index 7b34e4499c0..3fc24098800 100644
--- 
a/viewers/commons/services/src/main/java/org/apache/causeway/viewer/commons/services/menu/MenuUiServiceDefault.java
+++ 
b/viewers/commons/services/src/main/java/org/apache/causeway/viewer/commons/services/menu/MenuUiServiceDefault.java
@@ -81,7 +81,7 @@ public void buildMenuItems(
     private List<String> select(final DomainServiceLayout.MenuBar 
menuBarSelect) {
         return metaModelContext.streamServiceAdapters()
                 .filter(with(menuBarSelect))
-                .map(ManagedObject::getSpecification)
+                .map(ManagedObject::objSpec)
                 .map(ObjectSpecification::getLogicalTypeName)
                 .collect(Collectors.toList());
     }
@@ -89,7 +89,7 @@ private List<String> select(final DomainServiceLayout.MenuBar 
menuBarSelect) {
     private static Predicate<ManagedObject> with(final 
DomainServiceLayout.MenuBar menuBarSelect) {
         return (final ManagedObject adapter) ->
 
-            Facets.domainServiceLayoutMenuBar(adapter.getSpecification())
+            Facets.domainServiceLayoutMenuBar(adapter.objSpec())
                     .orElse(DomainServiceLayout.MenuBar.PRIMARY)
                     .equals(menuBarSelect);
     }
diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/meta/CommonMetaFetcher.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/meta/CommonMetaFetcher.java
index 480f4adeb5a..ec768402daa 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/meta/CommonMetaFetcher.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/common/query/meta/CommonMetaFetcher.java
@@ -68,7 +68,7 @@ public String version() {
         return managedObject()
                 .map(managedObject -> {
                     val domainPojo = managedObject.getPojo();
-                    val entityFacet = 
managedObject.getSpecification().getFacet(EntityFacet.class);
+                    val entityFacet = 
managedObject.objSpec().getFacet(EntityFacet.class);
                     if (entityFacet != null) {
                         val object = entityFacet.versionOf(domainPojo);
                         return object != null ? object.toString() : null;
@@ -91,7 +91,7 @@ public String title() {
     public String cssClass() {
         return managedObject()
                 .map(managedObject -> {
-                    val facet = 
managedObject.getSpecification().getFacet(CssClassFacet.class);
+                    val facet = 
managedObject.objSpec().getFacet(CssClassFacet.class);
                     return facet != null ? facet.cssClass(managedObject) : 
null;
                 })
                 .orElse(null);
@@ -100,7 +100,7 @@ public String cssClass() {
     public String layout() {
         return managedObject()
                 .map(managedObject -> {
-                    val facet = 
managedObject.getSpecification().getFacet(LayoutFacet.class);
+                    val facet = 
managedObject.objSpec().getFacet(LayoutFacet.class);
                     return facet != null ? facet.layout(managedObject) : null;
                 })
                 .orElse(null);
diff --git 
a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/controller/ResourceController.java
 
b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/controller/ResourceController.java
index aceca7cd25b..54385476e80 100644
--- 
a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/controller/ResourceController.java
+++ 
b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/controller/ResourceController.java
@@ -194,13 +194,13 @@ public ResponseEntity<byte[]> icon(
 
     @Nullable
     private static Grid gridOf(ManagedObject managedObject) {
-        val facet = managedObject.getSpecification().getFacet(GridFacet.class);
+        val facet = managedObject.objSpec().getFacet(GridFacet.class);
         return facet != null ? facet.getGrid(managedObject) : null;
     }
 
     private Optional<Object> valueOfProperty(String logicalTypeName, String 
id, String propertyId) {
         return lookup(logicalTypeName, id)
-                .map(managedObject -> 
ManagedObjectAndPropertyIfAny.of(managedObject, 
managedObject.getSpecification().getProperty(propertyId)))
+                .map(managedObject -> 
ManagedObjectAndPropertyIfAny.of(managedObject, 
managedObject.objSpec().getProperty(propertyId)))
                 .filter(ManagedObjectAndPropertyIfAny::isPropertyPresent)
                 .map(ManagedObjectAndProperty::of)
                 .map(ManagedObjectAndProperty::value)
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index 8809e110aeb..71f866d51e5 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -152,7 +152,7 @@ public DomainObjectReprRenderer with(final ManagedObject 
objectAdapter) {
                 .newLinkToBuilder(
                         getResourceContext(),
                         Rel.DOMAIN_TYPE,
-                        objectAdapter.getSpecification())
+                        objectAdapter.objSpec())
                 .build()
                 .getString("href");
         addMediaTypeParams(X_RO_DOMAIN_TYPE, domainTypeHref);
@@ -166,7 +166,7 @@ public JsonRepresentation render() {
             return null;
         }
 
-        final boolean isService = 
objectAdapter.getSpecification().isInjectable();
+        final boolean isService = objectAdapter.objSpec().isInjectable();
 
         if (!(mode.isArgs())) {
 
@@ -189,7 +189,7 @@ public JsonRepresentation render() {
 
             // serviceId or instance Id
             if (isService) {
-                representation.mapPutString("serviceId", 
objectAdapter.getSpecification().getLogicalTypeName());
+                representation.mapPutString("serviceId", 
objectAdapter.objSpec().getLogicalTypeName());
             } else {
                 oidIfAny.ifPresent(oid->{
                     Optional.ofNullable(oid.getLogicalTypeName())
@@ -225,7 +225,7 @@ public JsonRepresentation render() {
             getExtensions().mapPutBoolean("isPersistent", 
ManagedObjects.isIdentifiable(objectAdapter));
             if(isService) {
 
-                
Facets.domainServiceLayoutMenuBar(objectAdapter.getSpecification())
+                Facets.domainServiceLayoutMenuBar(objectAdapter.objSpec())
                 .ifPresent(menuBar->
                         getExtensions().mapPut("menuBar", menuBar));
 
@@ -250,12 +250,12 @@ private void addLinkToSelf() {
     }
 
     private void addLinkToDescribedBy() {
-        final JsonRepresentation link = 
DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.DESCRIBEDBY, 
objectAdapter.getSpecification()).build();
+        final JsonRepresentation link = 
DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.DESCRIBEDBY, 
objectAdapter.objSpec()).build();
 
         final LinkFollowSpecs linkFollower = 
getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
             final DomainTypeReprRenderer renderer = new 
DomainTypeReprRenderer(getResourceContext(), linkFollower, 
JsonRepresentation.newMap());
-            renderer.with(objectAdapter.getSpecification());
+            renderer.with(objectAdapter.objSpec());
             link.mapPutJsonRepresentation("value", renderer.render());
         }
         getLinks().arrayAdd(link);
@@ -283,7 +283,7 @@ private void addLinkToUp() {
     private DomainObjectReprRenderer withMembers(final ManagedObject 
objectAdapter) {
         final JsonRepresentation appendTo =
                 mode.isUpdatePropertiesLinkArgs() ? representation : 
JsonRepresentation.newMap();
-        final List<ObjectAssociation> associations = 
objectAdapter.getSpecification()
+        final List<ObjectAssociation> associations = objectAdapter.objSpec()
                 .streamAssociations(MixedIn.INCLUDED)
                 .collect(Collectors.toList());
 
@@ -295,7 +295,7 @@ private DomainObjectReprRenderer withMembers(final 
ManagedObject objectAdapter)
             }
 
             if (mode.isRegular()) {
-                final Stream<ObjectAction> actions = 
objectAdapter.getSpecification()
+                final Stream<ObjectAction> actions = objectAdapter.objSpec()
                         .streamAnyActions(MixedIn.INCLUDED);
 
                 addActions(objectAdapter, actions, appendTo);
@@ -407,7 +407,7 @@ private void addPersistLinkIfTransientAndPersistable() {
                 new DomainObjectReprRenderer(getResourceContext(), null, 
JsonRepresentation.newMap());
         final JsonRepresentation domainObjectRepr = 
renderer.with(objectAdapter).asPersistLinkArguments().render();
 
-        final String domainType = 
objectAdapter.getSpecification().getLogicalTypeName();
+        final String domainType = objectAdapter.objSpec().getLogicalTypeName();
         final LinkBuilder persistLinkBuilder = 
LinkBuilder.newBuilder(getResourceContext(), Rel.PERSIST.getName(), 
RepresentationType.DOMAIN_OBJECT, "objects/%s", 
domainType).withHttpMethod(RestfulHttpMethod.POST).withArguments(domainObjectRepr);
         getLinks().arrayAdd(persistLinkBuilder.build());
     }
@@ -436,7 +436,7 @@ private void addUpdatePropertiesLinkIfRequired() {
         if (!ManagedObjects.isIdentifiable(objectAdapter)) {
             return;
         }
-        final boolean isService = 
objectAdapter.getSpecification().isInjectable();
+        final boolean isService = objectAdapter.objSpec().isInjectable();
         if(isService) {
             return;
         }
@@ -459,7 +459,7 @@ public static Object valueOrRef(
             final JsonValueEncoderService jsonValueEncoder,
             final ManagedObject domainObject) {
 
-        val spec = domainObject.getSpecification();
+        val spec = domainObject.objSpec();
         if(spec.isValue()) {
             val context2 = JsonValueConverter.Context.of(objectFeature, 
context.config().isSuppressMemberExtensions());
             return jsonValueEncoder.asObject(domainObject, context2);
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
index 38898374565..4ffd61f5966 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
@@ -28,7 +28,7 @@ public class DomainServiceLinkTo extends DomainObjectLinkTo {
 
     @Override
     public ObjectAdapterLinkTo with(final ManagedObject objectAdapter) {
-        serviceId = objectAdapter.getSpecification().getLogicalTypeName();
+        serviceId = objectAdapter.objSpec().getLogicalTypeName();
         return super.with(objectAdapter);
     }
 
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
index 02ce3e88928..9f7f90538a6 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
@@ -57,7 +57,7 @@ public ListReprRenderer usingLinkToBuilder(final 
ObjectAdapterLinkTo objectAdapt
     public ListReprRenderer with(final Stream<ManagedObject> objectAdapters) {
         this.objectAdapters = objectAdapters!=null
                 ? objectAdapters
-                        
.filter(adapter->!adapter.getSpecification().isHidden())
+                        .filter(adapter->!adapter.objSpec().isHidden())
                         .collect(Collectors.toList())
                         : null;
                         return this;
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
index a41f818a0ee..6d67641ed96 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
@@ -197,7 +197,7 @@ protected void addLinksToFormalDomainModel() {
         if(resourceContext.config().isSuppressDescribedByLinks()) {
             return;
         }
-        final JsonRepresentation link = 
ActionDescriptionReprRenderer.newLinkToBuilder(resourceContext, 
Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build();
+        final JsonRepresentation link = 
ActionDescriptionReprRenderer.newLinkToBuilder(resourceContext, 
Rel.DESCRIBEDBY, objectAdapter.objSpec(), objectMember).build();
         getLinks().arrayAdd(link);
     }
 
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
index 46cc377d2ed..d046d238f7a 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
@@ -78,7 +78,7 @@ public ActionResultRepresentation.ResultType 
determineResultType() {
         //FIXME following decision tree should not depend on the returned 
runtime types
         // but on the returnTypeSpec,
         // which is introspected eagerly on application start and should be 
the binding contract
-        val actualReturnTypeSpec = returnedAdapter.getSpecification();
+        val actualReturnTypeSpec = returnedAdapter.objSpec();
 
         if (ManagedObjects.isPacked(returnedAdapter)
                 || isVector(actualReturnTypeSpec)) {
@@ -95,7 +95,7 @@ public ActionResultRepresentation.ResultType 
determineResultType() {
 
             // inspect the collection's elements
             val isListOfDomainObjects = streamElementAdapters()
-                    
.allMatch(elementAdapter->!isScalarValue(elementAdapter.getSpecification()));
+                    
.allMatch(elementAdapter->!isScalarValue(elementAdapter.objSpec()));
 
             return isListOfDomainObjects
                     ? ActionResultRepresentation.ResultType.LIST
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
index 023da8342d4..dabe77c27f1 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
@@ -164,7 +164,7 @@ protected void addLinksToFormalDomainModel() {
         }
         final JsonRepresentation link =
                 CollectionDescriptionReprRenderer
-                .newLinkToBuilder(resourceContext, Rel.DESCRIBEDBY, 
objectAdapter.getSpecification(), objectMember).build();
+                .newLinkToBuilder(resourceContext, Rel.DESCRIBEDBY, 
objectAdapter.objSpec(), objectMember).build();
         getLinks().arrayAdd(link);
     }
 
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
index 3df4bce9aa8..4e606778e92 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
@@ -87,7 +87,7 @@ private void addValue(final LinkFollowSpecs linkFollower) {
                 ? valueAdapterIfAny
                 : ManagedObject.empty(objectMember.getElementType());
 
-        val spec = valueAdapter.getSpecification();
+        val spec = valueAdapter.objSpec();
 
         if (spec.isValue()) {
             jsonValueEncoder
@@ -200,7 +200,7 @@ protected void addLinksToFormalDomainModel() {
         if(resourceContext.config().isSuppressDescribedByLinks()) {
             return;
         }
-        final JsonRepresentation link = 
PropertyDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), 
Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build();
+        final JsonRepresentation link = 
PropertyDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), 
Rel.DESCRIBEDBY, objectAdapter.objSpec(), objectMember).build();
         getLinks().arrayAdd(link);
     }
 
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
index 48119275bd9..7c26b1bec61 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
@@ -65,7 +65,7 @@ public MediaType getMediaType() {
 
     @Override
     public ScalarValueReprRenderer with(final ManagedObject objectAdapter) {
-        if (!objectAdapter.getSpecification().isValue()) {
+        if (!objectAdapter.objSpec().isValue()) {
             throw ReprRendererException.create("Not an (encodable) value", 
objectAdapter.getTitle());
         }
 
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheCausewayV2.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheCausewayV2.java
index 21f50c35d38..15e461640ca 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheCausewayV2.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheCausewayV2.java
@@ -266,7 +266,7 @@ public Response.ResponseBuilder buildResponse(
             objectAndActionInvocation.streamElementAdapters()
             .map(elementAdapter->{
                 val dto = dtoForValue(returnedAdapter)
-                        
.orElseGet(()->elementAdapter.getSpecification().getCorrespondingClass());
+                        
.orElseGet(()->elementAdapter.objSpec().getCorrespondingClass());
                 return dto;
             })
             .forEach(rootRepresentation::arrayAdd);
@@ -306,10 +306,10 @@ public Response.ResponseBuilder buildResponse(
 
     private Optional<Object> dtoForValue(final @Nullable ManagedObject 
valueObject) {
         if(ManagedObjects.isNullOrUnspecifiedOrEmpty(valueObject)
-                || !valueObject.getSpecification().isValue()) {
+                || !valueObject.objSpec().isValue()) {
             return Optional.empty();
         }
-        val valSpec = valueObject.getSpecification();
+        val valSpec = valueObject.objSpec();
         val dto = valSpec.isCompositeValue()
                 ? ScalarValueDtoV2.forValue(valueObject.getPojo(),
                         //XXX honor value semantics context?
@@ -346,7 +346,7 @@ private void appendObjectTo(
 
         val where = resourceContext.getWhere();
 
-        owner.getSpecification()
+        owner.objSpec()
         .streamCollections(MixedIn.INCLUDED)
         .forEach(collection->{
 
@@ -374,7 +374,7 @@ private void appendPropertiesTo(
 
         val interactionInitiatedBy = 
resourceContext.getInteractionInitiatedBy();
         val where = resourceContext.getWhere();
-        final Stream<OneToOneAssociation> properties = 
objectAdapter.getSpecification()
+        final Stream<OneToOneAssociation> properties = objectAdapter.objSpec()
                 .streamProperties(MixedIn.INCLUDED);
 
         properties.forEach(property->{
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueConverter.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueConverter.java
index a2d44b494e2..e8ca8a40e58 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueConverter.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueConverter.java
@@ -111,7 +111,7 @@ public OptionalInt maxFractionalDigits(final @Nullable 
ManagedObject value) {
             private Can<FacetHolder> facetHolders(final @Nullable 
ManagedObject value) {
                 return ManagedObjects.isNullOrUnspecifiedOrEmpty(value)
                     ? Can.of(objectFeature)
-                    : Can.of(objectFeature, value.getSpecification());
+                    : Can.of(objectFeature, value.objSpec());
             }
 
         }
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
index dc7dca46c4b..b435433dfcd 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderServiceDefault.java
@@ -168,7 +168,7 @@ public void appendValueAndFormat(
             final JsonRepresentation repr,
             final Context context) {
 
-        val valueSpec = valueAdapter.getSpecification();
+        val valueSpec = valueAdapter.objSpec();
         val valueClass = valueSpec.getCorrespondingClass();
         val jsonValueConverter = converterByClass.get(valueClass);
         if(jsonValueConverter != null) {
@@ -223,11 +223,11 @@ private static Optional<ValueDecomposition> 
decompose(final ManagedObject valueA
         if(ManagedObjects.isNullOrUnspecifiedOrEmpty(valueAdapter)) {
             return Optional.empty();
         }
-        val valueClass = 
valueAdapter.getSpecification().getCorrespondingClass();
-        val decompositionIfAny = 
Facets.valueDefaultSemantics(valueAdapter.getSpecification(), valueClass)
+        val valueClass = valueAdapter.objSpec().getCorrespondingClass();
+        val decompositionIfAny = 
Facets.valueDefaultSemantics(valueAdapter.objSpec(), valueClass)
                 
.map(composer->composer.decompose(_Casts.uncheckedCast(valueAdapter.getPojo())));
         if(decompositionIfAny.isEmpty()) {
-            val valueSpec = valueAdapter.getSpecification();
+            val valueSpec = valueAdapter.objSpec();
             log.warn("{Could not resolve a ValueComposer for {}, "
                     + "falling back to rendering as 'null'. "
                     + "Make sure the framework has access to a 
ValueSemanticsProvider<{}> "
@@ -243,7 +243,7 @@ private static Optional<ValueDecomposition> decompose(final 
ManagedObject valueA
     @Nullable
     public Object asObject(final @NonNull ManagedObject adapter, final 
JsonValueConverter.Context context) {
 
-        val objectSpec = adapter.getSpecification();
+        val objectSpec = adapter.objSpec();
         val cls = objectSpec.getCorrespondingClass();
 
         val jsonValueConverter = converterByClass.get(cls);
diff --git 
a/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java
 
b/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java
index 503b9386522..e778180e69c 100644
--- 
a/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java
+++ 
b/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java
@@ -139,7 +139,7 @@ void whenReprIsBoolean(final Class<?> correspondingClass) {
         val adapter = jsonValueEncoder.asAdapter(spec, representation, null);
 
         // then
-        assertSame(spec, adapter.getSpecification());
+        assertSame(spec, adapter.objSpec());
     }
 
     @ParameterizedTest
@@ -154,7 +154,7 @@ void whenReprIsInteger(final Class<?> correspondingClass) {
         val adapter = jsonValueEncoder.asAdapter(spec, representation, null);
 
         // then
-        assertSame(spec, adapter.getSpecification());
+        assertSame(spec, adapter.objSpec());
     }
 
     @ParameterizedTest
@@ -169,7 +169,7 @@ void whenReprIsLong(final Class<?> correspondingClass) {
         val adapter = jsonValueEncoder.asAdapter(spec, representation, null);
 
         // then
-        assertSame(spec, adapter.getSpecification());
+        assertSame(spec, adapter.objSpec());
     }
 
     @ParameterizedTest
@@ -184,7 +184,7 @@ void whenReprIsDouble(final Class<?> correspondingClass) {
         val adapter = jsonValueEncoder.asAdapter(spec, representation, null);
 
         // then
-        assertSame(spec, adapter.getSpecification());
+        assertSame(spec, adapter.objSpec());
     }
 
     @Test
@@ -198,7 +198,7 @@ void whenReprIsBigInteger() throws Exception {
         val adapter = jsonValueEncoder.asAdapter(spec, representation, null);
 
         // then
-        assertSame(spec, adapter.getSpecification());
+        assertSame(spec, adapter.objSpec());
     }
 
     @Test
@@ -212,7 +212,7 @@ void whenReprIsBigDecimal() throws Exception {
         val adapter = jsonValueEncoder.asAdapter(spec, representation, null);
 
         // then
-        assertSame(spec, adapter.getSpecification());
+        assertSame(spec, adapter.objSpec());
     }
 
 
@@ -226,7 +226,7 @@ void whenReprIsString() throws Exception {
         val adapter = jsonValueEncoder.asAdapter(spec, representation, null);
 
         // then
-        assertSame(spec, adapter.getSpecification());
+        assertSame(spec, adapter.objSpec());
     }
 
 }
diff --git 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
index 44b62f1a0ac..a562b090671 100644
--- 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
+++ 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/DomainObjectResourceServerside.java
@@ -134,7 +134,7 @@ public Response persist(
                     .createWithBody(HttpStatusCode.BAD_REQUEST, objectRepr, 
"Illegal property value"));
         }
 
-        final Consent validity = adapter.getSpecification().isValid(adapter, 
InteractionInitiatedBy.USER);
+        final Consent validity = adapter.objSpec().isValid(adapter, 
InteractionInitiatedBy.USER);
         if (validity.isVetoed()) {
             throw _EndpointLogging.error(log, "POST /objects/{}", domainType,
                     RestfulObjectsApplicationException
@@ -213,7 +213,7 @@ public Response object(
                             HttpStatusCode.BAD_REQUEST, argRepr, "Illegal 
property value"));
         }
 
-        final Consent validity = 
objectAdapter.getSpecification().isValid(objectAdapter, 
InteractionInitiatedBy.USER);
+        final Consent validity = 
objectAdapter.objSpec().isValid(objectAdapter, InteractionInitiatedBy.USER);
         if (validity.isVetoed()) {
             throw _EndpointLogging.error(log, "PUT /objects/{}/{}", 
domainType, instanceId,
                     RestfulObjectsApplicationException
diff --git 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ObjectAdapterUpdateHelper.java
 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ObjectAdapterUpdateHelper.java
index ca920ee9191..cb68c55f9b0 100644
--- 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ObjectAdapterUpdateHelper.java
+++ 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/causeway/viewer/restfulobjects/viewer/resources/ObjectAdapterUpdateHelper.java
@@ -67,7 +67,7 @@ boolean copyOverProperties(
 
         val allOk = _Refs.booleanRef(true); // simply a non-thread-safe 
boolean reference
 
-        objectAdapter.getSpecification().streamAssociations(MixedIn.EXCLUDED)
+        objectAdapter.objSpec().streamAssociations(MixedIn.EXCLUDED)
         .filter(ObjectAssociation.Predicates.PROPERTIES) // properties only
         .forEach(association->{
 
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarParameterModel.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarParameterModel.java
index b83fdab3c31..de44ade0871 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarParameterModel.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/ScalarParameterModel.java
@@ -62,7 +62,7 @@ private ScalarParameterModel(
     @Override
     public String validate(final @NonNull ManagedObject proposedArg) {
         // workaround for FileUpload
-        if(proposedArg.getSpecification().getBeanSort().isUnknown()) {
+        if(proposedArg.objSpec().getBeanSort().isUnknown()) {
             return null;
         }
         proposedValue().getValue().setValue(proposedArg); // updates the 
pending parameter value
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
index 878a2c88346..7384f01b0e4 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/UiObjectWkt.java
@@ -262,7 +262,7 @@ public ScalarModel getPropertyModel(
     public Stream<Bookmark> streamPropertyBookmarks() {
         val candidateAdapter = this.getObject();
 
-        return candidateAdapter.getSpecification()
+        return candidateAdapter.objSpec()
         .streamProperties(MixedIn.EXCLUDED)
         .map(prop->
             ManagedObjects.bookmark(prop.get(candidateAdapter, 
InteractionInitiatedBy.PASS_THROUGH))
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java
index d8ae56b384d..dc434be7b3d 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/HasBookmarkedOwnerAbstract.java
@@ -58,7 +58,7 @@ public final BookmarkPolicy getBookmarkPolicy() {
 
     public final ObjectSpecification getTypeOfSpecification() {
         // serving this from a potentially unattached entity seems safe
-        return bookmarkedObject.getObject().getSpecification();
+        return bookmarkedObject.getObject().objSpec();
     }
 
 }
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java
index 9452d0ba650..8b06d9db6a0 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/act/ActionInteractionWkt.java
@@ -96,7 +96,7 @@ public static ActionInteractionWkt forEntity(
             final ScalarParameterModel associatedWithParameterIfAny,
             final EntityCollectionModel associatedWithCollectionIfAny) {
 
-        val onwerSpec = 
parentEntityModel.getBookmarkedOwner().getSpecification();
+        val onwerSpec = parentEntityModel.getBookmarkedOwner().objSpec();
         val objectAction = 
onwerSpec.getAction(actionIdentifier.getMemberLogicalName());
 
         return new ActionInteractionWkt(
diff --git 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
index 474f46d33a0..306adec6df4 100644
--- 
a/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
+++ 
b/viewers/wicket/model/src/main/java/org/apache/causeway/viewer/wicket/model/models/interaction/prop/PropertyInteractionWkt.java
@@ -124,7 +124,7 @@ private PropertyInteraction loadPropertyInteraction() {
             ManagedProperty.lookupProperty(getBookmarkedOwner(), memberId, 
where)
             .orElseThrow(()->_Exceptions.noSuchElement("property '%s' in %s",
                     memberId,
-                    getBookmarkedOwner().getSpecification())));
+                    getBookmarkedOwner().objSpec())));
     }
 
     /**
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index 6153f8f7f2e..ee204859dfb 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -274,7 +274,7 @@ private static ManagedObject determineScalarAdapter(
             final @NonNull MetaModelContext commonContext,
             final @NonNull ManagedObject resultAdapter) {
 
-        if (resultAdapter.getSpecification().isSingular()) {
+        if (resultAdapter.objSpec().isSingular()) {
             return resultAdapter;
         } else {
             // will only be a single element
@@ -304,7 +304,7 @@ private static TypeAndAdapter determineFor(
             return TypeAndAdapter.of(mapAbsentResultTo, resultAdapter);
         }
 
-        val resultSpec = resultAdapter.getSpecification();
+        val resultSpec = resultAdapter.objSpec();
         if (!(resultAdapter instanceof PackedManagedObject)) {
 
             // scalar ...
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CausewayAjaxDataTable.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CausewayAjaxDataTable.java
index f1d5d2c89f3..7be63df1630 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CausewayAjaxDataTable.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/CausewayAjaxDataTable.java
@@ -141,7 +141,7 @@ private static String cssClassForRow(final DataRow model) {
             return null;
         }
         val rowElement = model.getRowElement();
-        return rowElement.getSpecification().getCssClass(rowElement);
+        return rowElement.objSpec().getCssClass(rowElement);
     }
 
     private static Iterator<Item<DataRow>> itemReuseStrategy(
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/SingularColumn.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/SingularColumn.java
index 8d1f410e5bb..df5acf7e3f5 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/SingularColumn.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/SingularColumn.java
@@ -51,7 +51,7 @@ protected Component createCellComponent(
             final String componentId, final DataRow dataRow, final 
IModel<Boolean> dataRowToggle) {
         val rowElement = dataRow.getRowElement();
         val rowElementModel = UiObjectWkt.ofAdapter(rowElement);
-        val property = 
rowElement.getSpecification().getPropertyElseFail(memberId);
+        val property = rowElement.objSpec().getPropertyElseFail(memberId);
 
         val scalarModel = rowElementModel
                 .getPropertyModel(
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
index 58d7eef8cda..70db27c6d7e 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
@@ -166,7 +166,7 @@ private Can<OneToOneAssociation> 
getPropertiesNotStaticallyHidden() {
         return _NullSafe.stream(propertyLayouts)
         .filter(propertyLayoutData -> propertyLayoutData.getMetadataError() == 
null)
         .map(propertyLayoutData ->
-            entity.getSpecification().getProperty(propertyLayoutData.getId())
+            entity.objSpec().getProperty(propertyLayoutData.getId())
             .orElse(null)
         )
         .filter(_NullSafe::isPresent)
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index 0bebb571b61..23dbfa47c19 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -227,8 +227,8 @@ private TitleRecord determineTitle(final ManagedObject 
linkedDomainObject) {
         return this.cachedTitle = TitleRecord.builder()
                 .fullTitle(fullTitle)
                 .abbreviatedTitle(titleAbbreviated(fullTitle))
-                
.tooltipTitle(_Strings.nullToEmpty(linkedDomainObject.getSpecification().getSingularName()))
-                
.tooltipBody(_Strings.nonEmpty(linkedDomainObject.getSpecification().getDescription())
+                
.tooltipTitle(_Strings.nullToEmpty(linkedDomainObject.objSpec().getSingularName()))
+                
.tooltipBody(_Strings.nonEmpty(linkedDomainObject.objSpec().getDescription())
                         .orElseGet(()->fullTitle))
                 .build();
     }
@@ -282,7 +282,7 @@ private static void 
guardAgainstNonEmptyAbstractSingular(final ObjectAdapterMode
                 ()->String.format("model for EntityIconAndTitlePanel, "
                         + "when non-empty, must not represent abstract types; "
                         + "however, got an abstract %s for object of type %s",
-                        obj.getSpecification(),
+                        obj.objSpec(),
                         obj.getPojo().getClass().getName()));
     }
 
@@ -292,7 +292,7 @@ private static boolean isNonEmptyAbstractSingular(final 
ManagedObject obj) {
                 || ManagedObjects.isPacked(obj)) {
             return false;
         }
-        return obj.getSpecification().isAbstract();
+        return obj.objSpec().isAbstract();
     }
 
 }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/col/Col.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/col/Col.java
index 5cd98364d07..2e2072bdd00 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/col/Col.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/layout/bs/col/Col.java
@@ -232,7 +232,7 @@ private void buildGui() {
         }
 
         final UiObjectWkt entityModel = getModel();
-        val ownerSpec = entityModel.getManagedObject().getSpecification();
+        val ownerSpec = entityModel.getManagedObject().objSpec();
 
         // collection layout data by collection id (the collection's member-id)
         // preserving order, as order matters
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/markup/MarkupPanelFactories.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/markup/MarkupPanelFactories.java
index 1683c28ea34..6bdeb9a879e 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/markup/MarkupPanelFactories.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/scalars/markup/MarkupPanelFactories.java
@@ -94,7 +94,7 @@ public ApplicationAdvice appliesTo(final IModel<?> model) {
             }
 
             return appliesIf(valueType.isAssignableFrom(
-                    objectAdapter.getSpecification().getCorrespondingClass()) 
);
+                    objectAdapter.objSpec().getCorrespondingClass()) );
         }
 
         @Override
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/unknown/UnknownModelPanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/unknown/UnknownModelPanel.java
index c10f4994de5..002c2462a43 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/unknown/UnknownModelPanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/unknown/UnknownModelPanel.java
@@ -68,7 +68,7 @@ private void buildMessageForModel(final StringBuilder buf, 
final IModel<?> model
             val scalarAdapter = scalarModel.getObject();
             if(ManagedObjects.isSpecified(scalarAdapter)) {
                 buf.append(String.format("??? spec=%s, value='%s'",
-                        scalarAdapter.getSpecification(), 
scalarAdapter.getPojo()));
+                        scalarAdapter.objSpec(), scalarAdapter.getPojo()));
             } else {
                 buf.append("??? scalarAdapter is NULL or UNSPECIFIED");
             }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
index 31afbd01d61..3fb96af9955 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
@@ -210,7 +210,7 @@ private void executeWithoutParams() {
 
     private void startDialogWithParams(final AjaxRequestTarget target) {
         val actionModel = this.getActionModel();
-        val actionOwnerSpec = actionModel.getActionOwner().getSpecification();
+        val actionOwnerSpec = actionModel.getActionOwner().objSpec();
         val actionPrompt = ActionPromptProvider
                 .getFrom(this.getPage())
                 .getActionPrompt(actionModel.getPromptStyle(), 
actionOwnerSpec.getBeanSort());
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/entity/EntityPage.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/entity/EntityPage.java
index 6f35f9c51ac..b3c61fe386a 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/entity/EntityPage.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -106,7 +106,7 @@ public static EntityPage forAdapter(
             final ManagedObject adapter) {
 
         _Debug.onCondition(XrayUi.isXrayEnabled(), ()->{
-            _Debug.log("new EntityPage from Adapter %s", 
adapter.getSpecification());
+            _Debug.log("new EntityPage from Adapter %s", adapter.objSpec());
         });
 
         return new EntityPage(


Reply via email to