You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2019/10/08 12:45:42 UTC

[isis] 02/02: ISIS-2158: major MM refactoring: replace ObjectAdapter -> ManagedObject

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

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

commit 350846849076609e642cae7c3bcb2ca1ad54877d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Oct 8 14:45:29 2019 +0200

    ISIS-2158: major MM refactoring: replace ObjectAdapter -> ManagedObject
    
    - in order to decouple the meta-model from the stateful 'ObjectAdapter'
    - instead the lightweigth 'ManagedObject' just holds a PoJos and its
    ObjectSpecification
---
 .../internal/concurrent/_ConcurrentTask.java       |  10 +-
 .../internal/concurrent/_ConcurrentTaskList.java   |  29 +++-
 .../isis/config/registry/IsisBeanTypeRegistry.java |  14 +-
 .../isis/metamodel/adapter/ObjectAdapter.java      |  33 ++--
 .../isis/metamodel/facets/DomainEventHelper.java   |   2 +-
 .../action/invocation/ActionInvocationFacet.java   |  12 +-
 ...ctionInvocationFacetForDomainEventAbstract.java |  63 ++++----
 .../actions/action/invocation/CommandUtil.java     |  32 ++--
 .../actions/defaults/ActionDefaultsFacet.java      |   4 +-
 .../method/ActionDefaultsFacetViaMethod.java       |   3 +-
 .../CollectionAccessorFacetViaAccessor.java        |   5 +-
 .../clear/CollectionClearFacetViaAccessor.java     |   3 +-
 .../clear/CollectionClearFacetViaClearMethod.java  |   3 +-
 ...ectionAddToFacetForDomainEventFromAbstract.java |  10 +-
 ...nRemoveFromFacetForDomainEventFromAbstract.java |  10 +-
 .../collections/modify/CollectionAddToFacet.java   |   4 +-
 .../modify/CollectionAddToFacetViaAccessor.java    |   7 +-
 .../modify/CollectionAddToFacetViaMethod.java      |   6 +-
 .../collections/modify/CollectionClearFacet.java   |   4 +-
 .../modify/CollectionRemoveFromFacet.java          |   8 +-
 .../CollectionRemoveFromFacetViaAccessor.java      |   6 +-
 .../modify/CollectionRemoveFromFacetViaMethod.java |   6 +-
 .../facets/fallback/ActionChoicesFacetNone.java    |   6 +-
 .../facets/fallback/ActionDefaultsFacetNone.java   |   4 +-
 .../object/autocomplete/AutoCompleteFacet.java     |   4 +-
 .../autocomplete/AutoCompleteFacetAbstract.java    |  12 +-
 .../choices/ChoicesFacetFromBoundedAbstract.java   |   4 +-
 .../object/choices/enums/ChoicesFacetEnum.java     |   4 +-
 .../facets/object/encodeable/EncodableFacet.java   |   3 +-
 .../object/encodeable/EncodableFacetAbstract.java  |   3 +-
 .../encoder/EncodableFacetUsingEncoderDecoder.java |   3 +-
 .../facets/object/parseable/ParseableFacet.java    |   5 +-
 .../object/parseable/ParseableFacetAbstract.java   |   6 +-
 .../parser/ParseableFacetUsingParser.java          |   8 +-
 .../facets/object/projection/ProjectionFacet.java  |   3 +-
 .../ProjectionFacetFromProjectingProperty.java     |  29 ++--
 .../CssClassFacetDerivedFromProjectionFacet.java   |   7 +-
 .../ident/IconFacetDerivedFromProjectionFacet.java |   5 +-
 .../TitleFacetDerivedFromProjectionFacet.java      |   5 +-
 .../facets/objectvalue/choices/ChoicesFacet.java   |   4 +-
 .../ActionParameterAutoCompleteFacet.java          |   4 +-
 .../ActionParameterAutoCompleteFacetViaMethod.java |   9 +-
 .../facets/param/choices/ActionChoicesFacet.java   |   4 +-
 .../param/choices/ActionParameterChoicesFacet.java |   6 +-
 .../choices/ActionParameterChoicesFacetNone.java   |   9 +-
 ...rameterChoicesFacetDerivedFromChoicesFacet.java |   7 +-
 .../method/ActionChoicesFacetViaMethod.java        |   9 +-
 .../ActionParameterChoicesFacetViaMethod.java      |  12 +-
 .../defaults/ActionParameterDefaultsFacet.java     |   6 +-
 ...ParameterDefaultFacetDerivedFromTypeFacets.java |   4 +-
 .../ActionParameterDefaultsFacetViaMethod.java     |   7 +-
 .../disable/ActionParameterDisabledFacet.java      |   3 +-
 .../ActionParameterDisabledFacetViaMethod.java     |   3 +-
 .../param/hide/ActionParameterHiddenFacet.java     |   3 +-
 .../ActionParameterHiddenFacetViaMethod.java       |   2 +-
 .../validate/ActionParameterValidationFacet.java   |   3 +-
 .../ActionParameterValidationFacetViaMethod.java   |   2 +-
 .../autocomplete/PropertyAutoCompleteFacet.java    |   4 +-
 .../method/PropertyAutoCompleteFacetMethod.java    |   7 +-
 .../properties/choices/PropertyChoicesFacet.java   |   4 +-
 ...ropertyChoicesFacetDerivedFromChoicesFacet.java |   4 +-
 .../method/PropertyChoicesFacetViaMethod.java      |   3 +-
 .../properties/defaults/PropertyDefaultFacet.java  |   4 +-
 .../defaults/PropertyDefaultFacetNone.java         |   3 +-
 ...pertyDefaultFacetDerivedFromDefaultedFacet.java |   4 +-
 .../method/PropertyDefaultFacetViaMethod.java      |  10 +-
 ...tySetterOrClearFacetForDomainEventAbstract.java |  38 ++---
 .../update/clear/PropertyClearFacet.java           |   4 +-
 .../clear/PropertyClearFacetViaClearMethod.java    |   3 +-
 .../clear/PropertyClearFacetViaSetterMethod.java   |   4 +-
 .../update/init/PropertyInitializationFacet.java   |   4 +-
 ...PropertyInitializationFacetViaSetterMethod.java |   3 +-
 .../update/modify/PropertySetterFacet.java         |   6 +-
 .../modify/PropertySetterFacetViaModifyMethod.java |   5 +-
 .../modify/PropertySetterFacetViaSetterMethod.java |   6 +-
 .../BooleanPrimitiveValueSemanticsProvider.java    |  23 +--
 .../bytes/BytePrimitiveValueSemanticsProvider.java |   4 +-
 .../chars/CharPrimitiveValueSemanticsProvider.java |   4 +-
 .../DoublePrimitiveValueSemanticsProvider.java     |   4 +-
 .../FloatPrimitiveValueSemanticsProvider.java      |   4 +-
 .../IntPrimitiveValueSemanticsProvider.java        |   4 +-
 .../longs/LongPrimitiveValueSemanticsProvider.java |   4 +-
 .../ShortPrimitiveValueSemanticsProvider.java      |   4 +-
 .../interactions/ActionArgUsabilityContext.java    |  10 +-
 .../interactions/ActionArgValidityContext.java     |  13 +-
 .../interactions/ActionArgVisibilityContext.java   |  10 +-
 .../interactions/ActionValidityContext.java        |  12 +-
 .../interactions/CollectionAddToContext.java       |  12 +-
 .../interactions/CollectionRemoveFromContext.java  |  10 +-
 .../interactions/ObjectVisibilityContext.java      |   3 +-
 .../metamodel/interactions/ParseValueContext.java  |  11 +-
 ...arameterChoicesFacetFromParentedCollection.java |  18 +--
 ...meterDefaultsFacetFromAssociatedCollection.java |   6 +-
 .../param/DeriveFacetsPostProcessor.java           |  11 +-
 .../command/CommandDtoServiceInternal.java         |  14 +-
 .../services/homepage/HomePageAction.java          |  10 +-
 .../ixn/InteractionDtoServiceInternal.java         |  10 +-
 .../apache/isis/metamodel/spec/ManagedObject.java  |  46 ++++++
 .../isis/metamodel/spec/feature/CurrentHolder.java |   3 +-
 .../spec/feature/MutableCurrentHolder.java         |   9 +-
 .../isis/metamodel/spec/feature/ObjectAction.java  |  56 +++----
 .../spec/feature/ObjectActionParameter.java        |  32 ++--
 .../metamodel/spec/feature/ObjectAssociation.java  |  28 ++--
 .../spec/feature/OneToManyAssociation.java         |  36 ++---
 .../spec/feature/OneToOneAssociation.java          |   3 +-
 .../specloader/SpecificationLoaderDefault.java     |  13 +-
 .../classsubstitutor/ClassSubstitutor.java         |  19 ++-
 .../specimpl/ObjectActionContributee.java          |  49 +++---
 .../specloader/specimpl/ObjectActionDefault.java   | 101 ++++++------
 .../specloader/specimpl/ObjectActionMixedIn.java   |  37 +++--
 .../specimpl/ObjectActionParameterAbstract.java    | 108 ++++++-------
 .../ObjectActionParameterContributeeAbstract.java  |  18 +--
 .../ObjectActionParameterMixedInAbstract.java      |  16 +-
 .../specimpl/ObjectAssociationAbstract.java        |   4 +-
 .../specloader/specimpl/ObjectMemberAbstract.java  |  16 +-
 .../specimpl/OneToManyAssociationContributee.java  |  13 +-
 .../specimpl/OneToManyAssociationDefault.java      |  81 +++++-----
 .../specimpl/OneToManyAssociationMixedIn.java      |  18 +--
 .../specimpl/OneToOneActionParameterDefault.java   |   3 +-
 .../specimpl/OneToOneAssociationContributee.java   |   8 +-
 .../specimpl/OneToOneAssociationDefault.java       |  75 ++++-----
 .../specimpl/OneToOneAssociationMixedIn.java       |  18 ++-
 .../isis/metamodel/util/snapshot/IsisSchema.java   |   4 +-
 .../apache/isis/metamodel/util/snapshot/Place.java |   8 +-
 .../isis/metamodel/util/snapshot/XmlSnapshot.java  |  27 ++--
 .../CollectionAnnotationFacetFactoryTest.java      |   9 +-
 .../PropertyAnnotationFacetFactoryTest.java        |   9 +-
 ...ionParameterAbstractTest_getId_and_getName.java |   5 +-
 .../specimpl/ObjectAssociationAbstractTest.java    |  19 ++-
 ...ObjectAssociationAbstractTest_alwaysHidden.java |  16 +-
 .../background/CommandExecutorServiceDefault.java  |   3 +-
 .../command/CommandDtoServiceInternalDefault.java  |  27 ++--
 .../ixn/InteractionDtoServiceInternalDefault.java  |   9 +-
 .../org/apache/isis/runtime/memento/Memento.java   |  12 +-
 .../ObjectAdapterContext_MementoSupport.java       |   6 +-
 .../system/transaction/AdapterAndProperty.java     |   4 +-
 .../system/OneToManyAssociationDefaultTest.java    |   7 +
 .../domainobjects/DomainObjectReprRenderer.java    |   7 +-
 .../rendering/domainobjects/JsonValueEncoder.java  |   5 +-
 .../domainobjects/ObjectActionReprRenderer.java    |   7 +-
 .../ObjectCollectionReprRenderer.java              |  16 +-
 .../domainobjects/ObjectPropertyReprRenderer.java  |  23 +--
 .../ContentNegotiationServiceOrgApacheIsisV1.java  |  10 +-
 .../server/resources/DomainResourceHelper.java     |   5 +-
 .../viewer/wicket/model/models/ActionModel.java    |  10 +-
 .../wicket/model/models/BookmarkTreeNode.java      |  12 +-
 .../wicket/model/models/EntityCollectionModel.java |   5 +-
 .../viewer/wicket/model/models/EntityModel.java    |  11 +-
 .../viewer/wicket/model/models/ScalarModel.java    |  32 ++--
 .../components/actions/ActionParametersForm.java   |   3 +-
 .../CollectionContentsSortableDataProvider.java    |  11 +-
 .../summary/CollectionContentsAsSummary.java       |   5 +-
 .../entity/icontitle/EntityIconAndTitlePanel.java  |   9 +-
 .../components/scalars/ScalarPanelAbstract2.java   |   3 +-
 .../linkandlabel/ActionLinkFactoryAbstract.java    |   5 +-
 ...entoProviderForReferenceObjectAutoComplete.java |  30 ++--
 .../isis/viewer/wicket/ui/pages/home/HomePage.java |   8 +-
 .../background/BackgroundServiceDefault.java       | 149 ------------------
 .../background/CommandInvocationHandler.java       | 174 ---------------------
 .../background/ForkingInvocationHandler.java       | 102 ------------
 .../background/InvocationHandlerFactory.java       |  37 -----
 .../InvocationHandlerFactoryFallback.java          |  84 ----------
 ...andlerFactoryUsingBackgroundCommandService.java |  62 --------
 .../viewer/wicket/excel/ExcelFileModel.java        |   4 +-
 164 files changed, 1063 insertions(+), 1540 deletions(-)

diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_ConcurrentTask.java b/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_ConcurrentTask.java
index a1144b9..dfa7dba 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_ConcurrentTask.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_ConcurrentTask.java
@@ -42,7 +42,7 @@ public abstract class _ConcurrentTask<T> implements Runnable {
         NOT_STARTED,
         STARTED,
         FAILED,
-        COMPLETED
+        SUCCEEDED
     }
 
     public abstract String getName();
@@ -52,7 +52,7 @@ public abstract class _ConcurrentTask<T> implements Runnable {
     @Getter private long completedAtNanos;
     @Getter private long failedAtNanos;
     @Getter private T completedWith;
-    @Getter private Exception failedWith;
+    @Getter private Throwable failedWith;
 
     protected synchronized void preCall() {
         if(startedAtNanos>0L) {
@@ -65,7 +65,7 @@ public abstract class _ConcurrentTask<T> implements Runnable {
         status = State.STARTED;
     }
     
-    protected void postCall(T completedWith, Exception failedWith) {
+    protected void postCall(T completedWith, Throwable failedWith) {
         if(failedWith!=null) {
             this.failedAtNanos = System.nanoTime();
             this.failedWith = failedWith;
@@ -73,7 +73,7 @@ public abstract class _ConcurrentTask<T> implements Runnable {
         } else {
             this.completedAtNanos = System.nanoTime();
             this.completedWith = completedWith;
-            this.status = State.COMPLETED;
+            this.status = State.SUCCEEDED;
         }
     }
     
@@ -86,7 +86,7 @@ public abstract class _ConcurrentTask<T> implements Runnable {
         try {
             val completedWith = innerCall();
             postCall(completedWith, /*failedWith*/ null);
-        } catch (Exception e) {
+        } catch (Throwable e) {
             postCall(/*completedWith*/ null, e);
         }
 
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_ConcurrentTaskList.java b/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_ConcurrentTaskList.java
index dba0966..bc6295f 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_ConcurrentTaskList.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/concurrent/_ConcurrentTaskList.java
@@ -48,8 +48,8 @@ public class _ConcurrentTaskList {
     
     private final List<_ConcurrentTask<?>> tasks = _Lists.newArrayList();
     private final AtomicBoolean wasStarted = new AtomicBoolean();
-    private final CountDownLatch countDownLatch = new CountDownLatch(1);
-    private final AwaitableLatch awaitableLatch = AwaitableLatch.of(countDownLatch);
+    private final CountDownLatch allFinishedLatch = new CountDownLatch(1);
+    private final AwaitableLatch awaitableLatch = AwaitableLatch.of(allFinishedLatch);
     private final LongAdder tasksExecuted = new LongAdder();
     private long executionTimeNanos;
     
@@ -97,15 +97,17 @@ public class _ConcurrentTaskList {
         
         if(context.shouldRunSequential()) {
             for(_ConcurrentTask<?> task : tasks) {
-                task.run();
+                task.run(); // exceptions are swallowed, to be found in the _ConcurrentTask object 
                 tasksExecuted.increment();
             }
-            countDownLatch.countDown();
             executionTimeNanos = System.nanoTime() - t0;
-            logExecutionSummary(context);
+            onFinished(context);
+            allFinishedLatch.countDown();
             return this;
         }
         
+        // else run with executor ...
+        
         val futures = new ArrayList<Future<?>>(tasks.size());
         
         for(_ConcurrentTask<?> task : tasks) {
@@ -127,9 +129,10 @@ public class _ConcurrentTaskList {
                     }
                     
                 }
-                countDownLatch.countDown();
                 executionTimeNanos = System.nanoTime() - t0;
-                logExecutionSummary(context);
+                
+                onFinished(context);
+                allFinishedLatch.countDown();
             }
             
         };
@@ -158,7 +161,17 @@ public class _ConcurrentTaskList {
     
     // -- EXECUTION LOGGING
     
-    private void logExecutionSummary(_ConcurrentContext context) {
+    private void onFinished(_ConcurrentContext context) {
+        
+        for(val task: tasks) {
+            if(task.getFailedWith()!=null) {
+                log.error("----------------------------------------");
+                log.error("Failed TaskList: " + this.getName());
+                log.error("Failed Task: " + task.getName());
+                log.error("----------------------------------------", task.getFailedWith());
+            }
+        }
+        
         if(!context.enableExecutionLogging) {
             return;
         }
diff --git a/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java b/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
index b0221ef..9c0447f 100644
--- a/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
+++ b/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
@@ -267,17 +267,9 @@ public final class IsisBeanTypeRegistry implements BeanSortClassifier, AutoClose
             return BeanSort.MANAGED_BEAN;
         }
 
-        if(findNearestAnnotation(type, RequestScoped.class).isPresent()) {
-            return BeanSort.MANAGED_BEAN;
-        }
-
-        if(findNearestAnnotation(type, Singleton.class).isPresent()) {
-            return BeanSort.MANAGED_BEAN;
-        }
-
-        if(findNearestAnnotation(type, Service.class).isPresent()) {
-            return BeanSort.MANAGED_BEAN;
-        }
+//        if(findNearestAnnotation(type, RequestScoped.class).isPresent()) {
+//            return BeanSort.MANAGED_BEAN;
+//        }
 
         if(findNearestAnnotation(type, Component.class).isPresent()) {
             return BeanSort.MANAGED_BEAN;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java
index faaa2e6..b593431 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/ObjectAdapter.java
@@ -103,20 +103,14 @@ public interface ObjectAdapter extends ManagedObject {
 
         private Util() {}
 
+        @Deprecated
         public static Object unwrapPojo(final ManagedObject adapter) {
-            return adapter != null ? adapter.getPojo() : null;
+            return ManagedObject.unwrapPojo(adapter);
         }
 
+        @Deprecated// duplicate is in ManagedObject
         public static Object[] unwrapPojoArray(final ManagedObject[] adapters) {
-            if (adapters == null) {
-                return null;
-            }
-            final Object[] unwrappedObjects = new Object[adapters.length];
-            int i = 0;
-            for (final ManagedObject adapter : adapters) {
-                unwrappedObjects[i++] = unwrapPojo(adapter);
-            }
-            return unwrappedObjects;
+            return ManagedObject.unwrapPojoArray(adapters);
         }
 
         public static List<Object> unwrapPojoList(final List<? extends ManagedObject> adapters) {
@@ -191,18 +185,18 @@ public interface ObjectAdapter extends ManagedObject {
          *  @param collectionAdapter - an adapter around a collection (as returned by a getter of a collection, or of an autoCompleteNXxx() or choicesNXxx() method, etc
          * @param interactionInitiatedBy
          */
-        public static List<ObjectAdapter> visibleAdapters(
-                final ObjectAdapter collectionAdapter,
+        public static List<ManagedObject> visibleAdapters(
+                final ManagedObject collectionAdapter,
                 final InteractionInitiatedBy interactionInitiatedBy) {
 
-            final Stream<ObjectAdapter> objectAdapters = 
+            final Stream<ManagedObject> objectAdapters = 
                     CollectionFacet.Utils.streamAdapters(collectionAdapter);
 
             return visibleAdapters(objectAdapters, interactionInitiatedBy);
         }
 
-        public static List<ObjectAdapter> visibleAdapters(
-                final Stream<ObjectAdapter> objectAdapters,
+        public static List<ManagedObject> visibleAdapters(
+                final Stream<ManagedObject> objectAdapters,
                 final InteractionInitiatedBy interactionInitiatedBy) {
 
             return objectAdapters
@@ -216,20 +210,20 @@ public interface ObjectAdapter extends ManagedObject {
          * @param interactionInitiatedBy
          */
         public static boolean isVisible(
-                final ObjectAdapter adapter,
+                final ManagedObject adapter,
                 final InteractionInitiatedBy interactionInitiatedBy) {
             if(adapter == null) {
                 // a choices list could include a null (eg example in ToDoItems#choices1Categorized()); want to show as "visible"
                 return true;
             }
-            if(adapter.isDestroyed()) {
+            if(ManagedObject.promote(adapter).isDestroyed()) {
                 return false;
             }
             if(interactionInitiatedBy == InteractionInitiatedBy.FRAMEWORK) { return true; }
             return isVisibleForUser(adapter);
         }
 
-        private static boolean isVisibleForUser(final ObjectAdapter adapter) {
+        private static boolean isVisibleForUser(final ManagedObject adapter) {
             final VisibilityContext<?> context = createVisibleInteractionContextForUser(adapter);
             final ObjectSpecification objectSpecification = adapter.getSpecification();
             final InteractionResult visibleResult = InteractionUtils.isVisibleResult(objectSpecification, context);
@@ -237,7 +231,8 @@ public interface ObjectAdapter extends ManagedObject {
         }
 
         private static VisibilityContext<?> createVisibleInteractionContextForUser(
-                final ObjectAdapter objectAdapter) {
+                final ManagedObject objectAdapter) {
+            
             return new ObjectVisibilityContext(
                     objectAdapter,
                     objectAdapter.getSpecification().getIdentifier(),
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java
index 866c83e..ee76faf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java
@@ -69,7 +69,7 @@ public class DomainEventHelper {
                     final ManagedObject mixedInAdapter,
                     final ManagedObject[] argumentAdapters,
                     final Command command,
-                    final ObjectAdapter resultAdapter) {
+                    final ManagedObject resultAdapter) {
         
         _Assert.assertTypeIsInstanceOf(eventType, ActionDomainEvent.class);
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java
index ac3cd51..3530131 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.actions.action.invocation;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 
@@ -35,13 +35,13 @@ import org.apache.isis.metamodel.spec.feature.ObjectAction;
  */
 public interface ActionInvocationFacet extends Facet {
 
-    ObjectAdapter invoke(
+    ManagedObject invoke(
             ObjectAction owningAction,
-            ObjectAdapter targetAdapter,
-            ObjectAdapter mixedInAdapter,  // null for regular or contributed (not mixin) actions
-            ObjectAdapter[] argumentAdapters,
+            ManagedObject targetAdapter,
+            ManagedObject mixedInAdapter,  // null for regular or contributed (not mixin) actions
+            ManagedObject[] argumentAdapters,
             InteractionInitiatedBy interactionInitiatedBy);
-
+    
     ObjectSpecification getReturnType();
 
     ObjectSpecification getOnType();
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index ba7ae71..5a4d969 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -66,6 +66,7 @@ import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.metamodel.services.ixn.InteractionDtoServiceInternal;
 import org.apache.isis.metamodel.services.publishing.PublishingServiceInternal;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
@@ -73,6 +74,8 @@ import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
 import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
 import static org.apache.isis.commons.internal.base._NullSafe.stream;
 
+import lombok.val;
+
 public abstract class ActionInvocationFacetForDomainEventAbstract
 extends ActionInvocationFacetAbstract
 implements ImperativeFacet {
@@ -127,14 +130,14 @@ implements ImperativeFacet {
 
 
     @Override
-    public ObjectAdapter invoke(
+    public ManagedObject invoke(
             final ObjectAction owningAction,
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter[] argumentAdapters,
+            final ManagedObject targetAdapter,
+            final ManagedObject mixedInAdapter,
+            final ManagedObject[] argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        final ObjectAdapter executionResult = 
+        final ManagedObject executionResult = 
                 getTransactionService().executeWithinTransaction(()->
                 doInvoke(owningAction, targetAdapter, mixedInAdapter, argumentAdapters, interactionInitiatedBy));
 
@@ -143,11 +146,11 @@ implements ImperativeFacet {
         return executionResult;
     }
 
-    ObjectAdapter doInvoke(
+    ManagedObject doInvoke(
             final ObjectAction owningAction,
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter[] argumentAdapters,
+            final ManagedObject targetAdapter,
+            final ManagedObject mixedInAdapter,
+            final ManagedObject[] argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
         // similar code in PropertySetterOrClearFacetFDEA
 
@@ -160,7 +163,7 @@ implements ImperativeFacet {
 
         final String actionId = owningAction.getIdentifier().toClassAndNameIdentityString();
 
-        final ObjectAdapter returnedAdapter;
+        final ManagedObject returnedAdapter;
         if( command.getExecutor() == Command.Executor.USER &&
                 command.getExecuteIn() == org.apache.isis.applib.annotation.CommandExecuteIn.BACKGROUND) {
 
@@ -177,11 +180,11 @@ implements ImperativeFacet {
 
         } else {
             // otherwise, go ahead and execute action in the 'foreground'
-            final ObjectAdapter mixinElseRegularAdapter = mixedInAdapter != null ? mixedInAdapter : targetAdapter;
+            final ManagedObject mixinElseRegularAdapter = mixedInAdapter != null ? mixedInAdapter : targetAdapter;
 
-            final Object mixinElseRegularPojo = ObjectAdapter.Util.unwrapPojo(mixinElseRegularAdapter);
+            final Object mixinElseRegularPojo = ManagedObject.unwrapPojo(mixinElseRegularAdapter);
 
-            final List<ObjectAdapter> argumentAdapterList = Arrays.asList(argumentAdapters);
+            final List<ManagedObject> argumentAdapterList = Arrays.asList(argumentAdapters);
             final List<Object> argumentPojos = ObjectAdapter.Util.unwrapPojoList(argumentAdapterList);
 
             final String targetMember = targetNameFor(owningAction, mixedInAdapter);
@@ -232,8 +235,8 @@ implements ImperativeFacet {
                         currentExecution.setEvent(event);
 
                         // invoke method
-                        final Object resultPojo = invokeMethodElseFromCache(targetAdapter, argumentAdapters);
-                        ObjectAdapter resultAdapterPossiblyCloned = cloneIfViewModelCloneable(resultPojo, mixinElseRegularAdapter);
+                        val resultPojo = invokeMethodElseFromCache(targetAdapter, argumentAdapters);
+                        ManagedObject resultAdapterPossiblyCloned = cloneIfViewModelCloneable(resultPojo, mixinElseRegularAdapter);
 
                         // ... post the executed event
 
@@ -250,7 +253,7 @@ implements ImperativeFacet {
                         if(returnValue != resultPojo) {
                             resultAdapterPossiblyCloned = cloneIfViewModelCloneable(returnValue, mixinElseRegularAdapter);
                         }
-                        return ObjectAdapter.Util.unwrapPojo(resultAdapterPossiblyCloned);
+                        return ManagedObject.unwrapPojo(resultAdapterPossiblyCloned);
 
                     } catch (Exception e) {
 
@@ -320,7 +323,7 @@ implements ImperativeFacet {
         return filteredIfRequired(returnedAdapter, interactionInitiatedBy);
     }
 
-    private static String targetNameFor(ObjectAction owningAction, ObjectAdapter mixedInAdapter) {
+    private static String targetNameFor(ObjectAction owningAction, ManagedObject mixedInAdapter) {
         return ObjectAction.Util.targetNameFor(owningAction, mixedInAdapter)
                 .orElseGet(()->CommandUtil.targetMemberNameFor(owningAction));
     }
@@ -336,7 +339,7 @@ implements ImperativeFacet {
     }
 
     protected Object invokeMethodElseFromCache(
-            final ObjectAdapter targetAdapter, final ObjectAdapter[] arguments)
+            final ManagedObject targetAdapter, final ManagedObject[] arguments)
                     throws IllegalAccessException, InvocationTargetException {
 
         final Object[] executionParameters = new Object[arguments.length];
@@ -360,14 +363,14 @@ implements ImperativeFacet {
         }
     }
 
-    protected ObjectAdapter cloneIfViewModelCloneable(
+    protected ManagedObject cloneIfViewModelCloneable(
             final Object resultPojo,
-            final ObjectAdapter targetAdapter) {
+            final ManagedObject targetAdapter) {
 
         // to remove boilerplate from the domain, we automatically clone the returned object if it is a view model.
 
         if (resultPojo != null) {
-            final ObjectAdapter resultAdapter = getObjectAdapterProvider().adapterFor(resultPojo);
+            final ManagedObject resultAdapter = getObjectAdapterProvider().adapterFor(resultPojo);
             return cloneIfViewModelElse(resultAdapter, resultAdapter);
         } else {
             // if void or null, attempt to clone the original target, else return null.
@@ -375,7 +378,7 @@ implements ImperativeFacet {
         }
     }
 
-    private ObjectAdapter cloneIfViewModelElse(final ObjectAdapter adapter, final ObjectAdapter dfltAdapter) {
+    private ManagedObject cloneIfViewModelElse(final ManagedObject adapter, final ManagedObject dfltAdapter) {
 
         if (!adapter.getSpecification().isViewModelCloneable(adapter)) {
             return dfltAdapter;
@@ -384,12 +387,12 @@ implements ImperativeFacet {
         final ViewModelFacet viewModelFacet = adapter.getSpecification().getFacet(ViewModelFacet.class);
         final Object clone = viewModelFacet.clone(adapter.getPojo());
 
-        final ObjectAdapter clonedAdapter = getObjectAdapterProvider().adapterFor(clone);
+        final ManagedObject clonedAdapter = getObjectAdapterProvider().adapterFor(clone);
         return clonedAdapter;
     }
 
 
-    protected void setCommandResultIfEntity(final Command command, final ObjectAdapter resultAdapter) {
+    protected void setCommandResultIfEntity(final Command command, final ManagedObject resultAdapter) {
         if(command.getResult() != null) {
             // don't trample over any existing result, eg subsequent mixins.
             return;
@@ -427,8 +430,8 @@ implements ImperativeFacet {
         return serviceRegistry.lookupServiceElseFail(BookmarkService.class);
     }
 
-    protected ObjectAdapter filteredIfRequired(
-            final ObjectAdapter resultAdapter,
+    protected ManagedObject filteredIfRequired(
+            final ManagedObject resultAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         if (resultAdapter == null) {
@@ -444,15 +447,15 @@ implements ImperativeFacet {
 
         if(result instanceof Collection || result.getClass().isArray()) {
 
-            final Stream<ObjectAdapter> adapters = CollectionFacet.Utils.streamAdapters(resultAdapter);
+            final Stream<ManagedObject> adapters = CollectionFacet.Utils.streamAdapters(resultAdapter);
 
-            final List<ObjectAdapter> visibleAdapters =
+            final List<ManagedObject> visibleAdapters =
                     ObjectAdapter.Util.visibleAdapters(adapters, interactionInitiatedBy);
 
             final Object visibleObjects =
                     CollectionUtils.copyOf(
                             stream(visibleAdapters)
-                            .map(ObjectAdapter.Util::unwrapPojo)
+                            .map(ManagedObject::unwrapPojo)
                             .collect(Collectors.toList()),
                             method.getReturnType());
 
@@ -475,7 +478,7 @@ implements ImperativeFacet {
         return uncheckedCast(eventType);
     }
 
-    private static Object unwrap(final ObjectAdapter adapter) {
+    private static Object unwrap(final ManagedObject adapter) {
         return adapter == null ? null : adapter.getPojo();
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java
index 45f2b88..651816a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java
@@ -24,15 +24,17 @@ import java.util.List;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Arrays;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.metamodel.adapter.oid.Oid;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.commons.StringExtensions;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.metamodel.spec.feature.ObjectMember;
 
+import lombok.val;
+
 /**
  * Factoring out the commonality between <tt>ActionInvocationFacetViaMethod</tt> and <tt>BackgroundServiceDefault</tt>.
  */
@@ -44,7 +46,7 @@ public class CommandUtil {
         return objectMember.getName();
     }
 
-    public static String targetClassNameFor(final ObjectAdapter targetAdapter) {
+    public static String targetClassNameFor(final ManagedObject targetAdapter) {
         return StringExtensions.asNaturalName2(targetAdapter.getSpecification().getSingularName());
     }
 
@@ -52,7 +54,7 @@ public class CommandUtil {
         return objectMember.getIdentifier().toClassAndNameIdentityString();
     }
 
-    public static String argDescriptionFor(final ObjectAdapter valueAdapter) {
+    public static String argDescriptionFor(final ManagedObject valueAdapter) {
         final StringBuilder buf = new StringBuilder();
         if(valueAdapter != null) {
             appendArg(buf, "new value", valueAdapter);
@@ -61,10 +63,12 @@ public class CommandUtil {
         }
         return buf.toString();
     }
+    
     public static String argDescriptionFor(
             final ObjectAction owningAction,
-            final ObjectAdapter[] arguments) {
-        final StringBuilder argsBuf = new StringBuilder();
+            final ManagedObject[] arguments) {
+        
+        val argsBuf = new StringBuilder();
         List<ObjectActionParameter> parameters = owningAction.getParameters();
         if(parameters.size() == arguments.length) {
             // should be the case
@@ -76,8 +80,9 @@ public class CommandUtil {
         return argsBuf.toString();
     }
 
-    public static Bookmark bookmarkFor(final ObjectAdapter adapter) {
-        final Oid oid = adapter.getOid();
+    public static Bookmark bookmarkFor(final ManagedObject adapter) {
+        
+        final Oid oid = ManagedObject.promote(adapter).getOid();
         if(!(oid instanceof RootOid)) {
             return null;
         }
@@ -88,7 +93,8 @@ public class CommandUtil {
     static void appendParamArg(
             final StringBuilder buf,
             final ObjectActionParameter param,
-            final ObjectAdapter objectAdapter) {
+            final ManagedObject objectAdapter) {
+        
         final String name = param.getName();
         appendArg(buf, name, objectAdapter);
     }
@@ -96,15 +102,19 @@ public class CommandUtil {
     private static void appendArg(
             final StringBuilder buf,
             final String name,
-            final ObjectAdapter objectAdapter) {
+            final ManagedObject objectAdapter) {
+        
         String titleOf = objectAdapter != null? objectAdapter.titleString(null): "null";
         buf.append(name).append(": ").append(titleOf).append("\n");
     }
 
-    public static ObjectAdapter[] adaptersFor(final Object[] args, final ObjectAdapterProvider adapterProvider) {
+    public static ManagedObject[] adaptersFor(
+            final Object[] args, 
+            final ObjectAdapterProvider adapterProvider) {
+        
         return _NullSafe.stream(args)
                 .map(adapterProvider::adapterFor)
-                .collect(_Arrays.toArray(ObjectAdapter.class, _NullSafe.size(args)));
+                .collect(_Arrays.toArray(ManagedObject.class, _NullSafe.size(args)));
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/defaults/ActionDefaultsFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/defaults/ActionDefaultsFacet.java
index 99e2c58..8e40bbe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/defaults/ActionDefaultsFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/defaults/ActionDefaultsFacet.java
@@ -19,8 +19,8 @@
 
 package org.apache.isis.metamodel.facets.actions.defaults;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Obtain defaults for each of the parameters of the action.
@@ -31,5 +31,5 @@ import org.apache.isis.metamodel.facetapi.Facet;
  */
 public interface ActionDefaultsFacet extends Facet {
 
-    public abstract Object[] getDefaults(ObjectAdapter inObject);
+    public abstract Object[] getDefaults(ManagedObject inObject);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/defaults/method/ActionDefaultsFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/defaults/method/ActionDefaultsFacetViaMethod.java
index 84492af..c97b021 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/defaults/method/ActionDefaultsFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/defaults/method/ActionDefaultsFacetViaMethod.java
@@ -31,6 +31,7 @@ import org.apache.isis.metamodel.facets.ImperativeFacet;
 import org.apache.isis.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
 import org.apache.isis.metamodel.facets.actions.action.invocation.ActionInvocationFacetForDomainEventAbstract;
 import org.apache.isis.metamodel.facets.actions.defaults.ActionDefaultsFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class ActionDefaultsFacetViaMethod extends ActionDefaultsFacetAbstract implements ImperativeFacet {
 
@@ -72,7 +73,7 @@ public class ActionDefaultsFacetViaMethod extends ActionDefaultsFacetAbstract im
     }
 
     @Override
-    public Object[] getDefaults(final ObjectAdapter owningAdapter) {
+    public Object[] getDefaults(final ManagedObject owningAdapter) {
         return (Object[]) ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
index eb691e5..ccbc9b1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessor.java
@@ -25,7 +25,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.config.internal._Config;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -76,13 +75,13 @@ implements ImperativeFacet {
 
         final boolean filterForVisibility = getConfiguration().getReflector().getFacet().isFilterVisibility();
         if(filterForVisibility) {
-            final List<ObjectAdapter> visibleAdapters =
+            final List<ManagedObject> visibleAdapters =
                     ObjectAdapter.Util.visibleAdapters(
                             collectionAdapter,
                             interactionInitiatedBy);
             final Object visibleObjects =
                     CollectionUtils.copyOf(
-                            _Lists.map(visibleAdapters, ObjectAdapter.Util::unwrapPojo),
+                            _Lists.map(visibleAdapters, ManagedObject::unwrapPojo),
                             method.getReturnType());
             if (visibleObjects != null) {
                 return visibleObjects;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/clear/CollectionClearFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/clear/CollectionClearFacetViaAccessor.java
index a26883e..1672ef7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/clear/CollectionClearFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/clear/CollectionClearFacetViaAccessor.java
@@ -29,6 +29,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionClearFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class CollectionClearFacetViaAccessor extends CollectionClearFacetAbstract implements ImperativeFacet {
 
@@ -57,7 +58,7 @@ public class CollectionClearFacetViaAccessor extends CollectionClearFacetAbstrac
     }
 
     @Override
-    public void clear(final ObjectAdapter owningAdapter) {
+    public void clear(final ManagedObject owningAdapter) {
         final Collection<?> collection = (Collection<?>) ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
         collection.clear();
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/clear/CollectionClearFacetViaClearMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/clear/CollectionClearFacetViaClearMethod.java
index a5117e7..5a6cfc9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/clear/CollectionClearFacetViaClearMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/clear/CollectionClearFacetViaClearMethod.java
@@ -28,6 +28,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionClearFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class CollectionClearFacetViaClearMethod extends CollectionClearFacetAbstract implements ImperativeFacet {
 
@@ -53,7 +54,7 @@ public class CollectionClearFacetViaClearMethod extends CollectionClearFacetAbst
     }
 
     @Override
-    public void clear(final ObjectAdapter owningAdapter) {
+    public void clear(final ManagedObject owningAdapter) {
         ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
index 025d25e..af4cc7a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/collection/modify/CollectionAddToFacetForDomainEventFromAbstract.java
@@ -25,7 +25,6 @@ import java.util.Set;
 import org.apache.isis.applib.events.domain.AbstractDomainEvent;
 import org.apache.isis.applib.events.domain.CollectionDomainEvent;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -33,6 +32,7 @@ import org.apache.isis.metamodel.facets.DomainEventHelper;
 import org.apache.isis.metamodel.facets.SingleValueFacetAbstract;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionAddToFacet;
 import org.apache.isis.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
 
@@ -65,13 +65,13 @@ implements CollectionAddToFacet {
 
     @Override
     public void add(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter referencedObjectAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
+            final ManagedObject targetAdapter,
+            final ManagedObject referencedObjectAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
         if (this.collectionAddToFacet == null) {
             return;
         }
 
-        final Object referencedObject = ObjectAdapter.Util.unwrapPojo(referencedObjectAdapter);
+        final Object referencedObject = ManagedObject.unwrapPojo(referencedObjectAdapter);
 
         // get hold of underlying collection
         final Object collection = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
@@ -87,7 +87,7 @@ implements CollectionAddToFacet {
 
         // either doesn't contain object, or doesn't have set semantics, so
         // execute the add wrapped between the executing and executed events ...
-        final ObjectAdapter mixedInAdapter = null;
+        final ManagedObject mixedInAdapter = null;
 
         // ... post the executing event
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
index 64eaae9..f1b203d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/collection/modify/CollectionRemoveFromFacetForDomainEventFromAbstract.java
@@ -26,7 +26,6 @@ import org.apache.isis.applib.events.domain.AbstractDomainEvent;
 import org.apache.isis.applib.events.domain.CollectionDomainEvent;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -34,6 +33,7 @@ import org.apache.isis.metamodel.facets.DomainEventHelper;
 import org.apache.isis.metamodel.facets.SingleValueFacetAbstract;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
 import org.apache.isis.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
 
@@ -67,15 +67,15 @@ implements CollectionRemoveFromFacet {
 
     @Override
     public void remove(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter referencedObjectAdapter,
+            final ManagedObject targetAdapter,
+            final ManagedObject referencedObjectAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         if (this.collectionRemoveFromFacet == null) {
             return;
         }
 
 
-        final Object referencedObject = ObjectAdapter.Util.unwrapPojo(referencedObjectAdapter);
+        final Object referencedObject = ManagedObject.unwrapPojo(referencedObjectAdapter);
 
         // get hold of underlying collection
         // passing null through for authenticationSession/deploymentType means to avoid any visibility filtering.
@@ -88,7 +88,7 @@ implements CollectionRemoveFromFacet {
 
         // contains the element, so
         // execute the remove wrapped between the executing and executed events ...
-        final ObjectAdapter mixedInAdapter = null;
+        final ManagedObject mixedInAdapter = null;
 
         // ... post the executing event
         final CollectionDomainEvent<?, ?> event =
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacet.java
index 04bd0ed..02d8704 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacet.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.collections.modify;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Add object to a collection.
@@ -32,6 +32,6 @@ import org.apache.isis.metamodel.facetapi.Facet;
  */
 public interface CollectionAddToFacet extends Facet {
 
-    public void add(ObjectAdapter inObject, ObjectAdapter value, final InteractionInitiatedBy interactionInitiatedBy);
+    public void add(ManagedObject inObject, ManagedObject value, InteractionInitiatedBy interactionInitiatedBy);
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacetViaAccessor.java
index 1c5db36..a6ff5fe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacetViaAccessor.java
@@ -29,6 +29,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class CollectionAddToFacetViaAccessor extends CollectionAddToFacetAbstract implements ImperativeFacet {
 
@@ -55,12 +56,12 @@ public class CollectionAddToFacetViaAccessor extends CollectionAddToFacetAbstrac
 
     @Override
     public void add(
-            final ObjectAdapter owningAdapter,
-            final ObjectAdapter elementAdapter,
+            final ManagedObject owningAdapter,
+            final ManagedObject elementAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         @SuppressWarnings("unchecked")
         final Collection<? super Object> collection = (Collection<? super Object>) ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
-        final Object elementPojo = ObjectAdapter.Util.unwrapPojo(elementAdapter);
+        final Object elementPojo = ManagedObject.unwrapPojo(elementAdapter);
         collection.add(elementPojo);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacetViaMethod.java
index 34b92f6..7fe7967 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionAddToFacetViaMethod.java
@@ -28,6 +28,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class CollectionAddToFacetViaMethod extends CollectionAddToFacetAbstract implements ImperativeFacet {
 
@@ -54,9 +55,10 @@ public class CollectionAddToFacetViaMethod extends CollectionAddToFacetAbstract
 
     @Override
     public void add(
-            final ObjectAdapter owningAdapter,
-            final ObjectAdapter elementAdapter,
+            final ManagedObject owningAdapter,
+            final ManagedObject elementAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         ObjectAdapter.InvokeUtils.invoke(method, owningAdapter, elementAdapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionClearFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionClearFacet.java
index cc5e08e..662d4e7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionClearFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionClearFacet.java
@@ -19,8 +19,8 @@
 
 package org.apache.isis.metamodel.facets.collections.modify;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Clear all objects from a collection.
@@ -32,5 +32,5 @@ import org.apache.isis.metamodel.facetapi.Facet;
  */
 public interface CollectionClearFacet extends Facet {
 
-    public void clear(ObjectAdapter inObject);
+    public void clear(ManagedObject inObject);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacet.java
index 781dad3..cd11297 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacet.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.collections.modify;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Remove object to a collection.
@@ -33,7 +33,7 @@ import org.apache.isis.metamodel.facetapi.Facet;
 public interface CollectionRemoveFromFacet extends Facet {
 
     public void remove(
-            final ObjectAdapter inObject,
-            final ObjectAdapter element,
-            final InteractionInitiatedBy interactionInitiatedBy);
+            ManagedObject inObject,
+            ManagedObject element,
+            InteractionInitiatedBy interactionInitiatedBy);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaAccessor.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaAccessor.java
index f4c2fd4..a74a68e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaAccessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaAccessor.java
@@ -29,6 +29,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class CollectionRemoveFromFacetViaAccessor extends CollectionRemoveFromFacetAbstract implements ImperativeFacet {
 
@@ -57,9 +58,10 @@ public class CollectionRemoveFromFacetViaAccessor extends CollectionRemoveFromFa
 
     @Override
     public void remove(
-            final ObjectAdapter owningAdapter,
-            final ObjectAdapter elementAdapter,
+            final ManagedObject owningAdapter,
+            final ManagedObject elementAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         @SuppressWarnings("unchecked")
         final Collection<? super Object> collection = (Collection<? super Object>) ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
         collection.remove(ObjectAdapter.Util.unwrapPojo(elementAdapter));
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaMethod.java
index 263d2a2..4ba362f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionRemoveFromFacetViaMethod.java
@@ -28,6 +28,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class CollectionRemoveFromFacetViaMethod extends CollectionRemoveFromFacetAbstract implements ImperativeFacet {
 
@@ -54,9 +55,10 @@ public class CollectionRemoveFromFacetViaMethod extends CollectionRemoveFromFace
 
     @Override
     public void remove(
-            final ObjectAdapter owningAdapter,
-            final ObjectAdapter elementAdapter,
+            final ManagedObject owningAdapter,
+            final ManagedObject elementAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         ObjectAdapter.InvokeUtils.invoke(method, owningAdapter, elementAdapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/fallback/ActionChoicesFacetNone.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/fallback/ActionChoicesFacetNone.java
index 535f88c..991fdc1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/fallback/ActionChoicesFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/fallback/ActionChoicesFacetNone.java
@@ -19,10 +19,10 @@
 
 package org.apache.isis.metamodel.facets.fallback;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.param.choices.ActionChoicesFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class ActionChoicesFacetNone extends ActionChoicesFacetAbstract {
 
@@ -32,9 +32,9 @@ public class ActionChoicesFacetNone extends ActionChoicesFacetAbstract {
 
     @Override
     public Object[][] getChoices(
-            final ObjectAdapter inObject,
+            final ManagedObject inObject,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        return new ObjectAdapter[0][0];
+        return new ManagedObject[0][0];
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/fallback/ActionDefaultsFacetNone.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/fallback/ActionDefaultsFacetNone.java
index a18c2af..73703bb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/fallback/ActionDefaultsFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/fallback/ActionDefaultsFacetNone.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.fallback;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.actions.defaults.ActionDefaultsFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class ActionDefaultsFacetNone extends ActionDefaultsFacetAbstract {
 
@@ -30,7 +30,7 @@ public class ActionDefaultsFacetNone extends ActionDefaultsFacetAbstract {
     }
 
     @Override
-    public Object[] getDefaults(final ObjectAdapter inObject) {
+    public Object[] getDefaults(final ManagedObject inObject) {
         return null;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/autocomplete/AutoCompleteFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/autocomplete/AutoCompleteFacet.java
index f4de861..62d695c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/autocomplete/AutoCompleteFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/autocomplete/AutoCompleteFacet.java
@@ -21,13 +21,13 @@ package org.apache.isis.metamodel.facets.object.autocomplete;
 
 import java.util.List;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public interface AutoCompleteFacet extends Facet {
 
-    List<ObjectAdapter> execute(
+    List<ManagedObject> execute(
             final String search,
             final InteractionInitiatedBy interactionInitiatedBy);
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
index 9c63258..b7bc291 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/autocomplete/AutoCompleteFacetAbstract.java
@@ -35,6 +35,7 @@ import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.metamodel.facets.param.autocomplete.MinLengthUtil;
 import org.apache.isis.metamodel.services.publishing.PublishingServiceInternal;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public abstract class AutoCompleteFacetAbstract extends FacetAbstract implements AutoCompleteFacet {
 
@@ -68,14 +69,15 @@ public abstract class AutoCompleteFacetAbstract extends FacetAbstract implements
     }
 
     @Override
-    public List<ObjectAdapter> execute(
+    public List<ManagedObject> execute(
             final String search,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        final ObjectAdapter resultAdapter =
-                getPublishingServiceInternal().withPublishingSuppressed(new PublishingServiceInternal.Block<ObjectAdapter>() {
+        final ManagedObject resultAdapter =
+                getPublishingServiceInternal().withPublishingSuppressed(
+                        new PublishingServiceInternal.Block<ManagedObject>() {
                     @Override
-                    public ObjectAdapter exec() {
+                    public ManagedObject exec() {
                         final Object list = invoke();
                         return adapterProvider.adapterFor(list);
                     }
@@ -94,7 +96,7 @@ public abstract class AutoCompleteFacetAbstract extends FacetAbstract implements
             return Collections.emptyList();
         }
 
-        final Stream<ObjectAdapter> adapterList = CollectionFacet.Utils.streamAdapters(resultAdapter) ;
+        final Stream<ManagedObject> adapterList = CollectionFacet.Utils.streamAdapters(resultAdapter) ;
 
         return ObjectAdapter.Util.visibleAdapters(adapterList, interactionInitiatedBy);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
index 8f9b8d6..13d0b1a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/choices/ChoicesFacetFromBoundedAbstract.java
@@ -105,13 +105,13 @@ implements ChoicesFacet, DisablingInteractionAdvisor, ValidatingInteractionAdvis
     @SuppressWarnings({ "rawtypes", "unchecked" })
     @Override
     public Object[] getChoices(
-            ObjectAdapter adapter,
+            ManagedObject adapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         val context = MetaModelContext.current();
         val repository = context.getRepositoryService();
 
-        final Predicate<ObjectAdapter> visibilityFilter = 
+        final Predicate<ManagedObject> visibilityFilter = 
                 objectAdapter -> ObjectAdapter.Util.isVisible(objectAdapter, interactionInitiatedBy); 
 
                 val query = new QueryFindAllChoices(getObjectSpecification().getFullIdentifier(), visibilityFilter);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/choices/enums/ChoicesFacetEnum.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/choices/enums/ChoicesFacetEnum.java
index 957c91d..aff97bc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/choices/enums/ChoicesFacetEnum.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/choices/enums/ChoicesFacetEnum.java
@@ -21,10 +21,10 @@ package org.apache.isis.metamodel.facets.object.choices.enums;
 
 import java.util.Map;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.objectvalue.choices.ChoicesFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class ChoicesFacetEnum extends ChoicesFacetAbstract {
 
@@ -37,7 +37,7 @@ public class ChoicesFacetEnum extends ChoicesFacetAbstract {
 
     @Override
     public Object[] getChoices(
-            final ObjectAdapter adapter,
+            final ManagedObject adapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         return choices;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/EncodableFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/EncodableFacet.java
index b1180c4..bc3088c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/EncodableFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/EncodableFacet.java
@@ -22,6 +22,7 @@ package org.apache.isis.metamodel.facets.object.encodeable;
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.MultipleValueFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Indicates that this class can be encoded/decoded as a string.
@@ -38,5 +39,5 @@ public interface EncodableFacet extends MultipleValueFacet {
      * Equivalent to {@link EncoderDecoder#toEncodedString(Object)}, though may
      * be implemented through some other equivalent mechanism.
      */
-    String toEncodedString(ObjectAdapter object);
+    String toEncodedString(ManagedObject object);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/EncodableFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/EncodableFacetAbstract.java
index 61e0f70..1a113b7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/EncodableFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/EncodableFacetAbstract.java
@@ -25,6 +25,7 @@ import org.apache.isis.metamodel.commons.ClassExtensions;
 import org.apache.isis.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.object.encodeable.encoder.EncodableFacetUsingEncoderDecoder;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public abstract class EncodableFacetAbstract extends FacetAbstract implements EncodableFacet {
 
@@ -78,7 +79,7 @@ public abstract class EncodableFacetAbstract extends FacetAbstract implements En
     }
 
     @Override
-    public String toEncodedString(final ObjectAdapter object) {
+    public String toEncodedString(final ManagedObject object) {
         return encodeableFacetUsingEncoderDecoder.toEncodedString(object);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/encoder/EncodableFacetUsingEncoderDecoder.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/encoder/EncodableFacetUsingEncoderDecoder.java
index 9260b5e..bcf8234 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/encoder/EncodableFacetUsingEncoderDecoder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/encodeable/encoder/EncodableFacetUsingEncoderDecoder.java
@@ -25,6 +25,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class EncodableFacetUsingEncoderDecoder extends FacetAbstract implements EncodableFacet {
 
@@ -58,7 +59,7 @@ public class EncodableFacetUsingEncoderDecoder extends FacetAbstract implements
     }
 
     @Override
-    public String toEncodedString(final ObjectAdapter adapter) {
+    public String toEncodedString(final ManagedObject adapter) {
         getServiceInjector().injectServicesInto(encoderDecoder);
         return adapter == null ? ENCODED_NULL: encode(encoderDecoder, adapter.getPojo());
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/ParseableFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/ParseableFacet.java
index a120386..e30be1f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/ParseableFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/ParseableFacet.java
@@ -23,6 +23,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.MultipleValueFacet;
 import org.apache.isis.metamodel.facets.object.title.TitleFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Indicates that this class can parse an entry string.
@@ -37,7 +38,7 @@ public interface ParseableFacet extends MultipleValueFacet {
      * be implemented through some other mechanism.
      */
     ObjectAdapter parseTextEntry(
-            final ObjectAdapter original,
+            final ManagedObject original,
             final String text,
             final InteractionInitiatedBy interactionInitiatedBy);
 
@@ -51,5 +52,5 @@ public interface ParseableFacet extends MultipleValueFacet {
      * field. So, a date might be rendered via a {@link TitleFacet} as
      * <tt>May 2, 2007</tt>, but its parseable form might be <tt>20070502</tt>.
      */
-    String parseableTitle(ObjectAdapter obj);
+    String parseableTitle(ManagedObject obj);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/ParseableFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/ParseableFacetAbstract.java
index 2982274..581c195 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/ParseableFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/ParseableFacetAbstract.java
@@ -26,6 +26,7 @@ import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.object.parseable.parser.ParseableFacetUsingParser;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public abstract class ParseableFacetAbstract extends FacetAbstract implements ParseableFacet {
 
@@ -74,14 +75,15 @@ public abstract class ParseableFacetAbstract extends FacetAbstract implements Pa
 
     @Override
     public ObjectAdapter parseTextEntry(
-            final ObjectAdapter original,
+            final ManagedObject original,
             final String entryText,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         return parseableFacetUsingParser.parseTextEntry(original, entryText, interactionInitiatedBy);
     }
 
     @Override
-    public String parseableTitle(final ObjectAdapter existing) {
+    public String parseableTitle(final ManagedObject existing) {
         return parseableFacetUsingParser.parseableTitle(existing);
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
index 26c2921..c4d1267 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/parseable/parser/ParseableFacetUsingParser.java
@@ -36,6 +36,7 @@ import org.apache.isis.metamodel.interactions.InteractionUtils;
 import org.apache.isis.metamodel.interactions.ObjectValidityContext;
 import org.apache.isis.metamodel.interactions.ParseValueContext;
 import org.apache.isis.metamodel.interactions.ValidityContext;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
 public class ParseableFacetUsingParser extends FacetAbstract implements ParseableFacet {
@@ -58,9 +59,10 @@ public class ParseableFacetUsingParser extends FacetAbstract implements Parseabl
 
     @Override
     public ObjectAdapter parseTextEntry(
-            final ObjectAdapter contextAdapter,
+            final ManagedObject contextAdapter,
             final String entry,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         if (entry == null) {
             throw new IllegalArgumentException("An entry must be provided");
         }
@@ -117,8 +119,8 @@ public class ParseableFacetUsingParser extends FacetAbstract implements Parseabl
      */
     @Override
     @SuppressWarnings({ "unchecked", "rawtypes" })
-    public String parseableTitle(final ObjectAdapter contextAdapter) {
-        final Object pojo = ObjectAdapter.Util.unwrapPojo(contextAdapter);
+    public String parseableTitle(final ManagedObject contextAdapter) {
+        final Object pojo = ManagedObject.unwrapPojo(contextAdapter);
 
         getServiceInjector().injectServicesInto(parser);
         return ((Parser)parser).parseableTitleOf(pojo);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ProjectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ProjectionFacet.java
index 15725a8..03febd8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ProjectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ProjectionFacet.java
@@ -19,12 +19,11 @@
 
 package org.apache.isis.metamodel.facets.object.projection;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.spec.ManagedObject;
 
 public interface ProjectionFacet extends Facet {
 
-    ObjectAdapter projected(final ManagedObject owningAdapter);
+    ManagedObject projected(ManagedObject owningAdapter);
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ProjectionFacetFromProjectingProperty.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ProjectionFacetFromProjectingProperty.java
index 6f16cac..aa8c41b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ProjectionFacetFromProjectingProperty.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ProjectionFacetFromProjectingProperty.java
@@ -20,7 +20,6 @@
 package org.apache.isis.metamodel.facets.object.projection;
 
 import org.apache.isis.applib.annotation.Projecting;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.properties.projection.ProjectingFacet;
@@ -29,6 +28,8 @@ import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.Contributed;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 
+import lombok.val;
+
 public class ProjectionFacetFromProjectingProperty extends ProjectionFacetAbstract {
 
     public static Class<? extends Facet> type() {
@@ -40,27 +41,25 @@ public class ProjectionFacetFromProjectingProperty extends ProjectionFacetAbstra
     private ProjectionFacetFromProjectingProperty(
             final OneToOneAssociation projectingProperty,
             final FacetHolder holder) {
-        super( holder);
+        
+        super(holder);
         this.projectingProperty = projectingProperty;
     }
 
     public static ProjectionFacet create(final ObjectSpecification objectSpecification) {
         return objectSpecification.streamProperties(Contributed.EXCLUDED)
-                .filter(otoa -> {
-                    final ProjectingFacet projectingFacet = otoa
-                            .getFacet(ProjectingFacet.class);
-                    return projectingFacet != null && !projectingFacet.isNoop()
-                            && projectingFacet.value() == Projecting.PROJECTED;
-                })
-                .map(otoa -> new ProjectionFacetFromProjectingProperty(otoa, objectSpecification))
-                .findFirst()
-                .orElse(null);
+        .filter(propertySpec -> {
+            val projectingFacet = propertySpec.getFacet(ProjectingFacet.class);
+            return projectingFacet != null && !projectingFacet.isNoop()
+                    && projectingFacet.value() == Projecting.PROJECTED;
+        })
+        .findFirst()
+        .map(propertySpec -> new ProjectionFacetFromProjectingProperty(propertySpec, objectSpecification))
+        .orElse(null);
     }
 
     @Override
-    public ObjectAdapter projected(final ManagedObject owningAdapter) {
-        return owningAdapter instanceof ObjectAdapter
-                ? projectingProperty.get((ObjectAdapter) owningAdapter)
-                        : null ;
+    public ManagedObject projected(final ManagedObject owningAdapter) {
+        return projectingProperty.get(owningAdapter);
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/CssClassFacetDerivedFromProjectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/CssClassFacetDerivedFromProjectionFacet.java
index 8f5db16..eadc706 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/CssClassFacetDerivedFromProjectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/CssClassFacetDerivedFromProjectionFacet.java
@@ -21,13 +21,14 @@ package org.apache.isis.metamodel.facets.object.projection.ident;
 
 import java.util.Map;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.metamodel.facets.members.cssclass.CssClassFacetAbstract2;
 import org.apache.isis.metamodel.facets.object.projection.ProjectionFacet;
 import org.apache.isis.metamodel.spec.ManagedObject;
 
+import lombok.val;
+
 public class CssClassFacetDerivedFromProjectionFacet extends CssClassFacetAbstract2 {
 
     private final ProjectionFacet projectionFacet;
@@ -39,8 +40,8 @@ public class CssClassFacetDerivedFromProjectionFacet extends CssClassFacetAbstra
 
     @Override
     public String cssClass(final ManagedObject targetAdapter) {
-        final ObjectAdapter projectedAdapter = projectionFacet.projected(targetAdapter);
-        final CssClassFacet cssClassFacet = projectedAdapter.getSpecification().getFacet(CssClassFacet.class);
+        val projectedAdapter = projectionFacet.projected(targetAdapter);
+        val cssClassFacet = projectedAdapter.getSpecification().getFacet(CssClassFacet.class);
         return cssClassFacet != null ? cssClassFacet.cssClass(projectedAdapter) : null;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/IconFacetDerivedFromProjectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/IconFacetDerivedFromProjectionFacet.java
index a155db8..b302bd8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/IconFacetDerivedFromProjectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/IconFacetDerivedFromProjectionFacet.java
@@ -21,12 +21,13 @@ package org.apache.isis.metamodel.facets.object.projection.ident;
 
 import java.util.Map;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.object.icon.IconFacetAbstract;
 import org.apache.isis.metamodel.facets.object.projection.ProjectionFacet;
 import org.apache.isis.metamodel.spec.ManagedObject;
 
+import lombok.val;
+
 public class IconFacetDerivedFromProjectionFacet extends IconFacetAbstract {
 
     private final ProjectionFacet projectionFacet;
@@ -38,7 +39,7 @@ public class IconFacetDerivedFromProjectionFacet extends IconFacetAbstract {
 
     @Override
     public String iconName(final ManagedObject targetAdapter) {
-        final ObjectAdapter projectedAdapter = projectionFacet.projected(targetAdapter);
+        val projectedAdapter = projectionFacet.projected(targetAdapter);
         return projectedAdapter.getSpecification().getIconName(projectedAdapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/TitleFacetDerivedFromProjectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/TitleFacetDerivedFromProjectionFacet.java
index 21ff45c..47341f8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/TitleFacetDerivedFromProjectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/projection/ident/TitleFacetDerivedFromProjectionFacet.java
@@ -21,12 +21,13 @@ package org.apache.isis.metamodel.facets.object.projection.ident;
 
 import java.util.Map;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.object.projection.ProjectionFacet;
 import org.apache.isis.metamodel.facets.object.title.TitleFacetAbstract;
 import org.apache.isis.metamodel.spec.ManagedObject;
 
+import lombok.val;
+
 public class TitleFacetDerivedFromProjectionFacet extends TitleFacetAbstract {
 
     private final ProjectionFacet projectionFacet;
@@ -38,7 +39,7 @@ public class TitleFacetDerivedFromProjectionFacet extends TitleFacetAbstract {
 
     @Override
     public String title(final ManagedObject targetAdapter) {
-        final ObjectAdapter projectedAdapter = projectionFacet.projected(targetAdapter);
+        val projectedAdapter = projectionFacet.projected(targetAdapter);
         return projectedAdapter.titleString(null);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/objectvalue/choices/ChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/objectvalue/choices/ChoicesFacet.java
index 2a5fe7f..3f209c3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/objectvalue/choices/ChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/objectvalue/choices/ChoicesFacet.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.objectvalue.choices;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
 public interface ChoicesFacet extends Facet {
@@ -30,7 +30,7 @@ public interface ChoicesFacet extends Facet {
      * Gets a set of choices for this object.
      */
     public Object[] getChoices(
-            final ObjectAdapter adapter,
+            final ManagedObject adapter,
             final InteractionInitiatedBy interactionInitiatedBy);
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
index 94c18fa..4c92da1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.param.autocomplete;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Obtain autocompletion for each of the parameters of the action.
@@ -34,7 +34,7 @@ import org.apache.isis.metamodel.facetapi.Facet;
 public interface ActionParameterAutoCompleteFacet extends Facet {
 
     public Object[] autoComplete(
-            final ObjectAdapter inObject,
+            final ManagedObject inObject,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy);
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
index 231c526..86066cc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
@@ -34,6 +34,7 @@ import org.apache.isis.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
 import org.apache.isis.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacetAbstract;
 import org.apache.isis.metamodel.facets.param.autocomplete.MinLengthUtil;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
 public class ActionParameterAutoCompleteFacetViaMethod 
@@ -75,7 +76,7 @@ extends ActionParameterAutoCompleteFacetAbstract implements ImperativeFacet {
 
     @Override
     public Object[] autoComplete(
-            final ObjectAdapter owningAdapter,
+            final ManagedObject owningAdapter,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
@@ -83,17 +84,17 @@ extends ActionParameterAutoCompleteFacetAbstract implements ImperativeFacet {
         if (collectionOrArray == null) {
             return _Constants.emptyObjects;
         }
-        final ObjectAdapter collectionAdapter = getObjectAdapterProvider().adapterFor(collectionOrArray);
+        final ManagedObject collectionAdapter = getObjectAdapterProvider().adapterFor(collectionOrArray);
 
         final FacetedMethodParameter facetedMethodParameter = (FacetedMethodParameter) getFacetHolder();
         final Class<?> parameterType = facetedMethodParameter.getType();
 
-        final List<ObjectAdapter> visibleAdapters =
+        final List<ManagedObject> visibleAdapters =
                 ObjectAdapter.Util.visibleAdapters(
                         collectionAdapter,
                         interactionInitiatedBy);
         final List<Object> visibleObjects =
-                _Lists.map(visibleAdapters, ObjectAdapter.Util::unwrapPojo);
+                _Lists.map(visibleAdapters, ManagedObject::unwrapPojo);
 
         final ObjectSpecification parameterSpec = getSpecification(parameterType);
         return CollectionUtils.getCollectionAsObjectArray(visibleObjects, parameterSpec, getObjectAdapterProvider());
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionChoicesFacet.java
index 97f4873..6e13c51 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionChoicesFacet.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.param.choices;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Obtain choices for each of the parameters of the action.
@@ -33,6 +33,6 @@ import org.apache.isis.metamodel.facetapi.Facet;
 public interface ActionChoicesFacet extends Facet {
 
     public Object[][] getChoices(
-            final ObjectAdapter inObject,
+            final ManagedObject inObject,
             final InteractionInitiatedBy interactionInitiatedBy);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
index 3f8351a..7f1ff44 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.facets.param.choices;
 
 import java.util.List;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Obtain choices for each of the parameters of the action.
@@ -36,7 +36,7 @@ import org.apache.isis.metamodel.facetapi.Facet;
 public interface ActionParameterChoicesFacet extends Facet {
 
     public Object[] getChoices(
-            final ObjectAdapter target,
-            final List<ObjectAdapter> arguments,
+            final ManagedObject target,
+            final List<ManagedObject> arguments,
             final InteractionInitiatedBy interactionInitiatedBy);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
index 1d7aba8..782064f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.facets.param.choices;
 
 import java.util.List;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class ActionParameterChoicesFacetNone extends ActionParameterChoicesFacetAbstract {
 
@@ -33,10 +33,11 @@ public class ActionParameterChoicesFacetNone extends ActionParameterChoicesFacet
 
     @Override
     public Object[] getChoices(
-            final ObjectAdapter adapter,
-            final List<ObjectAdapter> arguments,
+            final ManagedObject adapter,
+            final List<ManagedObject> arguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        return new ObjectAdapter[0];
+        
+        return new ManagedObject[0];
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
index 02d6970..58c1982 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
@@ -22,12 +22,12 @@ package org.apache.isis.metamodel.facets.param.choices.enums;
 import java.util.List;
 
 import org.apache.isis.commons.internal._Constants;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.TypedHolder;
 import org.apache.isis.metamodel.facets.objectvalue.choices.ChoicesFacet;
 import org.apache.isis.metamodel.facets.param.choices.ActionParameterChoicesFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
 public class ActionParameterChoicesFacetDerivedFromChoicesFacet extends ActionParameterChoicesFacetAbstract {
@@ -38,9 +38,10 @@ public class ActionParameterChoicesFacetDerivedFromChoicesFacet extends ActionPa
 
     @Override
     public Object[] getChoices(
-            final ObjectAdapter adapter,
-            final List<ObjectAdapter> arguments,
+            final ManagedObject adapter,
+            final List<ManagedObject> arguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         final FacetHolder facetHolder = getFacetHolder();
         final TypedHolder paramPeer = (TypedHolder) facetHolder;
         final ObjectSpecification noSpec = getSpecification(paramPeer.getType());
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
index cfea71a..9f3c518 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/method/ActionChoicesFacetViaMethod.java
@@ -32,6 +32,7 @@ import org.apache.isis.metamodel.facets.CollectionUtils;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
 import org.apache.isis.metamodel.facets.param.choices.ActionChoicesFacetAbstract;
 import org.apache.isis.metamodel.spec.DomainModelException;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
 import lombok.val;
@@ -67,7 +68,7 @@ public class ActionChoicesFacetViaMethod extends ActionChoicesFacetAbstract impl
 
     @Override
     public Object[][] getChoices(
-            final ObjectAdapter owningAdapter,
+            final ManagedObject owningAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         final Object objectOrCollection = ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
         if (!(objectOrCollection instanceof Object[])) {
@@ -95,14 +96,14 @@ public class ActionChoicesFacetViaMethod extends ActionChoicesFacetAbstract impl
             return null;
         }
 
-        final ObjectAdapter collectionAdapter = getObjectAdapterProvider().adapterFor(collectionOrArray);
+        final ManagedObject collectionAdapter = getObjectAdapterProvider().adapterFor(collectionOrArray);
 
-        final List<ObjectAdapter> visibleAdapters =
+        final List<ManagedObject> visibleAdapters =
                 ObjectAdapter.Util.visibleAdapters(
                         collectionAdapter,
                         interactionInitiatedBy);
         final List<Object> filteredObjects =
-                _Lists.map(visibleAdapters, ObjectAdapter.Util::unwrapPojo);
+                _Lists.map(visibleAdapters, ManagedObject::unwrapPojo);
 
         final ObjectSpecification parameterSpec = getSpecification(parameterType);
         return CollectionUtils.getCollectionAsObjectArray(filteredObjects, parameterSpec, getObjectAdapterProvider());
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index 5ec52e7..33bdd42 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -33,6 +33,7 @@ import org.apache.isis.metamodel.facets.CollectionUtils;
 import org.apache.isis.metamodel.facets.FacetedMethodParameter;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
 import org.apache.isis.metamodel.facets.param.choices.ActionParameterChoicesFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
 public class ActionParameterChoicesFacetViaMethod extends ActionParameterChoicesFacetAbstract implements ImperativeFacet {
@@ -65,25 +66,26 @@ public class ActionParameterChoicesFacetViaMethod extends ActionParameterChoices
 
     @Override
     public Object[] getChoices(
-            final ObjectAdapter adapter,
-            final List<ObjectAdapter> argumentsIfAvailable,
+            final ManagedObject adapter,
+            final List<ManagedObject> argumentsIfAvailable,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         final Object choices =
                 ObjectAdapter.InvokeUtils.invokeAutofit(
                         method, adapter, argumentsIfAvailable);
         if (choices == null) {
             return _Constants.emptyObjects;
         }
-        final ObjectAdapter objectAdapter = getObjectAdapterProvider().adapterFor(choices);
+        final ManagedObject objectAdapter = getObjectAdapterProvider().adapterFor(choices);
         final FacetedMethodParameter facetedMethodParameter = (FacetedMethodParameter) getFacetHolder();
         final Class<?> parameterType = facetedMethodParameter.getType();
 
-        final List<ObjectAdapter> visibleAdapters =
+        final List<ManagedObject> visibleAdapters =
                 ObjectAdapter.Util.visibleAdapters(
                         objectAdapter,
                         interactionInitiatedBy);
         final List<Object> visibleObjects =
-                _Lists.map(visibleAdapters, ObjectAdapter.Util::unwrapPojo);
+                _Lists.map(visibleAdapters, ManagedObject::unwrapPojo);
 
         final ObjectSpecification parameterSpec = getSpecification(parameterType);
         return CollectionUtils.getCollectionAsObjectArray(visibleObjects, parameterSpec, getObjectAdapterProvider());
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
index bb88c31..d0764ff 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
@@ -21,8 +21,8 @@ package org.apache.isis.metamodel.facets.param.defaults;
 
 import java.util.List;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Obtain defaults for each of the parameters of the action.
@@ -35,7 +35,7 @@ import org.apache.isis.metamodel.facetapi.Facet;
 public interface ActionParameterDefaultsFacet extends Facet {
 
     public abstract Object getDefault(
-            ObjectAdapter target,
-            List<ObjectAdapter> parameters,
+            ManagedObject target,
+            List<ManagedObject> parameters,
             final Integer paramNumUpdated);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/fromtype/ActionParameterDefaultFacetDerivedFromTypeFacets.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/fromtype/ActionParameterDefaultFacetDerivedFromTypeFacets.java
index 0684645..08aa3fc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/fromtype/ActionParameterDefaultFacetDerivedFromTypeFacets.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/fromtype/ActionParameterDefaultFacetDerivedFromTypeFacets.java
@@ -21,10 +21,10 @@ package org.apache.isis.metamodel.facets.param.defaults.fromtype;
 
 import java.util.Map;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.actions.defaults.ActionDefaultsFacetAbstract;
 import org.apache.isis.metamodel.facets.object.defaults.DefaultedFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class ActionParameterDefaultFacetDerivedFromTypeFacets extends ActionDefaultsFacetAbstract {
 
@@ -43,7 +43,7 @@ public class ActionParameterDefaultFacetDerivedFromTypeFacets extends ActionDefa
      * conceivably change.
      */
     @Override
-    public Object[] getDefaults(final ObjectAdapter inObject) {
+    public Object[] getDefaults(final ManagedObject inObject) {
         final Object[] defaults = new Object[defaultedFacets.length];
         for (int i = 0; i < defaults.length; i++) {
             if (defaultedFacets[i] != null) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
index da32a96..a1d0dcb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
@@ -28,6 +28,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
 import org.apache.isis.metamodel.facets.param.defaults.ActionParameterDefaultsFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaultsFacetAbstract implements ImperativeFacet {
 
@@ -67,8 +68,8 @@ public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaul
 
     @Override
     public Object getDefault(
-            final ObjectAdapter target,
-            final List<ObjectAdapter> argumentsIfAvailable,
+            final ManagedObject target,
+            final List<ManagedObject> argumentsIfAvailable,
             final Integer paramNumUpdated) {
 
         // this isn't a dependent defaults situation, so just evaluate the default.
@@ -93,7 +94,7 @@ public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaul
 
         // otherwise, just return the arguments that are already known; we don't want to recompute the default
         // because if we did then this would trample over any pending changes already made by the end-user.
-        final ObjectAdapter objectAdapter = argumentsIfAvailable.get(paramNum);
+        final ManagedObject objectAdapter = argumentsIfAvailable.get(paramNum);
         return objectAdapter != null ? objectAdapter.getPojo() : null;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
index 57761f8..6790aeb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.metamodel.facets.param.disable;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.interactions.DisablingInteractionAdvisor;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -36,5 +35,5 @@ public interface ActionParameterDisabledFacet extends Facet, DisablingInteractio
     /**
      * Reason why the parameter is disabled, or <tt>null</tt> if okay.
      */
-    public String disabledReason(ManagedObject target, ObjectAdapter[] arguments);
+    public String disabledReason(ManagedObject target, ManagedObject[] arguments);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
index 76cfbd2..9885d0b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
@@ -66,7 +66,8 @@ public class ActionParameterDisabledFacetViaMethod extends ActionParameterDisabl
     }
 
     @Override
-    public String disabledReason(final ManagedObject owningAdapter, final ObjectAdapter[] argumentAdapters) {
+    public String disabledReason(final ManagedObject owningAdapter, final ManagedObject[] argumentAdapters) {
+        
         final Object returnValue = ObjectAdapter.InvokeUtils.invokeAutofit(method, owningAdapter, argumentAdapters != null ? Arrays.asList(argumentAdapters) : null);
         if(returnValue instanceof String) {
             return (String) returnValue;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java
index f0dc1b2..6c39307 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.metamodel.facets.param.hide;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.interactions.HidingInteractionAdvisor;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -37,5 +36,5 @@ public interface ActionParameterHiddenFacet extends Facet, HidingInteractionAdvi
     /**
      * Whether the parameter is hidden.
      */
-    public boolean isHidden(ManagedObject target, ObjectAdapter[] arguments);
+    public boolean isHidden(ManagedObject target, ManagedObject[] arguments);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
index c35f4ec..adce8c7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
@@ -58,7 +58,7 @@ public class ActionParameterHiddenFacetViaMethod extends ActionParameterHiddenFa
     }
 
     @Override
-    public boolean isHidden(final ManagedObject owningAdapter, final ObjectAdapter[] argumentAdapters) {
+    public boolean isHidden(final ManagedObject owningAdapter, final ManagedObject[] argumentAdapters) {
         final Object returnValue = ObjectAdapter.InvokeUtils.invokeAutofit(method, owningAdapter, argumentAdapters != null ? Arrays.asList(argumentAdapters) : null);
         if(returnValue instanceof Boolean) {
             return (Boolean) returnValue;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/validate/ActionParameterValidationFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/validate/ActionParameterValidationFacet.java
index 2d0ed1f..9230681 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/validate/ActionParameterValidationFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/validate/ActionParameterValidationFacet.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.metamodel.facets.param.validate;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.interactions.ValidatingInteractionAdvisor;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -42,5 +41,5 @@ public interface ActionParameterValidationFacet extends Facet, ValidatingInterac
     /**
      * Reason why the validation has failed, or <tt>null</tt> if okay.
      */
-    public String invalidReason(ManagedObject target, ObjectAdapter arguments);
+    public String invalidReason(ManagedObject target, ManagedObject arguments);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java
index 58a02ad..60b57e2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/validate/method/ActionParameterValidationFacetViaMethod.java
@@ -60,7 +60,7 @@ public class ActionParameterValidationFacetViaMethod extends ActionParameterVali
     }
 
     @Override
-    public String invalidReason(final ManagedObject owningAdapter, final ObjectAdapter proposedArgumentAdapter) {
+    public String invalidReason(final ManagedObject owningAdapter, final ManagedObject proposedArgumentAdapter) {
         final Object returnValue = ObjectAdapter.InvokeUtils.invoke(method, owningAdapter, proposedArgumentAdapter);
         if(returnValue instanceof String) {
             return (String) returnValue;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/PropertyAutoCompleteFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/PropertyAutoCompleteFacet.java
index 82c6d75..6897c48 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/PropertyAutoCompleteFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/PropertyAutoCompleteFacet.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.properties.autocomplete;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Provides a set of auto-complete choices for a property.
@@ -41,7 +41,7 @@ public interface PropertyAutoCompleteFacet extends Facet {
      * Gets the available auto-complete choices for this property.
      */
     public Object[] autoComplete(
-            final ObjectAdapter inObject,
+            final ManagedObject inObject,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy);
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
index b8768df..a3fc20a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/autocomplete/method/PropertyAutoCompleteFacetMethod.java
@@ -33,6 +33,7 @@ import org.apache.isis.metamodel.facets.FacetedMethod;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
 import org.apache.isis.metamodel.facets.param.autocomplete.MinLengthUtil;
 import org.apache.isis.metamodel.facets.properties.autocomplete.PropertyAutoCompleteFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
 public class PropertyAutoCompleteFacetMethod extends PropertyAutoCompleteFacetAbstract implements ImperativeFacet {
@@ -72,7 +73,7 @@ public class PropertyAutoCompleteFacetMethod extends PropertyAutoCompleteFacetAb
 
     @Override
     public Object[] autoComplete(
-            final ObjectAdapter owningAdapter,
+            final ManagedObject owningAdapter,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
@@ -86,12 +87,12 @@ public class PropertyAutoCompleteFacetMethod extends PropertyAutoCompleteFacetAb
         final FacetedMethod facetedMethod = (FacetedMethod) getFacetHolder();
         final Class<?> propertyType = facetedMethod.getType();
 
-        final List<ObjectAdapter> visibleAdapters =
+        final List<ManagedObject> visibleAdapters =
                 ObjectAdapter.Util.visibleAdapters(
                         collectionAdapter,
                         interactionInitiatedBy);
         final List<Object> filteredObjects =
-                _Lists.map(visibleAdapters, ObjectAdapter.Util::unwrapPojo);
+                _Lists.map(visibleAdapters, ManagedObject::unwrapPojo);
 
         final ObjectSpecification propertySpec = getSpecification(propertyType);
         return CollectionUtils.getCollectionAsObjectArray(filteredObjects, propertySpec, getObjectAdapterProvider());
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/PropertyChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/PropertyChoicesFacet.java
index 36d4816..eab312a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/PropertyChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/PropertyChoicesFacet.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.properties.choices;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Provides a set of choices for a property.
@@ -45,6 +45,6 @@ public interface PropertyChoicesFacet extends Facet {
      * Gets the available choices for this property.
      */
     public Object[] getChoices(
-            final ObjectAdapter adapter,
+            final ManagedObject adapter,
             final InteractionInitiatedBy interactionInitiatedBy);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java
index ff2c019..0649ae8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/enums/PropertyChoicesFacetDerivedFromChoicesFacet.java
@@ -20,12 +20,12 @@
 package org.apache.isis.metamodel.facets.properties.choices.enums;
 
 import org.apache.isis.commons.internal._Constants;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.FacetedMethod;
 import org.apache.isis.metamodel.facets.objectvalue.choices.ChoicesFacet;
 import org.apache.isis.metamodel.facets.properties.choices.PropertyChoicesFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
 public class PropertyChoicesFacetDerivedFromChoicesFacet extends PropertyChoicesFacetAbstract {
@@ -36,7 +36,7 @@ public class PropertyChoicesFacetDerivedFromChoicesFacet extends PropertyChoices
 
     @Override
     public Object[] getChoices(
-            final ObjectAdapter adapter,
+            final ManagedObject adapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final FacetHolder facetHolder = getFacetHolder();
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
index beb6c55..2e67ed8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/choices/method/PropertyChoicesFacetViaMethod.java
@@ -31,6 +31,7 @@ import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.CollectionUtils;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
 import org.apache.isis.metamodel.facets.properties.choices.PropertyChoicesFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
 public class PropertyChoicesFacetViaMethod extends PropertyChoicesFacetAbstract implements ImperativeFacet {
@@ -64,7 +65,7 @@ public class PropertyChoicesFacetViaMethod extends PropertyChoicesFacetAbstract
 
     @Override
     public Object[] getChoices(
-            final ObjectAdapter owningAdapter,
+            final ManagedObject owningAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final Object options = ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/PropertyDefaultFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/PropertyDefaultFacet.java
index 89184f8..07d2986 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/PropertyDefaultFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/PropertyDefaultFacet.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.properties.defaults;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facets.object.callbacks.CreatedCallbackFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Provides a default value for a property of a newly created object.
@@ -42,5 +42,5 @@ public interface PropertyDefaultFacet extends Facet {
     /**
      * The default value for this property in a newly created object.
      */
-    public ObjectAdapter getDefault(ObjectAdapter inObject);
+    public ManagedObject getDefault(ManagedObject inObject);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/PropertyDefaultFacetNone.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/PropertyDefaultFacetNone.java
index 7232596..f329162 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/PropertyDefaultFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/PropertyDefaultFacetNone.java
@@ -21,6 +21,7 @@ package org.apache.isis.metamodel.facets.properties.defaults;
 
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class PropertyDefaultFacetNone extends PropertyDefaultFacetAbstract {
 
@@ -32,7 +33,7 @@ public class PropertyDefaultFacetNone extends PropertyDefaultFacetAbstract {
      * Provides a default of <tt>null</tt>.
      */
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter inObject) {
+    public ManagedObject getDefault(final ManagedObject inObject) {
         return null;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/fromtype/PropertyDefaultFacetDerivedFromDefaultedFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/fromtype/PropertyDefaultFacetDerivedFromDefaultedFacet.java
index e3e0855..ec1b108 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/fromtype/PropertyDefaultFacetDerivedFromDefaultedFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/fromtype/PropertyDefaultFacetDerivedFromDefaultedFacet.java
@@ -21,11 +21,11 @@ package org.apache.isis.metamodel.facets.properties.defaults.fromtype;
 
 import java.util.Map;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.object.defaults.DefaultedFacet;
 import org.apache.isis.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class PropertyDefaultFacetDerivedFromDefaultedFacet extends FacetAbstract implements PropertyDefaultFacet {
 
@@ -39,7 +39,7 @@ public class PropertyDefaultFacetDerivedFromDefaultedFacet extends FacetAbstract
     }
 
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter inObject) {
+    public ManagedObject getDefault(final ManagedObject inObject) {
         if (getIdentified() == null) {
             return null;
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
index c55396a..4fd00d5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/defaults/method/PropertyDefaultFacetViaMethod.java
@@ -29,7 +29,9 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
 import org.apache.isis.metamodel.facets.properties.defaults.PropertyDefaultFacetAbstract;
-import org.apache.isis.metamodel.spec.ObjectSpecification;
+import org.apache.isis.metamodel.spec.ManagedObject;
+
+import lombok.val;
 
 public class PropertyDefaultFacetViaMethod extends PropertyDefaultFacetAbstract implements ImperativeFacet {
 
@@ -57,7 +59,7 @@ public class PropertyDefaultFacetViaMethod extends PropertyDefaultFacetAbstract
     }
 
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter owningAdapter) {
+    public ManagedObject getDefault(final ManagedObject owningAdapter) {
         final Object result = ObjectAdapter.InvokeUtils.invoke(method, owningAdapter);
         if (result == null) {
             return null;
@@ -65,8 +67,8 @@ public class PropertyDefaultFacetViaMethod extends PropertyDefaultFacetAbstract
         return createAdapter(method.getReturnType(), result);
     }
 
-    private ObjectAdapter createAdapter(final Class<?> type, final Object object) {
-        final ObjectSpecification specification = getSpecificationLoader().loadSpecification(type);
+    private ManagedObject createAdapter(final Class<?> type, final Object object) {
+        val specification = getSpecificationLoader().loadSpecification(type);
         if (specification.isNotCollection()) {
             return getObjectAdapterProvider().adapterFor(object);
         } else {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
index 47a94f6..4369069 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/property/modify/PropertySetterOrClearFacetForDomainEventAbstract.java
@@ -32,7 +32,6 @@ import org.apache.isis.applib.services.command.spi.CommandService;
 import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.iactn.InteractionContext;
 import org.apache.isis.commons.exceptions.IsisException;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -45,6 +44,7 @@ import org.apache.isis.metamodel.facets.properties.update.clear.PropertyClearFac
 import org.apache.isis.metamodel.facets.properties.update.modify.PropertySetterFacet;
 import org.apache.isis.metamodel.services.ixn.InteractionDtoServiceInternal;
 import org.apache.isis.metamodel.services.publishing.PublishingServiceInternal;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.schema.ixn.v1.PropertyEditDto;
 
@@ -86,8 +86,8 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
             void invoke(
                     final PropertySetterOrClearFacetForDomainEventAbstract facet,
                     final OneToOneAssociation owningProperty,
-                    final ObjectAdapter targetAdapter,
-                    final ObjectAdapter valueAdapterOrNull,
+                    final ManagedObject targetAdapter,
+                    final ManagedObject valueAdapterOrNull,
                     final InteractionInitiatedBy interactionInitiatedBy) {
                 facet.setterFacet.setProperty(
                         owningProperty, targetAdapter, valueAdapterOrNull, interactionInitiatedBy);
@@ -104,8 +104,8 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
             void invoke(
                     final PropertySetterOrClearFacetForDomainEventAbstract facet,
                     final OneToOneAssociation owningProperty,
-                    final ObjectAdapter targetAdapter,
-                    final ObjectAdapter valueAdapterOrNull,
+                    final ManagedObject targetAdapter,
+                    final ManagedObject valueAdapterOrNull,
                     final InteractionInitiatedBy interactionInitiatedBy) {
 
                 facet.clearFacet.clearProperty(
@@ -119,14 +119,14 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
         abstract void invoke(
                 final PropertySetterOrClearFacetForDomainEventAbstract facet,
                 final OneToOneAssociation owningProperty,
-                final ObjectAdapter targetAdapter,
-                final ObjectAdapter valueAdapterOrNull,
+                final ManagedObject targetAdapter,
+                final ManagedObject valueAdapterOrNull,
                 final InteractionInitiatedBy interactionInitiatedBy);
     }
 
     public void clearProperty(
             final OneToOneAssociation owningProperty,
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         setOrClearProperty(Style.CLEAR,
@@ -136,8 +136,8 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
 
     public void setProperty(
             final OneToOneAssociation owningProperty,
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter newValueAdapter,
+            final ManagedObject targetAdapter,
+            final ManagedObject newValueAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         setOrClearProperty(Style.SET,
@@ -148,11 +148,11 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
     private void setOrClearProperty(
             final Style style,
             final OneToOneAssociation owningProperty,
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter newValueAdapter,
+            final ManagedObject targetAdapter,
+            final ManagedObject newValueAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        final ObjectAdapter mixedInAdapter = null;
+        final ManagedObject mixedInAdapter = null;
 
         getTransactionService().executeWithinTransaction(()->{
             doSetOrClearProperty(style, owningProperty, targetAdapter, mixedInAdapter, newValueAdapter, interactionInitiatedBy);
@@ -163,9 +163,9 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
     private void doSetOrClearProperty(
             final Style style,
             final OneToOneAssociation owningProperty,
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter newValueAdapter,
+            final ManagedObject targetAdapter,
+            final ManagedObject mixedInAdapter,
+            final ManagedObject newValueAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         // similar code in ActionInvocationFacetFDEA
@@ -197,8 +197,8 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
 
         } else {
 
-            final Object target = ObjectAdapter.Util.unwrapPojo(targetAdapter);
-            final Object argValue = ObjectAdapter.Util.unwrapPojo(newValueAdapter);
+            final Object target = ManagedObject.unwrapPojo(targetAdapter);
+            final Object argValue = ManagedObject.unwrapPojo(newValueAdapter);
 
             final String targetMember = CommandUtil.targetMemberNameFor(owningProperty);
             final String targetClass = CommandUtil.targetClassNameFor(targetAdapter);
@@ -230,7 +230,7 @@ extends SingleValueFacetAbstract<Class<? extends PropertyDomainEvent<?,?>>> {
 
                         // ... post the executing event
                         final Object oldValue = getterFacet.getProperty(targetAdapter, interactionInitiatedBy);
-                        final Object newValue = ObjectAdapter.Util.unwrapPojo(newValueAdapter);
+                        final Object newValue = ManagedObject.unwrapPojo(newValueAdapter);
 
                         final PropertyDomainEvent<?, ?> event =
                                 domainEventHelper.postEventForProperty(
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacet.java
index 885dba4..36414cd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacet.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.properties.update.clear;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 
 /**
@@ -38,6 +38,6 @@ public interface PropertyClearFacet extends Facet {
 
     void clearProperty(
             final OneToOneAssociation owningProperty,
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final InteractionInitiatedBy interactionInitiatedBy);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
index bbfeaaa..3602b5a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacetViaClearMethod.java
@@ -28,6 +28,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 
 public class PropertyClearFacetViaClearMethod extends PropertyClearFacetAbstract implements ImperativeFacet {
@@ -56,7 +57,7 @@ public class PropertyClearFacetViaClearMethod extends PropertyClearFacetAbstract
     @Override
     public void clearProperty(
             final OneToOneAssociation owningProperty,
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         ObjectAdapter.InvokeUtils.invoke(method, targetAdapter);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
index 34cf72f..667ca10 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/clear/PropertyClearFacetViaSetterMethod.java
@@ -28,6 +28,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 
 public class PropertyClearFacetViaSetterMethod extends PropertyClearFacetAbstract implements ImperativeFacet {
@@ -56,8 +57,9 @@ public class PropertyClearFacetViaSetterMethod extends PropertyClearFacetAbstrac
     @Override
     public void clearProperty(
             final OneToOneAssociation owningProperty,
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         ObjectAdapter.InvokeUtils.invoke(method, targetAdapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/init/PropertyInitializationFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/init/PropertyInitializationFacet.java
index 1c09383..4e3886f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/init/PropertyInitializationFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/init/PropertyInitializationFacet.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.facets.properties.update.init;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * The mechanism by which the value of the property can be initialised.
@@ -44,5 +44,5 @@ public interface PropertyInitializationFacet extends Facet {
     /**
      * Sets the value of this property.
      */
-    public void initProperty(ObjectAdapter inObject, ObjectAdapter value);
+    public void initProperty(ManagedObject inObject, ManagedObject value);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java
index 099d25c..93fc359 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/init/PropertyInitializationFacetViaSetterMethod.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class PropertyInitializationFacetViaSetterMethod extends PropertyInitializationFacetAbstract implements ImperativeFacet {
 
@@ -54,7 +55,7 @@ public class PropertyInitializationFacetViaSetterMethod extends PropertyInitiali
     }
 
     @Override
-    public void initProperty(final ObjectAdapter owningAdapter, final ObjectAdapter initialAdapter) {
+    public void initProperty(final ManagedObject owningAdapter, final ManagedObject initialAdapter) {
         ObjectAdapter.InvokeUtils.invoke(method, owningAdapter, initialAdapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacet.java
index 3edd158..7ad7a69 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacet.java
@@ -19,10 +19,10 @@
 
 package org.apache.isis.metamodel.facets.properties.update.modify;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 
 /**
@@ -43,7 +43,7 @@ public interface PropertySetterFacet extends Facet {
      */
     void setProperty(
             final OneToOneAssociation owningAssociation,
-            final ObjectAdapter inObject,
-            final ObjectAdapter value,
+            final ManagedObject inObject,
+            final ManagedObject value,
             final InteractionInitiatedBy interactionInitiatedBy);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java
index c065da7..b214c42 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacetViaModifyMethod.java
@@ -28,6 +28,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 
 public class PropertySetterFacetViaModifyMethod extends PropertySetterFacetAbstract implements ImperativeFacet {
@@ -58,8 +59,8 @@ public class PropertySetterFacetViaModifyMethod extends PropertySetterFacetAbstr
     @Override
     public void setProperty(
             final OneToOneAssociation owningAssociation,
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter valueAdapter,
+            final ManagedObject targetAdapter,
+            final ManagedObject valueAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         ObjectAdapter.InvokeUtils.invoke(method, targetAdapter, valueAdapter);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
index c7cd60a..0460455 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/update/modify/PropertySetterFacetViaSetterMethod.java
@@ -28,6 +28,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.ImperativeFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 
 public class PropertySetterFacetViaSetterMethod extends PropertySetterFacetAbstract implements ImperativeFacet {
@@ -56,9 +57,10 @@ public class PropertySetterFacetViaSetterMethod extends PropertySetterFacetAbstr
     @Override
     public void setProperty(
             final OneToOneAssociation owningAssociation,
-            final ObjectAdapter adapter,
-            final ObjectAdapter valueAdapter,
+            final ManagedObject adapter,
+            final ManagedObject valueAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         ObjectAdapter.InvokeUtils.invoke(method, adapter, valueAdapter);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java
index 9fa65c5..706bc68 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/booleans/BooleanPrimitiveValueSemanticsProvider.java
@@ -24,6 +24,7 @@ import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 
 public class BooleanPrimitiveValueSemanticsProvider extends BooleanValueSemanticsProviderAbstract implements PropertyDefaultFacet {
@@ -47,29 +48,9 @@ public class BooleanPrimitiveValueSemanticsProvider extends BooleanValueSemantic
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter inObject) {
+    public ObjectAdapter getDefault(final ManagedObject inObject) {
         return createAdapter(boolean.class, Boolean.FALSE);
     }
 
-    // //////////////////////////////////////////////////////////////////
-    // BooleanValueFacet impl
-    // //////////////////////////////////////////////////////////////////
-
-    //    @Override
-    //    public void reset(final ObjectAdapter object) {
-    //        object.replacePojo(Boolean.FALSE);
-    //    }
-    //
-    //    @Override
-    //    public void set(final ObjectAdapter object) {
-    //        object.replacePojo(Boolean.TRUE);
-    //    }
-    //
-    //    @Override
-    //    public void toggle(final ObjectAdapter object) {
-    //        final boolean current = ((Boolean) object.getObject()).booleanValue();
-    //        final boolean toggled = !current;
-    //        object.replacePojo(Boolean.valueOf(toggled));
-    //    }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bytes/BytePrimitiveValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bytes/BytePrimitiveValueSemanticsProvider.java
index b73e399..98c06d4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bytes/BytePrimitiveValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bytes/BytePrimitiveValueSemanticsProvider.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.facets.value.bytes;
 
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 
 public class BytePrimitiveValueSemanticsProvider extends ByteValueSemanticsProviderAbstract implements PropertyDefaultFacet {
@@ -45,7 +45,7 @@ public class BytePrimitiveValueSemanticsProvider extends ByteValueSemanticsProvi
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter adapter) {
+    public ManagedObject getDefault(final ManagedObject adapter) {
         return createAdapter(byte.class, Byte.valueOf((byte) 0));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/chars/CharPrimitiveValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/chars/CharPrimitiveValueSemanticsProvider.java
index 25b22e6..00bfe5d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/chars/CharPrimitiveValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/chars/CharPrimitiveValueSemanticsProvider.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.facets.value.chars;
 
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 
 public class CharPrimitiveValueSemanticsProvider extends CharValueSemanticsProviderAbstract implements PropertyDefaultFacet {
@@ -45,7 +45,7 @@ public class CharPrimitiveValueSemanticsProvider extends CharValueSemanticsProvi
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter inObject) {
+    public ManagedObject getDefault(final ManagedObject inObject) {
         return createAdapter(char.class, Character.valueOf(' '));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/doubles/DoublePrimitiveValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/doubles/DoublePrimitiveValueSemanticsProvider.java
index ce70615..a044cde 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/doubles/DoublePrimitiveValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/doubles/DoublePrimitiveValueSemanticsProvider.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.facets.value.doubles;
 
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 
 public class DoublePrimitiveValueSemanticsProvider extends DoubleValueSemanticsProviderAbstract implements PropertyDefaultFacet {
@@ -45,7 +45,7 @@ public class DoublePrimitiveValueSemanticsProvider extends DoubleValueSemanticsP
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter inObject) {
+    public ManagedObject getDefault(final ManagedObject inObject) {
         return createAdapter(double.class, new Double(0.0));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/floats/FloatPrimitiveValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/floats/FloatPrimitiveValueSemanticsProvider.java
index 532640e..bc5f05f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/floats/FloatPrimitiveValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/floats/FloatPrimitiveValueSemanticsProvider.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.facets.value.floats;
 
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 
 public class FloatPrimitiveValueSemanticsProvider extends FloatValueSemanticsProviderAbstract implements PropertyDefaultFacet {
@@ -45,7 +45,7 @@ public class FloatPrimitiveValueSemanticsProvider extends FloatValueSemanticsPro
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter adapter) {
+    public ManagedObject getDefault(final ManagedObject adapter) {
         return createAdapter(float.class, new Float(0.0f));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/integer/IntPrimitiveValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/integer/IntPrimitiveValueSemanticsProvider.java
index 2236f46..b0a3932 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/integer/IntPrimitiveValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/integer/IntPrimitiveValueSemanticsProvider.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.facets.value.integer;
 
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 
 public class IntPrimitiveValueSemanticsProvider extends IntValueSemanticsProviderAbstract implements PropertyDefaultFacet {
@@ -45,7 +45,7 @@ public class IntPrimitiveValueSemanticsProvider extends IntValueSemanticsProvide
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter inObject) {
+    public ManagedObject getDefault(final ManagedObject inObject) {
         return createAdapter(int.class, Integer.valueOf(0));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/longs/LongPrimitiveValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/longs/LongPrimitiveValueSemanticsProvider.java
index 1349fad..70c1cec 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/longs/LongPrimitiveValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/longs/LongPrimitiveValueSemanticsProvider.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.facets.value.longs;
 
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 
 public class LongPrimitiveValueSemanticsProvider extends LongValueSemanticsProviderAbstract implements PropertyDefaultFacet {
@@ -45,7 +45,7 @@ public class LongPrimitiveValueSemanticsProvider extends LongValueSemanticsProvi
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter inObject) {
+    public ManagedObject getDefault(final ManagedObject inObject) {
         return createAdapter(long.class, Long.valueOf(0L));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/shortint/ShortPrimitiveValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/shortint/ShortPrimitiveValueSemanticsProvider.java
index 48bfa28..b504a5e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/shortint/ShortPrimitiveValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/shortint/ShortPrimitiveValueSemanticsProvider.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.facets.value.shortint;
 
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 
 public class ShortPrimitiveValueSemanticsProvider extends ShortValueSemanticsProviderAbstract implements PropertyDefaultFacet {
@@ -45,7 +45,7 @@ public class ShortPrimitiveValueSemanticsProvider extends ShortValueSemanticsPro
     // //////////////////////////////////////////////////////////////////
 
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter inObject) {
+    public ManagedObject getDefault(final ManagedObject inObject) {
         return createAdapter(short.class, Short.valueOf((short) 0));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java
index bb83c32..89f238f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java
@@ -23,9 +23,9 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.ActionArgumentUsabilityEvent;
 import org.apache.isis.applib.services.wrapper.events.ActionArgumentEvent;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionContextType;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 
 import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojo;
@@ -40,14 +40,14 @@ extends UsabilityContext<ActionArgumentUsabilityEvent>
 implements ActionInteractionContext {
 
     private final ObjectAction objectAction;
-    private final ObjectAdapter[] args;
+    private final ManagedObject[] args;
     private final int position;
 
     public ActionArgUsabilityContext(
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final ObjectAction objectAction,
             final Identifier id,
-            final ObjectAdapter[] args,
+            final ManagedObject[] args,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
         super(InteractionContextType.ACTION_PARAMETER_USABLE, targetAdapter, id, interactionInitiatedBy, Where.OBJECT_FORMS);
@@ -62,7 +62,7 @@ implements ActionInteractionContext {
         return objectAction;
     }
 
-    public ObjectAdapter[] getArgs() {
+    public ManagedObject[] getArgs() {
         return args;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgValidityContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgValidityContext.java
index c65ef20..6923a60 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgValidityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgValidityContext.java
@@ -24,6 +24,7 @@ import org.apache.isis.applib.services.wrapper.events.ActionArgumentEvent;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionContextType;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 
 import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojo;
@@ -35,15 +36,15 @@ import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojo;
 public class ActionArgValidityContext extends ValidityContext<ActionArgumentEvent> implements ProposedHolder, ActionInteractionContext {
 
     private final ObjectAction objectAction;
-    private final ObjectAdapter[] args;
+    private final ManagedObject[] args;
     private final int position;
-    private final ObjectAdapter proposed;
+    private final ManagedObject proposed;
 
     public ActionArgValidityContext(
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final ObjectAction objectAction,
             final Identifier id,
-            final ObjectAdapter[] args,
+            final ManagedObject[] args,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
         super(InteractionContextType.ACTION_PROPOSED_ARGUMENT, targetAdapter, id, interactionInitiatedBy);
@@ -59,7 +60,7 @@ public class ActionArgValidityContext extends ValidityContext<ActionArgumentEven
         return objectAction;
     }
 
-    public ObjectAdapter[] getArgs() {
+    public ManagedObject[] getArgs() {
         return args;
     }
 
@@ -68,7 +69,7 @@ public class ActionArgValidityContext extends ValidityContext<ActionArgumentEven
     }
 
     @Override
-    public ObjectAdapter getProposed() {
+    public ManagedObject getProposed() {
         return proposed;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java
index 3dfa2b8..32cf689 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java
@@ -23,9 +23,9 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.ActionArgumentVisibilityEvent;
 import org.apache.isis.applib.services.wrapper.events.ActionArgumentEvent;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionContextType;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 
 import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojo;
@@ -38,14 +38,14 @@ import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojoArr
 public class ActionArgVisibilityContext extends VisibilityContext<ActionArgumentVisibilityEvent> implements ActionInteractionContext {
 
     private final ObjectAction objectAction;
-    private final ObjectAdapter[] args;
+    private final ManagedObject[] args;
     private final int position;
 
     public ActionArgVisibilityContext(
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final ObjectAction objectAction,
             final Identifier id,
-            final ObjectAdapter[] args,
+            final ManagedObject[] args,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
         super(InteractionContextType.ACTION_PARAMETER_VISIBLE, targetAdapter, id, interactionInitiatedBy, Where.OBJECT_FORMS);
@@ -60,7 +60,7 @@ public class ActionArgVisibilityContext extends VisibilityContext<ActionArgument
         return objectAction;
     }
 
-    public ObjectAdapter[] getArgs() {
+    public ManagedObject[] getArgs() {
         return args;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionValidityContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionValidityContext.java
index 68741a3..3dd7f57 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionValidityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionValidityContext.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.interactions;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.wrapper.events.ActionInvocationEvent;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionContextType;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 
 import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojo;
@@ -35,13 +35,13 @@ import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojo;
 public class ActionValidityContext extends ValidityContext<ActionInvocationEvent> implements ActionInteractionContext {
 
     private final ObjectAction objectAction;
-    private final ObjectAdapter[] args;
+    private final ManagedObject[] args;
 
     public ActionValidityContext(
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final ObjectAction objectAction,
             final Identifier id,
-            final ObjectAdapter[] args,
+            final ManagedObject[] args,
             final InteractionInitiatedBy interactionInitiatedBy) {
         super(InteractionContextType.ACTION_INVOKE, targetAdapter, id, interactionInitiatedBy);
         this.objectAction = objectAction;
@@ -53,13 +53,13 @@ public class ActionValidityContext extends ValidityContext<ActionInvocationEvent
         return objectAction;
     }
 
-    public ObjectAdapter[] getArgs() {
+    public ManagedObject[] getArgs() {
         return args;
     }
 
     @Override
     public ActionInvocationEvent createInteractionEvent() {
-        return new ActionInvocationEvent(unwrapPojo(getTarget()), getIdentifier(), ObjectAdapter.Util.unwrapPojoArray(getArgs()));
+        return new ActionInvocationEvent(unwrapPojo(getTarget()), getIdentifier(), ManagedObject.unwrapPojoArray(getArgs()));
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/CollectionAddToContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/CollectionAddToContext.java
index 1d8a4c7..e44d8c9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/CollectionAddToContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/CollectionAddToContext.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.interactions;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.wrapper.events.CollectionAddToEvent;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionContextType;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * See {@link InteractionContext} for overview; analogous to
@@ -31,12 +31,12 @@ import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
  */
 public class CollectionAddToContext extends ValidityContext<CollectionAddToEvent> implements ProposedHolder {
 
-    private final ObjectAdapter proposed;
+    private final ManagedObject proposed;
 
     public CollectionAddToContext(
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final Identifier id,
-            final ObjectAdapter proposed,
+            final ManagedObject proposed,
             final InteractionInitiatedBy interactionInitiatedBy) {
         super(InteractionContextType.COLLECTION_ADD_TO, targetAdapter, id, interactionInitiatedBy);
 
@@ -44,13 +44,13 @@ public class CollectionAddToContext extends ValidityContext<CollectionAddToEvent
     }
 
     @Override
-    public ObjectAdapter getProposed() {
+    public ManagedObject getProposed() {
         return proposed;
     }
 
     @Override
     public CollectionAddToEvent createInteractionEvent() {
-        return new CollectionAddToEvent(ObjectAdapter.Util.unwrapPojo(getTarget()), getIdentifier(), ObjectAdapter.Util.unwrapPojo(getProposed()));
+        return new CollectionAddToEvent(ManagedObject.unwrapPojo(getTarget()), getIdentifier(), ManagedObject.unwrapPojo(getProposed()));
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/CollectionRemoveFromContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/CollectionRemoveFromContext.java
index 3ba78f8..9d36d5d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/CollectionRemoveFromContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/CollectionRemoveFromContext.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.interactions;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.wrapper.events.CollectionRemoveFromEvent;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionContextType;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojo;
 
@@ -33,12 +33,12 @@ import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojo;
  */
 public class CollectionRemoveFromContext extends ValidityContext<CollectionRemoveFromEvent> implements ProposedHolder{
 
-    private final ObjectAdapter proposed;
+    private final ManagedObject proposed;
 
     public CollectionRemoveFromContext(
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final Identifier identifier,
-            final ObjectAdapter proposed,
+            final ManagedObject proposed,
             final InteractionInitiatedBy interactionInitiatedBy) {
         super(InteractionContextType.COLLECTION_REMOVE_FROM, targetAdapter, identifier, interactionInitiatedBy);
 
@@ -46,7 +46,7 @@ public class CollectionRemoveFromContext extends ValidityContext<CollectionRemov
     }
 
     @Override
-    public ObjectAdapter getProposed() {
+    public ManagedObject getProposed() {
         return proposed;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ObjectVisibilityContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ObjectVisibilityContext.java
index 84bd65c..a52920c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ObjectVisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ObjectVisibilityContext.java
@@ -22,7 +22,6 @@ package org.apache.isis.metamodel.interactions;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.wrapper.events.ObjectVisibilityEvent;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionContextType;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -36,7 +35,7 @@ import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojo;
 public class ObjectVisibilityContext extends VisibilityContext<ObjectVisibilityEvent> implements ProposedHolder {
 
     public ObjectVisibilityContext(
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final Identifier identifier,
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ParseValueContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ParseValueContext.java
index 7848b36..e061ba3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ParseValueContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ParseValueContext.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.interactions;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.wrapper.events.ParseValueEvent;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionContextType;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojo;
 
@@ -33,19 +33,20 @@ import static org.apache.isis.metamodel.adapter.ObjectAdapter.Util.unwrapPojo;
  */
 public class ParseValueContext extends ValidityContext<ParseValueEvent> implements ProposedHolder {
 
-    private final ObjectAdapter proposed;
+    private final ManagedObject proposed;
 
     public ParseValueContext(
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final Identifier identifier,
-            final ObjectAdapter proposed,
+            final ManagedObject proposed,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         super(InteractionContextType.PARSE_VALUE, targetAdapter, identifier, interactionInitiatedBy);
         this.proposed = proposed;
     }
 
     @Override
-    public ObjectAdapter getProposed() {
+    public ManagedObject getProposed() {
         return proposed;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
index 2ac21d8..a2a9bb8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
@@ -22,12 +22,12 @@ package org.apache.isis.metamodel.postprocessors.param;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.metamodel.facets.object.mixin.MixinFacet;
 import org.apache.isis.metamodel.facets.param.choices.ActionParameterChoicesFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
 
 import lombok.val;
@@ -45,23 +45,23 @@ public class ActionParameterChoicesFacetFromParentedCollection extends ActionPar
 
     @Override
     public Object[] getChoices(
-            final ObjectAdapter target,
-            final List<ObjectAdapter> arguments,
+            final ManagedObject target,
+            final List<ManagedObject> arguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        final ObjectAdapter parentAdapter = determineParentAdapter(target);
-        final ObjectAdapter objectAdapter = otma.get(parentAdapter, interactionInitiatedBy);
-        final List<ObjectAdapter> objectAdapters = CollectionFacet.Utils.toAdapterList(objectAdapter);
-        return ObjectAdapter.Util.unwrapPojoArray(objectAdapters.toArray(new ObjectAdapter[0]));
+        final ManagedObject parentAdapter = determineParentAdapter(target);
+        final ManagedObject objectAdapter = otma.get(parentAdapter, interactionInitiatedBy);
+        final List<ManagedObject> objectAdapters = CollectionFacet.Utils.toAdapterList(objectAdapter);
+        return ManagedObject.unwrapPojoArray(objectAdapters.toArray(new ManagedObject[0]));
     }
 
     /**
      * in the case of a mixin action, the target passed to the facet is actually the mixin itself, 
      * not the mixee.
      */
-    private ObjectAdapter determineParentAdapter(final ObjectAdapter target) {
+    private ManagedObject determineParentAdapter(final ManagedObject target) {
         val mixinFacet = target.getSpecification().getFacet(MixinFacet.class);
-        ObjectAdapter mixedInTarget = null;
+        ManagedObject mixedInTarget = null;
         if(mixinFacet != null) {
             mixedInTarget = mixinFacet.mixedIn(target, MixinFacet.Policy.FAIL_FAST);
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
index 6158514..b7f6aae 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
@@ -25,9 +25,9 @@ import java.util.List;
 import java.util.concurrent.Callable;
 
 import org.apache.isis.applib.ApplicationException;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.param.defaults.ActionParameterDefaultsFacetAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class ActionParameterDefaultsFacetFromAssociatedCollection extends ActionParameterDefaultsFacetAbstract {
 
@@ -56,8 +56,8 @@ public class ActionParameterDefaultsFacetFromAssociatedCollection extends Action
 
     @Override
     public Object getDefault(
-            final ObjectAdapter target,
-            List<ObjectAdapter> argumentsIfAvailable,
+            final ManagedObject target,
+            List<ManagedObject> argumentsIfAvailable,
             final Integer paramNumUpdated) {
         return selectedPojos.get();
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
index 0da6b98..35d319c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/DeriveFacetsPostProcessor.java
@@ -57,7 +57,6 @@ import org.apache.isis.metamodel.facets.object.domainobject.domainevents.Collect
 import org.apache.isis.metamodel.facets.object.domainobject.domainevents.PropertyDomainEventDefaultFacetForDomainObjectAnnotation;
 import org.apache.isis.metamodel.facets.object.icon.IconFacet;
 import org.apache.isis.metamodel.facets.object.immutable.ImmutableFacet;
-import org.apache.isis.metamodel.facets.object.projection.ProjectionFacet;
 import org.apache.isis.metamodel.facets.object.projection.ProjectionFacetFromProjectingProperty;
 import org.apache.isis.metamodel.facets.object.projection.ident.IconFacetDerivedFromProjectionFacet;
 import org.apache.isis.metamodel.facets.object.projection.ident.TitleFacetDerivedFromProjectionFacet;
@@ -109,6 +108,8 @@ import org.apache.isis.metamodel.specloader.specimpl.ObjectMemberAbstract;
 import org.apache.isis.metamodel.specloader.specimpl.OneToManyAssociationMixedIn;
 import org.apache.isis.metamodel.specloader.specimpl.OneToOneAssociationMixedIn;
 
+import lombok.val;
+
 /**
  * Sets up all the {@link Facet}s for an action in a single shot.
  */
@@ -221,20 +222,20 @@ public class DeriveFacetsPostProcessor implements ObjectSpecificationPostProcess
     }
 
     private void deriveProjectionFacets(final ObjectSpecification objectSpecification) {
-        final ProjectionFacet projectionFacet = ProjectionFacetFromProjectingProperty.create(objectSpecification);
+        val projectionFacet = ProjectionFacetFromProjectingProperty.create(objectSpecification);
         if (projectionFacet == null) {
             return;
         }
         FacetUtil.addFacet(projectionFacet);
-        final TitleFacet titleFacet = objectSpecification.getFacet(TitleFacet.class);
+        val titleFacet = objectSpecification.getFacet(TitleFacet.class);
         if(canOverwrite(titleFacet)) {
             FacetUtil.addFacet(new TitleFacetDerivedFromProjectionFacet(projectionFacet, objectSpecification));
         }
-        final IconFacet iconFacet = objectSpecification.getFacet(IconFacet.class);
+        val iconFacet = objectSpecification.getFacet(IconFacet.class);
         if(canOverwrite(iconFacet)) {
             FacetUtil.addFacet(new IconFacetDerivedFromProjectionFacet(projectionFacet, objectSpecification));
         }
-        final CssClassFacet cssClassFacet = objectSpecification.getFacet(CssClassFacet.class);
+        val cssClassFacet = objectSpecification.getFacet(CssClassFacet.class);
         if(canOverwrite(cssClassFacet)) {
             FacetUtil.addFacet(new IconFacetDerivedFromProjectionFacet(projectionFacet, objectSpecification));
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/command/CommandDtoServiceInternal.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/command/CommandDtoServiceInternal.java
index 5167b10..06ea486 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/command/CommandDtoServiceInternal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/command/CommandDtoServiceInternal.java
@@ -21,7 +21,7 @@ package org.apache.isis.metamodel.services.command;
 import java.util.List;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.schema.cmd.v1.ActionDto;
@@ -42,9 +42,9 @@ public interface CommandDtoServiceInternal {
      */
     @Programmatic
     CommandDto asCommandDto(
-            final List<ObjectAdapter> targetAdapters,
+            final List<ManagedObject> targetAdapters,
             final ObjectAction objectAction,
-            final ObjectAdapter[] argAdapters);
+            final ManagedObject[] argAdapters);
 
     /**
      * Returns a JAXB DTO (hence convertible to XML) that represents the intention to edit (set or clear) a property on
@@ -52,20 +52,20 @@ public interface CommandDtoServiceInternal {
      */
     @Programmatic
     CommandDto asCommandDto(
-            final List<ObjectAdapter> targetAdapters,
+            final List<ManagedObject> targetAdapters,
             final OneToOneAssociation association,
-            final ObjectAdapter valueAdapterOrNull);
+            final ManagedObject valueAdapterOrNull);
 
     @Programmatic
     void addActionArgs(
             final ObjectAction objectAction,
             final ActionDto actionDto,
-            final ObjectAdapter[] argAdapters);
+            final ManagedObject[] argAdapters);
 
     @Programmatic
     void addPropertyValue(
             final OneToOneAssociation property,
             final PropertyDto propertyDto,
-            final ObjectAdapter valueAdapter);
+            final ManagedObject valueAdapter);
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/homepage/HomePageAction.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/homepage/HomePageAction.java
index 6ac1f05..d5a3730 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/homepage/HomePageAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/homepage/HomePageAction.java
@@ -19,8 +19,8 @@
 package org.apache.isis.metamodel.services.homepage;
 
 import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 
 import lombok.NonNull;
@@ -33,15 +33,15 @@ import lombok.val;
 @Value(staticConstructor = "of")
 public final class HomePageAction {
 
-    @NonNull private final ObjectAdapter objectAdapter;
+    @NonNull private final ManagedObject objectAdapter;
     @NonNull private final ObjectAction objectAction;
 
     public Object getHomePagePojo() {
 
-        final ObjectAdapter mixedInAdapter = null;
-        final ObjectAdapter[] parameters = {};
+        final ManagedObject mixedInAdapter = null;
+        final ManagedObject[] parameters = {};
 
-        final ObjectAdapter resultAdapter = objectAction.executeWithRuleChecking(
+        final ManagedObject resultAdapter = objectAction.executeWithRuleChecking(
                 objectAdapter, mixedInAdapter, parameters,
                 InteractionInitiatedBy.USER,
                 WHERE_FOR_ACTION_INVOCATION);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ixn/InteractionDtoServiceInternal.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ixn/InteractionDtoServiceInternal.java
index c5ab20f..b542a91 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ixn/InteractionDtoServiceInternal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ixn/InteractionDtoServiceInternal.java
@@ -21,7 +21,7 @@ package org.apache.isis.metamodel.services.ixn;
 import java.util.List;
 
 import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.schema.ixn.v1.ActionInvocationDto;
@@ -32,14 +32,14 @@ public interface InteractionDtoServiceInternal {
     @Programmatic
     ActionInvocationDto asActionInvocationDto(
             ObjectAction objectAction,
-            ObjectAdapter targetAdapter,
-            List<ObjectAdapter> argumentAdapters);
+            ManagedObject targetAdapter,
+            List<ManagedObject> argumentAdapters);
 
     @Programmatic
     PropertyEditDto asPropertyEditDto(
             OneToOneAssociation property,
-            ObjectAdapter targetAdapter,
-            ObjectAdapter newValueAdapterIfAny);
+            ManagedObject targetAdapter,
+            ManagedObject newValueAdapterIfAny);
 
     @Programmatic
     ActionInvocationDto updateResult(
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
index 19cfaf6..900e57b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/ManagedObject.java
@@ -19,7 +19,11 @@
 
 package org.apache.isis.metamodel.spec;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import java.util.function.Supplier;
+import java.util.stream.Collectors;
 
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
@@ -186,6 +190,48 @@ public interface ManagedObject {
             }
         };
     }
+    
+    // -- UNWRAPPING
+    
+    public static Object unwrapPojo(final ManagedObject adapter) {
+        return adapter != null ? adapter.getPojo() : null;
+    }
+    
+    public static Object[] unwrapPojoArray(final ManagedObject[] adapters) {
+        if (adapters == null) {
+            return null;
+        }
+        final Object[] unwrappedObjects = new Object[adapters.length];
+        int i = 0;
+        for (final ManagedObject adapter : adapters) {
+            unwrappedObjects[i++] = unwrapPojo(adapter);
+        }
+        return unwrappedObjects;
+    }
+    
+    public static List<Object> unwrapPojoListElseEmpty(Collection<ManagedObject> adapters) {
+        if (adapters == null) {
+            return Collections.emptyList();
+        }
+        return adapters.stream()
+            .map(ManagedObject::unwrapPojo)
+            .collect(Collectors.toList());
+    }
+
+//    @Deprecated
+//    public default ObjectAdapter promote() {
+//        return (ObjectAdapter) this; 
+//    }
+
+    @Deprecated
+    public static ObjectAdapter promote(ManagedObject managedObject) {
+        if(managedObject==null) {
+            return null;
+        }
+        return (ObjectAdapter) managedObject;
+    }
+
+
 
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/CurrentHolder.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/CurrentHolder.java
index cff655a..82a4bfc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/CurrentHolder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/CurrentHolder.java
@@ -21,6 +21,7 @@ package org.apache.isis.metamodel.spec.feature;
 
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Mix-in interface for {@link ObjectFeature}s that reference or otherwise
@@ -41,6 +42,6 @@ public interface CurrentHolder {
      * For example, if this is an {@link OneToOneAssociation}, then returns the
      * referenced object.
      */
-    ObjectAdapter get(final ObjectAdapter owner, final InteractionInitiatedBy interactionInitiatedBy);
+    ManagedObject get(ManagedObject owner, InteractionInitiatedBy interactionInitiatedBy);
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/MutableCurrentHolder.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/MutableCurrentHolder.java
index 1fc9df5..7daaa27 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/MutableCurrentHolder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/MutableCurrentHolder.java
@@ -21,6 +21,7 @@ package org.apache.isis.metamodel.spec.feature;
 
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Mix-in interface for {@link ObjectAction}s that reference or otherwise
@@ -47,8 +48,8 @@ public interface MutableCurrentHolder extends CurrentHolder {
      * @param interactionInitiatedBy
      */
     void set(
-            final ObjectAdapter owner,
-            final ObjectAdapter newValue,
+            final ManagedObject owner,
+            final ManagedObject newValue,
             final InteractionInitiatedBy interactionInitiatedBy);
 
     /**
@@ -57,7 +58,7 @@ public interface MutableCurrentHolder extends CurrentHolder {
      * @param newValue
      */
     void set(
-            final ObjectAdapter owner,
-            final ObjectAdapter newValue);
+            final ManagedObject owner,
+            final ManagedObject newValue);
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
index dd64fff..ad017d7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
@@ -38,9 +38,7 @@ import org.apache.isis.applib.value.Clob;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Sets;
-import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.actions.action.associateWith.AssociatedWithFacet;
@@ -54,6 +52,7 @@ import org.apache.isis.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.metamodel.facets.object.wizard.WizardFacet;
 import org.apache.isis.metamodel.layout.memberorderfacet.MemberOrderFacetComparator;
 import org.apache.isis.metamodel.spec.ActionType;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.specloader.specimpl.MixedInMember;
 
@@ -104,10 +103,10 @@ public interface ObjectAction extends ObjectMember {
      *
      * @param mixedInAdapter - will be null for regular actions, and for mixin actions.  When a mixin action invokes its underlying mixedIn action, then will be populated (so that the ActionDomainEvent can correctly provide the underlying mixin)
      */
-    ObjectAdapter executeWithRuleChecking(
-            final ObjectAdapter target,
-            final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter[] parameters,
+    ManagedObject executeWithRuleChecking(
+            final ManagedObject target,
+            final ManagedObject mixedInAdapter,
+            final ManagedObject[] parameters,
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) throws AuthorizationException;
 
@@ -117,10 +116,10 @@ public interface ObjectAction extends ObjectMember {
      *
      * @param mixedInAdapter - will be null for regular actions, and for mixin actions.  When a mixin action invokes its underlying mixedIn action, then will be populated (so that the ActionDomainEvent can correctly provide the underlying mixin)
      */
-    ObjectAdapter execute(
-            ObjectAdapter targetAdapter,
-            ObjectAdapter mixedInAdapter,
-            ObjectAdapter[] parameters,
+    ManagedObject execute(
+            ManagedObject targetAdapter,
+            ManagedObject mixedInAdapter,
+            ManagedObject[] parameters,
             final InteractionInitiatedBy interactionInitiatedBy);
 
 
@@ -137,18 +136,18 @@ public interface ObjectAction extends ObjectMember {
      * </p>
      */
     Consent isProposedArgumentSetValid(
-            ObjectAdapter object,
-            ObjectAdapter[] proposedArguments,
+            ManagedObject object,
+            ManagedObject[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy);
 
     Consent isEachIndividualArgumentValid(
-            ObjectAdapter objectAdapter,
-            ObjectAdapter[] proposedArguments,
+            ManagedObject objectAdapter,
+            ManagedObject[] proposedArguments,
             InteractionInitiatedBy interactionInitiatedBy);
 
     Consent isArgumentSetValid(
-            ObjectAdapter objectAdapter,
-            ObjectAdapter[] proposedArguments,
+            ManagedObject objectAdapter,
+            ManagedObject[] proposedArguments,
             InteractionInitiatedBy interactionInitiatedBy);
 
 
@@ -201,7 +200,7 @@ public interface ObjectAction extends ObjectMember {
      *     For regular actions, returns same argument, but for mixin actions, will be an instance of the mixin.
      * </p>
      */
-    ObjectAdapter realTargetAdapter(ObjectAdapter targetAdapter);
+    ManagedObject realTargetAdapter(ManagedObject targetAdapter);
 
 
 
@@ -210,14 +209,14 @@ public interface ObjectAction extends ObjectMember {
     /**
      * Returns the defaults references/values to be used for the action.
      */
-    ObjectAdapter[] getDefaults(ObjectAdapter target);
+    ManagedObject[] getDefaults(ManagedObject target);
 
     /**
      * Returns a list of possible references/values for each parameter, which
      * the user can choose from.
      */
-    ObjectAdapter[][] getChoices(
-            final ObjectAdapter target,
+    ManagedObject[][] getChoices(
+            final ManagedObject target,
             final InteractionInitiatedBy interactionInitiatedBy);
 
 
@@ -297,14 +296,15 @@ public interface ObjectAction extends ObjectMember {
             return facet != null ? facet.getPosition() : CssClassFaPosition.LEFT;
         }
 
-        public static String cssClassFor(final ObjectAction action, final ObjectAdapter objectAdapter) {
+        public static String cssClassFor(final ObjectAction action, final ManagedObject objectAdapter) {
             final CssClassFacet cssClassFacet = action.getFacet(CssClassFacet.class);
             return cssClassFacet != null ? cssClassFacet.cssClass(objectAdapter) : null;
         }
 
 
+        @SuppressWarnings("deprecation")
         public static List<ObjectAction> findTopLevel(
-                final ObjectAdapter adapter) {
+                final ManagedObject adapter) {
             final List<ObjectAction> topLevelActions = _Lists.newArrayList();
 
             addTopLevelActions(adapter, ActionType.USER, topLevelActions);
@@ -315,7 +315,7 @@ public interface ObjectAction extends ObjectMember {
         }
 
         static void addTopLevelActions(
-                final ObjectAdapter adapter,
+                final ManagedObject adapter,
                 final ActionType actionType,
                 final List<ObjectAction> topLevelActions) {
 
@@ -336,8 +336,9 @@ public interface ObjectAction extends ObjectMember {
         }
 
 
+        @SuppressWarnings("deprecation")
         public static List<ObjectAction> findForAssociation(
-                final ObjectAdapter adapter,
+                final ManagedObject adapter,
                 final ObjectAssociation association) {
 
             final List<ObjectAction> associatedActions = _Lists.newArrayList();
@@ -360,7 +361,7 @@ public interface ObjectAction extends ObjectMember {
         }
 
         static void addActions(
-                final ObjectAdapter adapter,
+                final ManagedObject adapter,
                 final ActionType type,
                 final ObjectAssociation association, final List<ObjectAction> associatedActions) {
             final ObjectSpecification objectSpecification = adapter.getSpecification();
@@ -392,7 +393,7 @@ public interface ObjectAction extends ObjectMember {
 
         public static Optional<String> targetNameFor(
                 final ObjectAction owningAction,
-                final @Nullable ObjectAdapter mixedInAdapter) {
+                final @Nullable ManagedObject mixedInAdapter) {
 
             if(mixedInAdapter != null) {
                 final ObjectSpecification onType = owningAction.getOnType();
@@ -500,9 +501,10 @@ public interface ObjectAction extends ObjectMember {
         //        }
 
         public static Predicate<ObjectAction> dynamicallyVisible(
-                final ObjectAdapter target,
+                final ManagedObject target,
                 final InteractionInitiatedBy interactionInitiatedBy,
                 final Where where) {
+            
             return (ObjectAction objectAction) -> {
                 final Consent visible = objectAction.isVisible(target, interactionInitiatedBy, where);
                 return visible.isAllowed();
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
index 29e9ed5..8831440 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
@@ -25,11 +25,11 @@ import java.util.function.Predicate;
 import javax.annotation.Nullable;
 import javax.enterprise.inject.Vetoed;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.metamodel.interactions.ActionArgValidityContext;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
 /**
@@ -74,8 +74,8 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
 
     // internal API
     ActionArgValidityContext createProposedArgumentInteractionContext(
-            final ObjectAdapter targetObject,
-            final ObjectAdapter[] args,
+            final ManagedObject targetObject,
+            final ManagedObject[] args,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy);
 
@@ -90,8 +90,8 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      * Returns a list of possible references/values for this parameter, which the
      * user can choose from, based on the input search argument.
      */
-    ObjectAdapter[] getAutoComplete(
-            final ObjectAdapter adapter,
+    ManagedObject[] getAutoComplete(
+            final ManagedObject adapter,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy);
 
@@ -108,15 +108,15 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      * Returns a list of possible references/values for this parameter, which the
      * user can choose from.
      */
-    ObjectAdapter[] getChoices(
-            final ObjectAdapter adapter,
-            final ObjectAdapter[] argumentsIfAvailable,
+    ManagedObject[] getChoices(
+            final ManagedObject adapter,
+            final ManagedObject[] argumentsIfAvailable,
             final InteractionInitiatedBy interactionInitiatedBy);
 
 
-    ObjectAdapter getDefault(
-            ObjectAdapter adapter,
-            final ObjectAdapter[] argumentsIfAvailable,
+    ManagedObject getDefault(
+            ManagedObject adapter,
+            final ManagedObject[] argumentsIfAvailable,
             final Integer paramNumUpdated);
 
 
@@ -128,8 +128,8 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      * @return
      */
     Consent isVisible(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter[] pendingArguments,
+            final ManagedObject targetAdapter,
+            final ManagedObject[] pendingArguments,
             final InteractionInitiatedBy interactionInitiatedBy);
 
     /**
@@ -140,8 +140,8 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      * @return
      */
     Consent isUsable(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter[] pendingArguments,
+            final ManagedObject targetAdapter,
+            final ManagedObject[] pendingArguments,
             final InteractionInitiatedBy interactionInitiatedBy);
 
     /**
@@ -153,7 +153,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      * @return
      */
     String isValid(
-            final ObjectAdapter adapter,
+            final ManagedObject adapter,
             final Object proposedValue,
             final InteractionInitiatedBy interactionInitiatedBy);
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAssociation.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAssociation.java
index a78431d..0702ba7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAssociation.java
@@ -32,7 +32,6 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facets.WhereValueFacet;
@@ -40,6 +39,7 @@ import org.apache.isis.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.metamodel.facets.members.order.MemberOrderFacet;
 import org.apache.isis.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.metamodel.layout.memberorderfacet.MemberOrderComparator;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.util.DeweyOrderComparator;
 
@@ -51,7 +51,7 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
     /**
      * As per {@link #get(ObjectAdapter, InteractionInitiatedBy)}, with {@link InteractionInitiatedBy#USER}.
      */
-    public default ObjectAdapter get(ObjectAdapter owner) {
+    public default ManagedObject get(ManagedObject owner) {
         return get(owner, InteractionInitiatedBy.USER);
     }
 
@@ -64,19 +64,21 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
      * referenced object.
      */
     @Override
-    ObjectAdapter get(final ObjectAdapter owner, final InteractionInitiatedBy interactionInitiatedBy);
+    ManagedObject get(
+            ManagedObject owner, 
+            InteractionInitiatedBy interactionInitiatedBy);
 
     //Instance get(final Instance owner, final InteractionInitiatedBy interactionInitiatedBy);
 
     /**
      * Return the default for this property.
      */
-    ObjectAdapter getDefault(ObjectAdapter adapter);
+    ManagedObject getDefault(ManagedObject adapter);
 
     /**
      * Set the property to it default references/values.
      */
-    public void toDefault(ObjectAdapter target);
+    public void toDefault(ManagedObject target);
 
     /**
      * Whether there are any choices provided (eg <tt>choicesXxx</tt> supporting
@@ -87,9 +89,9 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
      * Returns a list of possible references/values for this field, which the
      * user can choose from.
      */
-    public ObjectAdapter[] getChoices(
-            final ObjectAdapter object,
-            final InteractionInitiatedBy interactionInitiatedBy);
+    public ManagedObject[] getChoices(
+            ManagedObject object,
+            InteractionInitiatedBy interactionInitiatedBy);
 
 
     /**
@@ -101,10 +103,10 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
      * Returns a list of possible references/values for this field, which the
      * user can choose from, based on the provided search argument.
      */
-    public ObjectAdapter[] getAutoComplete(
-            final ObjectAdapter object,
-            final String searchArg,
-            final InteractionInitiatedBy interactionInitiatedBy);
+    public ManagedObject[] getAutoComplete(
+            ManagedObject object,
+            String searchArg,
+            InteractionInitiatedBy interactionInitiatedBy);
 
     int getAutoCompleteMinLength();
 
@@ -118,7 +120,7 @@ public interface ObjectAssociation extends ObjectMember, CurrentHolder {
      * Returns <code>true</code> if this field on the specified object is deemed
      * to be empty, or has no content.
      */
-    boolean isEmpty(ObjectAdapter target, final InteractionInitiatedBy interactionInitiatedBy);
+    boolean isEmpty(ManagedObject target, InteractionInitiatedBy interactionInitiatedBy);
 
     /**
      * Determines if this field must be complete before the object is in a valid
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/OneToManyAssociation.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/OneToManyAssociation.java
index 2eabb47..6299695 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/OneToManyAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/OneToManyAssociation.java
@@ -19,9 +19,9 @@
 
 package org.apache.isis.metamodel.spec.feature;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeature {
 
@@ -41,9 +41,9 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
      * @see #addElement(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)
      */
     Consent isValidToAdd(
-            ObjectAdapter owningObjectAdapter,
-            ObjectAdapter proposedObjectToAdd,
-            final InteractionInitiatedBy interactionInitiatedBy);
+            ManagedObject owningObjectAdapter,
+            ManagedObject proposedObjectToAdd,
+            InteractionInitiatedBy interactionInitiatedBy);
 
     /**
      * Add the specified element to this collection field in the specified
@@ -56,9 +56,9 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
      * @see #isValidToAdd(ObjectAdapter, ObjectAdapter)
      */
     void addElement(
-            ObjectAdapter owningObjectAdapter,
-            ObjectAdapter objectToAdd,
-            final InteractionInitiatedBy interactionInitiatedBy);
+            ManagedObject owningObjectAdapter,
+            ManagedObject objectToAdd,
+            InteractionInitiatedBy interactionInitiatedBy);
 
     // /////////////////////////////////////////////////////////////
     // remove
@@ -76,9 +76,9 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
      * @see #removeElement(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)
      */
     Consent isValidToRemove(
-            ObjectAdapter owningObjectAdapter,
-            ObjectAdapter proposedObjectToRemove,
-            final InteractionInitiatedBy interactionInitiatedBy);
+            ManagedObject owningObjectAdapter,
+            ManagedObject proposedObjectToRemove,
+            InteractionInitiatedBy interactionInitiatedBy);
 
     /**
      * Remove the specified element from this collection field in the specified
@@ -91,20 +91,10 @@ public interface OneToManyAssociation extends ObjectAssociation, OneToManyFeatur
      * @see #isValidToRemove(ObjectAdapter, ObjectAdapter)
      */
     void removeElement(
-            ObjectAdapter owningObjectAdapter,
-            ObjectAdapter oObjectToRemove,
-            final InteractionInitiatedBy interactionInitiatedBy);
+            ManagedObject owningObjectAdapter,
+            ManagedObject oObjectToRemove,
+            InteractionInitiatedBy interactionInitiatedBy);
 
-    // /////////////////////////////////////////////////////////////
-    // clear
-    // /////////////////////////////////////////////////////////////
 
-    /**
-     * Remove all elements from this collection field in the specified object.
-     *
-     * @deprecated - seemingly unused by any code?
-     */
-    @Deprecated
-    void clearCollection(ObjectAdapter inObject);
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/OneToOneAssociation.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/OneToOneAssociation.java
index d25334d..e33e7b2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/OneToOneAssociation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/OneToOneAssociation.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.metamodel.spec.feature;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -37,7 +36,7 @@ public interface OneToOneAssociation extends ObjectAssociation, OneToOneFeature,
      * for re-initialising the object and not specifying an association, which
      * is only done once.
      */
-    void initAssociation(ObjectAdapter inObject, ObjectAdapter associate);
+    void initAssociation(ManagedObject inObject, ManagedObject associate);
 
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
index a78daa2..dd51833 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
@@ -20,6 +20,7 @@ package org.apache.isis.metamodel.specloader;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 import javax.annotation.Nullable;
@@ -28,8 +29,10 @@ import javax.inject.Inject;
 
 import org.springframework.stereotype.Service;
 
+import org.apache.isis.commons.internal.base._Blackhole;
 import org.apache.isis.commons.internal.base._Timing;
 import org.apache.isis.commons.internal.collections._Lists;
+import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
 import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.config.registry.IsisBeanTypeRegistry;
@@ -81,7 +84,7 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
     
     private final SpecificationCacheDefault<ObjectSpecification> cache = 
             new SpecificationCacheDefault<>();
-
+    
     @PostConstruct
     public void preInit() {
         this.programmingModel = programmingModelService.getProgrammingModel();
@@ -234,12 +237,12 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
         if (substitutedType == null) {
             return null;
         }
-
+        
         val typeName = substitutedType.getName();
 
         final ObjectSpecification cachedSpec;
         
-        //XXX don't block on long running code ... 'spec.introspectUpTo(upTo);'
+        // we try not to block on long running code ... 'spec.introspectUpTo(upTo);'
         synchronized (cache) {
             cachedSpec = cache.computeIfAbsent(typeName, __->createSpecification(substitutedType));
         }
@@ -272,8 +275,8 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
      * Creates the appropriate type of {@link ObjectSpecification}.
      */
     private ObjectSpecification createSpecification(final Class<?> cls) {
-
-        // ... and create the specs
+        
+         // ... and create the specs
         final ObjectSpecification objectSpec;
         if (FreeStandingList.class.isAssignableFrom(cls)) {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/classsubstitutor/ClassSubstitutor.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
index ea28d71..2a40440 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/classsubstitutor/ClassSubstitutor.java
@@ -22,6 +22,7 @@ package org.apache.isis.metamodel.specloader.classsubstitutor;
 import java.util.Set;
 
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.commons.internal.base._Blackhole;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.metamodel.commons.ClassUtil;
 
@@ -78,14 +79,21 @@ public class ClassSubstitutor {
         if (ClassUtil.directlyImplements(cls, ProxyEnhanced.class)) {
             return getClass(cls.getSuperclass());
         }
+        
+        try {
+            // guard against cannot introspect
+            _Blackhole.consume(cls.getMethods());    
+        } catch (Throwable e) {
+            classesToIgnore.add(cls);
+            return null;
+        }
+        
         return cls;
     }
 
+    // -- HELPERS
 
-
-    // -- helpers
-
-    private final Set<Class<?>> classesToIgnore = _Sets.newHashSet();
+    private final Set<Class<?>> classesToIgnore = _Sets.newConcurrentHashSet();
     private final Set<String> classNamesToIgnore = _Sets.newHashSet();
 
 
@@ -123,7 +131,4 @@ public class ClassSubstitutor {
         }
     }
 
-
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionContributee.java
index 1b557ae..cb950c3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -25,7 +25,6 @@ import java.util.stream.Stream;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
@@ -163,64 +162,64 @@ public class ObjectActionContributee extends ObjectActionDefault implements Cont
     }
 
     @Override
-    public ObjectAdapter[] getDefaults(final ObjectAdapter target) {
-        final ObjectAdapter[] contributorDefaults = serviceAction.getDefaults(getServiceAdapter());
-        return removeElementFromArray(contributorDefaults, contributeeParam, new ObjectAdapter[]{});
+    public ManagedObject[] getDefaults(final ManagedObject target) {
+        final ManagedObject[] contributorDefaults = serviceAction.getDefaults(getServiceAdapter());
+        return removeElementFromArray(contributorDefaults, contributeeParam, new ManagedObject[]{});
     }
 
     @Override
-    public ObjectAdapter[][] getChoices(
-            final ObjectAdapter target,
+    public ManagedObject[][] getChoices(
+            final ManagedObject target,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        final ObjectAdapter[][] serviceChoices = serviceAction.getChoices(getServiceAdapter(),
+        final ManagedObject[][] serviceChoices = serviceAction.getChoices(getServiceAdapter(),
                 interactionInitiatedBy);
-        return removeElementFromArray(serviceChoices, contributeeParam, new ObjectAdapter[][]{});
+        return removeElementFromArray(serviceChoices, contributeeParam, new ManagedObject[][]{});
     }
 
     @Override
     public Consent isProposedArgumentSetValid(
-            final ObjectAdapter contributee,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject contributee,
+            final ManagedObject[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        final ObjectAdapter[] serviceArguments = argsPlusContributee(contributee, proposedArguments);
+        final ManagedObject[] serviceArguments = argsPlusContributee(contributee, proposedArguments);
         return serviceAction.isProposedArgumentSetValid(getServiceAdapter(), serviceArguments, interactionInitiatedBy);
     }
 
     @Override
     public Consent isEachIndividualArgumentValid(
-            final ObjectAdapter contributee,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject contributee,
+            final ManagedObject[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        final ObjectAdapter[] serviceArguments = argsPlusContributee(contributee, proposedArguments);
+        final ManagedObject[] serviceArguments = argsPlusContributee(contributee, proposedArguments);
         return serviceAction.isEachIndividualArgumentValid(getServiceAdapter(), serviceArguments, interactionInitiatedBy);
     }
 
     @Override
     public Consent isArgumentSetValid(
-            final ObjectAdapter contributee,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject contributee,
+            final ManagedObject[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        final ObjectAdapter[] serviceArguments = argsPlusContributee(contributee, proposedArguments);
+        final ManagedObject[] serviceArguments = argsPlusContributee(contributee, proposedArguments);
         return serviceAction.isArgumentSetValid(getServiceAdapter(), serviceArguments, interactionInitiatedBy);
     }
 
     @Override
-    public ObjectAdapter execute(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter[] argumentAdapters,
+    public ManagedObject execute(
+            final ManagedObject targetAdapter,
+            final ManagedObject mixedInAdapter,
+            final ManagedObject[] argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         setupCommand(targetAdapter, argumentAdapters);
 
-        final ObjectAdapter[] serviceArguments = argsPlusContributee(targetAdapter, argumentAdapters);
+        final ManagedObject[] serviceArguments = argsPlusContributee(targetAdapter, argumentAdapters);
         return serviceAction.executeInternal(
                 getServiceAdapter(), mixedInAdapter, serviceArguments, interactionInitiatedBy);
     }
 
 
-    private ObjectAdapter[] argsPlusContributee(final ObjectAdapter contributee, final ObjectAdapter[] arguments) {
-        return addElementToArray(arguments, contributeeParam, contributee, new ObjectAdapter[]{});
+    private ManagedObject[] argsPlusContributee(final ManagedObject contributee, final ManagedObject[] arguments) {
+        return addElementToArray(arguments, contributeeParam, contributee, new ManagedObject[]{});
     }
 
     // //////////////////////////////////////
@@ -297,7 +296,7 @@ public class ObjectActionContributee extends ObjectActionDefault implements Cont
         return list.toArray(t);
     }
 
-    public ObjectAdapter getServiceAdapter() {
+    public ManagedObject getServiceAdapter() {
         return getObjectAdapterProvider().adapterFor(servicePojo);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java
index 4c5c586..2d5a010 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -33,7 +33,6 @@ import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.commons.exceptions.UnknownTypeException;
 import org.apache.isis.commons.internal._Constants;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.consent.InteractionResultSet;
@@ -66,6 +65,8 @@ import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.schema.cmd.v1.CommandDto;
 
+import lombok.val;
+
 public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectAction {
 
     public static ActionType getType(final String typeStr) {
@@ -290,8 +291,8 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
      */
     @Override
     public Consent isProposedArgumentSetValid(
-            final ObjectAdapter targetObject,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject targetObject,
+            final ManagedObject[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final InteractionResultSet resultSet = new InteractionResultSet();
@@ -320,8 +321,8 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
      */
     @Override
     public Consent isEachIndividualArgumentValid(
-            final ObjectAdapter objectAdapter,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject objectAdapter,
+            final ManagedObject[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final InteractionResultSet resultSet = new InteractionResultSet();
@@ -332,8 +333,8 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     }
 
     private void validateArgumentsIndividually(
-            final ObjectAdapter objectAdapter,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject objectAdapter,
+            final ManagedObject[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy,
             final InteractionResultSet resultSet) {
         final List<ObjectActionParameter> actionParameters = getParameters();
@@ -363,8 +364,8 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
      */
     @Override
     public Consent isArgumentSetValid(
-            final ObjectAdapter objectAdapter,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject objectAdapter,
+            final ManagedObject[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final InteractionResultSet resultSet = new InteractionResultSet();
@@ -374,8 +375,8 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     }
 
     protected void validateArgumentSet(
-            final ObjectAdapter objectAdapter,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject objectAdapter,
+            final ManagedObject[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy,
             final InteractionResultSet resultSet) {
         final ValidityContext<?> ic = createActionInvocationInteractionContext(
@@ -384,8 +385,8 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     }
 
     ActionValidityContext createActionInvocationInteractionContext(
-            final ObjectAdapter targetObject,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject targetObject,
+            final ManagedObject[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
         return new ActionValidityContext(targetObject, this, getIdentifier(), proposedArguments,
                 interactionInitiatedBy);
@@ -396,10 +397,10 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     // -- executeWithRuleChecking, execute
 
     @Override
-    public ObjectAdapter executeWithRuleChecking(
-            final ObjectAdapter target,
-            final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter[] arguments,
+    public ManagedObject executeWithRuleChecking(
+            final ManagedObject target,
+            final ManagedObject mixedInAdapter,
+            final ManagedObject[] arguments,
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) {
 
@@ -432,10 +433,10 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
      * @param mixedInAdapter - will be null for regular actions, and for mixin actions.  When a mixin action invokes its underlying mixedIn action, then will be populated (so that the ActionDomainEvent can correctly provide the underlying mixin)
      */
     @Override
-    public ObjectAdapter execute(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter[] argumentAdapters,
+    public ManagedObject execute(
+            final ManagedObject targetAdapter,
+            final ManagedObject mixedInAdapter,
+            final ManagedObject[] argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         setupCommand(targetAdapter, argumentAdapters);
@@ -446,12 +447,14 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     /**
      * private API, called by mixins and contributees.
      */
-    public ObjectAdapter executeInternal(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter[] argumentAdapters, final InteractionInitiatedBy interactionInitiatedBy) {
-        final ActionInvocationFacet facet = getFacet(ActionInvocationFacet.class);
-        return facet.invoke(this, targetAdapter, mixedInAdapter, argumentAdapters, interactionInitiatedBy);
+    public ManagedObject executeInternal(
+            final ManagedObject targetAdapter,
+            final ManagedObject mixedInAdapter,
+            final ManagedObject[] argumentAdapters, 
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        
+        val actionInvocationFacet = getFacet(ActionInvocationFacet.class);
+        return actionInvocationFacet.invoke(this, targetAdapter, mixedInAdapter, argumentAdapters, interactionInitiatedBy);
     }
 
     protected ActionInvocationFacet getActionInvocationFacet() {
@@ -464,7 +467,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     // -- defaults
 
     @Override
-    public ObjectAdapter[] getDefaults(final ObjectAdapter target) {
+    public ManagedObject[] getDefaults(final ManagedObject target) {
 
         final int parameterCount = getParameterCount();
         final List<ObjectActionParameter> parameters = getParameters();
@@ -502,7 +505,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
             }
         }
 
-        final ObjectAdapter[] parameterDefaultAdapters = new ObjectAdapter[parameterCount];
+        final ManagedObject[] parameterDefaultAdapters = new ManagedObject[parameterCount];
         for (int i = 0; i < parameterCount; i++) {
             parameterDefaultAdapters[i] = adapterFor(parameterDefaultPojos[i]);
         }
@@ -510,11 +513,11 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
         return parameterDefaultAdapters;
     }
 
-    private ObjectAdapter adapterFor(final Object pojo) {
+    private ManagedObject adapterFor(final Object pojo) {
         return pojo == null ? null : getObjectAdapterProvider().adapterFor(pojo);
     }
 
-    private static ThreadLocal<List<ObjectAdapter>> commandTargetAdaptersHolder = new ThreadLocal<>();
+    private static ThreadLocal<List<ManagedObject>> commandTargetAdaptersHolder = new ThreadLocal<>();
 
     /**
      * A horrible hack to be able to persist a number of adapters in the command object.
@@ -523,7 +526,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
      *     What is really needed is to be able to invoke an action on a number of adapters all together.
      * </p>
      */
-    public static <T> T withTargetAdapters(final List<ObjectAdapter> adapters, final Callable<T> callable) {
+    public static <T> T withTargetAdapters(final List<ManagedObject> adapters, final Callable<T> callable) {
         commandTargetAdaptersHolder.set(adapters);
         try {
             return callable.call();
@@ -540,8 +543,8 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     // -- choices
 
     @Override
-    public ObjectAdapter[][] getChoices(
-            final ObjectAdapter target,
+    public ManagedObject[][] getChoices(
+            final ManagedObject target,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final int parameterCount = getParameterCount();
@@ -579,19 +582,19 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
             }
         }
 
-        final ObjectAdapter[][] parameterChoicesAdapters = new ObjectAdapter[parameterCount][];
+        final ManagedObject[][] parameterChoicesAdapters = new ManagedObject[parameterCount][];
         for (int i = 0; i < parameterCount; i++) {
             final ObjectSpecification paramSpec = parameters.get(i).getSpecification();
 
             if (parameterChoicesPojos[i] != null && parameterChoicesPojos[i].length > 0) {
                 ObjectActionParameterAbstract.checkChoicesOrAutoCompleteType(
                         getSpecificationLoader(), parameterChoicesPojos[i], paramSpec);
-                parameterChoicesAdapters[i] = new ObjectAdapter[parameterChoicesPojos[i].length];
+                parameterChoicesAdapters[i] = new ManagedObject[parameterChoicesPojos[i].length];
                 for (int j = 0; j < parameterChoicesPojos[i].length; j++) {
                     parameterChoicesAdapters[i][j] = adapterFor(parameterChoicesPojos[i][j]);
                 }
             } else if (paramSpec.isNotCollection()) {
-                parameterChoicesAdapters[i] = new ObjectAdapter[0];
+                parameterChoicesAdapters[i] = new ManagedObject[0];
             } else {
                 throw new UnknownTypeException(paramSpec);
             }
@@ -634,8 +637,8 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
      * {@link ObjectActionMixedIn mixed-in} and {@link ObjectActionContributee contributee}).
      */
     public void setupCommand(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter[] argumentAdapters) {
+            final ManagedObject targetAdapter,
+            final ManagedObject[] argumentAdapters) {
 
         setupCommandTarget(targetAdapter, argumentAdapters);
         setupCommandMemberIdentifier();
@@ -643,34 +646,34 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     }
 
     private void setupCommandTarget(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter[] argumentAdapters) {
+            final ManagedObject targetAdapter,
+            final ManagedObject[] argumentAdapters) {
 
         final String arguments = CommandUtil.argDescriptionFor(this, argumentAdapters);
-        setupCommandTarget(targetAdapter, arguments);
+        super.setupCommandTarget(targetAdapter, arguments);
     }
 
     private void setupCommandMementoAndExecutionContext(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter[] argumentAdapters) {
+            final ManagedObject targetAdapter,
+            final ManagedObject[] argumentAdapters) {
 
-        final CommandDtoServiceInternal commandDtoServiceInternal = getCommandDtoService();
-        final List<ObjectAdapter> commandTargetAdapters =
+        val commandDtoServiceInternal = getCommandDtoService();
+        final List<ManagedObject> commandTargetAdapters =
                 commandTargetAdaptersHolder.get() != null
                 ? commandTargetAdaptersHolder.get()
                         : Collections.singletonList(targetAdapter);
 
-                final CommandDto dto = commandDtoServiceInternal.asCommandDto(
+                val commandDto = commandDtoServiceInternal.asCommandDto(
                         commandTargetAdapters, this, argumentAdapters);
 
-                setupCommandDtoAndExecutionContext(dto);
+                setupCommandDtoAndExecutionContext(commandDto);
 
     }
 
     // -- toString
 
     @Override
-    public ObjectAdapter realTargetAdapter(final ObjectAdapter targetAdapter) {
+    public ManagedObject realTargetAdapter(final ManagedObject targetAdapter) {
         return targetAdapter;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 5123df8..5bfef89 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -24,7 +24,6 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.consent.InteractionResultSet;
@@ -127,7 +126,7 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
     }
 
     @Override
-    public ObjectAdapter realTargetAdapter(final ObjectAdapter targetAdapter) {
+    public ManagedObject realTargetAdapter(final ManagedObject targetAdapter) {
         return mixinAdapterFor(targetAdapter);
     }
 
@@ -165,7 +164,7 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) {
 
-        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
+        final ManagedObject mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         final VisibilityContext<?> ic =
                 mixinAction.createVisibleInteractionContext(mixinAdapter, interactionInitiatedBy, where);
         ic.setMixedIn(mixedInAdapter);
@@ -177,7 +176,7 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
             final ManagedObject mixedInAdapter,
             final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
 
-        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
+        final ManagedObject mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         final UsabilityContext<?> ic =
                 mixinAction.createUsableInteractionContext(mixinAdapter, interactionInitiatedBy, where);
         ic.setMixedIn(mixedInAdapter);
@@ -185,31 +184,31 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
     }
 
     @Override
-    public ObjectAdapter[] getDefaults(final ObjectAdapter mixedInAdapter) {
-        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixedInAdapter);
+    public ManagedObject[] getDefaults(final ManagedObject mixedInAdapter) {
+        final ManagedObject mixinAdapter = mixinAdapterFor(mixedInAdapter);
         return mixinAction.getDefaults(mixinAdapter);
     }
 
     @Override
-    public ObjectAdapter[][] getChoices(
-            final ObjectAdapter mixedInAdapter,
+    public ManagedObject[][] getChoices(
+            final ManagedObject mixedInAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixedInAdapter);
+        final ManagedObject mixinAdapter = mixinAdapterFor(mixedInAdapter);
         return mixinAction.getChoices(mixinAdapter, interactionInitiatedBy);
     }
 
-    protected ObjectAdapter mixinAdapterFor(final ObjectAdapter mixedInAdapter) {
+    protected ManagedObject mixinAdapterFor(final ManagedObject mixedInAdapter) {
         return mixinAdapterFor(mixinType, mixedInAdapter);
     }
 
     @Override
     protected void validateArgumentSet(
-            final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject mixedInAdapter,
+            final ManagedObject[] proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy,
             final InteractionResultSet resultSet) {
 
-        final ObjectAdapter targetObject = mixinAdapterFor(mixinType, mixedInAdapter);
+        final ManagedObject targetObject = mixinAdapterFor(mixinType, mixedInAdapter);
 
         final ValidityContext<?> ic =
                 mixinAction.createActionInvocationInteractionContext(targetObject, proposedArguments, interactionInitiatedBy);
@@ -221,15 +220,15 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
 
 
     @Override
-    public ObjectAdapter execute(
-            final ObjectAdapter target,         // will be the mixedInAdapter
-            final ObjectAdapter mixedInAdapter, // will be passed in as null
-            final ObjectAdapter[] arguments,
+    public ManagedObject execute(
+            final ManagedObject target,         // will be the mixedInAdapter
+            final ManagedObject mixedInAdapter, // will be passed in as null
+            final ManagedObject[] arguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
 
-        final ObjectAdapter targetAdapter = mixinAdapterFor(mixinType, target);
-        final ObjectAdapter actualMixedInAdapter = target;
+        final ManagedObject targetAdapter = mixinAdapterFor(mixinType, target);
+        final ManagedObject actualMixedInAdapter = target;
 
         setupCommand(actualMixedInAdapter, arguments);
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 35b42bb..34deaf7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -25,8 +25,6 @@ import java.util.function.Predicate;
 import java.util.stream.Stream;
 
 import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.query.Query;
-import org.apache.isis.applib.query.QueryFindAllInstances;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
@@ -46,7 +44,6 @@ import org.apache.isis.metamodel.facetapi.MultiTypedFacet;
 import org.apache.isis.metamodel.facets.TypedHolder;
 import org.apache.isis.metamodel.facets.all.describedas.DescribedAsFacet;
 import org.apache.isis.metamodel.facets.all.named.NamedFacet;
-import org.apache.isis.metamodel.facets.object.choices.ChoicesFacetFromBoundedAbstract;
 import org.apache.isis.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.metamodel.facets.param.autocomplete.ActionParameterAutoCompleteFacet;
 import org.apache.isis.metamodel.facets.param.autocomplete.MinLengthUtil;
@@ -97,7 +94,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
      * {@link ObjectAdapter}.
      */
     @Override
-    public ObjectAdapter get(final ObjectAdapter owner, final InteractionInitiatedBy interactionInitiatedBy) {
+    public ManagedObject get(final ManagedObject owner, final InteractionInitiatedBy interactionInitiatedBy) {
         throw _Exceptions.unexpectedCodeReach();
         //FIXME[ISIS-1976] marked for removal (must be dead code, since MutableProposedHolder has no implementation)
         //        final MutableProposedHolder proposedHolder = getProposedHolder(owner);
@@ -296,12 +293,12 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
     }
 
     @Override
-    public ObjectAdapter[] getAutoComplete(
-            final ObjectAdapter adapter,
+    public ManagedObject[] getAutoComplete(
+            final ManagedObject adapter,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        final List<ObjectAdapter> adapters = _Lists.newArrayList();
+        final List<ManagedObject> adapters = _Lists.newArrayList();
         final ActionParameterAutoCompleteFacet facet = getFacet(ActionParameterAutoCompleteFacet.class);
 
         if (facet != null) {
@@ -318,7 +315,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
             addAllInstancesForType(adapters);
         }
          */
-        return adapters.toArray(new ObjectAdapter[0]);
+        return adapters.toArray(new ManagedObject[0]);
     }
 
     @Override
@@ -338,23 +335,23 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
     }
 
     @Override
-    public ObjectAdapter[] getChoices(
-            final ObjectAdapter adapter,
-            final ObjectAdapter[] argumentsIfAvailable,
+    public ManagedObject[] getChoices(
+            final ManagedObject adapter,
+            final ManagedObject[] argumentsIfAvailable,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        final List<ObjectAdapter> argListIfAvailable = ListExtensions.mutableCopy(argumentsIfAvailable);
+        final List<ManagedObject> argListIfAvailable = ListExtensions.mutableCopy(argumentsIfAvailable);
 
-        final ObjectAdapter target = targetForDefaultOrChoices(adapter);
-        final List<ObjectAdapter> args = argsForDefaultOrChoices(adapter, argListIfAvailable);
+        final ManagedObject target = targetForDefaultOrChoices(adapter);
+        final List<ManagedObject> args = argsForDefaultOrChoices(adapter, argListIfAvailable);
 
         return findChoices(target, args, interactionInitiatedBy);
     }
 
-    private ObjectAdapter[] findChoices(
-            final ObjectAdapter target,
-            final List<ObjectAdapter> args,
+    private ManagedObject[] findChoices(
+            final ManagedObject target,
+            final List<ManagedObject> args,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        final List<ObjectAdapter> adapters = _Lists.newArrayList();
+        final List<ManagedObject> adapters = _Lists.newArrayList();
         final ActionParameterChoicesFacet facet = getFacet(ActionParameterChoicesFacet.class);
 
         if (facet != null) {
@@ -362,7 +359,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
                     interactionInitiatedBy);
             checkChoicesOrAutoCompleteType(getSpecificationLoader(), choices, getSpecification());
             for (final Object choice : choices) {
-                ObjectAdapter adapter = choice != null? getObjectAdapterProvider().adapterFor(choice) : null;
+                ManagedObject adapter = choice != null? getObjectAdapterProvider().adapterFor(choice) : null;
                 adapters.add(adapter);
             }
         }
@@ -372,7 +369,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
             addAllInstancesForType(adapters);
         }
          */
-        return adapters.toArray(new ObjectAdapter[adapters.size()]);
+        return adapters.toArray(new ManagedObject[adapters.size()]);
     }
 
 
@@ -380,20 +377,20 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
     // -- Defaults
 
     @Override
-    public ObjectAdapter getDefault(
-            final ObjectAdapter adapter,
-            final ObjectAdapter[] argumentsIfAvailable,
+    public ManagedObject getDefault(
+            final ManagedObject adapter,
+            final ManagedObject[] argumentsIfAvailable,
             final Integer paramNumUpdated) {
 
-        final ObjectAdapter target = targetForDefaultOrChoices(adapter);
-        final List<ObjectAdapter> args = argsForDefaultOrChoices(adapter, argumentsIfAvailable != null ? Arrays.asList(argumentsIfAvailable) : null);
+        final ManagedObject target = targetForDefaultOrChoices(adapter);
+        final List<ManagedObject> args = argsForDefaultOrChoices(adapter, argumentsIfAvailable != null ? Arrays.asList(argumentsIfAvailable) : null);
 
         return findDefault(target, args, paramNumUpdated);
     }
 
-    private ObjectAdapter findDefault(
-            final ObjectAdapter target,
-            final List<ObjectAdapter> args,
+    private ManagedObject findDefault(
+            final ManagedObject target,
+            final List<ManagedObject> args,
             final Integer paramNumUpdated) {
         final ActionParameterDefaultsFacet defaultsFacet = getFacet(ActionParameterDefaultsFacet.class);
         if (defaultsFacet != null) {
@@ -411,16 +408,16 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
     /**
      * Hook method; {@link ObjectActionParameterContributee contributed action parameter}s override.
      */
-    protected ObjectAdapter targetForDefaultOrChoices(final ObjectAdapter adapter) {
+    protected ManagedObject targetForDefaultOrChoices(final ManagedObject adapter) {
         return adapter;
     }
 
     /**
      * Hook method; {@link ObjectActionParameterContributee contributed action parameter}s override.
      */
-    protected List<ObjectAdapter> argsForDefaultOrChoices(
-            final ObjectAdapter adapter,
-            final List<ObjectAdapter> argumentsIfAvailable) {
+    protected List<ManagedObject> argsForDefaultOrChoices(
+            final ManagedObject adapter,
+            final List<ManagedObject> argumentsIfAvailable) {
         return argumentsIfAvailable;
     }
 
@@ -457,34 +454,23 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
         }
     }
 
-    /**
-     * unused - incorporated into the {@link ChoicesFacetFromBoundedAbstract}
-     */
-    @SuppressWarnings("unused")
-    private <T> void addAllInstancesForType(final List<ObjectAdapter> adapters) {
-        final Query<T> query = new QueryFindAllInstances<T>(getSpecification().getFullIdentifier());
-        final List<ObjectAdapter> allInstancesAdapter = getObjectPersistor().allMatchingQuery(query);
-        for (final ObjectAdapter choiceAdapter : allInstancesAdapter) {
-            adapters.add(choiceAdapter);
-        }
-    }
-
-
+  
     //region > Visibility
 
     private ActionArgVisibilityContext createArgumentVisibilityContext(
-            final ObjectAdapter objectAdapter,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject objectAdapter,
+            final ManagedObject[] proposedArguments,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         return new ActionArgVisibilityContext(
                 objectAdapter, parentAction, getIdentifier(), proposedArguments, position, interactionInitiatedBy);
     }
 
     @Override
     public Consent isVisible(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter[] pendingArguments,
+            final ManagedObject targetAdapter,
+            final ManagedObject[] pendingArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final VisibilityContext<?> ic = createArgumentVisibilityContext(
@@ -500,18 +486,19 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
     //region > Usability
 
     private ActionArgUsabilityContext createArgumentUsabilityContext(
-            final ObjectAdapter objectAdapter,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject objectAdapter,
+            final ManagedObject[] proposedArguments,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         return new ActionArgUsabilityContext(
                 objectAdapter, parentAction, getIdentifier(), proposedArguments, position, interactionInitiatedBy);
     }
 
     @Override
     public Consent isUsable(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter[] pendingArguments,
+            final ManagedObject targetAdapter,
+            final ManagedObject[] pendingArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final UsabilityContext<?> ic = createArgumentUsabilityContext(
@@ -529,21 +516,22 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
 
     @Override
     public ActionArgValidityContext createProposedArgumentInteractionContext(
-            final ObjectAdapter objectAdapter,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject objectAdapter,
+            final ManagedObject[] proposedArguments,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         return new ActionArgValidityContext(
                 objectAdapter, parentAction, getIdentifier(), proposedArguments, position, interactionInitiatedBy);
     }
 
     @Override
     public String isValid(
-            final ObjectAdapter objectAdapter,
+            final ManagedObject objectAdapter,
             final Object proposedValue,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        ObjectAdapter proposedValueAdapter = null;
+        ManagedObject proposedValueAdapter = null;
         ObjectSpecification proposedValueSpec;
         if(proposedValue != null) {
             proposedValueAdapter = getObjectAdapterProvider().adapterFor(proposedValue);
@@ -556,7 +544,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
             }
         }
 
-        final ObjectAdapter[] argumentAdapters = arguments(proposedValueAdapter);
+        final ManagedObject[] argumentAdapters = arguments(proposedValueAdapter);
         final ValidityContext<?> ic = createProposedArgumentInteractionContext(
                 objectAdapter, argumentAdapters, getNumber(), interactionInitiatedBy
                 );
@@ -576,9 +564,9 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
      * to do this in two passes, one to build up the argument set as a single
      * unit, and then validate each in turn.
      */
-    private ObjectAdapter[] arguments(final ObjectAdapter proposedValue) {
+    private ManagedObject[] arguments(final ManagedObject proposedValue) {
         final int parameterCount = getAction().getParameterCount();
-        final ObjectAdapter[] arguments = new ObjectAdapter[parameterCount];
+        final ManagedObject[] arguments = new ManagedObject[parameterCount];
         arguments[getNumber()] = proposedValue;
         return arguments;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
index 4c06006..63d84ab 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
@@ -20,10 +20,10 @@ package org.apache.isis.metamodel.specloader.specimpl;
 
 import java.util.List;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.commons.ListExtensions;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FeatureType;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
 
 public abstract class ObjectActionParameterContributeeAbstract
@@ -47,29 +47,29 @@ implements ObjectActionParameterContributee {
     }
 
     @Override
-    public ObjectAdapter[] getAutoComplete(
-            final ObjectAdapter adapter,
+    public ManagedObject[] getAutoComplete(
+            final ManagedObject adapter,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
         return serviceActionParameter.getAutoComplete(getServiceAdapter(), searchArg,
                 interactionInitiatedBy);
     }
 
-    protected ObjectAdapter getServiceAdapter() {
+    protected ManagedObject getServiceAdapter() {
         return getObjectAdapterProvider().adapterFor(servicePojo);
     }
 
     @Override
-    protected ObjectAdapter targetForDefaultOrChoices(final ObjectAdapter adapter) {
+    protected ManagedObject targetForDefaultOrChoices(final ManagedObject adapter) {
         return getServiceAdapter();
     }
 
     @Override
-    protected List<ObjectAdapter> argsForDefaultOrChoices(
-            final ObjectAdapter contributee,
-            final List<ObjectAdapter> argumentsIfAvailable) {
+    protected List<ManagedObject> argsForDefaultOrChoices(
+            final ManagedObject contributee,
+            final List<ManagedObject> argumentsIfAvailable) {
 
-        final List<ObjectAdapter> suppliedArgs = ListExtensions.mutableCopy(argumentsIfAvailable);
+        final List<ManagedObject> suppliedArgs = ListExtensions.mutableCopy(argumentsIfAvailable);
 
         final int contributeeParam = contributeeAction.getContributeeParam();
         ListExtensions.insert(suppliedArgs, contributeeParam, contributee);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
index 2c494d1..c3626ec 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
@@ -18,10 +18,10 @@
  */
 package org.apache.isis.metamodel.specloader.specimpl;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.interactions.ActionArgValidityContext;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
 
 public abstract class ObjectActionParameterMixedInAbstract
@@ -40,8 +40,8 @@ implements ObjectActionParameterMixedIn {
     }
 
     @Override
-    public ObjectAdapter[] getAutoComplete(
-            final ObjectAdapter mixedInAdapter,
+    public ManagedObject[] getAutoComplete(
+            final ManagedObject mixedInAdapter,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
         return mixinParameter.getAutoComplete(
@@ -50,22 +50,22 @@ implements ObjectActionParameterMixedIn {
     }
 
     @Override
-    protected ObjectAdapter targetForDefaultOrChoices(final ObjectAdapter mixedInAdapter) {
+    protected ManagedObject targetForDefaultOrChoices(final ManagedObject mixedInAdapter) {
         return mixinAdapterFor(mixedInAdapter);
     }
 
-    private ObjectAdapter mixinAdapterFor(final ObjectAdapter mixedInAdapter) {
+    private ManagedObject mixinAdapterFor(final ManagedObject mixedInAdapter) {
         return mixedInAction.mixinAdapterFor(mixedInAdapter);
     }
 
     @Override
     public ActionArgValidityContext createProposedArgumentInteractionContext(
-            final ObjectAdapter mixedInAdapter,
-            final ObjectAdapter[] proposedArguments,
+            final ManagedObject mixedInAdapter,
+            final ManagedObject[] proposedArguments,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        final ObjectAdapter targetObject = mixinAdapterFor(mixedInAdapter);
+        final ManagedObject targetObject = mixinAdapterFor(mixedInAdapter);
 
         final ActionArgValidityContext actionArgValidityContext = new ActionArgValidityContext(
                 targetObject, mixedInAction.mixinAction, getIdentifier(), proposedArguments, position, interactionInitiatedBy);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
index bb3b66f..d64e11d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
@@ -19,7 +19,6 @@
 
 package org.apache.isis.metamodel.specloader.specimpl;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facets.FacetedMethod;
@@ -27,6 +26,7 @@ import org.apache.isis.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
 import org.apache.isis.metamodel.facets.properties.choices.PropertyChoicesFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
 
@@ -80,7 +80,7 @@ public abstract class ObjectAssociationAbstract extends ObjectMemberAbstract imp
     }
 
     @Override
-    public abstract boolean isEmpty(final ObjectAdapter adapter, final InteractionInitiatedBy interactionInitiatedBy);
+    public abstract boolean isEmpty(final ManagedObject adapter, final InteractionInitiatedBy interactionInitiatedBy);
 
     @Override
     public boolean isOneToOneAssociation() {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index 8aec764..82c60ad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -28,7 +28,6 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.command.CommandContext;
 import org.apache.isis.metamodel.MetaModelContext;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.commons.StringExtensions;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
@@ -60,6 +59,8 @@ import org.apache.isis.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.schema.cmd.v1.CommandDto;
 import org.apache.isis.schema.utils.CommandDtoUtils;
 
+import lombok.val;
+
 public abstract class ObjectMemberAbstract implements ObjectMember, MetaModelContext.Delegating {
 
     protected static ObjectSpecification specificationOf(final Class<?> type) {
@@ -317,13 +318,14 @@ public abstract class ObjectMemberAbstract implements ObjectMember, MetaModelCon
     /**
      * For mixins
      */
-    ObjectAdapter mixinAdapterFor(
+    ManagedObject mixinAdapterFor(
             final Class<?> mixinType,
             final ManagedObject mixedInAdapter) {
-        final ObjectSpecification objectSpecification = getSpecificationLoader().loadSpecification(mixinType);
-        final MixinFacet mixinFacet = objectSpecification.getFacet(MixinFacet.class);
-        final Object mixinPojo = mixinFacet.instantiate(mixedInAdapter.getPojo());
-        return getObjectAdapterProvider().adapterFor(mixinPojo);
+        
+        val spec = getSpecificationLoader().loadSpecification(mixinType);
+        val mixinFacet = spec.getFacet(MixinFacet.class);
+        val mixinPojo = mixinFacet.instantiate(mixedInAdapter.getPojo());
+        return ManagedObject.of(spec, mixinPojo);
     }
 
     static String determineNameFrom(final ObjectAction mixinAction) {
@@ -388,7 +390,7 @@ public abstract class ObjectMemberAbstract implements ObjectMember, MetaModelCon
     // -- command (setup)
 
 
-    protected void setupCommandTarget(final ObjectAdapter targetAdapter, final String arguments) {
+    protected void setupCommandTarget(final ManagedObject targetAdapter, final String arguments) {
         final CommandContext commandContext = getCommandContext();
         final Command command = commandContext.getCommand();
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
index e8a54bb..eb43bce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
@@ -24,7 +24,6 @@ import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.internal.ioc.BeanAdapter;
 import org.apache.isis.metamodel.MetaModelContext;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -44,7 +43,8 @@ import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
 
-public class OneToManyAssociationContributee extends OneToManyAssociationDefault implements ContributeeMember {
+public class OneToManyAssociationContributee 
+extends OneToManyAssociationDefault implements ContributeeMember {
 
     private final BeanAdapter serviceBean;
     private final ObjectAction serviceAction;
@@ -118,8 +118,11 @@ public class OneToManyAssociationContributee extends OneToManyAssociationDefault
     }
 
     @Override
-    public ObjectAdapter get(final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
-        return serviceAction.execute(getServiceAdapter(), null, new ObjectAdapter[]{ownerAdapter}, interactionInitiatedBy);
+    public ManagedObject get(
+            final ManagedObject ownerAdapter, 
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        
+        return serviceAction.execute(getServiceAdapter(), null, new ManagedObject[]{ownerAdapter}, interactionInitiatedBy);
     }
 
     @Override
@@ -172,7 +175,7 @@ public class OneToManyAssociationContributee extends OneToManyAssociationDefault
         return facetHolder;
     }
 
-    private ObjectAdapter getServiceAdapter() {
+    private ManagedObject getServiceAdapter() {
         return getObjectAdapterProvider().adapterForBean(serviceBean);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
index e4570cc..7b4eebc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
@@ -21,7 +21,6 @@ package org.apache.isis.metamodel.specloader.specimpl;
 
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.exceptions.IsisException;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.commons.ToString;
 import org.apache.isis.metamodel.consent.Consent;
@@ -50,7 +49,8 @@ import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
 
 import lombok.val;
 
-public class OneToManyAssociationDefault extends ObjectAssociationAbstract implements OneToManyAssociation {
+public class OneToManyAssociationDefault 
+extends ObjectAssociationAbstract implements OneToManyAssociation {
 
     public OneToManyAssociationDefault(final FacetedMethod facetedMethod) {
         this(facetedMethod, specificationOf(facetedMethod.getType()));
@@ -93,23 +93,23 @@ public class OneToManyAssociationDefault extends ObjectAssociationAbstract imple
     // Not API
     private ValidityContext<?> createValidateAddInteractionContext(
             final InteractionInitiatedBy interactionInitiatedBy,
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter proposedToAddAdapter) {
+            final ManagedObject ownerAdapter,
+            final ManagedObject proposedToAddAdapter) {
         return new CollectionAddToContext(ownerAdapter, getIdentifier(), proposedToAddAdapter,
                 interactionInitiatedBy);
     }
 
     @Override
     public Consent isValidToAdd(
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter proposedToAddAdapter,
+            final ManagedObject ownerAdapter,
+            final ManagedObject proposedToAddAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         return isValidToAddResult(ownerAdapter, proposedToAddAdapter, interactionInitiatedBy).createConsent();
     }
 
     private InteractionResult isValidToAddResult(
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter proposedToAddAdapter,
+            final ManagedObject ownerAdapter,
+            final ManagedObject proposedToAddAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         final ValidityContext<?> validityContext = createValidateAddInteractionContext(
                 interactionInitiatedBy, ownerAdapter, proposedToAddAdapter);
@@ -120,8 +120,8 @@ public class OneToManyAssociationDefault extends ObjectAssociationAbstract imple
 
     // -- Validate Remove
     private ValidityContext<?> createValidateRemoveInteractionContext(
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter proposedToRemoveAdapter,
+            final ManagedObject ownerAdapter,
+            final ManagedObject proposedToRemoveAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         return new CollectionRemoveFromContext(
                 ownerAdapter, getIdentifier(), proposedToRemoveAdapter, interactionInitiatedBy
@@ -130,16 +130,16 @@ public class OneToManyAssociationDefault extends ObjectAssociationAbstract imple
 
     @Override
     public Consent isValidToRemove(
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter proposedToRemoveAdapter,
+            final ManagedObject ownerAdapter,
+            final ManagedObject proposedToRemoveAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         return isValidToRemoveResult(
                 ownerAdapter, proposedToRemoveAdapter, interactionInitiatedBy).createConsent();
     }
 
     private InteractionResult isValidToRemoveResult(
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter proposedToRemoveAdapter,
+            final ManagedObject ownerAdapter,
+            final ManagedObject proposedToRemoveAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         final ValidityContext<?> validityContext = createValidateRemoveInteractionContext(
                 ownerAdapter, proposedToRemoveAdapter, interactionInitiatedBy);
@@ -155,8 +155,8 @@ public class OneToManyAssociationDefault extends ObjectAssociationAbstract imple
     // -- get, isEmpty, add, clear
 
     @Override
-    public ObjectAdapter get(
-            final ObjectAdapter ownerAdapter,
+    public ManagedObject get(
+            final ManagedObject ownerAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final PropertyOrCollectionAccessorFacet accessor = getFacet(PropertyOrCollectionAccessorFacet.class);
@@ -165,16 +165,16 @@ public class OneToManyAssociationDefault extends ObjectAssociationAbstract imple
             return null;
         }
 
-        val parentOid = (RootOid)ownerAdapter.getOid();
+        val parentOid = (RootOid)ManagedObject.promote(ownerAdapter).getOid();
         val newAdapter = getObjectAdapterProvider().adapterForCollection(collection, parentOid, this);
         return newAdapter.injectServices(getServiceInjector());
     }
 
     @Override
-    public boolean isEmpty(final ObjectAdapter parentAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
+    public boolean isEmpty(final ManagedObject parentAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
         // REVIEW should we be able to determine if a collection is empty
         // without loading it?
-        final ObjectAdapter collection = get(parentAdapter, interactionInitiatedBy);
+        final ManagedObject collection = get(parentAdapter, interactionInitiatedBy);
         final CollectionFacet facet = CollectionFacet.Utils.getCollectionFacetFromSpec(collection);
         return facet.size(collection) == 0;
     }
@@ -183,27 +183,29 @@ public class OneToManyAssociationDefault extends ObjectAssociationAbstract imple
 
     @Override
     public void addElement(
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter referencedAdapter,
+            final ManagedObject ownerAdapter,
+            final ManagedObject referencedAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         if (referencedAdapter == null) {
             throw new IllegalArgumentException("Can't use null to add an item to a collection");
         }
         if (readWrite()) {
-            if (ownerAdapter.isRepresentingPersistent() && referencedAdapter.isTransient()) {
+            
+            //if(ownerAdapter.getSpecification().isEntity() && !referencedAdapter.getSpecification().isEntity()) {
+            if (ManagedObject.promote(ownerAdapter).isRepresentingPersistent() && ManagedObject.promote(referencedAdapter).isTransient()) {
                 throw new IsisException("can't set a reference to a transient object from a persistent one: "
                         + ownerAdapter.titleString(null)
                         + " (persistent) -> " + referencedAdapter.titleString() + " (transient)");
             }
-            final CollectionAddToFacet facet = getFacet(CollectionAddToFacet.class);
+            val facet = getFacet(CollectionAddToFacet.class);
             facet.add(ownerAdapter, referencedAdapter, interactionInitiatedBy);
         }
     }
 
     @Override
     public void removeElement(
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter referencedAdapter,
+            final ManagedObject ownerAdapter,
+            final ManagedObject referencedAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         if (referencedAdapter == null) {
             throw new IllegalArgumentException("element should not be null");
@@ -214,40 +216,29 @@ public class OneToManyAssociationDefault extends ObjectAssociationAbstract imple
         }
     }
 
-    public void removeAllAssociations(final ObjectAdapter ownerAdapter) {
+    public void removeAllAssociations(final ManagedObject ownerAdapter) {
         final CollectionClearFacet facet = getFacet(CollectionClearFacet.class);
         facet.clear(ownerAdapter);
     }
 
-    @Override
-    public void clearCollection(final ObjectAdapter ownerAdapter) {
-        if (readWrite()) {
-            final CollectionClearFacet facet = getFacet(CollectionClearFacet.class);
-            facet.clear(ownerAdapter);
-        }
-    }
-
-
-
     // -- defaults
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter ownerAdapter) {
+    public ManagedObject getDefault(final ManagedObject ownerAdapter) {
         return null;
     }
 
     @Override
-    public void toDefault(final ObjectAdapter ownerAdapter) {
+    public void toDefault(final ManagedObject ownerAdapter) {
     }
 
 
-
     // -- choices & autoComplete
 
     @Override
-    public ObjectAdapter[] getChoices(
-            final ObjectAdapter ownerAdapter,
+    public ManagedObject[] getChoices(
+            final ManagedObject ownerAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        return new ObjectAdapter[0];
+        return new ManagedObject[0];
     }
 
     @Override
@@ -262,11 +253,11 @@ public class OneToManyAssociationDefault extends ObjectAssociationAbstract imple
     }
 
     @Override
-    public ObjectAdapter[] getAutoComplete(
-            ObjectAdapter object,
+    public ManagedObject[] getAutoComplete(
+            ManagedObject object,
             String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        return new ObjectAdapter[0];
+        return new ManagedObject[0];
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
index b8bb2e5..873dd4d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@ -23,7 +23,6 @@ import java.util.List;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -137,15 +136,16 @@ public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault imp
     }
 
     @Override
-    public ObjectAdapter get(
-            final ObjectAdapter mixedInAdapter,
+    public ManagedObject get(
+            final ManagedObject mixedInAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
+        
+        final ManagedObject mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         return getPublishingServiceInternal().withPublishingSuppressed(
-                new PublishingServiceInternal.Block<ObjectAdapter>() {
-                    @Override public ObjectAdapter exec() {
+                new PublishingServiceInternal.Block<ManagedObject>() {
+                    @Override public ManagedObject exec() {
                         return mixinAction.executeInternal(
-                                mixinAdapter, mixedInAdapter, new ObjectAdapter[0], interactionInitiatedBy);
+                                mixinAdapter, mixedInAdapter, new ManagedObject[0], interactionInitiatedBy);
                     }
                 });
     }
@@ -171,7 +171,7 @@ public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault imp
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) {
 
-        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
+        final ManagedObject mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         final VisibilityContext<?> ic =
                 mixinAction.createVisibleInteractionContext(mixinAdapter, interactionInitiatedBy, where);
         ic.setMixedIn(mixedInAdapter);
@@ -184,7 +184,7 @@ public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault imp
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) {
 
-        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
+        final ManagedObject mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         final UsabilityContext<?> ic =
                 mixinAction.createUsableInteractionContext(
                         mixinAdapter, interactionInitiatedBy, where);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneActionParameterDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneActionParameterDefault.java
index a1515b1..37cbdd6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneActionParameterDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneActionParameterDefault.java
@@ -23,7 +23,8 @@ import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facets.TypedHolder;
 import org.apache.isis.metamodel.spec.feature.OneToOneActionParameter;
 
-public class OneToOneActionParameterDefault extends ObjectActionParameterAbstract implements OneToOneActionParameter {
+public class OneToOneActionParameterDefault 
+extends ObjectActionParameterAbstract implements OneToOneActionParameter {
 
     public OneToOneActionParameterDefault(
             final int index,
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
index 1de3c55..96c66e3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
@@ -102,8 +102,12 @@ public class OneToOneAssociationContributee extends OneToOneAssociationDefault i
     }
 
     @Override
-    public ObjectAdapter get(final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
-        return serviceAction.execute(getServiceAdapter(), null, new ObjectAdapter[]{ownerAdapter}, interactionInitiatedBy);
+    public ManagedObject get(
+            final ManagedObject ownerAdapter, 
+            final InteractionInitiatedBy interactionInitiatedBy) {
+        
+        return serviceAction.execute(
+                getServiceAdapter(), null, new ManagedObject[]{ownerAdapter}, interactionInitiatedBy);
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
index 69618e1..9e56ed3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
@@ -27,7 +27,6 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.commons.exceptions.IsisException;
 import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.commons.ToString;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
@@ -57,6 +56,8 @@ import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.schema.cmd.v1.CommandDto;
 
+import lombok.val;
+
 public class OneToOneAssociationDefault extends ObjectAssociationAbstract implements OneToOneAssociation {
 
     public OneToOneAssociationDefault(final FacetedMethod facetedMethod) {
@@ -121,7 +122,10 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
 
     // -- init
     @Override
-    public void initAssociation(final ObjectAdapter ownerAdapter, final ObjectAdapter referencedAdapter) {
+    public void initAssociation(
+            final ManagedObject ownerAdapter, 
+            final ManagedObject referencedAdapter) {
+        
         final PropertyInitializationFacet initializerFacet = getFacet(PropertyInitializationFacet.class);
         if (initializerFacet != null) {
             initializerFacet.initProperty(ownerAdapter, referencedAdapter);
@@ -133,8 +137,8 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
     // -- Access (get, isEmpty)
 
     @Override
-    public ObjectAdapter get(
-            final ObjectAdapter ownerAdapter,
+    public ManagedObject get(
+            final ManagedObject ownerAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final PropertyOrCollectionAccessorFacet facet = getFacet(PropertyOrCollectionAccessorFacet.class);
@@ -166,15 +170,15 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
     }
 
     @Override
-    public boolean isEmpty(final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
+    public boolean isEmpty(final ManagedObject ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
         return get(ownerAdapter, interactionInitiatedBy) == null;
     }
 
     // -- Set
     @Override
     public void set(
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter newReferencedAdapter) {
+            final ManagedObject ownerAdapter,
+            final ManagedObject newReferencedAdapter) {
         set(ownerAdapter, newReferencedAdapter, InteractionInitiatedBy.USER);
     }
 
@@ -184,8 +188,8 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
      */
     @Override
     public void set(
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter newReferencedAdapter,
+            final ManagedObject ownerAdapter,
+            final ManagedObject newReferencedAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         setupCommand(ownerAdapter, newReferencedAdapter);
@@ -194,8 +198,8 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
     }
 
     private void setInternal(
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter newReferencedAdapter,
+            final ManagedObject ownerAdapter,
+            final ManagedObject newReferencedAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
         if (newReferencedAdapter != null) {
             setValue(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
@@ -205,8 +209,8 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
     }
 
     private void setValue(
-            final ObjectAdapter ownerAdapter,
-            final ObjectAdapter newReferencedAdapter,
+            final ManagedObject ownerAdapter,
+            final ManagedObject newReferencedAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final PropertySetterFacet setterFacet = getFacet(PropertySetterFacet.class);
@@ -214,9 +218,9 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
             return;
         }
 
-        if (    ownerAdapter.isRepresentingPersistent() &&
+        if (    ManagedObject.promote(ownerAdapter).isRepresentingPersistent() &&
                 newReferencedAdapter != null &&
-                newReferencedAdapter.isTransient() &&
+                ManagedObject.promote(newReferencedAdapter).isTransient() &&
                 !newReferencedAdapter.getSpecification().isParented()) {
 
             // TODO: I've never seen this exception, and in any case DataNucleus supports persistence-by-reachability; so probably not required
@@ -227,8 +231,9 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
     }
 
     private void clearValue(
-            final ObjectAdapter ownerAdapter,
+            final ManagedObject ownerAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
+        
         final PropertyClearFacet facet = getFacet(PropertyClearFacet.class);
         facet.clearProperty(this, ownerAdapter, interactionInitiatedBy);
     }
@@ -237,7 +242,7 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
 
     // -- defaults
     @Override
-    public ObjectAdapter getDefault(final ObjectAdapter ownerAdapter) {
+    public ManagedObject getDefault(final ManagedObject ownerAdapter) {
         PropertyDefaultFacet propertyDefaultFacet = getFacet(PropertyDefaultFacet.class);
         // if no default on the association, attempt to find a default on the
         // specification (eg an int should
@@ -252,14 +257,14 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
     }
 
     @Override
-    public void toDefault(final ObjectAdapter ownerAdapter) {
+    public void toDefault(final ManagedObject ownerAdapter) {
         // don't default optional fields
         final MandatoryFacet mandatoryFacet = getFacet(MandatoryFacet.class);
         if (mandatoryFacet != null && mandatoryFacet.isInvertedSemantics()) {
             return;
         }
 
-        final ObjectAdapter defaultValue = getDefault(ownerAdapter);
+        final ManagedObject defaultValue = getDefault(ownerAdapter);
         if (defaultValue != null) {
             initAssociation(ownerAdapter, defaultValue);
         }
@@ -274,11 +279,11 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
     }
 
     @Override
-    public ObjectAdapter[] getChoices(
-            final ObjectAdapter ownerAdapter,
+    public ManagedObject[] getChoices(
+            final ManagedObject ownerAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        final PropertyChoicesFacet propertyChoicesFacet = getFacet(PropertyChoicesFacet.class);
+        val propertyChoicesFacet = getFacet(PropertyChoicesFacet.class);
         if (propertyChoicesFacet == null) {
             return null;
         }
@@ -287,10 +292,10 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
                 ownerAdapter,
                 interactionInitiatedBy);
 
-        List<ObjectAdapter> adapters = _NullSafe.stream(pojoOptions)
+        List<ManagedObject> adapters = _NullSafe.stream(pojoOptions)
                 .map(  getObjectAdapterProvider()::adapterFor )
                 .collect(Collectors.toList());
-        return adapters.toArray(new ObjectAdapter[]{});
+        return adapters.toArray(new ManagedObject[]{});
     }
 
 
@@ -301,15 +306,15 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
     }
 
     @Override
-    public ObjectAdapter[] getAutoComplete(
-            final ObjectAdapter ownerAdapter,
+    public ManagedObject[] getAutoComplete(
+            final ManagedObject ownerAdapter,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
         final PropertyAutoCompleteFacet propertyAutoCompleteFacet = getFacet(PropertyAutoCompleteFacet.class);
         final Object[] pojoOptions = propertyAutoCompleteFacet.autoComplete(ownerAdapter, searchArg,
                 interactionInitiatedBy);
         if (pojoOptions != null) {
-            final ObjectAdapter[] options = new ObjectAdapter[pojoOptions.length];
+            final ManagedObject[] options = new ManagedObject[pojoOptions.length];
             for (int i = 0; i < options.length; i++) {
                 options[i] = getObjectAdapterProvider().adapterFor(pojoOptions[i]);
             }
@@ -330,8 +335,8 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
      * Internal API
      */
     public void setupCommand(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter valueAdapterOrNull) {
+            final ManagedObject targetAdapter,
+            final ManagedObject valueAdapterOrNull) {
 
         setupCommandTarget(targetAdapter, valueAdapterOrNull);
         setupCommandMemberIdentifier();
@@ -339,16 +344,16 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
     }
 
     private void setupCommandTarget(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter valueAdapter) {
+            final ManagedObject targetAdapter,
+            final ManagedObject valueAdapter) {
 
         final String arguments = CommandUtil.argDescriptionFor(valueAdapter);
         setupCommandTarget(targetAdapter, arguments);
     }
 
     private void setupCommandMementoAndExecutionContext(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter valueAdapterOrNull) {
+            final ManagedObject targetAdapter,
+            final ManagedObject valueAdapterOrNull) {
 
         final CommandDtoServiceInternal commandDtoServiceInternal = getCommandDtoService();
         final CommandDto dto = commandDtoServiceInternal.asCommandDto(
@@ -372,8 +377,4 @@ public class OneToOneAssociationDefault extends ObjectAssociationAbstract implem
     }
 
 
-
-
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
index 32d52d5..e19e52f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
@@ -41,6 +41,8 @@ import org.apache.isis.metamodel.services.publishing.PublishingServiceInternal;
 import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 
+import lombok.val;
+
 public class OneToOneAssociationMixedIn extends OneToOneAssociationDefault implements MixedInMember {
 
     /**
@@ -125,18 +127,18 @@ public class OneToOneAssociationMixedIn extends OneToOneAssociationDefault imple
     }
 
     @Override
-    public ObjectAdapter get(
-            final ObjectAdapter mixedInAdapter,
+    public ManagedObject get(
+            final ManagedObject mixedInAdapter,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
-        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
+        val mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
 
         return getPublishingServiceInternal().withPublishingSuppressed(
-                new PublishingServiceInternal.Block<ObjectAdapter>(){
+                new PublishingServiceInternal.Block<ManagedObject>(){
                     @Override
-                    public ObjectAdapter exec() {
+                    public ManagedObject exec() {
                         return mixinAction.executeInternal(
-                                mixinAdapter, mixedInAdapter, new ObjectAdapter[0], interactionInitiatedBy);
+                                mixinAdapter, mixedInAdapter, new ManagedObject[0], interactionInitiatedBy);
                     }
                 }
                 );
@@ -163,7 +165,7 @@ public class OneToOneAssociationMixedIn extends OneToOneAssociationDefault imple
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) {
 
-        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
+        val mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         final VisibilityContext<?> ic =
                 mixinAction.createVisibleInteractionContext(mixinAdapter, interactionInitiatedBy, where);
         ic.setMixedIn(mixedInAdapter);
@@ -176,7 +178,7 @@ public class OneToOneAssociationMixedIn extends OneToOneAssociationDefault imple
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) {
 
-        final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
+        val mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         final UsabilityContext<?> ic =
                 mixinAction.createUsableInteractionContext(mixinAdapter, interactionInitiatedBy, where);
         ic.setMixedIn(mixedInAdapter);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/IsisSchema.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/IsisSchema.java
index 1572d4e..c5c593b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/IsisSchema.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/IsisSchema.java
@@ -22,8 +22,8 @@ package org.apache.isis.metamodel.util.snapshot;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Utility methods relating to the Isis meta model.
@@ -171,7 +171,7 @@ final class IsisSchema {
      * Additionally, if the <code>addOids</code> parameter is set, also adds
      * <code>&lt;oids&gt;</code> child elements.
      */
-    void setIsisCollection(final Element element, final String prefix, final String fullyQualifiedClassName, final ObjectAdapter collection) {
+    void setIsisCollection(final Element element, final String prefix, final String fullyQualifiedClassName, final ManagedObject collection) {
         setAttribute(element, "feature", FEATURE_COLLECTION);
         setAttribute(element, "type", prefix + ":" + fullyQualifiedClassName);
         final CollectionFacet facet = CollectionFacet.Utils.getCollectionFacetFromSpec(collection);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/Place.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/Place.java
index c7eb0f2..b58ad83 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/Place.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/Place.java
@@ -21,7 +21,7 @@ package org.apache.isis.metamodel.util.snapshot;
 
 import org.w3c.dom.Element;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Represents a place in the graph to be navigated; really just wraps an object
@@ -33,10 +33,10 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
  */
 final class Place {
     private static final String USER_DATA_XSD_KEY = "XSD";
-    private final ObjectAdapter object;
+    private final ManagedObject object;
     private final Element element;
 
-    Place(final ObjectAdapter object, final Element element) {
+    Place(final ManagedObject object, final Element element) {
         this.object = object;
         this.element = element;
     }
@@ -45,7 +45,7 @@ final class Place {
         return element;
     }
 
-    public ObjectAdapter getObject() {
+    public ManagedObject getObject() {
         return object;
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/XmlSnapshot.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/XmlSnapshot.java
index c06936c..3319233 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/XmlSnapshot.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/util/snapshot/XmlSnapshot.java
@@ -57,6 +57,7 @@ import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.metamodel.facets.object.parseable.ParseableFacet;
 import org.apache.isis.metamodel.facets.object.value.ValueFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.ObjectSpecificationException;
 import org.apache.isis.metamodel.spec.feature.Contributed;
@@ -261,7 +262,7 @@ public class XmlSnapshot implements Snapshot {
      * using appendXml passing in a rootElement and a new schemaManager - see
      * {@link XmlSnapshot}).
      */
-    private Element appendXml(final Place parentPlace, final ObjectAdapter childObject) {
+    private Element appendXml(final Place parentPlace, final ManagedObject childObject) {
 
         if (log.isDebugEnabled()) {
             log.debug("appendXml({}{})", log("parentPlace", parentPlace), andlog("childObj", childObject));
@@ -295,7 +296,7 @@ public class XmlSnapshot implements Snapshot {
     }
 
     private boolean appendXmlThenIncludeRemaining(
-            final Place parentPlace, final ObjectAdapter referencedObject,
+            final Place parentPlace, final ManagedObject referencedObject,
             final Vector<String> fieldNames, final String annotation) {
 
         if (log.isDebugEnabled()) {
@@ -334,7 +335,7 @@ public class XmlSnapshot implements Snapshot {
         return v;
     }
 
-    public ObjectAdapter getObject() {
+    public ManagedObject getObject() {
         return rootPlace.getObject();
     }
 
@@ -420,7 +421,7 @@ public class XmlSnapshot implements Snapshot {
                     andlog("annotation", annotation));
         }
 
-        final ObjectAdapter object = place.getObject();
+        final ManagedObject object = place.getObject();
         final Element xmlElement = place.getXmlElement();
 
         // we use a copy of the path so that we can safely traverse collections
@@ -496,7 +497,7 @@ public class XmlSnapshot implements Snapshot {
             }
 
             final OneToOneAssociation oneToOneAssociation = ((OneToOneAssociation) field);
-            final ObjectAdapter referencedObject = oneToOneAssociation.get(fieldPlace.getObject(),
+            final ManagedObject referencedObject = oneToOneAssociation.get(fieldPlace.getObject(),
                     InteractionInitiatedBy.FRAMEWORK);
 
             if (referencedObject == null) {
@@ -517,7 +518,7 @@ public class XmlSnapshot implements Snapshot {
             }
 
             final OneToManyAssociation oneToManyAssociation = (OneToManyAssociation) field;
-            final ObjectAdapter collection = oneToManyAssociation.get(fieldPlace.getObject(),
+            final ManagedObject collection = oneToManyAssociation.get(fieldPlace.getObject(),
                     InteractionInitiatedBy.FRAMEWORK);
 
             if (log.isDebugEnabled()) {
@@ -620,7 +621,7 @@ public class XmlSnapshot implements Snapshot {
         return childElement;
     }
 
-    Place objectToElement(final ObjectAdapter adapter) {
+    Place objectToElement(final ManagedObject adapter) {
 
         if (log.isDebugEnabled()) {
             log.debug("objectToElement({})", log("object", adapter));
@@ -710,7 +711,7 @@ public class XmlSnapshot implements Snapshot {
                 // locally
                 // scoped name
 
-                ObjectAdapter value;
+                ManagedObject value;
                 try {
                     value = valueAssociation.get(adapter, InteractionInitiatedBy.FRAMEWORK);
 
@@ -761,7 +762,7 @@ public class XmlSnapshot implements Snapshot {
                 // scoped
                 // name
 
-                ObjectAdapter referencedObjectAdapter;
+                ManagedObject referencedObjectAdapter;
 
                 try {
                     referencedObjectAdapter = oneToOneAssociation.get(adapter, InteractionInitiatedBy.FRAMEWORK);
@@ -799,7 +800,7 @@ public class XmlSnapshot implements Snapshot {
                 // scoped
                 // name
 
-                ObjectAdapter collection;
+                ManagedObject collection;
                 try {
                     collection = oneToManyAssociation.get(adapter, InteractionInitiatedBy.FRAMEWORK);
                     final ObjectSpecification referencedTypeNos = oneToManyAssociation.getSpecification();
@@ -847,9 +848,9 @@ public class XmlSnapshot implements Snapshot {
         return place;
     }
 
-    private final Map<ObjectAdapter, String> viewModelFakeOids = _Maps.newHashMap();
+    private final Map<ManagedObject, String> viewModelFakeOids = _Maps.newHashMap();
 
-    private String oidAsString(final ObjectAdapter adapter) {
+    private String oidAsString(final ManagedObject adapter) {
         if (adapter.getPojo() instanceof ViewModel) {
             // return a fake oid for view models;
             // a snapshot may be being used to create the memento/OID
@@ -860,7 +861,7 @@ public class XmlSnapshot implements Snapshot {
             }
             return fakeOid;
         } else {
-            return adapter.getOid().enString();
+            return ManagedObject.promote(adapter).getOid().enString();
         }
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
index eee0f78..963b4c6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/collections/collection/CollectionAnnotationFacetFactoryTest.java
@@ -29,7 +29,6 @@ import org.junit.Test;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.domain.CollectionDomainEvent;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -121,8 +120,8 @@ public class CollectionAnnotationFacetFactoryTest extends AbstractFacetFactoryJU
             FacetUtil.addFacet(new CollectionAddToFacetAbstract(holder) {
                 @Override
                 public void add(
-                        final ObjectAdapter inObject,
-                        final ObjectAdapter value,
+                        final ManagedObject inObject,
+                        final ManagedObject value,
                         final InteractionInitiatedBy interactionInitiatedBy) {
                 }
             });
@@ -132,8 +131,8 @@ public class CollectionAnnotationFacetFactoryTest extends AbstractFacetFactoryJU
             FacetUtil.addFacet(new CollectionRemoveFromFacetAbstract(holder) {
                 @Override
                 public void remove(
-                        final ObjectAdapter inObject,
-                        final ObjectAdapter element,
+                        final ManagedObject inObject,
+                        final ManagedObject element,
                         final InteractionInitiatedBy interactionInitiatedBy) {
                 }
             });
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
index 2b8cda5..1393dfa 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/properties/property/PropertyAnnotationFacetFactoryTest.java
@@ -36,7 +36,6 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.domain.PropertyDomainEvent;
 import org.apache.isis.applib.spec.Specification;
 import org.apache.isis.config.internal._Config;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -191,8 +190,9 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
             FacetUtil.addFacet(new PropertySetterFacetAbstract(holder) {
                 @Override
                 public void setProperty(
-                        final OneToOneAssociation owningAssociation, final ObjectAdapter inObject,
-                        final ObjectAdapter value,
+                        final OneToOneAssociation owningAssociation, 
+                        final ManagedObject inObject,
+                        final ManagedObject value,
                         final InteractionInitiatedBy interactionInitiatedBy) {
                 }
             });
@@ -202,7 +202,8 @@ public class PropertyAnnotationFacetFactoryTest extends AbstractFacetFactoryJUni
             FacetUtil.addFacet(new PropertyClearFacetAbstract(holder) {
                 @Override
                 public void clearProperty(
-                        final OneToOneAssociation owningProperty, final ObjectAdapter targetAdapter,
+                        final OneToOneAssociation owningProperty, 
+                        final ManagedObject targetAdapter,
                         final InteractionInitiatedBy interactionInitiatedBy) {
                 }
             });
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
index 8f2c75c..30bfd42 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
@@ -33,6 +33,7 @@ import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.facets.TypedHolder;
 import org.apache.isis.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.unittestsupport.jmocking.JUnitRuleMockery2;
@@ -69,7 +70,7 @@ public class ObjectActionParameterAbstractTest_getId_and_getName {
         private ObjectSpecification objectSpec;
 
         @Override
-        public ObjectAdapter get(final ObjectAdapter owner, final InteractionInitiatedBy interactionInitiatedBy) {
+        public ObjectAdapter get(final ManagedObject owner, final InteractionInitiatedBy interactionInitiatedBy) {
             return null;
         }
 
@@ -80,7 +81,7 @@ public class ObjectActionParameterAbstractTest_getId_and_getName {
 
         @Override
         public String isValid(
-                final ObjectAdapter objectAdapter,
+                final ManagedObject objectAdapter,
                 final Object proposedValue,
                 final InteractionInitiatedBy interactionInitiatedBy) {
             return null;
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
index 5c8b84a..994c9e0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
@@ -27,7 +27,6 @@ import org.junit.Test;
 
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FeatureType;
@@ -90,31 +89,31 @@ public class ObjectAssociationAbstractTest {
                 facetedMethod, FeatureType.PROPERTY, objectSpecification) {
 
             @Override
-            public ObjectAdapter get(
-                    final ObjectAdapter fromObject,
+            public ManagedObject get(
+                    final ManagedObject fromObject,
                     final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
             }
 
             @Override
-            public boolean isEmpty(final ObjectAdapter adapter, final InteractionInitiatedBy interactionInitiatedBy) {
+            public boolean isEmpty(final ManagedObject adapter, final InteractionInitiatedBy interactionInitiatedBy) {
                 return false;
             }
 
             @Override
-            public ObjectAdapter[] getChoices(
-                    final ObjectAdapter object,
+            public ManagedObject[] getChoices(
+                    final ManagedObject object,
                     final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
             }
 
             @Override
-            public ObjectAdapter getDefault(final ObjectAdapter adapter) {
+            public ManagedObject getDefault(final ManagedObject adapter) {
                 return null;
             }
 
             @Override
-            public void toDefault(final ObjectAdapter target) {
+            public void toDefault(final ManagedObject target) {
             }
 
             @Override
@@ -142,8 +141,8 @@ public class ObjectAssociationAbstractTest {
             }
 
             @Override
-            public ObjectAdapter[] getAutoComplete(
-                    ObjectAdapter object,
+            public ManagedObject[] getAutoComplete(
+                    ManagedObject object,
                     String searchArg,
                     final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
index 3a0f88d..841f9f6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
@@ -92,30 +92,30 @@ public class ObjectAssociationAbstractTest_alwaysHidden {
 
             @Override
             public ObjectAdapter get(
-                    final ObjectAdapter fromObject,
+                    final ManagedObject fromObject,
                     final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
             }
 
             @Override
-            public boolean isEmpty(final ObjectAdapter adapter, final InteractionInitiatedBy interactionInitiatedBy) {
+            public boolean isEmpty(final ManagedObject adapter, final InteractionInitiatedBy interactionInitiatedBy) {
                 return false;
             }
 
             @Override
-            public ObjectAdapter[] getChoices(
-                    final ObjectAdapter object,
+            public ManagedObject[] getChoices(
+                    final ManagedObject object,
                     final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
             }
 
             @Override
-            public ObjectAdapter getDefault(final ObjectAdapter adapter) {
+            public ManagedObject getDefault(final ManagedObject adapter) {
                 return null;
             }
 
             @Override
-            public void toDefault(final ObjectAdapter target) {
+            public void toDefault(final ManagedObject target) {
             }
 
             @Override
@@ -143,8 +143,8 @@ public class ObjectAssociationAbstractTest_alwaysHidden {
             }
 
             @Override
-            public ObjectAdapter[] getAutoComplete(
-                    final ObjectAdapter object,
+            public ManagedObject[] getAutoComplete(
+                    final ManagedObject object,
                     final String searchArg,
                     final InteractionInitiatedBy interactionInitiatedBy) {
                 return null;
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/background/CommandExecutorServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/background/CommandExecutorServiceDefault.java
index a1da625..14f140b 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/background/CommandExecutorServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/background/CommandExecutorServiceDefault.java
@@ -45,6 +45,7 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.actions.action.invocation.CommandUtil;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.Contributed;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
@@ -154,7 +155,7 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
                         // we pass 'null' for the mixedInAdapter; if this action _is_ a mixin then
                         // it will switch the targetAdapter to be the mixedInAdapter transparently
                         final ObjectAdapter[] argAdapters = argAdaptersFor(actionDto);
-                        final ObjectAdapter resultAdapter = objectAction.execute(
+                        final ManagedObject resultAdapter = objectAction.execute(
                                 targetAdapter, null, argAdapters, InteractionInitiatedBy.FRAMEWORK);
 
                         // flush any Isis PersistenceCommands pending
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandDtoServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandDtoServiceInternalDefault.java
index 263b6f7..fafb725 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandDtoServiceInternalDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandDtoServiceInternalDefault.java
@@ -31,11 +31,11 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.facets.actions.action.invocation.CommandUtil;
 import org.apache.isis.metamodel.services.command.CommandDtoServiceInternal;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
@@ -54,6 +54,8 @@ import org.apache.isis.schema.common.v1.ValueWithTypeDto;
 import org.apache.isis.schema.utils.CommandDtoUtils;
 import org.apache.isis.schema.utils.CommonDtoUtils;
 
+import lombok.val;
+
 @DomainService(
         nature = NatureOfService.DOMAIN
         )
@@ -68,9 +70,9 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
 
     @Override
     public CommandDto asCommandDto(
-            final List<ObjectAdapter> targetAdapters,
+            final List<ManagedObject> targetAdapters,
             final ObjectAction objectAction,
-            final ObjectAdapter[] argAdapters) {
+            final ManagedObject[] argAdapters) {
 
         final CommandDto dto = asCommandDto(targetAdapters);
 
@@ -85,9 +87,9 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
 
     @Override
     public CommandDto asCommandDto(
-            final List<ObjectAdapter> targetAdapters,
+            final List<ManagedObject> targetAdapters,
             final OneToOneAssociation property,
-            final ObjectAdapter valueAdapterOrNull) {
+            final ManagedObject valueAdapterOrNull) {
 
         final CommandDto dto = asCommandDto(targetAdapters);
 
@@ -100,7 +102,7 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
         return dto;
     }
 
-    private CommandDto asCommandDto(final List<ObjectAdapter> targetAdapters) {
+    private CommandDto asCommandDto(final List<ManagedObject> targetAdapters) {
         final CommandDto dto = new CommandDto();
         dto.setMajorVersion("1");
         dto.setMinorVersion("0");
@@ -108,8 +110,8 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
         String transactionId = determineTransactionId().toString();
         dto.setTransactionId(transactionId);
 
-        for (ObjectAdapter targetAdapter : targetAdapters) {
-            final RootOid rootOid = (RootOid) targetAdapter.getOid();
+        for (val targetAdapter : targetAdapters) {
+            final RootOid rootOid = (RootOid) ManagedObject.promote(targetAdapter).getOid();
             final Bookmark bookmark = rootOid.asBookmark();
             final OidsDto targets = CommandDtoUtils.targetsFor(dto);
             targets.getOid().add(bookmark.toOidDto());
@@ -130,7 +132,8 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
     public void addActionArgs(
             final ObjectAction objectAction,
             final ActionDto actionDto,
-            final ObjectAdapter[] argAdapters) {
+            final ManagedObject[] argAdapters) {
+        
         final String actionId = CommandUtil.memberIdentifierFor(objectAction);
         final ObjectSpecification onType = objectAction.getOnType();
         final String objectType = onType.getSpecId().asString();
@@ -143,7 +146,7 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
             final ObjectActionParameter actionParameter = actionParameters.get(paramNum);
             final String parameterName = actionParameter.getName();
             final Class<?> paramType = actionParameter.getSpecification().getCorrespondingClass();
-            final ObjectAdapter argAdapter = argAdapters[paramNum];
+            final ManagedObject argAdapter = argAdapters[paramNum];
             final Object arg = argAdapter != null? argAdapter.getPojo(): null;
             final ParamsDto parameters = CommandDtoUtils.parametersFor(actionDto);
             final List<ParamDto> parameterList = parameters.getParameter();
@@ -158,7 +161,7 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
     public void addPropertyValue(
             final OneToOneAssociation property,
             final PropertyDto propertyDto,
-            final ObjectAdapter valueAdapter) {
+            final ManagedObject valueAdapter) {
 
         final String actionIdentifier = CommandUtil.memberIdentifierFor(property);
         final ObjectSpecification onType = property.getOnType();
@@ -171,7 +174,7 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
         final Class<?> valueType = valueSpec.getCorrespondingClass();
 
         final ValueWithTypeDto newValue = CommonDtoUtils.newValueWithTypeDto(
-                valueType, ObjectAdapter.Util.unwrapPojo(valueAdapter), bookmarkService);
+                valueType, ManagedObject.unwrapPojo(valueAdapter), bookmarkService);
         propertyDto.setNewValue(newValue);
     }
 
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/ixn/InteractionDtoServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
index 7630193..797b7d4 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
@@ -33,6 +33,7 @@ import org.apache.isis.applib.services.user.UserService;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.services.command.CommandDtoServiceInternal;
 import org.apache.isis.metamodel.services.ixn.InteractionDtoServiceInternal;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
@@ -54,8 +55,8 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
     @Override
     public ActionInvocationDto asActionInvocationDto(
             final ObjectAction objectAction,
-            final ObjectAdapter targetAdapter,
-            final List<ObjectAdapter> argumentAdapters) {
+            final ManagedObject targetAdapter,
+            final List<ManagedObject> argumentAdapters) {
 
         final Interaction interaction = interactionContext.getInteraction();
         final int nextEventSequence = interaction.next(Interaction.Sequence.INTERACTION.id());
@@ -99,8 +100,8 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
     @Override
     public PropertyEditDto asPropertyEditDto(
             final OneToOneAssociation property,
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter newValueAdapterIfAny) {
+            final ManagedObject targetAdapter,
+            final ManagedObject newValueAdapterIfAny) {
 
         final Interaction interaction = interactionContext.getInteraction();
 
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java
index 1117a78..e2fd992 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/Memento.java
@@ -34,6 +34,7 @@ import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.metamodel.facets.properties.update.modify.PropertySetterFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecId;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.Contributed;
@@ -41,6 +42,7 @@ import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.runtime.system.context.IsisContext;
 
+import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 /**
@@ -126,15 +128,15 @@ public class Memento implements Serializable {
     private void createAssociationData(final ObjectAdapter adapter, final ObjectData data, final ObjectAssociation objectAssoc) {
         Object assocData;
         if (objectAssoc.isOneToManyAssociation()) {
-            final ObjectAdapter collAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
-            assocData = createCollectionData(collAdapter);
+            val collAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
+            assocData = createCollectionData(ManagedObject.promote(collAdapter));
         } else if (objectAssoc.getSpecification().isEncodeable()) {
             final EncodableFacet facet = objectAssoc.getSpecification().getFacet(EncodableFacet.class);
-            final ObjectAdapter value = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
+            val value = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
             assocData = facet.toEncodedString(value);
         } else if (objectAssoc.isOneToOneAssociation()) {
-            final ObjectAdapter referencedAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
-            assocData = createReferenceData(referencedAdapter);
+            val referencedAdapter = objectAssoc.get(adapter, InteractionInitiatedBy.FRAMEWORK);
+            assocData = createReferenceData(ManagedObject.promote(referencedAdapter));
         } else {
             throw new UnknownTypeException(objectAssoc);
         }
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
index f065700..7693a9f 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/persistence/adaptermanager/ObjectAdapterContext_MementoSupport.java
@@ -34,6 +34,7 @@ import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
 import org.apache.isis.metamodel.facets.properties.update.modify.PropertySetterFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.Contributed;
 import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
@@ -48,6 +49,7 @@ import org.apache.isis.runtime.system.persistence.adaptermanager.ObjectAdapterCo
 
 import static org.apache.isis.commons.internal.functions._Predicates.not;
 
+import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 /**
@@ -213,8 +215,8 @@ class ObjectAdapterContext_MementoSupport implements MementoRecreateObjectSuppor
             final OneToManyAssociation otma, 
             final CollectionData collectionData) {
 
-        final ObjectAdapter collection = otma.get(objectAdapter, InteractionInitiatedBy.FRAMEWORK);
-        final Set<ObjectAdapter> original = CollectionFacet.Utils.streamAdapters(collection)
+        val collection = otma.get(objectAdapter, InteractionInitiatedBy.FRAMEWORK);
+        final Set<ObjectAdapter> original = CollectionFacet.Utils.streamAdapters(ManagedObject.promote(collection))
                 .collect(Collectors.toCollection(LinkedHashSet::new));
         final Set<ObjectAdapter> incoming = collectionData.streamElements()
                 .map(this::recreateReference)
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/AdapterAndProperty.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/AdapterAndProperty.java
index 61cd306..0be7b07 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/AdapterAndProperty.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/transaction/AdapterAndProperty.java
@@ -24,6 +24,8 @@ import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
 
+import lombok.val;
+
 public class AdapterAndProperty {
 
     private final ObjectAdapter objectAdapter;
@@ -100,7 +102,7 @@ public class AdapterAndProperty {
     }
 
     Object getPropertyValue() {
-        ObjectAdapter referencedAdapter = property.get(objectAdapter, InteractionInitiatedBy.FRAMEWORK);
+        val referencedAdapter = property.get(objectAdapter, InteractionInitiatedBy.FRAMEWORK);
         return referencedAdapter == null ? null : referencedAdapter.getPojo();
     }
 
diff --git a/core/runtime/src/test/java/org/apache/isis/runtime/system/OneToManyAssociationDefaultTest.java b/core/runtime/src/test/java/org/apache/isis/runtime/system/OneToManyAssociationDefaultTest.java
index 7d00f1f..d9d2b87 100644
--- a/core/runtime/src/test/java/org/apache/isis/runtime/system/OneToManyAssociationDefaultTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/runtime/system/OneToManyAssociationDefaultTest.java
@@ -35,6 +35,7 @@ import org.apache.isis.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionAddToFacet;
 import org.apache.isis.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
 import org.apache.isis.metamodel.services.persistsession.PersistenceSessionServiceInternal;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
@@ -131,9 +132,15 @@ public class OneToManyAssociationDefaultTest {
                 oneOf(mockPeer).containsFacet(NotPersistedFacet.class);
                 will(returnValue(false));
 
+//                oneOf(mockOwnerAdapter).promote();
+//                will(returnValue(mockOwnerAdapter));
+                
                 oneOf(mockOwnerAdapter).isRepresentingPersistent();
                 will(returnValue(true));
 
+//                oneOf(mockAssociatedAdapter).promote();
+//                will(returnValue(mockAssociatedAdapter));
+                
                 oneOf(mockAssociatedAdapter).isTransient();
                 will(returnValue(false));
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index a5cd158..ca83ea0 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -28,6 +28,7 @@ import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacet;
 import org.apache.isis.metamodel.facets.object.title.TitleFacet;
 import org.apache.isis.metamodel.services.ServiceUtil;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.Contributed;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
@@ -443,14 +444,14 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
     //
     // ///////////////////////////////////////////////////////////////////
 
-    public static Object valueOrRef(final RendererContext resourceContext, final ObjectAdapter objectAdapter, final ObjectSpecification objectSpec) {
-        if(objectAdapter.isValue()) {
+    public static Object valueOrRef(final RendererContext resourceContext, final ManagedObject objectAdapter, final ObjectSpecification objectSpec) {
+        if(ManagedObject.promote(objectAdapter).isValue()) {
             String format = null; // TODO
             return JsonValueEncoder.asObject(objectAdapter, format);
         }
         final TitleFacet titleFacet = objectSpec.getFacet(TitleFacet.class);
         final String title = titleFacet.title(objectAdapter);
-        return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.VALUE, objectAdapter).withTitle(title).build();
+        return DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.VALUE, ManagedObject.promote(objectAdapter)).withTitle(title).build();
     }
 
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
index 87fe803..ae6f930 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
@@ -40,6 +40,7 @@ import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.metamodel.facets.object.parseable.TextEntryParseException;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecId;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.runtime.system.context.IsisContext;
@@ -87,7 +88,7 @@ public final class JsonValueEncoder {
             return value;
         }
 
-        public Object asObject(ObjectAdapter objectAdapter, String format) {
+        public Object asObject(ManagedObject objectAdapter, String format) {
             return objectAdapter.getPojo();
         }
     }
@@ -796,7 +797,7 @@ public final class JsonValueEncoder {
         }
     }
 
-    public static Object asObject(final ObjectAdapter objectAdapter, final String format) {
+    public static Object asObject(final ManagedObject objectAdapter, final String format) {
         if (objectAdapter == null) {
             throw new IllegalArgumentException("objectAdapter cannot be null");
         }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
index e9a7a22..86ba3d6 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
@@ -30,6 +30,7 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
@@ -179,12 +180,12 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
     private Object choicesFor(
             final ObjectActionParameter param,
             final InteractionInitiatedBy interactionInitiatedBy) {
-        final ObjectAdapter[] choiceAdapters = param.getChoices(objectAdapter, null, interactionInitiatedBy);
+        final ManagedObject[] choiceAdapters = param.getChoices(objectAdapter, null, interactionInitiatedBy);
         if (choiceAdapters == null || choiceAdapters.length == 0) {
             return null;
         }
         final List<Object> list = _Lists.newArrayList();
-        for (final ObjectAdapter choiceAdapter : choiceAdapters) {
+        for (final ManagedObject choiceAdapter : choiceAdapters) {
             // REVIEW: previously was using the spec of the parameter, but think instead it should be the spec of the adapter itself
             // final ObjectSpecification choiceSpec = param.getSpecification();
             final ObjectSpecification choiceSpec = choiceAdapter.getSpecification();
@@ -194,7 +195,7 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
     }
 
     private Object defaultFor(final ObjectActionParameter param) {
-        final ObjectAdapter defaultAdapter = param.getDefault(objectAdapter, null, null);
+        final ManagedObject defaultAdapter = param.getDefault(objectAdapter, null, null);
         if (defaultAdapter == null) {
             return null;
         }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
index 9a3dce8..64e7237 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
@@ -28,6 +28,7 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.collections.collection.defaultview.DefaultViewFacet;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
@@ -37,6 +38,8 @@ import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
 import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.CollectionDescriptionReprRenderer;
 
+import lombok.val;
+
 public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRenderer<ObjectCollectionReprRenderer, OneToManyAssociation> {
 
     public ObjectCollectionReprRenderer(
@@ -84,7 +87,7 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
     // ///////////////////////////////////////////////////
 
     private void addValue(final LinkFollowSpecs linkFollower) {
-        final ObjectAdapter valueAdapter = objectMember.get(objectAdapter, getInteractionInitiatedBy());
+        val valueAdapter = objectMember.get(objectAdapter, getInteractionInitiatedBy());
         if (valueAdapter == null) {
             return;
         }
@@ -92,16 +95,17 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
         final LinkFollowSpecs followHref = linkFollower.follow("href");
         boolean eagerlyRender = rendererContext.honorUiHints() && renderEagerly(valueAdapter) || !followHref.isTerminated();
 
-        final Stream<ObjectAdapter> elementAdapters = CollectionFacet.Utils.streamAdapters(valueAdapter);
+        final Stream<ManagedObject> elementAdapters = CollectionFacet.Utils.streamAdapters(valueAdapter);
 
         final List<JsonRepresentation> list = _Lists.newArrayList();
 
         elementAdapters.forEach(elementAdapter->{
-            final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer.newLinkToBuilder(rendererContext, Rel.VALUE, elementAdapter);
+            final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer
+                    .newLinkToBuilder(rendererContext, Rel.VALUE, ManagedObject.promote(elementAdapter));
             if(eagerlyRender) {
                 final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), followHref, JsonRepresentation.newMap()
                         );
-                renderer.with(elementAdapter);
+                renderer.with(ManagedObject.promote(elementAdapter));
                 if(mode.isEventSerialization()) {
                     renderer.asEventSerialization();
                 }
@@ -115,8 +119,8 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
         representation.mapPut("value", list);
     }
 
-    private boolean renderEagerly(ObjectAdapter valueAdapter) {
-        return renderEagerly() && rendererContext.canEagerlyRender(valueAdapter);
+    private boolean renderEagerly(ManagedObject valueAdapter) {
+        return renderEagerly() && rendererContext.canEagerlyRender(ManagedObject.promote(valueAdapter));
     }
 
     // ///////////////////////////////////////////////////
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
index b00d355..5d5995a 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
@@ -26,7 +26,6 @@ import com.fasterxml.jackson.databind.node.NullNode;
 
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.collections.collection.defaultview.DefaultViewFacet;
@@ -34,6 +33,7 @@ import org.apache.isis.metamodel.facets.object.title.TitleFacet;
 import org.apache.isis.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
 import org.apache.isis.metamodel.facets.value.biginteger.BigIntegerValueFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
@@ -44,6 +44,8 @@ import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
 import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
 import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.PropertyDescriptionReprRenderer;
 
+import lombok.val;
+
 public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer<ObjectPropertyReprRenderer, OneToOneAssociation> {
 
     public ObjectPropertyReprRenderer(
@@ -84,12 +86,12 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
     // ///////////////////////////////////////////////////
 
     private Object addValue(final LinkFollowSpecs linkFollower) {
-        final ObjectAdapter valueAdapter = objectMember.get(objectAdapter, getInteractionInitiatedBy());
+        val valueAdapter = objectMember.get(objectAdapter, getInteractionInitiatedBy());
 
         // use the runtime type if we have a value, else the compile time type of the member otherwise
-        final ObjectSpecification spec = valueAdapter != null? valueAdapter.getSpecification(): objectMember.getSpecification();
+        val spec = valueAdapter != null? valueAdapter.getSpecification(): objectMember.getSpecification();
 
-        final ValueFacet valueFacet = spec.getFacet(ValueFacet.class);
+        val valueFacet = spec.getFacet(ValueFacet.class);
         if (valueFacet != null) {
             String format = null;
             final Class<?> specClass = spec.getCorrespondingClass();
@@ -114,11 +116,12 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
                     format = String.format("big-integer");
                 }
             }
-            return JsonValueEncoder.appendValueAndFormat(spec, valueAdapter, representation, format, rendererContext.suppressMemberExtensions());
+            return JsonValueEncoder.appendValueAndFormat(
+                    spec, ManagedObject.promote(valueAdapter), representation, format, rendererContext.suppressMemberExtensions());
         }
 
         boolean eagerlyRender =
-                (renderEagerly() && rendererContext.canEagerlyRender(valueAdapter))
+                (renderEagerly() && rendererContext.canEagerlyRender(ManagedObject.promote(valueAdapter)))
                 || (linkFollower != null && !linkFollower.isTerminated());
 
         if(valueAdapter == null) {
@@ -129,11 +132,11 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
             final TitleFacet titleFacet = spec.getFacet(TitleFacet.class);
             final String title = titleFacet.title(valueAdapter);
 
-            final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer.newLinkToBuilder(rendererContext, Rel.VALUE, valueAdapter).withTitle(title);
+            final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer.newLinkToBuilder(rendererContext, Rel.VALUE, ManagedObject.promote(valueAdapter)).withTitle(title);
             if(eagerlyRender) {
                 final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(rendererContext, linkFollower, JsonRepresentation.newMap()
                         );
-                renderer.with(valueAdapter);
+                renderer.with(ManagedObject.promote(valueAdapter));
                 if(mode.isEventSerialization()) {
                     renderer.asEventSerialization();
                 }
@@ -212,7 +215,7 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
     }
 
     private Object propertyChoices() {
-        final ObjectAdapter[] choiceAdapters =
+        final ManagedObject[] choiceAdapters =
                 objectMember.getChoices(
                         objectAdapter,
                         getInteractionInitiatedBy());
@@ -220,7 +223,7 @@ public class ObjectPropertyReprRenderer extends AbstractObjectMemberReprRenderer
             return null;
         }
         final List<Object> list = _Lists.newArrayList();
-        for (final ObjectAdapter choiceAdapter : choiceAdapters) {
+        for (val choiceAdapter : choiceAdapters) {
             // REVIEW: previously was using the spec of the member, but think instead it should be the spec of the adapter itself
             // final ObjectSpecification choiceSpec = objectMember.getSpecification();
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java
index 31451bf..84692ae 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java
@@ -35,6 +35,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.Contributed;
 import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
@@ -49,6 +50,8 @@ import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndPr
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectPropertyReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
 
+import lombok.val;
+
 @DomainService(nature = NatureOfService.DOMAIN)
 @Order(200) //in effect, is the relative priority (lower numbers have higher priority)
 public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiationServiceAbstract {
@@ -386,13 +389,14 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
             final JsonRepresentation representation, 
             final EnumSet<SuppressionType> suppression) {
 
-        final InteractionInitiatedBy interactionInitiatedBy = determineInteractionInitiatedByFrom(rendererContext);
-        final ObjectAdapter valueAdapter = collection.get(objectAdapter, interactionInitiatedBy);
+        val interactionInitiatedBy = determineInteractionInitiatedByFrom(rendererContext);
+        val valueAdapter = collection.get(objectAdapter, interactionInitiatedBy);
         if (valueAdapter == null) {
             return;
         }
 
-        final Stream<ObjectAdapter> adapters = CollectionFacet.Utils.streamAdapters(valueAdapter);
+        final Stream<ObjectAdapter> adapters = CollectionFacet.Utils.streamAdapters(valueAdapter)
+                .map(x->ManagedObject.promote(x));
         appendStreamTo(rendererContext, adapters, representation, suppression);
     }
 
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
index 73ceef4..4a71150 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
@@ -35,6 +35,7 @@ import org.apache.isis.metamodel.adapter.oid.Oid;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.services.homepage.HomePageAction;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ManagedObjectState;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
@@ -407,9 +408,9 @@ class DomainResourceHelper {
         // invoke
         final ObjectAdapter mixedInAdapter = null; // action will automatically fill in if a mixin
         final ObjectAdapter[] argAdapterArr = argAdapters.toArray(new ObjectAdapter[argAdapters.size()]);
-        final ObjectAdapter returnedAdapter = action.execute(
+        final ObjectAdapter returnedAdapter = ManagedObject.promote(action.execute(
                 objectAdapter,  mixedInAdapter, argAdapterArr,
-                InteractionInitiatedBy.USER);
+                InteractionInitiatedBy.USER));
 
         final ObjectAndActionInvocation objectAndActionInvocation =
                 new ObjectAndActionInvocation(objectAdapter, action, arguments, argAdapters, returnedAdapter, selfLink);
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 87950f4..b55f8f5 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -62,6 +62,7 @@ import org.apache.isis.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFace
 import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.metamodel.facets.object.promptStyle.PromptStyleFacet;
 import org.apache.isis.metamodel.spec.ActionType;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecId;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
@@ -457,8 +458,8 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
         final ObjectAction action = getAction();
 
         // if this action is a mixin, then it will fill in the details automatically.
-        final ObjectAdapter mixedInAdapter = null;
-        final ObjectAdapter resultAdapter =
+        val mixedInAdapter = (ManagedObject)null;
+        val resultAdapter =
                 action.executeWithRuleChecking(
                         targetAdapter, mixedInAdapter, arguments,
                         InteractionInitiatedBy.USER,
@@ -468,8 +469,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
                 .select(RoutingService.class)
                 .stream();
 
-        final Object resultPojo = resultAdapter != null ? resultAdapter.getPojo() : null;
-
+        val resultPojo = resultAdapter != null ? resultAdapter.getPojo() : null;
         val pojoToAdapter = IsisContext.pojoToAdapter();
 
         return routingServices
@@ -479,7 +479,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
                 .map(pojoToAdapter)
                 .filter(_NullSafe::isPresent)
                 .findFirst()
-                .orElse(resultAdapter);
+                .orElse(ManagedObject.promote(resultAdapter));
 
     }
 
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
index bc72c79..360d9d2 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/BookmarkTreeNode.java
@@ -28,14 +28,16 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.Oid;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.Contributed;
 import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 
+import lombok.val;
+
 public class BookmarkTreeNode implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -199,21 +201,21 @@ public class BookmarkTreeNode implements Serializable {
 
         // TODO: this ought to be move into a responsibility of BookmarkableModel, perhaps, rather than downcasting
         if(candidateBookmarkableModel instanceof EntityModel) {
-            EntityModel entityModel = (EntityModel) candidateBookmarkableModel;
-            final ObjectAdapter candidateAdapter = entityModel.getObject();
+            val entityModel = (EntityModel) candidateBookmarkableModel;
+            val candidateAdapter = entityModel.getObject();
             final Stream<ObjectAssociation> properties = candidateAdapter.getSpecification()
                     .streamAssociations(Contributed.EXCLUDED)
                     .filter(ObjectAssociation.Predicates.REFERENCE_PROPERTIES);
 
             properties
             .map(objectAssoc->{
-                final ObjectAdapter parentAdapter = 
+                val parentAdapter = 
                         objectAssoc.get(candidateAdapter, InteractionInitiatedBy.USER);
                 return parentAdapter;
             })
             .filter(_NullSafe::isPresent)
             .map(parentAdapter->{
-                final Oid parentOid = parentAdapter.getOid();
+                final Oid parentOid = ManagedObject.promote(parentAdapter).getOid();
                 return parentOid;
             })
             .filter(_NullSafe::isPresent)
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index 4bd4f40..08654cd 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -45,6 +45,7 @@ import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.collections.sortedby.SortedByFacet;
 import org.apache.isis.metamodel.facets.object.paged.PagedFacet;
 import org.apache.isis.metamodel.facets.object.plural.PluralFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecId;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
@@ -167,7 +168,7 @@ implements LinksProvider, UiHintContainer {
                 final OneToManyAssociation collection = entityCollectionModel.collectionMemento.getCollection(
                         entityCollectionModel.getSpecificationLoader());
 
-                final ObjectAdapter collectionAsAdapter = collection.get(adapter, InteractionInitiatedBy.USER);
+                final ManagedObject collectionAsAdapter = collection.get(adapter, InteractionInitiatedBy.USER);
 
                 final List<Object> objectList = asIterable(collectionAsAdapter);
 
@@ -189,7 +190,7 @@ implements LinksProvider, UiHintContainer {
             }
 
             @SuppressWarnings("unchecked")
-            private List<Object> asIterable(final ObjectAdapter collectionAsAdapter) {
+            private List<Object> asIterable(final ManagedObject collectionAsAdapter) {
                 if(collectionAsAdapter==null) {
                     return Collections.emptyList();
                 }
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 7b1813e..8012fb4 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -36,6 +36,7 @@ import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecId;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
@@ -46,6 +47,8 @@ import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
 import org.apache.isis.viewer.wicket.model.util.ComponentHintKey;
 
+import lombok.val;
+
 /**
  * Backing model to represent a {@link ObjectAdapter}.
  *
@@ -381,11 +384,11 @@ implements ObjectAdapterModel, UiHintContainer {
         adapterMemento.resetVersion();
         for (final PropertyMemento pm : propertyScalarModels.keySet()) {
             OneToOneAssociation otoa = pm.getProperty(getSpecificationLoader());
-            final ScalarModel scalarModel = propertyScalarModels.get(pm);
-            final ObjectAdapter adapter = getObject();
-            final ObjectAdapter associatedAdapter =
+            val scalarModel = propertyScalarModels.get(pm);
+            val adapter = getObject();
+            val associatedAdapter =
                     otoa.get(adapter, InteractionInitiatedBy.USER);
-            scalarModel.setObject(associatedAdapter);
+            scalarModel.setObject(ManagedObject.promote(associatedAdapter));
         }
     }
 
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index 7dbc3aa..7b7f06d 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -21,9 +21,11 @@ package org.apache.isis.viewer.wicket.model.models;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.Where;
@@ -44,6 +46,7 @@ import org.apache.isis.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
 import org.apache.isis.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
 import org.apache.isis.metamodel.facets.value.bigdecimal.BigDecimalValueFacet;
 import org.apache.isis.metamodel.facets.value.string.StringValueSemanticsProvider;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecId;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
@@ -141,7 +144,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                 }
                 try {
                     final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
-                    final ObjectAdapter currentValue = property.get(parentAdapter, InteractionInitiatedBy.USER);
+                    final ManagedObject currentValue = property.get(parentAdapter, InteractionInitiatedBy.USER);
                     final ObjectAdapter proposedAdapter =
                             parseableFacet.parseTextEntry(currentValue, proposedPojoAsStr, InteractionInitiatedBy.USER);
                     final Consent valid = property.isAssociationValid(parentAdapter, proposedAdapter,
@@ -191,7 +194,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                 final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
                 final OneToOneAssociation property = propertyMemento.getProperty(scalarModel.getSpecificationLoader());
                 ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
-                return property.getDefault(parentAdapter);
+                return ManagedObject.promote(property.getDefault(parentAdapter));
             }
 
             @Override
@@ -210,7 +213,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                 final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
                 final OneToOneAssociation property = propertyMemento.getProperty(scalarModel.getSpecificationLoader());
                 ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
-                final ObjectAdapter[] choices = property.getChoices(
+                final ManagedObject[] choices = property.getChoices(
                         parentAdapter,
                         InteractionInitiatedBy.USER);
 
@@ -234,7 +237,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                 final OneToOneAssociation property = propertyMemento.getProperty(scalarModel.getSpecificationLoader());
                 final ObjectAdapter parentAdapter =
                         scalarModel.getParentEntityModel().load();
-                final ObjectAdapter[] choices =
+                final ManagedObject[] choices =
                         property.getAutoComplete(
                                 parentAdapter, searchArg,
                                 InteractionInitiatedBy.USER);
@@ -427,7 +430,8 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                 final ObjectActionParameter actionParameter = parameterMemento.getActionParameter(scalarModel.getSpecificationLoader());
 
                 final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
-                return actionParameter.getDefault(parentAdapter, argsIfAvailable, paramNumUpdated);
+                return ManagedObject.promote(actionParameter.getDefault(parentAdapter, argsIfAvailable, paramNumUpdated)
+                       );
             }
 
             @Override
@@ -446,7 +450,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
 
                 final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
 
-                final ObjectAdapter[] choices =
+                final ManagedObject[] choices =
                         actionParameter.getChoices(
                                 parentAdapter, argumentsIfAvailable,
                                 InteractionInitiatedBy.USER);
@@ -469,7 +473,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
 
                 final ObjectAdapter parentAdapter =
                         scalarModel.getParentEntityModel().load();
-                final ObjectAdapter[] choices = actionParameter.getAutoComplete(
+                final ManagedObject[] choices = actionParameter.getAutoComplete(
                         parentAdapter, searchArg,
                         InteractionInitiatedBy.USER);
                 return choicesAsList(choices);
@@ -542,8 +546,8 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                         scalarModel.getSpecificationLoader());
                 final ObjectAdapter parentAdapter =
                         scalarModel.getParentEntityModel().load();
-                final ObjectAdapter defaultAdapter = actionParameter.getDefault(parentAdapter, null, null);
-                scalarModel.setObject(defaultAdapter);
+                final ManagedObject defaultAdapter = actionParameter.getDefault(parentAdapter, null, null);
+                scalarModel.setObject(ManagedObject.promote(defaultAdapter));
             }
 
             @Override
@@ -590,9 +594,11 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
 
         };
 
-        private static List<ObjectAdapter> choicesAsList(final ObjectAdapter[] choices) {
+        private static List<ObjectAdapter> choicesAsList(final ManagedObject[] choices) {
             if (choices != null && choices.length > 0) {
-                return Arrays.asList(choices);
+                return Stream.of(choices)
+                        .map(x->ManagedObject.promote(x))
+                        .collect(Collectors.toList());
             }
             return Collections.emptyList();
         }
@@ -758,7 +764,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
 
         final ObjectAdapter associatedAdapter;
         if (visibility.isAllowed()) {
-            associatedAdapter = property.get(parentAdapter, InteractionInitiatedBy.USER);
+            associatedAdapter = ManagedObject.promote(property.get(parentAdapter, InteractionInitiatedBy.USER));
         } else {
             associatedAdapter = null;
         }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
index 2216648..0bb9245 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
@@ -34,6 +34,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.viewer.wicket.model.hints.IsisActionCompletedEvent;
@@ -87,7 +88,7 @@ class ActionParametersForm extends PromptFormAbstract<ActionModel> {
 
             // TODO: maybe this logic should move instead to ScalarModel.Kind#whether{Hidden/Disabled}
             final ObjectAdapter targetAdapter = actionModel.getTargetAdapter();
-            final ObjectAdapter realTargetAdapter = actionModel.getActionMemento().getAction(getSpecificationLoader())
+            final ManagedObject realTargetAdapter = actionModel.getActionMemento().getAction(getSpecificationLoader())
                     .realTargetAdapter(targetAdapter);
             final Consent consent = apm.getActionParameter(getSpecificationLoader())
                     .isVisible(realTargetAdapter, null, InteractionInitiatedBy.USER);
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
index 03e3f5b..ccceecf 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsSortableDataProvider.java
@@ -39,6 +39,7 @@ import org.apache.isis.metamodel.consent.InteractionResult;
 import org.apache.isis.metamodel.interactions.InteractionUtils;
 import org.apache.isis.metamodel.interactions.ObjectVisibilityContext;
 import org.apache.isis.metamodel.interactions.VisibilityContext;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.ObjectSpecificationException;
 import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
@@ -158,9 +159,9 @@ public class CollectionContentsSortableDataProvider extends SortableDataProvider
 
             @Override
             public int compare(final ObjectAdapter p, final ObjectAdapter q) {
-                final ObjectAdapter pSort = sortProperty.get(p, InteractionInitiatedBy.FRAMEWORK);
-                final ObjectAdapter qSort = sortProperty.get(q, InteractionInitiatedBy.FRAMEWORK);
-                Ordering<ObjectAdapter> naturalOrdering;
+                final ManagedObject pSort = sortProperty.get(p, InteractionInitiatedBy.FRAMEWORK);
+                final ManagedObject qSort = sortProperty.get(q, InteractionInitiatedBy.FRAMEWORK);
+                Ordering<ManagedObject> naturalOrdering;
                 if(ascending){
                     naturalOrdering = ORDERING_BY_NATURAL.nullsFirst();
                 } else {
@@ -172,9 +173,9 @@ public class CollectionContentsSortableDataProvider extends SortableDataProvider
         return ordering;
     }
 
-    private static Ordering<ObjectAdapter> ORDERING_BY_NATURAL = new Ordering<ObjectAdapter>(){
+    private static Ordering<ManagedObject> ORDERING_BY_NATURAL = new Ordering<ManagedObject>(){
         @Override
-        public int compare(final ObjectAdapter p, final ObjectAdapter q) {
+        public int compare(final ManagedObject p, final ManagedObject q) {
             final Object pPojo = p.getPojo();
             final Object qPojo = q.getPojo();
             if(!(pPojo instanceof Comparable) || !(qPojo instanceof Comparable)) {
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java
index f20a556..408d896 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/summary/CollectionContentsAsSummary.java
@@ -36,6 +36,7 @@ import org.apache.wicket.model.Model;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.Contributed;
 import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
@@ -129,12 +130,12 @@ public class CollectionContentsAsSummary extends PanelAbstract<EntityCollectionM
             int nonNullCount = 0;
             for (ObjectAdapter objectAdapter : adapters) {
                 titles.add(objectAdapter.titleString(null));
-                final ObjectAdapter valueAdapter = numberAssociation.get(objectAdapter, InteractionInitiatedBy.USER);
+                final ManagedObject valueAdapter = numberAssociation.get(objectAdapter, InteractionInitiatedBy.USER);
                 if (valueAdapter == null) {
                     values.add(null);
                     continue;
                 }
-                final Object valueObj = ObjectAdapter.Util.unwrapPojo(valueAdapter);
+                final Object valueObj = ManagedObject.unwrapPojo(valueAdapter);
                 if (valueObj == null) {
                     values.add(null);
                     continue;
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
index d6c7055..2a566d9 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/icontitle/EntityIconAndTitlePanel.java
@@ -33,6 +33,7 @@ import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.members.cssclassfa.CssClassFaFacet;
 import org.apache.isis.metamodel.facets.object.projection.ProjectionFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.runtime.memento.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -47,6 +48,8 @@ import org.apache.isis.viewer.wicket.ui.util.Components;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 import org.apache.isis.viewer.wicket.ui.util.Tooltips;
 
+import lombok.val;
+
 /**
  * {@link PanelAbstract Panel} representing the icon and title of an entity,
  * as per the provided {@link EntityModel}.
@@ -153,12 +156,12 @@ public class EntityIconAndTitlePanel extends PanelAbstract<ObjectAdapterModel> {
         final ObjectAdapterModel redirectToModel;
 
         if(targetAdapter != null) {
-            final ProjectionFacet projectionFacet = entityModel.getTypeOfSpecification().getFacet(ProjectionFacet.class);
+            val projectionFacet = entityModel.getTypeOfSpecification().getFacet(ProjectionFacet.class);
 
-            final ObjectAdapter redirectToAdapter =
+            val redirectToAdapter =
                     projectionFacet != null ? projectionFacet.projected(targetAdapter) : targetAdapter;
 
-                    redirectToModel = new EntityModel(redirectToAdapter);
+                    redirectToModel = new EntityModel(ManagedObject.promote(redirectToAdapter));
         } else {
             redirectToModel = entityModel;
         }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
index 5a5b811..90c6407 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
@@ -50,6 +50,7 @@ import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.metamodel.facets.objectvalue.labelat.LabelAtFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
@@ -141,7 +142,7 @@ public abstract class ScalarPanelAbstract2 extends PanelAbstract<ScalarModel> im
         // could almost certainly simplify this... (used by visibility and usability checks)
         final ObjectActionParameter actionParameter = action.getParameters().get(paramNumToPossiblyUpdate);
         final ObjectAdapter targetAdapter = actionModel.getTargetAdapter();
-        final ObjectAdapter realTargetAdapter = action.realTargetAdapter(targetAdapter);
+        final ManagedObject realTargetAdapter = action.realTargetAdapter(targetAdapter);
 
         // check visibility
         final Consent visibilityConsent = actionParameter.isVisible(realTargetAdapter, pendingArguments, InteractionInitiatedBy.USER);
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
index fec1702..2752400 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLinkFactoryAbstract.java
@@ -41,6 +41,7 @@ import org.apache.isis.commons.internal.ioc.BeanSort;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.object.grid.GridFacet;
 import org.apache.isis.metamodel.postprocessors.param.ActionParameterDefaultsFacetFromAssociatedCollection;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
@@ -207,8 +208,8 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
 
                         if(mixinType.isViewModel()) {
 
-                            final ObjectAdapter targetAdapterForMixin = action.realTargetAdapter(actionModel.getTargetAdapter());
-                            final EntityModel entityModelForMixin = new EntityModel(targetAdapterForMixin);
+                            final ManagedObject targetAdapterForMixin = action.realTargetAdapter(actionModel.getTargetAdapter());
+                            final EntityModel entityModelForMixin = new EntityModel(ManagedObject.promote(targetAdapterForMixin));
 
                             final GridFacet facet = mixinType.getFacet(GridFacet.class);
                             final Grid gridForMixin = facet.getGrid(targetAdapterForMixin);
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java
index b32052b..60532ab 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceObjectAutoComplete.java
@@ -38,15 +38,14 @@ package org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.object.autocomplete.AutoCompleteFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.runtime.memento.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
@@ -67,23 +66,24 @@ extends ObjectAdapterMementoProviderAbstract {
     protected List<ObjectAdapterMemento> obtainMementos(String term) {
         final ObjectSpecification typeOfSpecification = getScalarModel().getTypeOfSpecification();
         final AutoCompleteFacet autoCompleteFacet = typeOfSpecification.getFacet(AutoCompleteFacet.class);
-        final List<ObjectAdapter> autoCompleteAdapters =
-                autoCompleteFacet.execute(term,
-                        InteractionInitiatedBy.USER);
-        return _Lists.map(autoCompleteAdapters, ObjectAdapterMemento::ofAdapter);
+        final List<ManagedObject> autoCompleteAdapters =
+                autoCompleteFacet.execute(term,InteractionInitiatedBy.USER);
+        return _Lists.map(autoCompleteAdapters, a->ObjectAdapterMemento.ofAdapter(ManagedObject.promote(a)));
     }
 
     @Override
     public Collection<ObjectAdapterMemento> toChoices(final Collection<String> ids) {
-        final Function<String, ObjectAdapterMemento> function = (final String input) -> {
-            if(NULL_PLACEHOLDER.equals(input)) {
-                return null;
-            }
-            final RootOid oid = RootOid.deString(input);
-            final ObjectAdapterMemento oam = ObjectAdapterMemento.ofRootOid(oid);
-            return oam;
-        };
-        return _NullSafe.stream(ids).map(function).collect(Collectors.toList());
+
+        return _NullSafe.stream(ids)
+                .map(id -> {
+                    if(NULL_PLACEHOLDER.equals(id)) {
+                        return null;
+                    }
+                    final RootOid oid = RootOid.deString(id);
+                    final ObjectAdapterMemento oam = ObjectAdapterMemento.ofRootOid(oid);
+                    return oam;
+                })
+                .collect(Collectors.toList());
 
     }
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java
index 5ab24ea..a112ed5 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java
@@ -22,6 +22,7 @@ package org.apache.isis.viewer.wicket.ui.pages.home;
 import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.runtime.system.session.IsisSession;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -60,10 +61,9 @@ public class HomePage extends PageAbstract {
             val action = homePageAction.getObjectAction();
 
             Components.permanentlyHide(themeDiv, ComponentType.WELCOME);
-            final ActionModel actionModel = 
-                    ActionModel.create(new EntityModel(objectAdapter), action);
-
-            final FormExecutorDefault<ActionModel> formExecutor =
+            val actionModel = 
+                    ActionModel.create(new EntityModel(ManagedObject.promote(objectAdapter)), action);
+            val formExecutor =
                     new FormExecutorDefault<>( new ActionFormExecutorStrategy(actionModel));
 
             formExecutor.executeAndProcessResults(getPage(), null, null, actionModel.isWithinPrompt());
diff --git a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/BackgroundServiceDefault.java b/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/BackgroundServiceDefault.java
deleted file mode 100644
index b94b5ff..0000000
--- a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/BackgroundServiceDefault.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.runtime.services.background;
-
-import java.lang.reflect.InvocationHandler;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.inject.Inject;
-
-import org.apache.isis.applib.services.background.BackgroundCommandService;
-import org.apache.isis.applib.services.background.BackgroundService;
-import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.applib.services.factory.FactoryService;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
-import org.apache.isis.applib.services.xactn.TransactionService;
-import org.apache.isis.commons.internal._Constants;
-import org.apache.isis.commons.internal.collections._Arrays;
-import org.apache.isis.commons.internal.plugins.codegen.ProxyFactory;
-import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.metamodel.services.command.CommandDtoServiceInternal;
-import org.apache.isis.metamodel.spec.ObjectSpecification;
-import org.apache.isis.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.metamodel.specloader.classsubstitutor.ProxyEnhanced;
-
-import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
-
-import lombok.val;
-
-/**
- * For command-reification depends on an implementation of
- * {@link org.apache.isis.applib.services.background.BackgroundCommandService} to
- * be configured.
- * @deprecated compare with v1.x and check whether we can cleanup the API
- */
-//@Service
-class BackgroundServiceDefault implements BackgroundService {
-
-    private InvocationHandlerFactory invocationHandlerFactory;  
-
-
-    @PostConstruct
-    public void init() {
-        val backgroundCommandService = 
-                serviceRegistry.select(BackgroundCommandService.class)
-                .getFirst()
-                .orElse(null);
-
-        this.invocationHandlerFactory = (backgroundCommandService!=null)
-                ? InvocationHandlerFactoryUsingBackgroundCommandService.builder()
-                        .backgroundCommandService(backgroundCommandService)
-                        .specificationLoader(specificationLoader)
-                        .commandDtoServiceInternal(commandDtoServiceInternal)
-                        .commandContext(commandContext)
-                        .objectAdapterProvider(objectAdapterProvider)
-                        .build()
-                        : new InvocationHandlerFactoryFallback(transactionService);
-
-    }
-
-
-    @PreDestroy
-    public void shutdown() {
-        if(invocationHandlerFactory!=null) {
-            invocationHandlerFactory.close();
-        }
-    }
-
-    // -- EXECUTION
-
-    @Override
-    public <T> T execute(final T domainObject) {
-        final Class<T> cls = uncheckedCast(domainObject.getClass());
-        val mixedIn = null;
-        val methodHandler = invocationHandlerFactory.newMethodHandler(domainObject, mixedIn);
-        return newProxy(cls, mixedIn, methodHandler);
-    }
-
-    @Override
-    public <T> T executeMixin(Class<T> mixinClass, Object mixedIn) {
-        val mixin = factoryService.<T>mixin(mixinClass, mixedIn);
-        val methodHandler = invocationHandlerFactory.newMethodHandler(mixin, mixedIn);
-        return newProxy(mixinClass, mixedIn, methodHandler);
-    }
-
-    // -- HELPER
-
-    protected ObjectSpecification getSpecification(final Class<?> type) {
-        return specificationLoader.loadSpecification(type);
-    }
-
-    private <T> T newProxy(
-            final Class<T> cls,
-            final Object mixedInIfAny, 
-            final InvocationHandler methodHandler) {
-
-        val interfaces = _Arrays.combine(
-                cls.getInterfaces(),
-                new Class<?>[] { ProxyEnhanced.class });
-
-        val initialize = mixedInIfAny!=null;
-
-
-        val constructorArgTypes = initialize 
-                ? new Class<?>[] {mixedInIfAny.getClass()} 
-                    : _Constants.emptyClasses;
-
-        val constructorArgs = initialize 
-                ? new Object[] {mixedInIfAny} 
-                    : _Constants.emptyObjects;
-
-        val proxyFactory = ProxyFactory.<T>builder(cls)
-                .interfaces(interfaces)
-                .constructorArgTypes(constructorArgTypes)
-                .build();
-
-        return initialize
-                ? proxyFactory.createInstance(methodHandler, constructorArgs)
-                        : proxyFactory.createInstance(methodHandler, /*initialize*/false);
-    }
-
-    // -- DEPENDENCIES
-
-    @Inject private ServiceRegistry serviceRegistry;
-    @Inject private CommandDtoServiceInternal commandDtoServiceInternal;
-    @Inject private CommandContext commandContext;
-    @Inject private FactoryService factoryService;
-    @Inject private SpecificationLoader specificationLoader;
-    @Inject private ObjectAdapterProvider objectAdapterProvider;
-    @Inject private TransactionService transactionService;
-
-
-}
diff --git a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/CommandInvocationHandler.java b/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/CommandInvocationHandler.java
deleted file mode 100644
index 7746a17..0000000
--- a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/CommandInvocationHandler.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.runtime.services.background;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Stream;
-
-import org.apache.isis.applib.services.background.BackgroundCommandService;
-import org.apache.isis.applib.services.command.Command;
-import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.metamodel.facets.actions.action.invocation.CommandUtil;
-import org.apache.isis.metamodel.services.command.CommandDtoServiceInternal;
-import org.apache.isis.metamodel.spec.ObjectSpecification;
-import org.apache.isis.metamodel.spec.feature.Contributed;
-import org.apache.isis.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.metamodel.spec.feature.ObjectMember;
-import org.apache.isis.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.metamodel.specloader.specimpl.ObjectActionMixedIn;
-import org.apache.isis.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
-import org.apache.isis.schema.cmd.v1.CommandDto;
-
-import static org.apache.isis.commons.internal.base._With.requires;
-
-class CommandInvocationHandler<T> implements InvocationHandler {
-
-    private final BackgroundCommandService backgroundCommandService;
-    private final T target;
-    private final Object mixedInIfAny;
-    private final SpecificationLoader specificationLoader;
-    private final CommandDtoServiceInternal commandDtoServiceInternal;
-    private final CommandContext commandContext;
-    private final ObjectAdapterProvider adapterProvider;
-
-    CommandInvocationHandler(
-            BackgroundCommandService backgroundCommandService,
-            T target,
-            Object mixedInIfAny,
-            SpecificationLoader specificationLoader,
-            CommandDtoServiceInternal commandDtoServiceInternal,
-            CommandContext commandContext,
-            ObjectAdapterProvider adapterProvider) {
-        this.backgroundCommandService = requires(backgroundCommandService, "backgroundCommandService");
-        this.target = requires(target, "target");
-        this.mixedInIfAny = mixedInIfAny;
-        this.specificationLoader = requires(specificationLoader, "specificationLoader");
-        this.commandDtoServiceInternal = requires(commandDtoServiceInternal, "commandDtoServiceInternal");
-        this.commandContext = requires(commandContext, "commandContext");
-        this.adapterProvider = requires(adapterProvider, "adapterProvider");
-    }
-
-    @Override
-    public Object invoke(
-            final Object proxied,
-            final Method proxyMethod,
-            final Object[] args) throws Throwable {
-
-        final boolean inheritedFromObject = proxyMethod.getDeclaringClass().equals(Object.class);
-        if(inheritedFromObject) {
-            return proxyMethod.invoke(target, args);
-        }
-
-        final ObjectSpecificationDefault targetObjSpec = getJavaSpecificationOfOwningClass(proxyMethod);
-        final ObjectMember member = targetObjSpec.getMember(proxyMethod);
-
-        if(member == null) {
-            return proxyMethod.invoke(target, args);
-        }
-
-        if(!(member instanceof ObjectAction)) {
-            throw new UnsupportedOperationException(
-                    "Only actions can be executed in the background "
-                            + "(method " + proxyMethod.getName() + " represents a " + member.getFeatureType().name() + "')");
-        }
-
-        ObjectAction action = (ObjectAction) member;
-
-        final Object domainObject;
-        if (mixedInIfAny == null) {
-            domainObject = target;
-        } else {
-            domainObject = mixedInIfAny;
-            // replace action with the mixedIn action of the domain object itself
-            action = findMixedInAction(action, mixedInIfAny);
-        }
-
-        final ObjectAdapter domainObjectAdapter = getObjectAdapterProvider().adapterFor(domainObject);
-        final String domainObjectClassName = CommandUtil.targetClassNameFor(domainObjectAdapter);
-
-        final String targetActionName = CommandUtil.targetMemberNameFor(action);
-
-        final ObjectAdapter[] argAdapters = adaptersFor(args);
-        final String targetArgs = CommandUtil.argDescriptionFor(action, argAdapters);
-
-        final Command command = commandContext.getCommand();
-
-        final List<ObjectAdapter> targetList = Collections.singletonList(domainObjectAdapter);
-        final CommandDto dto =
-                commandDtoServiceInternal.asCommandDto(targetList, action, argAdapters);
-
-        backgroundCommandService
-        .schedule(dto, command, domainObjectClassName, targetActionName, targetArgs);
-
-        return null;
-    }
-
-    // -- HELPER
-
-    private ObjectAdapterProvider getObjectAdapterProvider() {
-        return adapterProvider;
-    }
-
-    private ObjectAction findMixedInAction(final ObjectAction action, final Object domainObject) {
-        final String actionId = action.getId();
-        final ObjectSpecification domainSpec = getObjectAdapterProvider().adapterFor(domainObject).getSpecification();
-        final Stream<ObjectAction> objectActions = domainSpec.streamObjectActions(Contributed.INCLUDED);
-
-        return objectActions
-                .filter(objectAction->objectAction instanceof ObjectActionMixedIn)
-                .map(objectAction->(ObjectActionMixedIn) objectAction)
-                .filter(objectActionMixedIn->objectActionMixedIn.hasMixinAction(action))
-                .findFirst()
-                .orElseThrow(()->
-                new IllegalArgumentException(String.format(
-                        "Unable to find mixin action '%s' for %s", actionId, domainSpec.getFullIdentifier()))
-                        );
-
-    }
-
-    private ObjectAdapter[] adaptersFor(final Object[] args) {
-        final ObjectAdapterProvider adapterProvider = getObjectAdapterProvider();
-        return CommandUtil.adaptersFor(args, adapterProvider);
-    }
-
-    private ObjectSpecificationDefault getJavaSpecificationOfOwningClass(final Method method) {
-        return getJavaSpecification(method.getDeclaringClass());
-    }
-
-    private ObjectSpecificationDefault getJavaSpecification(final Class<?> cls) {
-        final ObjectSpecification objectSpec = getSpecification(cls);
-        if (!(objectSpec instanceof ObjectSpecificationDefault)) {
-            throw new UnsupportedOperationException(
-                    "Only Java is supported "
-                            + "(specification is '" + objectSpec.getClass().getCanonicalName() + "')");
-        }
-        return (ObjectSpecificationDefault) objectSpec;
-    }
-
-    private ObjectSpecification getSpecification(final Class<?> type) {
-        return specificationLoader.loadSpecification(type);
-    }
-
-
-}
diff --git a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/ForkingInvocationHandler.java b/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/ForkingInvocationHandler.java
deleted file mode 100644
index 7c29c63..0000000
--- a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/ForkingInvocationHandler.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.runtime.services.background;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.concurrent.ExecutorService;
-
-import org.apache.isis.applib.services.xactn.TransactionService;
-import org.apache.isis.runtime.system.context.IsisContext;
-import org.apache.isis.runtime.system.internal.InitialisationSession;
-import org.apache.isis.runtime.system.session.IsisSession;
-import org.apache.isis.runtime.system.transaction.IsisTransactionAspectSupport;
-
-import static org.apache.isis.commons.internal.functions._Functions.uncheckedSupplier;
-
-import lombok.AllArgsConstructor;
-import lombok.NonNull;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-/**
- * Package private invocation handler that executes actions in the background 
- * using a ExecutorService.
- * @since 2.0
- */
-@Log4j2 @AllArgsConstructor
-class ForkingInvocationHandler<T> implements InvocationHandler {
-
-    @NonNull private final T target;
-    private final Object mixedInIfAny;
-    @NonNull private final ExecutorService backgroundExecutorService;
-    @NonNull private final TransactionService transactionService;
-
-    @Override
-    public Object invoke(
-            final Object proxied,
-            final Method proxyMethod,
-            final Object[] args) throws Throwable {
-
-        val inheritedFromObject = proxyMethod.getDeclaringClass().equals(Object.class);
-        if(inheritedFromObject) {
-            return proxyMethod.invoke(target, args);
-        }
-
-        val domainObject = mixedInIfAny != null
-                ? mixedInIfAny
-                        : target;
-
-        val authenticationSession = 
-                IsisSession.current()
-                .map(IsisSession::getAuthenticationSession)
-                .orElse(new InitialisationSession());
-
-        val transactionLatch = IsisTransactionAspectSupport.transactionLatch();
-
-        //unfortunately there is no easy way to make use of this future
-        // ... we found a way to do this with WrapperFactory.async(...) instead
-        val future = backgroundExecutorService.submit(()->{
-
-            try {
-
-                transactionLatch.await(); // wait for transaction of the calling thread to complete
-
-                return IsisContext.getSessionFactory().doInSession(
-                        ()->transactionService.executeWithinTransaction(
-                                uncheckedSupplier(()->proxyMethod.invoke(domainObject, args))
-                                ),
-                        authenticationSession);
-
-            } catch (Exception e) {
-
-                log.error(
-                        String.format("Background execution of action '%s' on object '%s' failed.",
-                                proxyMethod.getName(),
-                                domainObject.getClass().getName()),
-                        e);
-                return null;
-            }
-        });
-
-        return null;
-
-    }
-
-}
diff --git a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/InvocationHandlerFactory.java b/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/InvocationHandlerFactory.java
deleted file mode 100644
index d9e08fc..0000000
--- a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/InvocationHandlerFactory.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.runtime.services.background;
-
-import java.lang.reflect.InvocationHandler;
-
-interface InvocationHandlerFactory extends AutoCloseable {
-
-    /**
-     *
-     * @param target - the object that is proxied, either a domain object or a mixin around a domain object
-     * @param mixedInIfAny - if target is a mixin, then this is the domain object that is mixed-in to.
-     */
-    <T> InvocationHandler newMethodHandler(
-            T target, 
-            Object mixedInIfAny);
-
-    @Override
-    void close(); // refined from AutoCloseable to not throw catched exceptions
-
-}
diff --git a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/InvocationHandlerFactoryFallback.java b/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/InvocationHandlerFactoryFallback.java
deleted file mode 100644
index b29b6fd..0000000
--- a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/InvocationHandlerFactoryFallback.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.runtime.services.background;
-
-import java.lang.reflect.InvocationHandler;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import org.apache.isis.applib.services.xactn.TransactionService;
-
-import lombok.RequiredArgsConstructor;
-
-/**
- * only used if there is no BackgroundCommandService available
- * @since 2.0
- *
- */
-@RequiredArgsConstructor
-final class InvocationHandlerFactoryFallback implements InvocationHandlerFactory {
-
-    final static class SimpleExecutor {
-
-        /*
-         * For the fixed thread-pool let there be 1-4 concurrent threads,
-         * limited by the number of available (logical) processor cores.
-         *
-         * Note: Future improvements might make these values configurable,
-         * but for now lets try to be reasonably nice here.
-         *
-         */
-        private final int minThreadCount = 1;
-        private final int maxThreadCount = 4;
-
-        private final int threadCount =
-                Math.max(minThreadCount,
-                        Math.min(maxThreadCount,
-                                Runtime.getRuntime().availableProcessors()));
-
-        public final ExecutorService backgroundExecutorService =
-                Executors.newFixedThreadPool(threadCount);
-
-        public void shutdown() {
-            backgroundExecutorService.shutdownNow();
-        }
-
-    }
-
-    private final SimpleExecutor simpleExecutor = new SimpleExecutor();
-    private final TransactionService transactionService;
-
-    @Override
-    public <T> InvocationHandler newMethodHandler(
-            T target, 
-            Object mixedInIfAny) {
-
-        return new ForkingInvocationHandler<T>(
-                target, 
-                mixedInIfAny, 
-                simpleExecutor.backgroundExecutorService,
-                transactionService);
-    }
-
-    @Override
-    public void close() {
-        simpleExecutor.shutdown();
-    }
-
-}
diff --git a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/InvocationHandlerFactoryUsingBackgroundCommandService.java b/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/InvocationHandlerFactoryUsingBackgroundCommandService.java
deleted file mode 100644
index 84c71ac..0000000
--- a/extensions/legacy/src/main/java/org/apache/isis/runtime/services/background/InvocationHandlerFactoryUsingBackgroundCommandService.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.runtime.services.background;
-
-import java.lang.reflect.InvocationHandler;
-
-import org.apache.isis.applib.services.background.BackgroundCommandService;
-import org.apache.isis.applib.services.command.CommandContext;
-import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.metamodel.services.command.CommandDtoServiceInternal;
-import org.apache.isis.metamodel.specloader.SpecificationLoader;
-
-import lombok.Builder;
-
-@Builder
-final class InvocationHandlerFactoryUsingBackgroundCommandService implements InvocationHandlerFactory {
-
-    private final BackgroundCommandService backgroundCommandService;
-    private final SpecificationLoader specificationLoader;
-    private final CommandDtoServiceInternal commandDtoServiceInternal;
-    private final CommandContext commandContext;
-    private final ObjectAdapterProvider objectAdapterProvider;
-
-    @Override
-    public <T> InvocationHandler newMethodHandler(
-            T target, 
-            Object mixedInIfAny) {
-
-        return new CommandInvocationHandler<T>(
-                backgroundCommandService,
-                target,
-                mixedInIfAny,
-                specificationLoader,
-                commandDtoServiceInternal,
-                commandContext,
-                objectAdapterProvider);
-    }
-
-    @Override
-    public void close() {
-        backgroundCommandService.close();
-    }
-
-
-
-}
diff --git a/extensions/viewer-wicket-excel/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/ExcelFileModel.java b/extensions/viewer-wicket-excel/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/ExcelFileModel.java
index 752c796..c8d9fb8 100644
--- a/extensions/viewer-wicket-excel/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/ExcelFileModel.java
+++ b/extensions/viewer-wicket-excel/src/main/java/org/apache/isis/extensions/viewer/wicket/excel/ExcelFileModel.java
@@ -48,6 +48,8 @@ import org.apache.isis.metamodel.spec.feature.Contributed;
 import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
 
+import lombok.val;
+
 class ExcelFileModel extends LoadableDetachableModel<File> {
 
     private static final long serialVersionUID = 1L;
@@ -167,7 +169,7 @@ class ExcelFileModel extends LoadableDetachableModel<File> {
             final Cell cell, 
             CellStyle dateCellStyle) {
 
-        final ObjectAdapter valueAdapter = property.get(objectAdapter);
+        val valueAdapter = property.get(objectAdapter);
 
         // null
         if (valueAdapter == null) {