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/24 20:56:48 UTC

[isis] 01/02: ISIS-2158: work towards deprecating ObjectAdapter

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 2da81c8a5af9922ba405e4266eed7574e046f2df
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 24 15:58:53 2019 +0200

    ISIS-2158: work towards deprecating ObjectAdapter
---
 .../isis/metamodel/adapter/ObjectAdapter.java      |   1 +
 .../isis/metamodel/adapter/oid/Oid_Marshaller.java |   1 -
 .../facets/collections/modify/CollectionFacet.java |  16 +-
 .../facets/value/image/ImageValueFacet.java        |  10 +-
 .../value/image/ImageValueSemanticsProvider.java   |  12 +-
 .../image/ImageValueSemanticsProviderAbstract.java |   4 +-
 .../JavaAwtImageValueSemanticsProvider.java        |  12 +-
 .../apache/isis/metamodel/spec/ManagedObject.java  |  55 +++++--
 .../ImageValueSemanticsProviderAbstractTest.java   |  12 +-
 .../command/CommandDtoServiceInternalDefault.java  |   2 +-
 .../modules/h2console/WebModuleH2Console.java      |   3 +-
 .../isis/runtime/memento/ObjectAdapterMemento.java |   5 +-
 .../memento/ObjectAdapterMementoCollection.java    |  10 +-
 .../ObjectAdapterMementoSupport_usingDefault.java  |  16 +-
 .../ObjectAdapterContext_MementoSupport.java       |   7 +-
 .../IsisWicketApplication_newPageFactory.java      |   6 +
 .../wicket/ConverterForObjectAdapterMemento.java   |   2 +-
 .../common/OnConcurrencyExceptionHandler.java      |   5 +-
 .../wicket/model/common/OnSelectionHandler.java    |   6 +-
 .../viewer/wicket/model/links/LinkAndLabel.java    |   4 +-
 .../wicket/model/models/ActionArgumentModel.java   |   6 +-
 .../viewer/wicket/model/models/ActionModel.java    |  64 ++++----
 .../wicket/model/models/EntityCollectionModel.java |  18 +-
 .../viewer/wicket/model/models/EntityModel.java    |  51 +++---
 .../model/models/EntityModelForReference.java      |   6 +-
 .../wicket/model/models/ObjectAdapterModel.java    |   6 +-
 .../viewer/wicket/model/models/ScalarModel.java    | 181 ++++++++++-----------
 .../model/models/ScalarModelWithPending.java       |   2 +-
 .../viewer/wicket/model/models/ValueModel.java     |  10 +-
 .../models/whereami/WhereAmIModelDefault.java      |   3 +-
 .../actionresponse/ActionResultResponseType.java   |  42 ++---
 .../ui/components/actioninfo/ActionInfoPanel.java  |   5 +-
 .../entityactions/EntityActionLinkFactory.java     |  14 +-
 .../actionmenu/serviceactions/CssMenuItem.java     |   5 +-
 .../serviceactions/ServiceActionLinkFactory.java   |   5 +-
 .../actions/ActionFormExecutorStrategy.java        |   9 +-
 .../components/actions/ActionParametersForm.java   |   9 +-
 .../components/actions/ActionParametersPanel.java  |   4 +-
 .../collection/AssociatedWithActionsHelper.java    |   8 +-
 .../ui/components/collection/CollectionPanel.java  |   7 +-
 .../CollectionContentsAsAjaxTablePanel.java        |  22 +--
 .../CollectionContentsSortableDataProvider.java    |   4 +-
 .../ajaxtable/IsisAjaxFallbackDataTable.java       |   7 +-
 .../columns/ObjectAdapterPropertyColumn.java       |  15 +-
 .../columns/ObjectAdapterTitleColumn.java          |  16 +-
 .../columns/ObjectAdapterToggleboxColumn.java      |  17 +-
 .../entity/EntityComponentFactoryAbstract.java     |   5 +-
 .../entity/collection/EntityCollectionPanel.java   |   5 +-
 .../components/entity/fieldset/PropertyGroup.java  |   8 +-
 .../entity/header/EntityHeaderPanel.java           |   5 +-
 .../entity/icontitle/EntityIconAndTitlePanel.java  |  18 +-
 .../links/EntityLinksSelectorPanelFactory.java     |   5 +-
 .../ui/components/property/PropertyEditPanel.java  |   5 +-
 .../property/PropertyFormExecutorStrategy.java     |  14 +-
 .../PropertyEditPromptHeaderPanel.java             |   5 +-
 .../ui/components/scalars/ScalarPanelAbstract.java |  12 +-
 .../components/scalars/ScalarPanelAbstract2.java   |  21 ++-
 .../scalars/ScalarPanelSelect2Abstract.java        |  19 ++-
 .../ScalarPanelTextFieldDatePickerAbstract.java    |  12 +-
 .../scalars/ScalarPanelTextFieldNumeric.java       |   7 +-
 .../ui/components/scalars/TextFieldValueModel.java |   6 +-
 .../scalars/image/JavaAwtImagePanel.java           |   4 +-
 .../isisapplib/IsisBlobOrClobPanelAbstract.java    |   4 +-
 .../components/scalars/primitive/BooleanPanel.java |   5 +-
 .../scalars/reference/EntityLinkSelect2Panel.java  |   5 +-
 .../scalars/reference/ReferencePanel.java          |  32 ++--
 .../valuechoices/ValueChoicesSelect2Panel.java     |   8 +-
 .../components/tree/IsisToWicketTreeAdapter.java   |   9 +-
 .../ui/components/tree/TreePanelFactories.java     |   5 +-
 .../ui/components/unknown/UnknownModelPanel.java   |  11 +-
 .../ui/components/value/StandaloneValuePanel.java  |   5 +-
 .../widgets/breadcrumbs/BreadcrumbPanel.java       |   3 +-
 .../entitysimplelink/EntityLinkSimplePanel.java    |   9 +-
 .../widgets/linkandlabel/ActionLink.java           |  15 +-
 .../linkandlabel/ActionLinkFactoryAbstract.java    |  11 +-
 .../ObjectAdapterMementoProviderAbstract.java      |   5 +-
 ...derForReferenceParamOrPropertyAutoComplete.java |   6 +-
 .../viewer/wicket/ui/pages/entity/EntityPage.java  |   9 +-
 .../wicket/ui/panels/FormExecutorDefault.java      |  31 ++--
 .../wicket/ui/panels/FormExecutorStrategy.java     |  14 +-
 .../wicket/ui/panels/PromptFormAbstract.java       |   8 +-
 81 files changed, 564 insertions(+), 507 deletions(-)

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 55bb42e..c787c6b 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
@@ -212,6 +212,7 @@ public interface ObjectAdapter extends ManagedObject {
         public static boolean isVisible(
                 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;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Marshaller.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Marshaller.java
index 1fe1f01..894ec2f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Marshaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/Oid_Marshaller.java
@@ -25,7 +25,6 @@ import java.util.regex.Pattern;
 import java.util.stream.Stream;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.commons.internal.assertions._Assert;
 import org.apache.isis.commons.internal.assertions._Ensure;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._Strings;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionFacet.java
index a157bb8..18434a6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/modify/CollectionFacet.java
@@ -82,27 +82,27 @@ public interface CollectionFacet extends Facet {
 
     public static class Utils {
 
-        public static CollectionFacet getCollectionFacetFromSpec(final ManagedObject objectRepresentingCollection) {
-            final ObjectSpecification collectionSpec = objectRepresentingCollection.getSpecification();
+        public static CollectionFacet getCollectionFacetFromSpec(ManagedObject objectRepresentingCollection) {
+            val collectionSpec = objectRepresentingCollection.getSpecification();
             return collectionSpec.getFacet(CollectionFacet.class);
         }
 
-        public static int size(final ManagedObject collection) {
-            final CollectionFacet facet = getCollectionFacetFromSpec(collection);
-            return facet.size(collection);
+        public static int size(ManagedObject collection) {
+            val collectionFacet = getCollectionFacetFromSpec(collection);
+            return collectionFacet.size(collection);
         }
 
-        public static <T extends ManagedObject> Stream<T> streamAdapters(final T collectionAdapter) {
+        public static <T extends ManagedObject> Stream<T> streamAdapters(T collectionAdapter) {
             val collectionFacet = getCollectionFacetFromSpec(collectionAdapter);
             return Utils.<T>downCast(collectionFacet.stream(collectionAdapter));
         }
 
-        public static <T extends ManagedObject> List<T> toAdapterList(final T collectionAdapter) {
+        public static <T extends ManagedObject> List<T> toAdapterList(T collectionAdapter) {
             return streamAdapters(collectionAdapter)
                     .collect(Collectors.toList());
         }
 
-        private static <T extends ManagedObject> Stream<T> downCast(final Stream<ManagedObject> stream) {
+        private static <T extends ManagedObject> Stream<T> downCast(Stream<ManagedObject> stream) {
             final Function<ManagedObject, T> uncheckedCast = _Casts::uncheckedCast;
             return stream.map(uncheckedCast);
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueFacet.java
index 370cf9d..fdaf828 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueFacet.java
@@ -19,16 +19,16 @@
 
 package org.apache.isis.metamodel.facets.value.image;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public interface ImageValueFacet extends Facet {
 
-    ObjectAdapter createValue(java.awt.Image image);
+    ManagedObject createValue(java.awt.Image image);
 
-    java.awt.Image getImage(ObjectAdapter object);
+    java.awt.Image getImage(ManagedObject object);
 
-    int getHeight(ObjectAdapter object);
+    int getHeight(ManagedObject object);
 
-    int getWidth(ObjectAdapter object);
+    int getWidth(ManagedObject object);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueSemanticsProvider.java
index abcc93c..3a12eb7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueSemanticsProvider.java
@@ -20,9 +20,9 @@
 package org.apache.isis.metamodel.facets.value.image;
 
 import org.apache.isis.applib.value.Image;
-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.spec.ManagedObject;
 
 
 public class ImageValueSemanticsProvider extends ImageValueSemanticsProviderAbstract<Image> {
@@ -32,16 +32,16 @@ public class ImageValueSemanticsProvider extends ImageValueSemanticsProviderAbst
     }
 
     @Override
-    public int getHeight(final ObjectAdapter object) {
+    public int getHeight(final ManagedObject object) {
         return image(object).getHeight();
     }
 
-    private Image image(final ObjectAdapter object) {
+    private Image image(final ManagedObject object) {
         return (Image) object.getPojo();
     }
 
     @Override
-    public java.awt.Image getImage(final ObjectAdapter object) {
+    public java.awt.Image getImage(final ManagedObject object) {
         return createImage(image(object).getImage());
     }
 
@@ -55,7 +55,7 @@ public class ImageValueSemanticsProvider extends ImageValueSemanticsProviderAbst
     }
 
     @Override
-    public int getWidth(final ObjectAdapter object) {
+    public int getWidth(final ManagedObject object) {
         return image(object).getWidth();
     }
 
@@ -93,7 +93,7 @@ public class ImageValueSemanticsProvider extends ImageValueSemanticsProviderAbst
     }
 
     @Override
-    public ObjectAdapter createValue(final java.awt.Image image) {
+    public ManagedObject createValue(final java.awt.Image image) {
         return getObjectAdapterProvider().adapterFor(new Image(grabPixels(image)));
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java
index c4e933b..ce0b86e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/image/ImageValueSemanticsProviderAbstract.java
@@ -33,7 +33,9 @@ import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
 
-public abstract class ImageValueSemanticsProviderAbstract<T> extends ValueSemanticsProviderAndFacetAbstract<T> implements ImageValueFacet {
+public abstract class ImageValueSemanticsProviderAbstract<T> 
+extends ValueSemanticsProviderAndFacetAbstract<T> 
+implements ImageValueFacet {
 
     private static final int TYPICAL_LENGTH = 18;
     private static final Object DEFAULT_VALUE = null; // no default
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java
index 69a781c..b953281 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/imageawt/JavaAwtImageValueSemanticsProvider.java
@@ -21,9 +21,9 @@ package org.apache.isis.metamodel.facets.value.imageawt;
 
 import java.awt.Image;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.value.image.ImageValueSemanticsProviderAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 public class JavaAwtImageValueSemanticsProvider extends ImageValueSemanticsProviderAbstract<Image> {
 
@@ -32,16 +32,16 @@ public class JavaAwtImageValueSemanticsProvider extends ImageValueSemanticsProvi
     }
 
     @Override
-    public int getHeight(final ObjectAdapter object) {
+    public int getHeight(final ManagedObject object) {
         return image(object).getHeight(null);
     }
 
-    private Image image(final ObjectAdapter object) {
+    private Image image(final ManagedObject object) {
         return (Image) object.getPojo();
     }
 
     @Override
-    public Image getImage(final ObjectAdapter object) {
+    public Image getImage(final ManagedObject object) {
         return image(object);
     }
 
@@ -55,7 +55,7 @@ public class JavaAwtImageValueSemanticsProvider extends ImageValueSemanticsProvi
     }
 
     @Override
-    public int getWidth(final ObjectAdapter object) {
+    public int getWidth(final ManagedObject object) {
         return image(object).getWidth(null);
     }
 
@@ -75,7 +75,7 @@ public class JavaAwtImageValueSemanticsProvider extends ImageValueSemanticsProvi
     }
 
     @Override
-    public ObjectAdapter createValue(final Image image) {
+    public ManagedObject createValue(final Image image) {
         return getObjectAdapterProvider().adapterFor(image);
     }
 
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 313fb44..1bc6d50 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
@@ -92,14 +92,14 @@ public interface ManagedObject {
         return titleString(null);
     }
 
-    default String titleString(ObjectAdapter contextAdapterIfAny) {
+    default String titleString(ManagedObject contextAdapterIfAny) {
         return TitleUtil.titleString(this, contextAdapterIfAny);
     }
 
 
     public static class TitleUtil {
 
-        public static String titleString(ManagedObject managedObject, ObjectAdapter contextAdapterIfAny) {
+        public static String titleString(ManagedObject managedObject, ManagedObject contextAdapterIfAny) {
             if (managedObject.getSpecification().isParentedOrFreeCollection()) {
                 final CollectionFacet facet = managedObject.getSpecification().getFacet(CollectionFacet.class);
                 return collectionTitleString(managedObject, facet);
@@ -108,7 +108,7 @@ public interface ManagedObject {
             }
         }
 
-        private static String objectTitleString(ManagedObject managedObject, ObjectAdapter contextAdapterIfAny) {
+        private static String objectTitleString(ManagedObject managedObject, ManagedObject contextAdapterIfAny) {
             if (managedObject.getPojo() instanceof String) {
                 return (String) managedObject.getPojo();
             }
@@ -267,16 +267,6 @@ public interface ManagedObject {
     }
 
     @Deprecated
-    static RootOid _rootOidIfAny(ManagedObject adapter) {
-        // TODO Auto-generated method stub
-        val oid = ManagedObject.promote(adapter).getOid();
-        if(!(oid instanceof RootOid)) {
-            return null;
-        }
-        return (RootOid) oid;
-    }
-    
-    @Deprecated
     static RootOid _collectionOidIfAny(ManagedObject adapter) {
         // TODO Auto-generated method stub
         val oid = ManagedObject.promote(adapter).getOid();
@@ -313,13 +303,48 @@ public interface ManagedObject {
 
     static Oid _oid(ManagedObject adapter) {
         if(adapter instanceof ObjectAdapter) {
-            return Oids.copy(promote(adapter).getOid());
+            return Oids.copy(((ObjectAdapter)adapter).getOid());
         }
         
         return Oids.oidFactory.oidFor(adapter);
     }
 
-    
+    static RootOid _rootOidIfAny(ManagedObject adapter) {
+        val oid = _oid(adapter);
+        if(oid instanceof RootOid) {
+            return (RootOid) oid;
+        }
+        return null;
+    }
+
+    static boolean isEntity(ManagedObject adapter) {
+        if(adapter==null) {
+            return false;
+        }
+        return adapter.getSpecification().isEntity();
+    }
+
+    static boolean isValue(ManagedObject adapter) {
+        if(adapter==null) {
+            return false;
+        }
+        return adapter.getSpecification().isValue();
+    }
+
+    static boolean isBookmarkable(ManagedObject adapter) {
+        if(adapter==null) {
+            return false;
+        }
+        val spec = adapter.getSpecification();
+        if(spec.isManagedBean() || spec.isViewModel() || spec.isEntity()) {
+            // services and view models are bookmarkable
+            return true;
+        }
+        return false;
+//        val state = persistenceSession.stateOf(pojo);
+//        val isRepresentingPersistent = state.isAttached() || state.isDestroyed();
+//        return isRepresentingPersistent;
+    }
 
 
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java
index a477e9f..e5f5f35 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/value/ImageValueSemanticsProviderAbstractTest.java
@@ -28,9 +28,9 @@ import org.junit.Test;
 
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.config.IsisConfigurationLegacy;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.value.image.ImageValueSemanticsProviderAbstract;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.unittestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
 
@@ -96,21 +96,21 @@ class TestImageSemanticsProvider extends ImageValueSemanticsProviderAbstract<int
     }
 
     @Override
-    public int getHeight(final ObjectAdapter object) {
+    public int getHeight(final ManagedObject object) {
         return 0;
     }
 
     @Override
-    public Image getImage(final ObjectAdapter object) {
+    public Image getImage(final ManagedObject object) {
         return null;
     }
 
     @Override
-    public int getWidth(final ObjectAdapter object) {
+    public int getWidth(final ManagedObject object) {
         return 0;
     }
 
-    public ObjectAdapter setImage(final ObjectAdapter object, final Image image) {
+    public ManagedObject setImage(final ManagedObject object, final Image image) {
         return null;
     }
 
@@ -120,7 +120,7 @@ class TestImageSemanticsProvider extends ImageValueSemanticsProviderAbstract<int
     }
 
     @Override
-    public ObjectAdapter createValue(final Image image) {
+    public ManagedObject createValue(final Image image) {
         return null;
     }
 }
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 a328888..e93386a 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
@@ -110,7 +110,7 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
         dto.setTransactionId(transactionId);
 
         for (val targetAdapter : targetAdapters) {
-            final RootOid rootOid = (RootOid) ManagedObject.promote(targetAdapter).getOid();
+            final RootOid rootOid = (RootOid) ManagedObject._oid(targetAdapter);
             final Bookmark bookmark = rootOid.asBookmark();
             final OidsDto targets = CommandDtoUtils.targetsFor(dto);
             targets.getOid().add(bookmark.toOidDto());
diff --git a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java
index 5773dcc..8ab50cf 100644
--- a/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java
+++ b/core/runtime-web/src/main/java/org/apache/isis/webapp/modules/h2console/WebModuleH2Console.java
@@ -23,7 +23,6 @@ import javax.servlet.ServletContext;
 import javax.servlet.ServletContextListener;
 import javax.servlet.ServletException;
 
-import org.apache.isis.config.IsisConfiguration;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Service;
 
@@ -31,7 +30,7 @@ import org.apache.isis.applib.value.LocalResourcePath;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
-import org.apache.isis.config.IsisConfigurationLegacy;
+import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.webapp.modules.WebModule;
 import org.apache.isis.webapp.modules.WebModuleContext;
 
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
index 378965b..21dd132 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMemento.java
@@ -35,6 +35,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecId;
+import org.apache.isis.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.runtime.memento.ObjectAdapterMementoDefault.RecreateStrategy;
 
 import lombok.val;
@@ -68,9 +69,7 @@ public interface ObjectAdapterMemento extends Serializable {
 
     ObjectSpecId getObjectSpecId();
 
-    ObjectAdapter getObjectAdapter(); 
-
-    void resetVersion();
+    ObjectAdapter getObjectAdapter(SpecificationLoader specificationLoader); 
 
     // -- FACTORIES
 
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java
index ade2b4f..6812613 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoCollection.java
@@ -29,6 +29,7 @@ import org.apache.isis.commons.internal.ioc.BeanSort;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.spec.ObjectSpecId;
+import org.apache.isis.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.runtime.system.context.IsisContext;
 
 import lombok.Getter;
@@ -49,16 +50,11 @@ final class ObjectAdapterMementoCollection implements ObjectAdapterMemento {
     @Getter(onMethod = @__({@Override})) private final ObjectSpecId objectSpecId;
 
     @Override
-    public void resetVersion() {
-        throw _Exceptions.notImplemented(); // please unwrap at call-site
-    }
-
-    @Override
-    public ObjectAdapter getObjectAdapter() {
+    public ObjectAdapter getObjectAdapter(SpecificationLoader specificationLoader) {
 
         //TODO[2112] we don't need the persistence layer to do that!
         val listOfPojos = getContainer().stream()
-                .map(ObjectAdapterMemento::getObjectAdapter)
+                .map(memento->memento.getObjectAdapter(specificationLoader))
                 .filter(_NullSafe::isPresent)
                 .map(ObjectAdapter::getPojo)
                 .filter(_NullSafe::isPresent)
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
index aa7947a..68163be 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/memento/ObjectAdapterMementoSupport_usingDefault.java
@@ -53,7 +53,7 @@ implements ObjectAdapterMementoSupport {
     @Override
     public ObjectAdapterMemento mementoForRootOid(RootOid rootOid) {
         val delegate = ObjectAdapterMementoDefault.createPersistent(rootOid, specificationLoader);
-        return ObjectAdapterMementoDelegator.of(delegate, specificationLoader);
+        return ObjectAdapterMementoDelegator.of(delegate);
     }
 
     @Override
@@ -62,7 +62,7 @@ implements ObjectAdapterMementoSupport {
         if(delegate==null) {
             return null;
         }
-        return ObjectAdapterMementoDelegator.of(delegate, specificationLoader);
+        return ObjectAdapterMementoDelegator.of(delegate);
     }
 
     @Override
@@ -74,7 +74,7 @@ implements ObjectAdapterMementoSupport {
 
     @Override
     public ObjectAdapter reconstructObjectAdapter(ObjectAdapterMemento memento) {
-        return memento.getObjectAdapter();
+        return memento.getObjectAdapter(specificationLoader);
     }
 
     @RequiredArgsConstructor(staticName = "of")
@@ -83,7 +83,6 @@ implements ObjectAdapterMementoSupport {
         private static final long serialVersionUID = 1L;
 
         private final ObjectAdapterMementoDefault delegate;
-        private final transient SpecificationLoader specificationLoader;
 
         @Override
         public UUID getStoreKey() {
@@ -121,15 +120,10 @@ implements ObjectAdapterMementoSupport {
         }
 
         @Override
-        public ObjectAdapter getObjectAdapter() {
+        public ObjectAdapter getObjectAdapter(SpecificationLoader specificationLoader) {
             return delegate.getObjectAdapter(persistenceSession(), specificationLoader);
         }
-
-        @Override
-        public void resetVersion() {
-            delegate.resetVersion(persistenceSession(), specificationLoader);
-        }
-
+        
         private PersistenceSession persistenceSession() {
             return IsisContext.getPersistenceSession().get();
         }
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 c98867b..4542178 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
@@ -211,11 +211,12 @@ class ObjectAdapterContext_MementoSupport implements MementoRecreateObjectSuppor
     }
 
     private void updateOneToManyAssociation(
-            final ObjectAdapter objectAdapter, 
-            final OneToManyAssociation otma, 
-            final CollectionData collectionData) {
+            ManagedObject objectAdapter, 
+            OneToManyAssociation otma, 
+            CollectionData collectionData) {
 
         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()
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_newPageFactory.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_newPageFactory.java
index 37c1759..8d0b193 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_newPageFactory.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_newPageFactory.java
@@ -24,6 +24,7 @@ import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 
 import lombok.RequiredArgsConstructor;
@@ -66,6 +67,11 @@ class IsisWicketApplication_newPageFactory {
         
         @Override
         public <C extends IRequestablePage> C newPage(Class<C> pageClass) {
+            
+            if(EntityPage.class.equals(pageClass)) {
+                return _Casts.uncheckedCast(new EntityPage(holder.getCommonContext(), PageParametersUtils.newPageParameters()));
+            }
+            
             return delegate.newPage(pageClass);
         }
         
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java
index 9359bf6..a644270 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/ConverterForObjectAdapterMemento.java
@@ -66,7 +66,7 @@ public class ConverterForObjectAdapterMemento implements IConverter<ObjectAdapte
         if (memento == null) {
             return null;
         }
-        final Oid oid = memento.getObjectAdapter().getOid();
+        final Oid oid = memento.getObjectAdapter(commonContext.getSpecificationLoader()).getOid();
         if (oid == null || oid.isValue()) {
             // values
             return memento.toString();
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/common/OnConcurrencyExceptionHandler.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/common/OnConcurrencyExceptionHandler.java
index 4c6f169..a99ae2d 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/common/OnConcurrencyExceptionHandler.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/common/OnConcurrencyExceptionHandler.java
@@ -24,8 +24,8 @@ import java.io.Serializable;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Decouples the handling of concurrency exceptions when a bulk action is invoked (between the toggle box column and the
@@ -34,7 +34,8 @@ import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
 public interface OnConcurrencyExceptionHandler extends Serializable {
 
     void onConcurrencyException(
-            Component context, ObjectAdapter selectedAdapter,
+            Component context, 
+            ManagedObject selectedAdapter,
             ConcurrencyException ex,
             AjaxRequestTarget ajaxRequestTarget);
 
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/common/OnSelectionHandler.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/common/OnSelectionHandler.java
index 7075f97..cb08dc0 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/common/OnSelectionHandler.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/common/OnSelectionHandler.java
@@ -24,7 +24,7 @@ import java.io.Serializable;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 /**
  * Decouples the selecting of items (by a toggle box column) from the invocation of bulk actions on those items (by
@@ -32,9 +32,7 @@ import org.apache.isis.metamodel.adapter.ObjectAdapter;
  */
 public interface OnSelectionHandler extends Serializable {
 
-    void onSelected(
-            Component context, ObjectAdapter selectedAdapter,
-            AjaxRequestTarget ajaxRequestTarget);
+    void onSelected(Component context, ManagedObject selectedAdapter, AjaxRequestTarget ajaxRequestTarget);
 
 
 }
\ No newline at end of file
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
index 57a6b55..f8854d5 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/links/LinkAndLabel.java
@@ -28,8 +28,8 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.members.cssclassfa.CssClassFaPosition;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 
 public class LinkAndLabel implements Serializable {
@@ -43,7 +43,7 @@ public class LinkAndLabel implements Serializable {
     }
 
     public static LinkAndLabel newLinkAndLabel(
-            final ObjectAdapter objectAdapter,
+            final ManagedObject objectAdapter,
             final ObjectAction objectAction,
             final AbstractLink link,
             final boolean blobOrClob) {
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java
index 532ed26..2c43b83 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java
@@ -20,14 +20,14 @@ package org.apache.isis.viewer.wicket.model.models;
 
 import org.apache.wicket.model.IModel;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 
-public interface ActionArgumentModel extends IModel<ObjectAdapter> {
+public interface ActionArgumentModel extends IModel<ManagedObject> {
 
     ActionParameterMemento getParameterMemento();
 
     void reset();
 
-    void setActionArgsHint(ObjectAdapter[] argumentsAsArray);
+    void setActionArgsHint(ManagedObject[] argumentsAsArray);
 }
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 ba5f7da..402b6b3 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
@@ -51,7 +51,6 @@ import org.apache.isis.applib.value.NamedWithMimeType;
 import org.apache.isis.commons.internal.base._NullSafe;
 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.adapter.oid.Oid;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.consent.Consent;
@@ -77,7 +76,7 @@ import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
 import lombok.val;
 
-public class ActionModel extends BookmarkableModel<ObjectAdapter> implements FormExecutorContext {
+public class ActionModel extends BookmarkableModel<ManagedObject> implements FormExecutorContext {
 
     private static final long serialVersionUID = 1L;
 
@@ -119,7 +118,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
      *
      * see {@link #ActionModel(PageParameters, SpecificationLoader)}
      */
-    public static PageParameters createPageParameters(ObjectAdapter adapter, ObjectAction objectAction) {
+    public static PageParameters createPageParameters(ManagedObject adapter, ObjectAction objectAction) {
 
         val pageParameters = PageParametersUtils.newPageParameters();
 
@@ -127,7 +126,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
         //                adapter.getOid().enString():
         //                    adapter.getOid().enStringNoVersion();
 
-        val oidStr = adapter.getOid().enStringNoVersion();
+        val oidStr = ManagedObject._oid(adapter).enStringNoVersion();
 
         PageParameterNames.OBJECT_OID.addStringTo(pageParameters, oidStr);
 
@@ -192,14 +191,14 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
 
     @Override
     public PageParameters getPageParametersWithoutUiHints() {
-        final ObjectAdapter adapter = getTargetAdapter();
+        val adapter = getTargetAdapter();
         final ObjectAction objectAction = getAction();
         final PageParameters pageParameters = createPageParameters(
                 adapter, objectAction);
 
         // capture argument values
-        final ObjectAdapter[] argumentsAsArray = getArgumentsAsArray();
-        for(final ObjectAdapter argumentAdapter: argumentsAsArray) {
+        final ManagedObject[] argumentsAsArray = getArgumentsAsArray();
+        for(val argumentAdapter: argumentsAsArray) {
             final String encodedArg = encodeArg(argumentAdapter);
             PageParameterNames.ACTION_ARGS.addStringTo(pageParameters, encodedArg);
         }
@@ -215,12 +214,12 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
 
     @Override
     public String getTitle() {
-        final ObjectAdapter adapter = getTargetAdapter();
+        val adapter = getTargetAdapter();
         final ObjectAction objectAction = getAction();
 
         final StringBuilder buf = new StringBuilder();
-        final ObjectAdapter[] argumentsAsArray = getArgumentsAsArray();
-        for(final ObjectAdapter argumentAdapter: argumentsAsArray) {
+        final ManagedObject[] argumentsAsArray = getArgumentsAsArray();
+        for(val argumentAdapter: argumentsAsArray) {
             if(buf.length() > 0) {
                 buf.append(",");
             }
@@ -240,7 +239,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
     //////////////////////////////////////////////////
 
 
-    private static String titleOf(final ObjectAdapter argumentAdapter) {
+    private static String titleOf(ManagedObject argumentAdapter) {
         return argumentAdapter!=null?argumentAdapter.titleString(null):"";
     }
 
@@ -370,11 +369,11 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
     }
 
     private void setArgument(final int paramNum, final ObjectSpecification argSpec, final String encoded) {
-        final ObjectAdapter argumentAdapter = decodeArg(argSpec, encoded);
+        val argumentAdapter = decodeArg(argSpec, encoded);
         setArgument(paramNum, argumentAdapter);
     }
 
-    private String encodeArg(final ObjectAdapter adapter) {
+    private String encodeArg(ManagedObject adapter) {
         if(adapter == null) {
             return NULL_ARG;
         }
@@ -385,10 +384,10 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
             return encodeable.toEncodedString(adapter);
         }
 
-        return adapter.getOid().enStringNoVersion();
+        return ManagedObject._oid(adapter).enStringNoVersion();
     }
 
-    private ObjectAdapter decodeArg(final ObjectSpecification objSpec, final String encoded) {
+    private ManagedObject decodeArg(final ObjectSpecification objSpec, final String encoded) {
         if(NULL_ARG.equals(encoded)) {
             return null;
         }
@@ -407,7 +406,8 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
         }
     }
 
-    private void setArgument(final int paramNum, final ObjectAdapter argumentAdapter) {
+    private void setArgument(int paramNum, ManagedObject argumentAdapter) {
+        
         final ObjectAction action = actionMemento.getAction(getSpecificationLoader());
         final ObjectActionParameter actionParam = action.getParameters().get(paramNum);
         final ActionParameterMemento apm = new ActionParameterMemento(actionParam);
@@ -427,7 +427,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
         return actionArgumentModel;
     }
 
-    public ObjectAdapter getTargetAdapter() {
+    public ManagedObject getTargetAdapter() {
         return entityModel.load();
     }
 
@@ -436,13 +436,13 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
     }
 
     @Override
-    protected ObjectAdapter load() {
+    protected ManagedObject load() {
 
         // from getObject()/reExecute
         detach(); // force re-execute
 
         // TODO: think we need another field to determine if args have been populated.
-        final ObjectAdapter results = executeAction();
+        val results = executeAction();
 
         return results;
     }
@@ -454,10 +454,10 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
     // for any other value for Where
     public static final Where WHERE_FOR_ACTION_INVOCATION = Where.ANYWHERE;
 
-    private ObjectAdapter executeAction() {
+    private ManagedObject executeAction() {
 
-        final ObjectAdapter targetAdapter = getTargetAdapter();
-        final ObjectAdapter[] arguments = getArgumentsAsArray();
+        val targetAdapter = getTargetAdapter();
+        final ManagedObject[] arguments = getArgumentsAsArray();
         final ObjectAction action = getAction();
 
         // if this action is a mixin, then it will fill in the details automatically.
@@ -487,7 +487,7 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
 
     public String getReasonDisabledIfAny() {
 
-        final ObjectAdapter targetAdapter = getTargetAdapter();
+        val targetAdapter = getTargetAdapter();
         final ObjectAction objectAction = getAction();
 
         final Consent usability =
@@ -502,8 +502,8 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
 
     public boolean isVisible() {
 
-        final ObjectAdapter targetAdapter = getTargetAdapter();
-        final ObjectAction objectAction = getAction();
+        val targetAdapter = getTargetAdapter();
+        val objectAction = getAction();
 
         final Consent visibility =
                 objectAction.isVisible(
@@ -515,8 +515,8 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
 
 
     public String getReasonInvalidIfAny() {
-        final ObjectAdapter targetAdapter = getTargetAdapter();
-        final ObjectAdapter[] proposedArguments = getArgumentsAsArray();
+        val targetAdapter = getTargetAdapter();
+        final ManagedObject[] proposedArguments = getArgumentsAsArray();
         final ObjectAction objectAction = getAction();
         final Consent validity = objectAction.isProposedArgumentSetValid(targetAdapter, proposedArguments,
                 InteractionInitiatedBy.USER);
@@ -524,17 +524,17 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
     }
 
     @Override
-    public void setObject(final ObjectAdapter object) {
+    public void setObject(final ManagedObject object) {
         throw new UnsupportedOperationException("target adapter for ActionModel cannot be changed");
     }
 
-    public ObjectAdapter[] getArgumentsAsArray() {
+    public ManagedObject[] getArgumentsAsArray() {
         if(this.arguments.size() < getAction().getParameterCount()) {
             primeArgumentModels();
         }
 
         final ObjectAction objectAction = getAction();
-        final ObjectAdapter[] arguments = new ObjectAdapter[objectAction.getParameterCount()];
+        final ManagedObject[] arguments = new ManagedObject[objectAction.getParameterCount()];
         for (int i = 0; i < arguments.length; i++) {
             final ActionArgumentModel actionArgumentModel = this.arguments.get(i);
             arguments[i] = actionArgumentModel.getObject();
@@ -571,8 +571,8 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
      * Previously there was exception handling code here also, but this has now been centralized
      * within FormExecutorAbstract
      */
-    public ObjectAdapter execute() {
-        final ObjectAdapter resultAdapter = this.getObject();
+    public ManagedObject execute() {
+        final ManagedObject resultAdapter = this.getObject();
         return resultAdapter;
     }
 
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 dc369f0..df5ad1a 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
@@ -25,7 +25,6 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
-import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -91,7 +90,7 @@ implements LinksProvider, UiHintContainer {
     }
 
     public static EntityCollectionModel createStandalone(
-            ObjectAdapter collectionAsAdapter, 
+            ManagedObject collectionAsAdapter, 
             ModelAbstract<?> model) {
 
         // dynamically determine the spec of the elements
@@ -201,7 +200,7 @@ implements LinksProvider, UiHintContainer {
             private Stream<ObjectAdapter> loadElementsOneByOne(final EntityCollectionModel model) {
 
                 return stream(model.mementoList)
-                        .map(ObjectAdapterMemento::getObjectAdapter)
+                        .map(memento->memento.getObjectAdapter(model.getSpecificationLoader()))
                         .filter(_NullSafe::isPresent);
             }
 
@@ -247,10 +246,11 @@ implements LinksProvider, UiHintContainer {
             @Override
             List<ObjectAdapter> load(EntityCollectionModel colModel) {
 
-                final ObjectAdapter adapter = colModel.getParentObjectAdapterMemento().getObjectAdapter();
+                final ObjectAdapter adapter = colModel.getParentObjectAdapterMemento()
+                        .getObjectAdapter(colModel.getSpecificationLoader());
 
-                final OneToManyAssociation collection = colModel.collectionMemento.getCollection(
-                        colModel.getSpecificationLoader());
+                final OneToManyAssociation collection = colModel.collectionMemento
+                        .getCollection(colModel.getSpecificationLoader());
 
                 final ManagedObject collectionAsAdapter = collection.get(adapter, InteractionInitiatedBy.USER);
 
@@ -514,16 +514,16 @@ implements LinksProvider, UiHintContainer {
         return collectionMemento;
     }
 
-    private static Iterable<Object> asIterable(final ObjectAdapter resultAdapter) {
+    private static Iterable<Object> asIterable(final ManagedObject resultAdapter) {
         return _Casts.uncheckedCast(resultAdapter.getPojo());
     }
 
-    private static Stream<Object> streamElementsOf(final ObjectAdapter resultAdapter) {
+    private static Stream<Object> streamElementsOf(final ManagedObject resultAdapter) {
         return _NullSafe.stream(asIterable(resultAdapter));
     }
 
 
-    public void toggleSelectionOn(ObjectAdapter selectedAdapter) {
+    public void toggleSelectionOn(ManagedObject selectedAdapter) {
         ObjectAdapterMemento selectedAsMemento = ObjectAdapterMemento
                 .ofAdapter(selectedAdapter, super.getMementoSupport());
 
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 b6ab811..87952eb 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
@@ -55,13 +55,13 @@ import lombok.RequiredArgsConstructor;
 import lombok.val;
 
 /**
- * Backing model to represent a {@link ObjectAdapter}.
+ * Backing model to represent a {@link ManagedObject}.
  *
  * <p>
- * So that the model is {@link Serializable}, the {@link ObjectAdapter} is
+ * So that the model is {@link Serializable}, the {@link ManagedObject} is
  * stored as a {@link ObjectAdapterMemento}.
  */
-public class EntityModel extends BookmarkableModel<ObjectAdapter> 
+public class EntityModel extends BookmarkableModel<ManagedObject> 
 implements ObjectAdapterModel, UiHintContainer {
 
     private static final long serialVersionUID = 1L;
@@ -72,14 +72,13 @@ implements ObjectAdapterModel, UiHintContainer {
      * Factory method for creating {@link PageParameters} to represent an
      * entity.
      */
-    public static PageParameters createPageParameters(final ObjectAdapter adapter) {
+    public static PageParameters createPageParameters(ManagedObject adapter) {
 
-        final PageParameters pageParameters = PageParametersUtils.newPageParameters();
+        val pageParameters = PageParametersUtils.newPageParameters();
+        val isEntity = ManagedObject.isEntity(adapter);
 
-        final Boolean persistent = adapter != null && adapter.isRepresentingPersistent();
-
-        if (persistent) {
-            final String oidStr = adapter.getOid().enStringNoVersion();
+        if (isEntity) {
+            val oidStr = ManagedObject._oid(adapter).enStringNoVersion();
             PageParameterNames.OBJECT_OID.addStringTo(pageParameters, oidStr);
         } else {
             // don't do anything; instead the page should be redirected back to
@@ -89,15 +88,7 @@ implements ObjectAdapterModel, UiHintContainer {
         return pageParameters;
     }
 
-    @Deprecated //TODO [2033] remove
-    public void resetVersion() {
-        if(getObjectAdapterMemento() == null) {
-            return;
-        }
-        getObjectAdapterMemento().resetVersion();
-    }
-
-    public enum RenderingHint {
+     public enum RenderingHint {
         REGULAR(Where.OBJECT_FORMS),
         PARENTED_PROPERTY_COLUMN(Where.PARENTED_TABLES),
         PARENTED_TITLE_COLUMN(Where.PARENTED_TABLES),
@@ -344,21 +335,21 @@ implements ObjectAdapterModel, UiHintContainer {
      * Callback from {@link #getObject()}.
      */
     @Override
-    public ObjectAdapter load() {
+    public ManagedObject load() {
         if (adapterMemento == null) {
             return null;
         }
-        final ObjectAdapter objectAdapter = adapterMemento.getObjectAdapter();
-        return objectAdapter;
+        val adapter = adapterMemento.getObjectAdapter(getSpecificationLoader());
+        return adapter;
     }
 
     @Deprecated //removed with ISIS-2154
-    public ObjectAdapter loadWithConcurrencyChecking() {
+    public ManagedObject loadWithConcurrencyChecking() {
         return load();
     }
 
     @Override
-    public void setObject(final ObjectAdapter adapter) {
+    public void setObject(ManagedObject adapter) {
         super.setObject(adapter);
         adapterMemento = ObjectAdapterMemento.ofAdapter(adapter, super.getMementoSupport());
     }
@@ -366,7 +357,7 @@ implements ObjectAdapterModel, UiHintContainer {
     public void setObjectMemento(final ObjectAdapterMemento memento) {
         super.setObject(
                 memento != null
-                ? memento.getObjectAdapter()
+                ? memento.getObjectAdapter(getSpecificationLoader())
                         : null);
         adapterMemento = memento;
     }
@@ -399,14 +390,14 @@ implements ObjectAdapterModel, UiHintContainer {
      * {@link #getObject() entity}.
      */
     public void resetPropertyModels() {
-        adapterMemento.resetVersion();
+        //adapterMemento.resetVersion();
         for (final PropertyMemento pm : propertyScalarModels.keySet()) {
             OneToOneAssociation otoa = pm.getProperty(super.getSpecificationLoader());
             val scalarModel = propertyScalarModels.get(pm);
             val adapter = getObject();
             val associatedAdapter =
                     otoa.get(adapter, InteractionInitiatedBy.USER);
-            scalarModel.setObject(ManagedObject.promote(associatedAdapter));
+            scalarModel.setObject(associatedAdapter);
         }
     }
 
@@ -528,7 +519,7 @@ implements ObjectAdapterModel, UiHintContainer {
             if (hasPending) {
                 return pending;
             }
-            final ObjectAdapter adapter = entityModel.getObject();
+            val adapter = entityModel.getObject();
             return ObjectAdapterMemento.ofAdapter(adapter, entityModel.getMementoSupport());
         }
 
@@ -546,11 +537,11 @@ implements ObjectAdapterModel, UiHintContainer {
         private ObjectAdapter getPendingAdapter() {
             final ObjectAdapterMemento memento = getObject();
             return memento != null
-                    ? memento.getObjectAdapter()
+                    ? memento.getObjectAdapter(entityModel.getSpecificationLoader())
                             : null;
         }
 
-        public ObjectAdapter getPendingElseCurrentAdapter() {
+        public ManagedObject getPendingElseCurrentAdapter() {
             return hasPending ? getPendingAdapter() : entityModel.getObject();
         }
 
@@ -565,7 +556,7 @@ implements ObjectAdapterModel, UiHintContainer {
     }
 
 
-    public ObjectAdapter getPendingElseCurrentAdapter() {
+    public ManagedObject getPendingElseCurrentAdapter() {
         return pendingModel.getPendingElseCurrentAdapter();
     }
 
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelForReference.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelForReference.java
index 2565f72..eb77373 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelForReference.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModelForReference.java
@@ -21,7 +21,7 @@ package org.apache.isis.viewer.wicket.model.models;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.applib.services.hint.HintStore;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.runtime.memento.ObjectAdapterMemento;
 
@@ -44,12 +44,12 @@ public class EntityModelForReference implements ObjectAdapterModel {
     }
 
     @Override
-    public ObjectAdapter getObject() {
+    public ManagedObject getObject() {
         return scalarModel.getPendingElseCurrentAdapter();
     }
 
     @Override
-    public void setObject(final ObjectAdapter adapter) {
+    public void setObject(final ManagedObject adapter) {
         // no-op
     }
 
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ObjectAdapterModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ObjectAdapterModel.java
index ebe68b7..011fc1c 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ObjectAdapterModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ObjectAdapterModel.java
@@ -21,17 +21,17 @@ package org.apache.isis.viewer.wicket.model.models;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.runtime.memento.ObjectAdapterMemento;
 
-public interface ObjectAdapterModel extends IModel<ObjectAdapter> {
+public interface ObjectAdapterModel extends IModel<ManagedObject> {
 
     ObjectAdapterMemento getContextAdapterIfAny();
     void setContextAdapterIfAny(ObjectAdapterMemento contextAdapterIfAny);
 
     EntityModel.RenderingHint getRenderingHint();
-    void setRenderingHint(final EntityModel.RenderingHint renderingHint);
+    void setRenderingHint(EntityModel.RenderingHint renderingHint);
 
     PageParameters getPageParametersWithoutUiHints();
 
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 fe2f169..5851a3c 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
@@ -58,7 +58,7 @@ import org.apache.isis.viewer.wicket.model.links.LinksProvider;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
 
-import lombok.val;
+
 
 /**
  * Represents a scalar of an entity, either a {@link Kind#PROPERTY property} or
@@ -78,7 +78,8 @@ import lombok.val;
  *     common superclass for both EntityModel and ScalarModel.
  * </p>
  */
-public class ScalarModel extends EntityModel implements LinksProvider, FormExecutorContext, ActionArgumentModel {
+public class ScalarModel extends EntityModel 
+implements LinksProvider, FormExecutorContext, ActionArgumentModel {
 
     private static final long serialVersionUID = 1L;
 
@@ -110,7 +111,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
 
             @Override
             public boolean whetherHidden(final ScalarModel scalarModel, final Where where) {
-                final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
+                final ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
                 final OneToOneAssociation property = scalarModel.getPropertyMemento().getProperty(scalarModel.getSpecificationLoader());
                 try {
                     final Consent visibility = property.isVisible(parentAdapter, InteractionInitiatedBy.USER, where);
@@ -122,7 +123,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
 
             @Override
             public String whetherDisabled(final ScalarModel scalarModel, final Where where) {
-                final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
+                final ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
                 final OneToOneAssociation property = scalarModel.getPropertyMemento().getProperty(scalarModel.getSpecificationLoader());
                 try {
                     final Consent usable = property.isUsable(parentAdapter, InteractionInitiatedBy.USER, where);
@@ -140,9 +141,9 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                     parseableFacet = property.getSpecification().getFacet(ParseableFacet.class);
                 }
                 try {
-                    final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
+                    final ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
                     final ManagedObject currentValue = property.get(parentAdapter, InteractionInitiatedBy.USER);
-                    final ObjectAdapter proposedAdapter =
+                    final ManagedObject proposedAdapter =
                             parseableFacet.parseTextEntry(currentValue, proposedPojoAsStr, InteractionInitiatedBy.USER);
                     final Consent valid = property.isAssociationValid(parentAdapter, proposedAdapter,
                             InteractionInitiatedBy.USER);
@@ -157,8 +158,8 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             }
 
             @Override
-            public String validate(final ScalarModel scalarModel, final ObjectAdapter proposedAdapter) {
-                final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
+            public String validate(final ScalarModel scalarModel, final ManagedObject proposedAdapter) {
+                final ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
                 final OneToOneAssociation property = scalarModel.getPropertyMemento().getProperty(scalarModel.getSpecificationLoader());
                 try {
                     final Consent valid = property.isAssociationValid(parentAdapter, proposedAdapter,
@@ -182,16 +183,16 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             }
 
             @Override
-            public ObjectAdapter getDefault(
+            public ManagedObject getDefault(
                     final ScalarModel scalarModel,
-                    final ObjectAdapter[] argsIfAvailable,
+                    final ManagedObject[] argsIfAvailable,
                     final int paramNumUpdated,
                     final AuthenticationSession authenticationSession) {
 
                 final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
                 final OneToOneAssociation property = propertyMemento.getProperty(scalarModel.getSpecificationLoader());
-                ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
-                return ManagedObject.promote(property.getDefault(parentAdapter));
+                ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
+                return property.getDefault(parentAdapter);
             }
 
             @Override
@@ -202,14 +203,14 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             }
 
             @Override
-            public List<ObjectAdapter> getChoices(
+            public List<ManagedObject> getChoices(
                     final ScalarModel scalarModel,
-                    final ObjectAdapter[] argumentsIfAvailable,
+                    final ManagedObject[] argumentsIfAvailable,
                     final AuthenticationSession authenticationSession) {
 
                 final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
                 final OneToOneAssociation property = propertyMemento.getProperty(scalarModel.getSpecificationLoader());
-                ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
+                ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
                 final ManagedObject[] choices = property.getChoices(
                         parentAdapter,
                         InteractionInitiatedBy.USER);
@@ -225,14 +226,14 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             }
 
             @Override
-            public List<ObjectAdapter> getAutoComplete(
+            public List<ManagedObject> getAutoComplete(
                     final ScalarModel scalarModel,
                     final String searchArg,
                     final AuthenticationSession authenticationSession) {
 
                 final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
                 final OneToOneAssociation property = propertyMemento.getProperty(scalarModel.getSpecificationLoader());
-                final ObjectAdapter parentAdapter =
+                final ManagedObject parentAdapter =
                         scalarModel.getParentEntityModel().load();
                 final ManagedObject[] choices =
                         property.getAutoComplete(
@@ -253,12 +254,6 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                 }
             }
 
-
-            @Override
-            public void resetVersion(ScalarModel scalarModel) {
-                scalarModel.getParentEntityModel().resetVersion();
-            }
-
             @Override
             public String getDescribedAs(final ScalarModel scalarModel) {
                 final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
@@ -308,13 +303,14 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             public void reset(ScalarModel scalarModel) {
                 final OneToOneAssociation property = scalarModel.propertyMemento.getProperty(scalarModel.getSpecificationLoader());
 
-                final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
+                //XXX lombok issue, no val
+                ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
 
                 setObjectFromPropertyIfVisible(scalarModel, property, parentAdapter);
             }
 
             @Override
-            public ObjectAdapter load(final ScalarModel scalarModel) {
+            public ManagedObject load(final ScalarModel scalarModel) {
                 return scalarModel.loadFromSuper();
             }
 
@@ -377,7 +373,8 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                 final ObjectActionParameter parameter = scalarModel.getParameterMemento().getActionParameter(
                         scalarModel.getSpecificationLoader());
                 try {
-                    final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
+                    //XXX lombok issue, no val
+                    ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
                     final String invalidReasonIfAny = parameter.isValid(parentAdapter, proposedPojoAsStr,
                             InteractionInitiatedBy.USER
                             );
@@ -388,11 +385,12 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             }
 
             @Override
-            public String validate(final ScalarModel scalarModel, final ObjectAdapter proposedAdapter) {
+            public String validate(final ScalarModel scalarModel, final ManagedObject proposedAdapter) {
                 final ObjectActionParameter parameter = scalarModel.getParameterMemento().getActionParameter(
                         scalarModel.getSpecificationLoader());
                 try {
-                    final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
+                    //XXX lombok issue, no val
+                    ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
                     final String invalidReasonIfAny = parameter.isValid(parentAdapter, proposedAdapter.getPojo(),
                             InteractionInitiatedBy.USER
                             );
@@ -417,18 +415,18 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             }
 
             @Override
-            public ObjectAdapter getDefault(
+            public ManagedObject getDefault(
                     final ScalarModel scalarModel,
-                    final ObjectAdapter[] argsIfAvailable,
+                    final ManagedObject[] argsIfAvailable,
                     final int paramNumUpdated,
                     final AuthenticationSession authenticationSession) {
 
                 final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
                 final ObjectActionParameter actionParameter = parameterMemento.getActionParameter(scalarModel.getSpecificationLoader());
 
-                final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
-                return ManagedObject.promote(actionParameter.getDefault(parentAdapter, argsIfAvailable, paramNumUpdated)
-                       );
+                //XXX lombok issue, no val
+                ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
+                return actionParameter.getDefault(parentAdapter, argsIfAvailable, paramNumUpdated);
             }
 
             @Override
@@ -438,14 +436,15 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                 return actionParameter.hasChoices();
             }
             @Override
-            public List<ObjectAdapter> getChoices(
+            public List<ManagedObject> getChoices(
                     final ScalarModel scalarModel,
-                    final ObjectAdapter[] argumentsIfAvailable,
+                    final ManagedObject[] argumentsIfAvailable,
                     final AuthenticationSession authenticationSession) {
                 final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
                 final ObjectActionParameter actionParameter = parameterMemento.getActionParameter(scalarModel.getSpecificationLoader());
 
-                final ObjectAdapter parentAdapter = scalarModel.getParentEntityModel().load();
+                //XXX lombok issue, no val
+                ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
 
                 final ManagedObject[] choices =
                         actionParameter.getChoices(
@@ -461,15 +460,14 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                 return actionParameter.hasAutoComplete();
             }
             @Override
-            public List<ObjectAdapter> getAutoComplete(
+            public List<ManagedObject> getAutoComplete(
                     final ScalarModel scalarModel,
                     final String searchArg,
                     final AuthenticationSession authenticationSession) {
                 final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
                 final ObjectActionParameter actionParameter = parameterMemento.getActionParameter(scalarModel.getSpecificationLoader());
 
-                final ObjectAdapter parentAdapter =
-                        scalarModel.getParentEntityModel().load();
+                ManagedObject parentAdapter = scalarModel.getParentEntityModel().load();
                 final ManagedObject[] choices = actionParameter.getAutoComplete(
                         parentAdapter, searchArg,
                         InteractionInitiatedBy.USER);
@@ -489,10 +487,6 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             }
 
             @Override
-            public void resetVersion(ScalarModel scalarModel) {
-                // no-op?
-            }
-            @Override
             public String getDescribedAs(final ScalarModel scalarModel) {
                 final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
                 final ObjectActionParameter actionParameter = parameterMemento.getActionParameter(scalarModel.getSpecificationLoader());
@@ -541,18 +535,18 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             public void reset(ScalarModel scalarModel) {
                 final ObjectActionParameter actionParameter = scalarModel.parameterMemento.getActionParameter(
                         scalarModel.getSpecificationLoader());
-                final ObjectAdapter parentAdapter =
+                final ManagedObject parentAdapter =
                         scalarModel.getParentEntityModel().load();
                 final ManagedObject defaultAdapter = actionParameter.getDefault(parentAdapter, null, null);
-                scalarModel.setObject(ManagedObject.promote(defaultAdapter));
+                scalarModel.setObject(defaultAdapter);
             }
 
             @Override
-            public ObjectAdapter load(final ScalarModel scalarModel) {
+            public ManagedObject load(final ScalarModel scalarModel) {
                 final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
                 final ObjectActionParameter actionParameter = parameterMemento
                         .getActionParameter(scalarModel.getSpecificationLoader());
-                final ObjectAdapter objectAdapter = scalarModel.loadFromSuper();
+                final ManagedObject objectAdapter = scalarModel.loadFromSuper();
 
                 if(objectAdapter != null) {
                     return objectAdapter;
@@ -591,10 +585,9 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
 
         };
 
-        private static List<ObjectAdapter> choicesAsList(final ManagedObject[] choices) {
+        private static List<ManagedObject> choicesAsList(final ManagedObject[] choices) {
             if (choices != null && choices.length > 0) {
                 return Stream.of(choices)
-                        .map(x->ManagedObject.promote(x))
                         .collect(Collectors.toList());
             }
             return Collections.emptyList();
@@ -612,7 +605,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
 
         public abstract String parseAndValidate(ScalarModel scalarModel, String proposedPojoAsStr);
 
-        public abstract String validate(ScalarModel scalarModel, ObjectAdapter proposedAdapter);
+        public abstract String validate(ScalarModel scalarModel, ManagedObject proposedAdapter);
 
         public abstract String getCssClass(ScalarModel scalarModel);
 
@@ -626,28 +619,26 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             return required;
         }
 
-        public abstract ObjectAdapter getDefault(
+        public abstract ManagedObject getDefault(
                 final ScalarModel scalarModel,
-                final ObjectAdapter[] argsIfAvailable,
+                final ManagedObject[] argsIfAvailable,
                 final int paramNumUpdated,
                 final AuthenticationSession authenticationSession);
 
         public abstract boolean hasChoices(ScalarModel scalarModel);
-        public abstract List<ObjectAdapter> getChoices(
+        public abstract List<ManagedObject> getChoices(
                 final ScalarModel scalarModel,
-                final ObjectAdapter[] argumentsIfAvailable,
+                final ManagedObject[] argumentsIfAvailable,
                 final AuthenticationSession authenticationSession);
 
         public abstract boolean hasAutoComplete(ScalarModel scalarModel);
-        public abstract List<ObjectAdapter> getAutoComplete(
+        public abstract List<ManagedObject> getAutoComplete(
                 ScalarModel scalarModel,
                 String searchArg,
                 final AuthenticationSession authenticationSession);
 
         public abstract int getAutoCompleteOrChoicesMinLength(ScalarModel scalarModel);
 
-        public abstract void resetVersion(ScalarModel scalarModel);
-
         public abstract String getDescribedAs(ScalarModel scalarModel);
 
         public abstract Integer getLength(ScalarModel scalarModel);
@@ -660,7 +651,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
         public abstract void init(ScalarModel scalarModel);
         public abstract void reset(ScalarModel scalarModel);
 
-        public abstract ObjectAdapter load(final ScalarModel scalarModel);
+        public abstract ManagedObject load(final ScalarModel scalarModel);
 
         public abstract boolean isCollection(final ScalarModel scalarModel);
 
@@ -672,11 +663,11 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
     private final EntityModel parentEntityModel;
 
     @Override
-    public ObjectAdapter load() {
+    public ManagedObject load() {
         return kind.load(this);
     }
 
-    private ObjectAdapter loadFromSuper() {
+    private ManagedObject loadFromSuper() {
         return super.load();
     }
 
@@ -746,7 +737,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
     private void getAndStore(final EntityModel parentEntityModel) {
         final ObjectAdapterMemento parentAdapterMemento = parentEntityModel.getObjectAdapterMemento();
         final OneToOneAssociation property = propertyMemento.getProperty(getSpecificationLoader());
-        final ObjectAdapter parentAdapter = parentAdapterMemento.getObjectAdapter();
+        final ManagedObject parentAdapter = parentAdapterMemento.getObjectAdapter(getSpecificationLoader());
 
         setObjectFromPropertyIfVisible(ScalarModel.this, property, parentAdapter);
     }
@@ -754,16 +745,16 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
     private static void setObjectFromPropertyIfVisible(
             final ScalarModel scalarModel,
             final OneToOneAssociation property,
-            final ObjectAdapter parentAdapter) {
+            final ManagedObject parentAdapter) {
 
         final Where where = scalarModel.getRenderingHint().asWhere();
 
         final Consent visibility =
                 property.isVisible(parentAdapter, InteractionInitiatedBy.FRAMEWORK, where);
 
-        final ObjectAdapter associatedAdapter;
+        final ManagedObject associatedAdapter;
         if (visibility.isAllowed()) {
-            associatedAdapter = ManagedObject.promote(property.get(parentAdapter, InteractionInitiatedBy.USER));
+            associatedAdapter = property.get(parentAdapter, InteractionInitiatedBy.USER);
         } else {
             associatedAdapter = null;
         }
@@ -828,7 +819,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
     }
 
     public String getObjectAsString() {
-        final ObjectAdapter adapter = getObject();
+        final ManagedObject adapter = getObject();
         if (adapter == null) {
             return null;
         }
@@ -836,7 +827,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
     }
 
     @Override
-    public void setObject(final ObjectAdapter adapter) {
+    public void setObject(ManagedObject adapter) {
         if(adapter == null) {
             super.setObject(null);
             return;
@@ -849,7 +840,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
         }
 
         if(isCollection()) {
-            val memento = ObjectAdapterMemento
+            ObjectAdapterMemento memento = ObjectAdapterMemento
                     .ofIterablePojos(pojo, getTypeOfSpecification().getSpecId(), super.getMementoSupport());
             super.setObjectMemento(memento); // associated value
         } else {
@@ -859,20 +850,20 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
 
     public void setObjectAsString(final String enteredText) {
         // parse text to get adapter
-        final ParseableFacet parseableFacet = getTypeOfSpecification().getFacet(ParseableFacet.class);
+        ParseableFacet parseableFacet = getTypeOfSpecification().getFacet(ParseableFacet.class);
         if (parseableFacet == null) {
             throw new RuntimeException("unable to parse string for " + getTypeOfSpecification().getFullIdentifier());
         }
-        final ObjectAdapter adapter = parseableFacet.parseTextEntry(getObject(), enteredText,
+        ObjectAdapter adapter = parseableFacet.parseTextEntry(getObject(), enteredText,
                 InteractionInitiatedBy.USER);
 
         setObject(adapter);
     }
 
-    public void setPendingAdapter(final ObjectAdapter objectAdapter) {
+    public void setPendingAdapter(final ManagedObject objectAdapter) {
         if(isCollection()) {
-            val pojo = objectAdapter.getPojo();
-            val memento = ObjectAdapterMemento
+            Object pojo = objectAdapter.getPojo();
+            ObjectAdapterMemento memento = ObjectAdapterMemento
                     .ofIterablePojos(pojo, getTypeOfSpecification().getSpecId(), super.getMementoSupport());
             setPending(memento);
         } else {
@@ -890,7 +881,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
         return kind.whetherDisabled(this, where);
     }
 
-    public String validate(final ObjectAdapter proposedAdapter) {
+    public String validate(final ManagedObject proposedAdapter) {
         return kind.validate(this, proposedAdapter);
     }
 
@@ -918,8 +909,8 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
         return kind.hasChoices(this);
     }
 
-    public List<ObjectAdapter> getChoices(
-            final ObjectAdapter[] argumentsIfAvailable,
+    public List<ManagedObject> getChoices(
+            final ManagedObject[] argumentsIfAvailable,
             final AuthenticationSession authenticationSession) {
         return kind.getChoices(this, argumentsIfAvailable, authenticationSession);
     }
@@ -928,7 +919,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
         return kind.hasAutoComplete(this);
     }
 
-    public List<ObjectAdapter> getAutoComplete(
+    public List<ManagedObject> getAutoComplete(
             final String searchTerm,
             final AuthenticationSession authenticationSession) {
         return kind.getAutoComplete(this, searchTerm, authenticationSession);
@@ -1004,15 +995,15 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
 
             @Override
             public ArrayList<ObjectAdapterMemento> getMultiPending() {
-                val pendingMemento = ScalarModel.this.getPending();
+                ObjectAdapterMemento pendingMemento = ScalarModel.this.getPending();
                 return ObjectAdapterMemento.unwrapList(pendingMemento)
                         .orElse(null);
             }
 
             @Override
             public void setMultiPending(final ArrayList<ObjectAdapterMemento> pending) {
-                val specId = getScalarModel().getTypeOfSpecification().getSpecId();
-                val adapterMemento = ObjectAdapterMemento.wrapMementoList(pending, specId);
+                ObjectSpecId specId = getScalarModel().getTypeOfSpecification().getSpecId();
+                ObjectAdapterMemento adapterMemento = ObjectAdapterMemento.wrapMementoList(pending, specId);
                 ScalarModel.this.setPending(adapterMemento);
             }
 
@@ -1052,13 +1043,11 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
     }
 
     public String getReasonInvalidIfAny() {
-        final OneToOneAssociation property = getPropertyMemento().getProperty(getSpecificationLoader());
-
-        final ObjectAdapter adapter = getParentEntityModel().load();
-
-        final ObjectAdapter associate = getObject();
-
-        final Consent validity = property.isAssociationValid(adapter, associate, InteractionInitiatedBy.USER);
+        //XXX lombok issue, no val 
+        OneToOneAssociation property = getPropertyMemento().getProperty(getSpecificationLoader());
+        ManagedObject adapter = getParentEntityModel().load();
+        ManagedObject associate = getObject();
+        Consent validity = property.isAssociationValid(adapter, associate, InteractionInitiatedBy.USER);
         return validity.isAllowed() ? null : validity.getReason();
     }
 
@@ -1067,8 +1056,9 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
      *
      * @return adapter, which may be different from the original (if a {@link ViewModelFacet#isCloneable(Object) cloneable} view model, for example.
      */
-    public ObjectAdapter applyValue(ObjectAdapter adapter) {
-        final OneToOneAssociation property = getPropertyMemento().getProperty(getSpecificationLoader());
+    public ManagedObject applyValue(ManagedObject adapter) {
+        //XXX lombok issue, no val
+        OneToOneAssociation property = getPropertyMemento().getProperty(getSpecificationLoader());
 
         //
         // previously there was a guard here to only apply changes provided:
@@ -1097,8 +1087,8 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
         // In any case, the only code that calls this method already does the check, so think this is safe
         // to just remove.
 
-
-        final ObjectAdapter associate = getObject();
+        //XXX lombok issue, no val
+        ManagedObject associate = getObject();
         property.set(adapter, associate, InteractionInitiatedBy.USER);
 
         final ViewModelFacet recreatableObjectFacet = adapter.getSpecification().getFacet(ViewModelFacet.class);
@@ -1106,7 +1096,8 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             final Object viewModel = adapter.getPojo();
             final boolean cloneable = recreatableObjectFacet.isCloneable(viewModel);
             if(cloneable) {
-                val newViewModelPojo = recreatableObjectFacet.clone(viewModel);
+                //XXX lombok issue, no val
+                Object newViewModelPojo = recreatableObjectFacet.clone(viewModel);
                 adapter = super.getPojoToAdapter().apply(newViewModelPojo);
             }
         }
@@ -1199,7 +1190,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
         }
 
         final EntityModel parentEntityModel1 = this.getParentEntityModel();
-        final ObjectAdapter parentAdapter = parentEntityModel1.load();
+        final ManagedObject parentAdapter = parentEntityModel1.load();
 
         final OneToOneAssociation oneToOneAssociation =
                 this.getPropertyMemento().getProperty(this.getSpecificationLoader());
@@ -1241,10 +1232,10 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
     /**
      * transient because only temporary hint.
      */
-    private transient ObjectAdapter[] actionArgsHint;
+    private transient ManagedObject[] actionArgsHint;
 
     @Override
-    public void setActionArgsHint(ObjectAdapter[] actionArgsHint) {
+    public void setActionArgsHint(ManagedObject[] actionArgsHint) {
         this.actionArgsHint = actionArgsHint;
     }
 
@@ -1252,7 +1243,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
      * The initial call of choicesXxx() for any given scalar argument needs the current values
      * of all args (possibly as initialized through a defaultNXxx().
      */
-    public ObjectAdapter[] getActionArgsHint() {
+    public ManagedObject[] getActionArgsHint() {
         return actionArgsHint;
     }
 
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
index 3155183..6239bbc 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithPending.java
@@ -78,7 +78,7 @@ public interface ScalarModelWithPending extends Serializable {
                             if (ownerPending != null) {
                                 log.debug("setting to pending: {}", ownerPending.toString());
                                 ownerScalarModel.setObject(
-                                        ownerPending.getObjectAdapter());
+                                        ownerPending.getObjectAdapter(ownerScalarModel.getSpecificationLoader()));
                             }
                         }
                     }
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
index 40c85a0..4b2bb78 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
@@ -19,7 +19,7 @@
 
 package org.apache.isis.viewer.wicket.model.models;
 
-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.runtime.memento.ObjectAdapterMemento;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
@@ -27,20 +27,20 @@ import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 /**
  * Represents a standalone value.
  */
-public class ValueModel extends ModelAbstract<ObjectAdapter> {
+public class ValueModel extends ModelAbstract<ManagedObject> {
 
     private static final long serialVersionUID = 1L;
 
     private final ObjectAdapterMemento adapterMemento;
 
-    public ValueModel(IsisWebAppCommonContext commonContext, ObjectAdapter adapter) {
+    public ValueModel(IsisWebAppCommonContext commonContext, ManagedObject adapter) {
         super(commonContext);
         adapterMemento = ObjectAdapterMemento.ofAdapter(adapter, super.getMementoSupport());
     }
 
     @Override
-    protected ObjectAdapter load() {
-        return adapterMemento.getObjectAdapter();
+    protected ManagedObject load() {
+        return adapterMemento.getObjectAdapter(super.getSpecificationLoader());
     }
 
     // //////////////////////////////////////
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java
index 86507dc..a5b39b3 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java
@@ -23,7 +23,6 @@ import java.util.LinkedList;
 import java.util.stream.Stream;
 
 import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.util.pchain.ParentChain;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
@@ -52,7 +51,7 @@ class WhereAmIModelDefault implements WhereAmIModel {
 
         overrideFromConfigIfNew(commonContext.getConfiguration());
 
-        final ObjectAdapter adapter = startOfChain.getObject();
+        val adapter = startOfChain.getObject();
         final Object startNode = adapter.getPojo();
 
         ParentChain.of(commonContext.getSpecificationLoader()::loadSpecification)
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index e16ce3b..5d50603 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -28,9 +28,9 @@ import org.apache.wicket.request.IRequestHandler;
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.Clob;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
 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.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
@@ -47,21 +47,21 @@ import lombok.val;
 public enum ActionResultResponseType {
     OBJECT {
         @Override
-        public ActionResultResponse interpretResult(final ActionModel model, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
+        public ActionResultResponse interpretResult(ActionModel model, AjaxRequestTarget target, ManagedObject resultAdapter) {
             val commonContext = model.getCommonContext();
-            final ObjectAdapter actualAdapter = determineActualAdapter(commonContext, resultAdapter); // intercepts collections
+            val actualAdapter = determineActualAdapter(commonContext, resultAdapter); // intercepts collections
             return toEntityPage(model, actualAdapter, null);
         }
 
         @Override
-        public ActionResultResponse interpretResult(final ActionModel model, final ObjectAdapter targetAdapter, final ConcurrencyException ex) {
+        public ActionResultResponse interpretResult(ActionModel model, ManagedObject targetAdapter, ConcurrencyException ex) {
             final ActionResultResponse actionResultResponse = toEntityPage(model, targetAdapter, ex);
             return actionResultResponse;
         }
     },
     COLLECTION {
         @Override
-        public ActionResultResponse interpretResult(final ActionModel actionModel, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
+        public ActionResultResponse interpretResult(ActionModel actionModel, AjaxRequestTarget target, ManagedObject resultAdapter) {
             val collectionModel = EntityCollectionModel.createStandalone(resultAdapter, actionModel);
             // take a copy of the actionModel, because the original can get mutated (specifically: its arguments cleared)
             val actionModelCopy = actionModel.copy();
@@ -71,7 +71,7 @@ public enum ActionResultResponseType {
     },
     VALUE {
         @Override
-        public ActionResultResponse interpretResult(final ActionModel model, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
+        public ActionResultResponse interpretResult(ActionModel model, AjaxRequestTarget target, ManagedObject resultAdapter) {
             val commonContext = model.getCommonContext();
             ValueModel valueModel = new ValueModel(commonContext, resultAdapter);
             valueModel.setActionHint(model);
@@ -81,7 +81,7 @@ public enum ActionResultResponseType {
     },
     VALUE_CLOB {
         @Override
-        public ActionResultResponse interpretResult(final ActionModel model, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
+        public ActionResultResponse interpretResult(ActionModel model, AjaxRequestTarget target, ManagedObject resultAdapter) {
             final Object value = resultAdapter.getPojo();
             IRequestHandler handler = ActionModel.downloadHandler(value);
             return ActionResultResponse.withHandler(handler);
@@ -89,7 +89,7 @@ public enum ActionResultResponseType {
     },
     VALUE_BLOB {
         @Override
-        public ActionResultResponse interpretResult(final ActionModel model, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
+        public ActionResultResponse interpretResult(ActionModel model, AjaxRequestTarget target, ManagedObject resultAdapter) {
             final Object value = resultAdapter.getPojo();
             IRequestHandler handler = ActionModel.downloadHandler(value);
             return ActionResultResponse.withHandler(handler);
@@ -97,7 +97,7 @@ public enum ActionResultResponseType {
     },
     VALUE_URL_AJAX {
         @Override
-        public ActionResultResponse interpretResult(final ActionModel model, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
+        public ActionResultResponse interpretResult(ActionModel model, AjaxRequestTarget target, ManagedObject resultAdapter) {
             final URL url = (URL)resultAdapter.getPojo();
             return ActionResultResponse.openUrlInBrowser(target, url);
         }
@@ -105,7 +105,7 @@ public enum ActionResultResponseType {
     },
     VALUE_URL_NOAJAX {
         @Override
-        public ActionResultResponse interpretResult(final ActionModel model, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
+        public ActionResultResponse interpretResult(ActionModel model, AjaxRequestTarget target, ManagedObject resultAdapter) {
             // open URL server-side redirect
             final Object value = resultAdapter.getPojo();
             IRequestHandler handler = ActionModel.redirectHandler(value);
@@ -115,7 +115,7 @@ public enum ActionResultResponseType {
     },
     VOID {
         @Override
-        public ActionResultResponse interpretResult(final ActionModel model, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
+        public ActionResultResponse interpretResult(ActionModel model, AjaxRequestTarget target, ManagedObject resultAdapter) {
             val commonContext = model.getCommonContext();
             final VoidModel voidModel = new VoidModel(commonContext);
             voidModel.setActionHint(model);
@@ -123,18 +123,18 @@ public enum ActionResultResponseType {
         }
     };
 
-    public abstract ActionResultResponse interpretResult(ActionModel model, final AjaxRequestTarget target, ObjectAdapter resultAdapter);
+    public abstract ActionResultResponse interpretResult(ActionModel model, AjaxRequestTarget target, ManagedObject resultAdapter);
 
     /**
      * Only overridden for {@link ActionResultResponseType#OBJECT object}
      */
-    public ActionResultResponse interpretResult(ActionModel model, ObjectAdapter targetAdapter, ConcurrencyException ex) {
+    public ActionResultResponse interpretResult(ActionModel model, ManagedObject targetAdapter, ConcurrencyException ex) {
         throw new UnsupportedOperationException("Cannot render concurrency exception for any result type other than OBJECT");
     }
 
-    private static ObjectAdapter determineActualAdapter(
+    private static ManagedObject determineActualAdapter(
             IsisWebAppCommonContext commonContext, 
-            ObjectAdapter resultAdapter) {
+            ManagedObject resultAdapter) {
 
         if (resultAdapter.getSpecification().isNotCollection()) {
             return resultAdapter;
@@ -144,7 +144,7 @@ public enum ActionResultResponseType {
             final Object pojo = pojoList.get(0);
 
             //XXX lombok issue, cannot use val here
-            final ObjectAdapter actualAdapter = commonContext.getPojoToAdapter().apply(pojo);
+            final ManagedObject actualAdapter = commonContext.getPojoToAdapter().apply(pojo);
 
             return actualAdapter;
         }
@@ -152,7 +152,7 @@ public enum ActionResultResponseType {
 
     private static ActionResultResponse toEntityPage(
             final ActionModel model, 
-            final ObjectAdapter actualAdapter, 
+            final ManagedObject actualAdapter, 
             final ConcurrencyException exIfAny) {
 
         // this will not preserve the URL (because pageParameters are not copied over)
@@ -168,14 +168,16 @@ public enum ActionResultResponseType {
     public static ActionResultResponse determineAndInterpretResult(
             final ActionModel model,
             final AjaxRequestTarget targetIfAny,
-            final ObjectAdapter resultAdapter) {
+            final ManagedObject resultAdapter) {
+        
         ActionResultResponseType arrt = determineFor(resultAdapter, targetIfAny);
         return arrt.interpretResult(model, targetIfAny, resultAdapter);
     }
 
     private static ActionResultResponseType determineFor(
-            final ObjectAdapter resultAdapter,
+            final ManagedObject resultAdapter,
             final AjaxRequestTarget targetIfAny) {
+        
         if(resultAdapter == null) {
             return ActionResultResponseType.VOID;
         }
@@ -210,7 +212,7 @@ public enum ActionResultResponseType {
     }
 
     @SuppressWarnings("unchecked")
-    private static List<Object> asList(final ObjectAdapter resultAdapter) {
+    private static List<Object> asList(final ManagedObject resultAdapter) {
         final Collection<Object> coll = (Collection<Object>) resultAdapter.getPojo();
         return coll instanceof List
                 ? (List<Object>)coll
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actioninfo/ActionInfoPanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actioninfo/ActionInfoPanel.java
index 38c8a70..8263b60 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actioninfo/ActionInfoPanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actioninfo/ActionInfoPanel.java
@@ -21,11 +21,12 @@ package org.apache.isis.viewer.wicket.ui.components.actioninfo;
 
 import org.apache.wicket.markup.html.basic.Label;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
+import lombok.val;
+
 /**
  * Renders a panel providing summary information about an action.
  */
@@ -39,7 +40,7 @@ public class ActionInfoPanel extends PanelAbstract<ActionModel> {
     public ActionInfoPanel(final String id, final ActionModel actionModel) {
         super(id, actionModel);
 
-        final ObjectAdapter targetAdapter = getModel().getTargetAdapter();
+        val targetAdapter = getModel().getTargetAdapter();
         final ObjectAction objectAction = getModel().getActionMemento().getAction(getModel().getSpecificationLoader());
 
         // TODO: render instead as links (providing isn't a service; provide a
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
index aea6582..b817bcf 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/entityactions/EntityActionLinkFactory.java
@@ -21,7 +21,7 @@ package org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions;
 
 import org.apache.wicket.markup.html.link.AbstractLink;
 
-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.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -29,6 +29,8 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.model.models.ToggledMementosProvider;
 import org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.ActionLinkFactoryAbstract;
 
+import lombok.val;
+
 public final class EntityActionLinkFactory extends ActionLinkFactoryAbstract {
 
     private static final long serialVersionUID = 1L;
@@ -45,12 +47,14 @@ public final class EntityActionLinkFactory extends ActionLinkFactoryAbstract {
             final String linkId,
             final ToggledMementosProvider toggledMementosProviderIfAny) {
 
-        final ObjectAdapter objectAdapter = this.targetEntityModel.load();
+        val objectAdapter = this.targetEntityModel.load();
+
 
-        final boolean persistent = objectAdapter.isRepresentingPersistent();
-        if (!persistent) {
+        
+        val isBookmarkable = ManagedObject.isBookmarkable(objectAdapter);
+        if (!isBookmarkable) {
             throw new IllegalArgumentException(String.format(
-                    "Object '%s' is not persistent.", objectAdapter.titleString(null)));
+                    "Object '%s' is not persistent/bookmarkable.", objectAdapter.titleString(null)));
         }
 
         // previously we computed visibility and enablement here, but
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
index 07f365c..763fb52 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
@@ -32,7 +32,6 @@ import org.apache.wicket.model.Model;
 
 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.facets.all.describedas.DescribedAsFacet;
@@ -51,6 +50,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;
+
 class CssMenuItem implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -352,7 +353,7 @@ class CssMenuItem implements Serializable {
         final boolean separator = serviceAndAction.separator;
         final ServiceActionLinkFactory actionLinkFactory = serviceAndAction.linkAndLabelFactory;
 
-        final ObjectAdapter serviceAdapter = targetEntityModel.load();
+        val serviceAdapter = targetEntityModel.load();
         final ObjectSpecification serviceSpec = serviceAdapter.getSpecification();
         if (serviceSpec.isHidden()) {
             return null;
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
index b8f08e5..ce01cee 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionLinkFactory.java
@@ -21,13 +21,14 @@ package org.apache.isis.viewer.wicket.ui.components.actionmenu.serviceactions;
 
 import org.apache.wicket.markup.html.link.AbstractLink;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ToggledMementosProvider;
 import org.apache.isis.viewer.wicket.ui.components.widgets.linkandlabel.ActionLinkFactoryAbstract;
 
+import lombok.val;
+
 class ServiceActionLinkFactory extends ActionLinkFactoryAbstract {
 
     private static final long serialVersionUID = 1L;
@@ -42,7 +43,7 @@ class ServiceActionLinkFactory extends ActionLinkFactoryAbstract {
             final String linkId,
             final ToggledMementosProvider toggledMementosProviderIfAny) {
 
-        ObjectAdapter objectAdapter = this.targetEntityModel.load();
+        val objectAdapter = this.targetEntityModel.load();
 
         final AbstractLink link = newLink(linkId, objectAction, toggledMementosProviderIfAny);
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionFormExecutorStrategy.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionFormExecutorStrategy.java
index a047d80..b34e7a1 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionFormExecutorStrategy.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionFormExecutorStrategy.java
@@ -21,6 +21,7 @@ package org.apache.isis.viewer.wicket.ui.components.actions;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.ui.actionresponse.ActionResultResponse;
@@ -41,7 +42,7 @@ public class ActionFormExecutorStrategy implements FormExecutorStrategy<ActionMo
     }
 
     @Override
-    public ObjectAdapter obtainTargetAdapter() {
+    public ManagedObject obtainTargetAdapter() {
         return model.getTargetAdapter();
     }
 
@@ -69,14 +70,12 @@ public class ActionFormExecutorStrategy implements FormExecutorStrategy<ActionMo
     }
 
     @Override
-    public ObjectAdapter obtainResultAdapter() {
+    public ManagedObject obtainResultAdapter() {
         return model.execute();
     }
 
     @Override
-    public void redirectTo(
-            final ObjectAdapter resultAdapter,
-            final AjaxRequestTarget targetIfany) {
+    public void redirectTo(ManagedObject resultAdapter, AjaxRequestTarget targetIfany) {
         
         ActionResultResponse resultResponse = ActionResultResponseType
                 .determineAndInterpretResult(model, targetIfany, resultAdapter);
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 556fc0e..e7c60e7 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
@@ -30,11 +30,9 @@ import org.apache.wicket.markup.repeater.RepeatingView;
 
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.message.MessageService;
-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;
@@ -51,6 +49,7 @@ import org.apache.isis.viewer.wicket.ui.panels.PromptFormAbstract;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationBehavior;
+import lombok.val;
 
 class ActionParametersForm extends PromptFormAbstract<ActionModel> {
 
@@ -87,8 +86,8 @@ class ActionParametersForm extends PromptFormAbstract<ActionModel> {
             paramPanels.add(paramPanel);
 
             // TODO: maybe this logic should move instead to ScalarModel.Kind#whether{Hidden/Disabled}
-            final ObjectAdapter targetAdapter = actionModel.getTargetAdapter();
-            final ManagedObject realTargetAdapter = actionModel.getActionMemento().getAction(getSpecificationLoader())
+            val targetAdapter = actionModel.getTargetAdapter();
+            val realTargetAdapter = actionModel.getActionMemento().getAction(getSpecificationLoader())
                     .realTargetAdapter(targetAdapter);
             final Consent consent = apm.getActionParameter(getSpecificationLoader())
                     .isVisible(realTargetAdapter, null, InteractionInitiatedBy.USER);
@@ -190,7 +189,7 @@ class ActionParametersForm extends PromptFormAbstract<ActionModel> {
 
             // second attempt should succeed, because the Oid would have
             // been updated in the attempt
-            ObjectAdapter targetAdapter = getActionModel().getTargetAdapter();
+            val targetAdapter = getActionModel().getTargetAdapter();
 
             // forward onto the target page with the concurrency exception
             final EntityPage entityPage = new EntityPage(getActionModel().getCommonContext(), targetAdapter, ex);
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java
index 70ee376..135b6e0 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersPanel.java
@@ -24,8 +24,8 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.applib.services.message.MessageService;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ActionPrompt;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
@@ -97,7 +97,7 @@ public class ActionParametersPanel extends PanelAbstract<ActionModel> {
 
         addOrReplace(header);
 
-        ObjectAdapter targetAdapter = null;
+        ManagedObject targetAdapter = null;
         try {
             targetAdapter = actionModel.getTargetAdapter();
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
index 4bf9382..48662ef 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/AssociatedWithActionsHelper.java
@@ -25,17 +25,17 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.spec.ActionType;
 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.OneToManyAssociation;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.runtime.memento.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
+import lombok.val;
+
 /**
  * See also {@link BulkActionsHelper}.
  */
@@ -67,8 +67,8 @@ public class AssociatedWithActionsHelper implements Serializable {
     }
 
     private ObjectSpecification getObjectSpecification() {
-        final ObjectAdapterMemento parentOam = collectionModel.getParentObjectAdapterMemento();
-        final ObjectAdapter parentAdapter = parentOam.getObjectAdapter();
+        val parentMemento = collectionModel.getParentObjectAdapterMemento();
+        val parentAdapter = parentMemento.getObjectAdapter(collectionModel.getSpecificationLoader());
         return parentAdapter.getSpecification();
     }
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
index 498eabf..9d2867e 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collection/CollectionPanel.java
@@ -28,7 +28,7 @@ import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
 import org.apache.wicket.markup.html.basic.Label;
 
 import org.apache.isis.commons.internal.collections._Lists;
-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.OneToManyAssociation;
 import org.apache.isis.runtime.memento.ObjectAdapterMemento;
@@ -47,6 +47,7 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract2;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.common.NotificationPanel;
+import lombok.val;
 
 /**
  * Panel for rendering entity collection; analogous to (any concrete subclass
@@ -75,7 +76,7 @@ implements CollectionSelectorProvider, BulkActionsProvider {
 
         final OneToManyAssociation otma = collectionModel.getCollectionMemento().getCollection(collectionModel.getSpecificationLoader());
         final EntityModel entityModel = collectionModel.getEntityModel();
-        final ObjectAdapter adapter = entityModel.load();
+        val adapter = entityModel.load();
 
         final List<ObjectAction> associatedActions =
                 ObjectAction.Util.findForAssociation(adapter, otma);
@@ -152,7 +153,7 @@ implements CollectionSelectorProvider, BulkActionsProvider {
                 @Override
                 public void onSelected(
                         final Component context,
-                        final ObjectAdapter selectedAdapter,
+                        final ManagedObject selectedAdapter,
                         final AjaxRequestTarget ajaxRequestTarget) {
                     getModel().toggleSelectionOn(selectedAdapter);
                 }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
index 7ccdeb2..8cf5225 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/CollectionContentsAsAjaxTablePanel.java
@@ -46,6 +46,7 @@ import org.apache.isis.metamodel.facets.all.describedas.DescribedAsFacet;
 import org.apache.isis.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.metamodel.facets.object.grid.GridFacet;
+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;
@@ -77,7 +78,7 @@ implements CollectionCountProvider {
 
     private static final String ID_TABLE = "table";
 
-    private IsisAjaxFallbackDataTable<ObjectAdapter,String> dataTable;
+    private IsisAjaxFallbackDataTable<ManagedObject, String> dataTable;
 
 
     public CollectionContentsAsAjaxTablePanel(final String id, final EntityCollectionModel model) {
@@ -92,7 +93,7 @@ implements CollectionCountProvider {
 
     private void buildGui() {
 
-        final List<IColumn<ObjectAdapter,String>> columns = _Lists.newArrayList();
+        final List<IColumn<ManagedObject, String>> columns = _Lists.newArrayList();
 
         // bulk actions
         final BulkActionsProvider bulkActionsProvider = getBulkActionsProvider();
@@ -129,7 +130,7 @@ implements CollectionCountProvider {
                 @Override
                 public void onConcurrencyException(
                         final Component context,
-                        final ObjectAdapter selectedAdapter,
+                        final ManagedObject selectedAdapter,
                         final ConcurrencyException ex,
                         final AjaxRequestTarget ajaxRequestTarget) {
 
@@ -163,16 +164,17 @@ implements CollectionCountProvider {
 
 
     private void addTitleColumn(
-            final List<IColumn<ObjectAdapter,String>> columns,
+            final List<IColumn<ManagedObject, String>> columns,
             final ObjectAdapterMemento parentAdapterMementoIfAny,
             final int maxTitleParented,
             final int maxTitleStandalone) {
         
         final int maxTitleLength = getModel().isParented()? maxTitleParented: maxTitleStandalone;
-        columns.add(new ObjectAdapterTitleColumn(super.commonContext, parentAdapterMementoIfAny, maxTitleLength));
+        columns.add(new ObjectAdapterTitleColumn(
+                super.commonContext, parentAdapterMementoIfAny, maxTitleLength));
     }
 
-    private void addPropertyColumnsIfRequired(final List<IColumn<ObjectAdapter,String>> columns) {
+    private void addPropertyColumnsIfRequired(final List<IColumn<ManagedObject, String>> columns) {
         final ObjectSpecification typeOfSpec = getModel().getTypeOfSpecification();
 
 
@@ -187,7 +189,7 @@ implements CollectionCountProvider {
             // just enough to ask for the metadata.
             // This will cause the current ObjectSpec to be updated as a side effect.
             final EntityModel entityModel = getModel().getEntityModel();
-            final ObjectAdapter objectAdapterIfAny = entityModel != null ? entityModel.getObject() : null;
+            final ManagedObject objectAdapterIfAny = entityModel != null ? entityModel.getObject() : null;
             final Grid grid = gridFacet.getGrid(objectAdapterIfAny);
 
 
@@ -217,7 +219,7 @@ implements CollectionCountProvider {
 
         final ObjectSpecification parentSpecIfAny =
                 getModel().isParented()
-                ? getModel().getParentObjectAdapterMemento().getObjectAdapter().getSpecification()
+                ? getModel().getParentObjectAdapterMemento().getObjectAdapter(commonContext.getSpecificationLoader()).getSpecification()
                         : null;
 
                 final Predicate<ObjectAssociation> predicate = ObjectAssociation.Predicates.PROPERTIES
@@ -261,7 +263,7 @@ implements CollectionCountProvider {
                 for (final String propertyId : propertyIds) {
                     final ObjectAssociation property = propertyById.get(propertyId);
                     if(property != null) {
-                        final ColumnAbstract<ObjectAdapter> nopc = createObjectAdapterPropertyColumn(property);
+                        final ColumnAbstract<ManagedObject> nopc = createObjectAdapterPropertyColumn(property);
                         columns.add(nopc);
                     }
                 }
@@ -275,7 +277,7 @@ implements CollectionCountProvider {
 
         final ObjectAdapterMemento parentObjectAdapterMemento = getModel().getParentObjectAdapterMemento();
         if(parentObjectAdapterMemento != null) {
-            final ObjectAdapter parentObjectAdapter = parentObjectAdapterMemento.getObjectAdapter();
+            final ObjectAdapter parentObjectAdapter = parentObjectAdapterMemento.getObjectAdapter(commonContext.getSpecificationLoader());
             final Object parent = parentObjectAdapter.getPojo();
             final String collectionId = getModel().getCollectionMemento().getId();
 
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 d99e7fb..3b21cf5 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
@@ -51,7 +51,7 @@ import lombok.val;
 /**
  * Part of the {@link AjaxFallbackDefaultDataTable} API.
  */
-public class CollectionContentsSortableDataProvider extends SortableDataProvider<ObjectAdapter,String> {
+public class CollectionContentsSortableDataProvider extends SortableDataProvider<ManagedObject, String> {
 
     private static final long serialVersionUID = 1L;
 
@@ -62,7 +62,7 @@ public class CollectionContentsSortableDataProvider extends SortableDataProvider
     }
 
     @Override
-    public IModel<ObjectAdapter> model(final ObjectAdapter adapter) {
+    public IModel<ManagedObject> model(ManagedObject adapter) {
         return EntityModel.ofAdapter(model.getCommonContext(), adapter);
     }
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java
index 108292a..51f10ce 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/IsisAjaxFallbackDataTable.java
@@ -36,13 +36,14 @@ import org.apache.wicket.markup.repeater.OddEvenItem;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.util.lang.Generics;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.columns.ObjectAdapterToggleboxColumn;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
+import lombok.val;
+
 public class IsisAjaxFallbackDataTable<T, S> extends DataTable<T, S> {
 
     private static final long serialVersionUID = 1L;
@@ -97,13 +98,15 @@ public class IsisAjaxFallbackDataTable<T, S> extends DataTable<T, S> {
     protected Item<T> newRowItem(final String id, final int index, final IModel<T> model)
     {
         return new OddEvenItem<T>(id, index, model) {
+            private static final long serialVersionUID = 1L;
+
             @Override
             protected void onComponentTag(ComponentTag tag) {
                 super.onComponentTag(tag);
 
                 if (model instanceof EntityModel) {
                     EntityModel entityModel = (EntityModel) model;
-                    final ObjectAdapter objectAdapter = entityModel.getObject();
+                    val objectAdapter = entityModel.getObject();
                     final ObjectSpecification typeOfSpecification = entityModel.getTypeOfSpecification();
                     String cssClass = typeOfSpecification.getCssClass(objectAdapter);
                     CssClassAppender.appendCssClassTo(tag, cssClass);
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java
index a02dca1..867c612 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java
@@ -27,6 +27,7 @@ import org.apache.wicket.model.IModel;
 
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
@@ -40,6 +41,8 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 import org.apache.isis.viewer.wicket.ui.util.Tooltips;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
+import lombok.val;
+
 /**
  * A {@link ColumnAbstract column} within a
  * {@link CollectionContentsAsAjaxTablePanel} representing a single property of the
@@ -49,7 +52,7 @@ import org.apache.isis.webapp.context.IsisWebAppCommonContext;
  * Looks up the {@link ComponentFactory} to render the property from the
  * {@link ComponentFactoryRegistry}.
  */
-public final class ObjectAdapterPropertyColumn extends ColumnAbstract<ObjectAdapter> {
+public final class ObjectAdapterPropertyColumn extends ColumnAbstract<ManagedObject> {
 
     private static final long serialVersionUID = 1L;
 
@@ -97,14 +100,18 @@ public final class ObjectAdapterPropertyColumn extends ColumnAbstract<ObjectAdap
     }
 
     @Override
-    public void populateItem(final Item<ICellPopulator<ObjectAdapter>> cellItem, final String componentId, final IModel<ObjectAdapter> rowModel) {
+    public void populateItem(
+            final Item<ICellPopulator<ManagedObject>> cellItem, 
+            final String componentId, 
+            final IModel<ManagedObject> rowModel) {
+        
         final Component component = createComponent(componentId, rowModel);
         cellItem.add(component);
     }
 
-    private Component createComponent(final String id, final IModel<ObjectAdapter> rowModel) {
+    private Component createComponent(final String id, final IModel<ManagedObject> rowModel) {
 
-        final ObjectAdapter adapter = rowModel.getObject();
+        val adapter = rowModel.getObject();
         final EntityModel entityModel = EntityModel.ofAdapter(super.getCommonContext(), adapter);
         final OneToOneAssociation property = (OneToOneAssociation) adapter.getSpecification().getAssociation(propertyExpression);
         final PropertyMemento pm = new PropertyMemento(property);
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterTitleColumn.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterTitleColumn.java
index 2338a64..3777e96 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterTitleColumn.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterTitleColumn.java
@@ -24,7 +24,7 @@ import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulato
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.IModel;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.runtime.memento.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel.RenderingHint;
@@ -33,7 +33,9 @@ import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
-public class ObjectAdapterTitleColumn extends ColumnAbstract<ObjectAdapter> {
+import lombok.val;
+
+public class ObjectAdapterTitleColumn extends ColumnAbstract<ManagedObject> {
 
     private static final long serialVersionUID = 1L;
     private final ObjectAdapterMemento parentAdapterMementoIfAny;
@@ -55,14 +57,18 @@ public class ObjectAdapterTitleColumn extends ColumnAbstract<ObjectAdapter> {
     }
 
     @Override
-    public void populateItem(final Item<ICellPopulator<ObjectAdapter>> cellItem, final String componentId, final IModel<ObjectAdapter> rowModel) {
+    public void populateItem(
+            final Item<ICellPopulator<ManagedObject>> cellItem, 
+            final String componentId, 
+            final IModel<ManagedObject> rowModel) {
+        
         final Component component = createComponent(componentId, rowModel);
         cellItem.add(component);
         cellItem.add(new CssClassAppender("title-column"));
     }
 
-    private Component createComponent(final String id, final IModel<ObjectAdapter> rowModel) {
-        final ObjectAdapter adapter = rowModel.getObject();
+    private Component createComponent(final String id, final IModel<ManagedObject> rowModel) {
+        val adapter = rowModel.getObject();
         final EntityModel model = EntityModel.ofAdapter(super.getCommonContext(), adapter);
         model.setRenderingHint(parentAdapterMementoIfAny != null? RenderingHint.PARENTED_TITLE_COLUMN: RenderingHint.STANDALONE_TITLE_COLUMN);
         model.setContextAdapterIfAny(parentAdapterMementoIfAny);
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterToggleboxColumn.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterToggleboxColumn.java
index 47f3656..422a48b 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterToggleboxColumn.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterToggleboxColumn.java
@@ -29,8 +29,8 @@ import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.IModel;
 
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.common.OnConcurrencyExceptionHandler;
 import org.apache.isis.viewer.wicket.model.common.OnSelectionHandler;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -38,7 +38,9 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.checkbox.ContainedTog
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
-public final class ObjectAdapterToggleboxColumn extends ColumnAbstract<ObjectAdapter> {
+import lombok.val;
+
+public final class ObjectAdapterToggleboxColumn extends ColumnAbstract<ManagedObject> {
 
     private static final long serialVersionUID = 1L;
 
@@ -101,13 +103,16 @@ public final class ObjectAdapterToggleboxColumn extends ColumnAbstract<ObjectAda
     private final List<ContainedToggleboxPanel> rowToggles = _Lists.newArrayList();
 
     @Override
-    public void populateItem(final Item<ICellPopulator<ObjectAdapter>> cellItem, final String componentId, final IModel<ObjectAdapter> rowModel) {
+    public void populateItem(
+            final Item<ICellPopulator<ManagedObject>> cellItem, 
+            final String componentId, 
+            final IModel<ManagedObject> rowModel) {
 
         cellItem.add(new CssClassAppender("togglebox-column"));
 
         final MarkupContainer row = cellItem.getParent().getParent();
         row.setOutputMarkupId(true);
-        final EntityModel entityModel = (EntityModel) rowModel;
+        val entityModel = (EntityModel) rowModel;
         String concurrencyExceptionIfAny = entityModel.getAndClearConcurrencyExceptionIfAny();
         if(concurrencyExceptionIfAny != null) {
             row.add(new CssClassAppender("reloaded-after-concurrency-exception"));
@@ -117,8 +122,8 @@ public final class ObjectAdapterToggleboxColumn extends ColumnAbstract<ObjectAda
             private static final long serialVersionUID = 1L;
             @Override
             public void onSubmit(AjaxRequestTarget target) {
-                final EntityModel entityModel = (EntityModel) rowModel;
-                ObjectAdapter selectedAdapter = null;
+                val entityModel = (EntityModel) rowModel;
+                ManagedObject selectedAdapter = null;
                 try {
                     selectedAdapter = entityModel.loadWithConcurrencyChecking();
                     if(onSelectionHandler != null) {
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityComponentFactoryAbstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityComponentFactoryAbstract.java
index 49a085c..187317d 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityComponentFactoryAbstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/EntityComponentFactoryAbstract.java
@@ -22,13 +22,14 @@ package org.apache.isis.viewer.wicket.ui.components.entity;
 import org.apache.wicket.Component;
 import org.apache.wicket.model.IModel;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 
+import lombok.val;
+
 /**
  * Convenience adapter for a number of {@link ComponentFactoryAbstract component
  * factory}s that where the created {@link Component} are backed by an
@@ -64,7 +65,7 @@ public abstract class EntityComponentFactoryAbstract extends ComponentFactoryAbs
         // is therefore not called. resulting in a concurrency exception.
         //
         // Therefore, we do the same processing here instead.
-        final ObjectAdapter adapter = entityModel.load();
+        val adapter = entityModel.load();
         if (adapter == null) {
             // is ok;
         }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
index 9df5bd7..aeee0d7 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
@@ -30,7 +30,6 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.applib.annotation.Where;
-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;
@@ -51,6 +50,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 properties of an entity, as per
  * the provided {@link EntityModel}.
@@ -110,7 +111,7 @@ implements HasDynamicallyVisibleContent {
 
         final OneToManyAssociation association = entityCollectionModel.getCollectionMemento().getCollection(
                 entityCollectionModel.getSpecificationLoader());
-        final ObjectAdapter objectAdapter = getModel().getObject();
+        val objectAdapter = getModel().getObject();
         final Consent visibility = association.isVisible(objectAdapter, InteractionInitiatedBy.USER, Where.OBJECT_FORMS);
 
         if(visibility.isAllowed()) {
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
index 2ef880c..2864d69 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
@@ -36,8 +36,8 @@ import org.apache.isis.applib.layout.component.PropertyLayoutData;
 import org.apache.isis.commons.internal.base._NullSafe;
 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.facets.all.hide.HiddenFacet;
+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.ObjectAction;
@@ -154,13 +154,13 @@ public class PropertyGroup extends PanelAbstract<EntityModel> implements HasDyna
         final List<PropertyLayoutData> properties = this.fieldSet.getProperties();
         // changed to NO_CHECK because more complex BS3 layouts trip concurrency exception
         // (haven't investigated as to why).
-        final ObjectAdapter adapter = getModel().load();
+        val adapter = getModel().load();
         return getObjectAssociations(properties, adapter);
     }
 
     private List<ObjectAssociation> getObjectAssociations(
             final List<PropertyLayoutData> properties,
-            final ObjectAdapter adapter) {
+            final ManagedObject adapter) {
 
         //
         // previously we filtered out any invisible properties.
@@ -217,7 +217,7 @@ public class PropertyGroup extends PanelAbstract<EntityModel> implements HasDyna
         final Component component = getComponentFactoryRegistry()
                 .addOrReplaceComponent(container, ID_PROPERTY, ComponentType.SCALAR_NAME_AND_VALUE, scalarModel);
 
-        final ObjectAdapter adapter = entityModel.load();
+        val adapter = entityModel.load();
         final List<ObjectAction> associatedActions =
                 ObjectAction.Util.findForAssociation(adapter, otoa);
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
index 189dfd7..bda9526 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/header/EntityHeaderPanel.java
@@ -23,7 +23,6 @@ import java.util.List;
 
 import org.apache.wicket.Component;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -34,6 +33,8 @@ import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.Enti
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.entityactions.LinkAndLabelUtil;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
+import lombok.val;
+
 /**
  * {@link PanelAbstract Panel} representing the summary details (title, icon and
  * actions) of an entity, as per the provided {@link EntityModel}.
@@ -77,7 +78,7 @@ public class EntityHeaderPanel extends PanelAbstract<EntityModel> {
 
     private void buildEntityActionsGui() {
         final EntityModel model = getModel();
-        final ObjectAdapter adapter = model.getObject();
+        val adapter = model.getObject();
         if (adapter != null) {
             final List<ObjectAction> topLevelActions = ObjectAction.Util
                     .findTopLevel(adapter);
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 14ea90d..7d2f482 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
@@ -28,9 +28,9 @@ import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 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.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ObjectAdapterModel;
@@ -104,7 +104,7 @@ public class EntityIconAndTitlePanel extends PanelAbstract<ObjectAdapterModel> {
     }
 
     protected WebMarkupContainer addOrReplaceLinkWrapper(final ObjectAdapterModel entityModel) {
-        final ObjectAdapter adapter = entityModel.getObject();
+        val adapter = entityModel.getObject();
 
         final WebMarkupContainer entityLinkWrapper = new WebMarkupContainer(ID_ENTITY_LINK_WRAPPER);
 
@@ -113,7 +113,7 @@ public class EntityIconAndTitlePanel extends PanelAbstract<ObjectAdapterModel> {
         return entityLinkWrapper;
     }
 
-    private AbstractLink createLinkWithIconAndTitle(final ObjectAdapter adapterIfAny) {
+    private AbstractLink createLinkWithIconAndTitle(final ManagedObject adapterIfAny) {
         final AbstractLink link = createDynamicallyVisibleLink();
 
         if(adapterIfAny != null) {
@@ -147,7 +147,7 @@ public class EntityIconAndTitlePanel extends PanelAbstract<ObjectAdapterModel> {
 
         final ObjectAdapterModel entityModel = getModel();
 
-        final ObjectAdapter targetAdapter = entityModel.getObject();
+        val targetAdapter = entityModel.getObject();
         final ObjectAdapterModel redirectToModel;
 
         if(targetAdapter != null) {
@@ -173,7 +173,7 @@ public class EntityIconAndTitlePanel extends PanelAbstract<ObjectAdapterModel> {
 
             @Override
             public boolean isVisible() {
-                final ObjectAdapter targetAdapter = entityModel.getObject();
+                val targetAdapter = entityModel.getObject();
                 return targetAdapter != null;
             }
         };
@@ -192,7 +192,7 @@ public class EntityIconAndTitlePanel extends PanelAbstract<ObjectAdapterModel> {
 
     private String determineTitle() {
         ObjectAdapterModel model = getModel();
-        final ObjectAdapter adapter = model.getObject();
+        val adapter = model.getObject();
         return adapter != null ? adapter.titleString(getContextAdapterIfAny()) : "(no object)";
     }
 
@@ -206,7 +206,7 @@ public class EntityIconAndTitlePanel extends PanelAbstract<ObjectAdapterModel> {
         return titleString.length();
     }
 
-    protected Image newImage(final String id, final ObjectAdapter adapter) {
+    protected Image newImage(final String id, final ManagedObject adapter) {
         final ResourceReference imageResource = imageCache.resourceReferenceFor(adapter);
 
         final Image image = new Image(id, imageResource) {
@@ -219,11 +219,11 @@ public class EntityIconAndTitlePanel extends PanelAbstract<ObjectAdapterModel> {
         return image;
     }
 
-    public ObjectAdapter getContextAdapterIfAny() {
+    public ManagedObject getContextAdapterIfAny() {
         ObjectAdapterModel model = getModel();
         ObjectAdapterMemento contextAdapterMementoIfAny = model.getContextAdapterIfAny();
         return contextAdapterMementoIfAny != null
-                ? contextAdapterMementoIfAny.getObjectAdapter()
+                ? contextAdapterMementoIfAny.getObjectAdapter(commonContext.getSpecificationLoader())
                         : null;
     }
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanelFactory.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanelFactory.java
index f18b555..fa527be 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanelFactory.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/selector/links/EntityLinksSelectorPanelFactory.java
@@ -24,7 +24,6 @@ import org.apache.wicket.model.IModel;
 
 import org.apache.isis.applib.layout.grid.Grid;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3Grid;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.object.grid.GridFacet;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -33,6 +32,8 @@ import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.entity.EntityComponentFactoryAbstract;
 import org.apache.isis.viewer.wicket.ui.components.layout.bs3.BS3GridPanel;
 
+import lombok.val;
+
 /**
  * {@link ComponentFactory} for {@link EntityLinksSelectorPanel}.
  */
@@ -48,7 +49,7 @@ public class EntityLinksSelectorPanelFactory extends EntityComponentFactoryAbstr
     public Component createComponent(final String id, final IModel<?> model) {
         final EntityModel entityModel = (EntityModel) model;
 
-        final ObjectAdapter objectAdapter = entityModel.getObject();
+        val objectAdapter = entityModel.getObject();
         final ObjectSpecification specification = entityModel.getTypeOfSpecification();
         final GridFacet facet = specification.getFacet(GridFacet.class);
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
index bed5fab..b508ca4 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyEditPanel.java
@@ -23,7 +23,6 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.Model;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
@@ -34,6 +33,8 @@ import org.apache.isis.viewer.wicket.ui.components.actions.ActionParametersPanel
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
+import lombok.val;
+
 /**
  * Corresponding component to prompt for action (parameters) is {@link ActionParametersPanel}.
  */
@@ -102,7 +103,7 @@ public class PropertyEditPanel extends PanelAbstract<ScalarModel> {
 
             // should succeed, because the Oid would have
             // been updated in the attempt
-            ObjectAdapter targetAdapter = scalarModel.getParentEntityModel().load();
+            val targetAdapter = scalarModel.getParentEntityModel().load();
 
             // page redirect/handling
             final EntityPage entityPage = new EntityPage(super.getCommonContext(), targetAdapter, null);
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java
index ee800fb..98aca63 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/property/PropertyFormExecutorStrategy.java
@@ -21,11 +21,13 @@ package org.apache.isis.viewer.wicket.ui.components.property;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.request.cycle.RequestCycle;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.FormExecutorStrategy;
 
+import lombok.val;
+
 public class PropertyFormExecutorStrategy implements FormExecutorStrategy<ScalarModel> {
 
     private final ScalarModel model;
@@ -41,7 +43,7 @@ public class PropertyFormExecutorStrategy implements FormExecutorStrategy<Scalar
 
 
     @Override
-    public ObjectAdapter obtainTargetAdapter() {
+    public ManagedObject obtainTargetAdapter() {
         return model.getParentEntityModel().load();
     }
 
@@ -57,10 +59,10 @@ public class PropertyFormExecutorStrategy implements FormExecutorStrategy<Scalar
     }
 
     @Override
-    public ObjectAdapter obtainResultAdapter() {
-        ObjectAdapter targetAdapter = obtainTargetAdapter();
+    public ManagedObject obtainResultAdapter() {
+        val targetAdapter = obtainTargetAdapter();
 
-        final ObjectAdapter resultAdapter = this.model.applyValue(targetAdapter);
+        val resultAdapter = this.model.applyValue(targetAdapter);
 
         if (resultAdapter != targetAdapter) {
             this.model.getParentEntityModel().setObject(targetAdapter);
@@ -71,7 +73,7 @@ public class PropertyFormExecutorStrategy implements FormExecutorStrategy<Scalar
 
     @Override
     public void redirectTo(
-            final ObjectAdapter resultAdapter,
+            final ManagedObject resultAdapter,
             final AjaxRequestTarget target) {
 
         final EntityPage entityPage = new EntityPage(model.getCommonContext(), resultAdapter, null);
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/propertyheader/PropertyEditPromptHeaderPanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/propertyheader/PropertyEditPromptHeaderPanel.java
index a8217ec..11779a1 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/propertyheader/PropertyEditPromptHeaderPanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/propertyheader/PropertyEditPromptHeaderPanel.java
@@ -21,7 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.propertyheader;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.all.named.NamedFacet;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -29,6 +28,8 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
+import lombok.val;
+
 public class PropertyEditPromptHeaderPanel extends PanelAbstract<ScalarModel> {
 
     private static final long serialVersionUID = 1L;
@@ -37,7 +38,7 @@ public class PropertyEditPromptHeaderPanel extends PanelAbstract<ScalarModel> {
     public PropertyEditPromptHeaderPanel(String id, final ScalarModel model) {
         super(id, model);
 
-        ObjectAdapter targetAdapter = model.getParentEntityModel().load();
+        val targetAdapter = model.getParentEntityModel().load();
 
         getComponentFactoryRegistry().addOrReplaceComponent(
                 this, 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index c55db63..635ebcf 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -34,9 +34,9 @@ import org.apache.wicket.model.Model;
 import org.apache.isis.applib.annotation.ActionLayout;
 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.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.metamodel.facets.objectvalue.labelat.LabelAtFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel.RenderingHint;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -45,6 +45,8 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.TextFieldValueModel.S
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 
+import lombok.val;
+
 /**
  * Adapter for {@link PanelAbstract panel}s that use a {@link ScalarModel} as
  * their backing model.
@@ -58,7 +60,9 @@ import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
  *     It is however still used by some wicket addons (specifically, pdfjs).
  * </p>
  */
-public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> implements ScalarModelProvider {
+public abstract class ScalarPanelAbstract 
+extends PanelAbstract<ScalarModel> 
+implements ScalarModelProvider {
 
     private static final long serialVersionUID = 1L;
 
@@ -265,7 +269,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         ScalarModel model = getModel();
         final CssClassFacet facet = model.getFacet(CssClassFacet.class);
         if(facet != null) {
-            final ObjectAdapter parentAdapter = model.getParentEntityModel().load();
+            val parentAdapter = model.getParentEntityModel().load();
             final String cssClass = facet.cssClass(parentAdapter);
             CssClassAppender.appendCssClassTo(this, cssClass);
         }
@@ -367,7 +371,7 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
      *
      * @return true - indicates has been updated, so update dynamically via ajax
      */
-    public boolean updateChoices(ObjectAdapter[] pendingArguments) {
+    public boolean updateChoices(ManagedObject[] pendingArguments) {
         return false;
     }
 
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 f1494f4..3df2b68 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
@@ -43,7 +43,6 @@ import org.apache.isis.applib.services.metamodel.MetaModelService;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.ioc.BeanSort;
-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;
@@ -138,13 +137,13 @@ implements ScalarModelSubscriber2 {
             final AjaxRequestTarget target) {
 
         final ObjectAction action = actionModel.getActionMemento().getAction(getSpecificationLoader());
-        final ObjectAdapter[] pendingArguments = actionModel.getArgumentsAsArray();
+        final ManagedObject[] pendingArguments = actionModel.getArgumentsAsArray();
 
 
         // could almost certainly simplify this... (used by visibility and usability checks)
         final ObjectActionParameter actionParameter = action.getParameters().get(paramNumToPossiblyUpdate);
-        final ObjectAdapter targetAdapter = actionModel.getTargetAdapter();
-        final ManagedObject realTargetAdapter = action.realTargetAdapter(targetAdapter);
+        val targetAdapter = actionModel.getTargetAdapter();
+        val realTargetAdapter = action.realTargetAdapter(targetAdapter);
 
         // check visibility
         final Consent visibilityConsent = actionParameter.isVisible(realTargetAdapter, pendingArguments, InteractionInitiatedBy.USER);
@@ -170,14 +169,14 @@ implements ScalarModelSubscriber2 {
         // even if now invisible or unusable, we recalculate args and ensure compatible
         // (else can hit complicated edge cases with stale data when next re-enable/make visible)
         final ScalarModel model = getModel();
-        ObjectAdapter defaultIfAny = model.getKind()
+        val defaultIfAny = model.getKind()
                 .getDefault(scalarModel, pendingArguments, paramNumUpdated,
                         commonContext.getAuthenticationSession());
 
         final ActionParameterMemento apm = new ActionParameterMemento(actionParameter);
         final ActionArgumentModel actionArgumentModel = actionModel.getArgumentModel(apm);
 
-        final ObjectAdapter pendingArg = pendingArguments[paramNumToPossiblyUpdate];
+        val pendingArg = pendingArguments[paramNumToPossiblyUpdate];
 
         if (defaultIfAny != null) {
             scalarModel.setObject(defaultIfAny);
@@ -188,10 +187,10 @@ implements ScalarModelSubscriber2 {
 
             if(pendingArg != null & scalarModel.hasChoices()) {
                 // make sure the object is one of the choices, else blank it out.
-                final List<ObjectAdapter> choices = scalarModel
+                val choices = scalarModel
                         .getChoices(pendingArguments, commonContext.getAuthenticationSession());
 
-                if(pendingArg.isValue()) {
+                if(ManagedObject.isValue(pendingArg)) {
                     // we have to do this if the ObjectAdapters are value type (eg a string)
                     //  because we can end up with a different ObjectAdapter for the same underlying value
                     //  (values have no intrinsic identity)
@@ -199,7 +198,7 @@ implements ScalarModelSubscriber2 {
                     // it might not be necessary to have this special casing; we could probably use this code
                     // even for reference types
                     final Object pendingValue = pendingArg.getPojo();
-                    final List<Object> choiceValues = ObjectAdapter.Util.unwrapPojoList(choices);
+                    final List<Object> choiceValues = ManagedObject.unwrapPojoListElseEmpty(choices);
                     if(!choiceValues.contains(pendingValue)) {
                         scalarModel.setObject(null);
                         scalarModel.setPending(null);
@@ -315,7 +314,7 @@ implements ScalarModelSubscriber2 {
             // there is similar code for invoking actions (ActionLink)
             //
             commonContext.getAuthenticationSession().getMessageBroker().addMessage(ex.getMessage());
-            final ObjectAdapter parentAdapter = getModel().getParentEntityModel().load();
+            val parentAdapter = getModel().getParentEntityModel().load();
             throw new RestartResponseException(new EntityPage(commonContext, parentAdapter));
         }
 
@@ -526,7 +525,7 @@ implements ScalarModelSubscriber2 {
         final CssClassFacet facet = model.getFacet(CssClassFacet.class);
         if(facet != null) {
 
-            final ObjectAdapter parentAdapter =
+            val parentAdapter =
                     model.getParentEntityModel().load();
 
             final String cssClass = facet.cssClass(parentAdapter);
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
index 0d97717..54ad763 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -33,7 +33,7 @@ import org.apache.wicket.validation.ValidationError;
 import org.wicketstuff.select2.ChoiceProvider;
 
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.metamodel.spec.ObjectSpecId;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.runtime.memento.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
@@ -113,7 +113,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
     /**
      * sets up the choices, also ensuring that any currently held value is compatible.
      */
-    private void setProviderAndCurrAndPending(final Select2 select2, ObjectAdapter[] argsIfAvailable) {
+    private void setProviderAndCurrAndPending(Select2 select2, ManagedObject[] argsIfAvailable) {
 
         final ChoiceProvider<ObjectAdapterMemento> choiceProvider = buildChoiceProvider(argsIfAvailable);
 
@@ -129,12 +129,12 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
     /**
      * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, ObjectAdapter[])})
      */
-    protected abstract ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(final ObjectAdapter[] argsIfAvailable);
+    protected abstract ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(ManagedObject[] argsIfAvailable);
 
     /**
      * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, ObjectAdapter[])})
      */
-    protected abstract void syncIfNull(final Select2 select2, final List<ObjectAdapterMemento> choicesMementos);
+    protected abstract void syncIfNull(Select2 select2, List<ObjectAdapterMemento> choicesMementos);
 
 
     // //////////////////////////////////////
@@ -179,7 +179,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
             final int paramNumToPossiblyUpdate,
             final AjaxRequestTarget target) {
 
-        final ObjectAdapter[] argumentsAsArray = actionModel.getArgumentsAsArray();
+        final ManagedObject[] argumentsAsArray = actionModel.getArgumentsAsArray();
 
         final Repaint repaint =
                 super.updateIfNecessary(actionModel, paramNumUpdated, paramNumToPossiblyUpdate, target);
@@ -195,7 +195,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
             return repaint;
     }
 
-    private boolean updateChoices(ObjectAdapter[] argsIfAvailable) {
+    private boolean updateChoices(ManagedObject[] argsIfAvailable) {
         if (select2 == null) {
             return false;
         }
@@ -235,19 +235,20 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
             final ObjectAdapterMemento proposedValue;
 
             if (proposedValueObj instanceof List) {
+                @SuppressWarnings("unchecked")
                 val proposedValueObjAsList = (List<ObjectAdapterMemento>) proposedValueObj;
                 if (proposedValueObjAsList.isEmpty()) {
                     return;
                 }
-                final ObjectAdapterMemento oam = proposedValueObjAsList.get(0);
-                final ObjectSpecId objectSpecId = oam.getObjectSpecId();
+                val memento = proposedValueObjAsList.get(0);
+                val objectSpecId = memento.getObjectSpecId();
                 proposedValue = ObjectAdapterMemento
                         .wrapMementoList(proposedValueObjAsList, objectSpecId);
             } else {
                 proposedValue = (ObjectAdapterMemento) proposedValueObj;
             }
 
-            final ObjectAdapter proposedAdapter = proposedValue.getObjectAdapter();
+            val proposedAdapter = proposedValue.getObjectAdapter(scalarModel.getSpecificationLoader());
 
             final String reasonIfAny = scalarModel.validate(proposedAdapter);
             if (reasonIfAny != null) {
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
index 0a5e4d2..209b754 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldDatePickerAbstract.java
@@ -21,8 +21,6 @@ package org.apache.isis.viewer.wicket.ui.components.scalars;
 
 import java.io.Serializable;
 
-import javax.inject.Inject;
-
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.basic.Label;
@@ -32,14 +30,12 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.util.convert.IConverter;
 
-import org.apache.isis.applib.services.i18n.LocaleProvider;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.objectvalue.renderedadjusted.RenderedAdjustedFacet;
-import org.apache.isis.runtime.system.context.IsisContext;
-import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.datepicker.TextFieldWithDateTimePicker;
 
+import lombok.val;
+
 /**
  * Panel for rendering scalars representing dates, along with a date picker.
  */
@@ -111,8 +107,8 @@ extends ScalarPanelTextFieldAbstract<T>  {
             private static final long serialVersionUID = 1L;
 
             @Override public String getObject() {
-                ObjectAdapter object = scalarModel.getObject();
-                final T value = object != null ? (T) object.getPojo() : null;
+                val adapter = scalarModel.getObject();
+                final T value = adapter != null ? (T) adapter.getPojo() : null;
                 final String str =
                         value != null
                         ? converter.convertToString(value, getLocaleProvider().getLocale())
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
index fe3a48c..dda1b29 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
@@ -28,9 +28,10 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.util.convert.IConverter;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
+import lombok.val;
+
 /**
  * Panel for rendering numeric scalars.
  */
@@ -77,8 +78,8 @@ public abstract class ScalarPanelTextFieldNumeric<T extends Serializable> extend
             private static final long serialVersionUID = 1L;
 
             @Override public String getObject() {
-                ObjectAdapter object = scalarModel.getObject();
-                final T value = object != null ? (T) object.getPojo() : null;
+                val adapter = scalarModel.getObject();
+                final T value = adapter != null ? (T) adapter.getPojo() : null;
                 final String str =
                         value != null
                         ? converter.convertToString(value, getLocaleProvider().getLocale())
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
index 86a1df9..10b7146 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
@@ -23,7 +23,7 @@ import java.io.Serializable;
 import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.Model;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
 import lombok.val;
@@ -49,12 +49,12 @@ public class TextFieldValueModel<T extends Serializable> extends Model<T> {
     @Override
     public T getObject() {
         final ScalarModel model = scalarModelProvider.getModel();
-        final ObjectAdapter objectAdapter = model.getObject();
+        val objectAdapter = model.getObject();
         return asT(objectAdapter);
     }
 
     @SuppressWarnings("unchecked")
-    private T asT(final ObjectAdapter objectAdapter) {
+    private T asT(ManagedObject objectAdapter) {
         return (T) (objectAdapter != null? objectAdapter.getPojo(): null);
     }
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImagePanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImagePanel.java
index 10b8bc9..31bcd35 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImagePanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/image/JavaAwtImagePanel.java
@@ -26,8 +26,8 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.image.Image;
 import org.apache.wicket.markup.html.image.resource.RenderedDynamicImageResource;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.value.image.ImageValueFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
@@ -52,7 +52,7 @@ public class JavaAwtImagePanel extends PanelAbstract<ScalarModel> {
         addOrReplace(scalarName);
 
         final ImageValueFacet imageValueFacet = getModel().getTypeOfSpecification().getFacet(ImageValueFacet.class);
-        final ObjectAdapter adapter = getModel().getObject();
+        final ManagedObject adapter = getModel().getObject();
         if (adapter != null) {
             final java.awt.Image imageValue = imageValueFacet.getImage(adapter);
             final RenderedDynamicImageResource imageResource = new RenderedDynamicImageResource(
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index 3f4058d..6ae3f7a 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -143,7 +143,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
 
     private Image asWicketImage(String id) {
 
-        final ObjectAdapter adapter = getModel().getObject();
+        val adapter = getModel().getObject();
         if(adapter == null) {
             return null;
         }
@@ -251,7 +251,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
 
     @SuppressWarnings("unchecked")
     private T getBlobOrClob(final ScalarModel model) {
-        ObjectAdapter adapter = model.getObject();
+        val adapter = model.getObject();
         return adapter != null? (T) adapter.getPojo(): null;
     }
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index 7406249..034b70a 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -29,7 +29,6 @@ import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
 import org.apache.isis.applib.annotation.LabelPosition;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.runtime.persistence.adapter.PojoAdapter;
@@ -118,7 +117,7 @@ public class BooleanPanel extends ScalarPanelAbstract2 {
 
             @Override public String getObject() {
                 final ScalarModel model = getModel();
-                final ObjectAdapter adapter = model.getObject();
+                val adapter = model.getObject();
                 final Boolean bool = adapter != null ? (Boolean) adapter.getPojo() : null;
                 return bool == null? "(not set)" : bool ? "Yes" : "No";
             }
@@ -135,7 +134,7 @@ public class BooleanPanel extends ScalarPanelAbstract2 {
             @Override
             public Boolean getObject() {
                 final ScalarModel model = getModel();
-                final ObjectAdapter adapter = model.getObject();
+                val adapter = model.getObject();
                 return adapter != null? (Boolean) adapter.getPojo(): null;
             }
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java
index d40b9c3..a832fb8 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/EntityLinkSelect2Panel.java
@@ -23,10 +23,13 @@ import org.apache.wicket.markup.html.form.FormComponentPanel;
 import org.wicketstuff.select2.Select2MultiChoice;
 
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.CancelHintRequired;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormComponentPanelAbstract;
 
-class EntityLinkSelect2Panel extends FormComponentPanelAbstract<ObjectAdapter> implements CancelHintRequired  {
+class EntityLinkSelect2Panel 
+extends FormComponentPanelAbstract<ManagedObject> 
+implements CancelHintRequired  {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index 41834aa..5c839d4 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -36,6 +36,7 @@ import org.wicketstuff.select2.Settings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 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.models.EntityModel;
@@ -161,17 +162,18 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
     @Override
     protected IModel<String> obtainInlinePromptModel() {
         final IModel<ObjectAdapterMemento> model = select2.getModel();
+        
         return new IModel<String>() {
             private static final long serialVersionUID = 1L;
 
             @Override
             public String getObject() {
-                final ObjectAdapterMemento oam = model.getObject();
-                if(oam == null) {
+                val memento = model.getObject();
+                if(memento == null) {
                     return null;
                 }
-                ObjectAdapter objectAdapter = oam.getObjectAdapter();
-                return objectAdapter != null ? objectAdapter.titleString(null) : null;
+                val adapter = memento.getObjectAdapter(getSpecificationLoader());
+                return adapter != null ? adapter.titleString(null) : null;
             }
 
             @Override
@@ -212,7 +214,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
     protected void onInitializeWhenDisabled(final String disableReason) {
         super.onInitializeWhenDisabled(disableReason);
         syncWithInput();
-        final EntityModel entityLinkModel = (EntityModel) entityLink.getModel();
+        val entityLinkModel = (EntityModel) entityLink.getModel();
         entityLinkModel.toViewMode();
         entityLink.setEnabled(false);
         Tooltips.addTooltip(entityLink, disableReason);
@@ -244,7 +246,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
     // called from onInitialize*
     // (was previous called by EntityLinkSelect2Panel in onBeforeRender, this responsibility now moved)
     private void syncWithInput() {
-        final ObjectAdapter adapter = getModel().getPendingElseCurrentAdapter();
+        val adapter = getModel().getPendingElseCurrentAdapter();
 
         // syncLinkWithInput
         final MarkupContainer componentForRegular = (MarkupContainer) getComponentForRegular();
@@ -337,7 +339,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
     // //////////////////////////////////////
 
     @Override
-    protected ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(final ObjectAdapter[] argsIfAvailable) {
+    protected ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(ManagedObject[] argsIfAvailable) {
 
         if (getModel().hasChoices()) {
             List<ObjectAdapterMemento> choiceMementos = obtainChoiceMementos(argsIfAvailable);
@@ -352,11 +354,11 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
     }
 
     // called by setProviderAndCurrAndPending
-    private List<ObjectAdapterMemento> obtainChoiceMementos(final ObjectAdapter[] argsIfAvailable) {
+    private List<ObjectAdapterMemento> obtainChoiceMementos(ManagedObject[] argsIfAvailable) {
         
         val commonContext = super.getCommonContext();
         
-        val choices = _Lists.<ObjectAdapter>newArrayList();
+        val choices = _Lists.<ManagedObject>newArrayList();
         if(getModel().hasChoices()) {
             choices.addAll(getModel().getChoices(argsIfAvailable, commonContext.getAuthenticationSession()));
         }
@@ -391,7 +393,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
 
     // called by EntityLinkSelect2Panel
     String getInput() {
-        final ObjectAdapter pendingElseCurrentAdapter = getModel().getPendingElseCurrentAdapter();
+        val pendingElseCurrentAdapter = getModel().getPendingElseCurrentAdapter();
         return pendingElseCurrentAdapter != null? pendingElseCurrentAdapter.titleString(null): "(no object)";
     }
 
@@ -402,18 +404,18 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
         if(isEditableWithEitherAutoCompleteOrChoices()) {
 
             // flush changes to pending
-            ObjectAdapterMemento convertedInput =
-                    select2.getConvertedInput();
+            ObjectAdapterMemento convertedInput = select2.getConvertedInput();
 
             getModel().setPending(convertedInput);
             if(select2 != null) {
                 select2.getModel().setObject(convertedInput);
             }
 
-            final ObjectAdapter adapter = convertedInput!=null
-                    ? convertedInput.getObjectAdapter()
+            val adapter = convertedInput!=null
+                    ? convertedInput.getObjectAdapter(super.getSpecificationLoader())
                             :null;
-                    getModel().setObject(adapter);
+                    
+            getModel().setObject(adapter);
         }
 
         final ObjectAdapter pendingAdapter = getModel().getPendingAdapter();
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index fb6cf8e..d935d5d 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -33,7 +33,7 @@ import org.wicketstuff.select2.ChoiceProvider;
 
 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.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.ScalarModel;
@@ -76,11 +76,11 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
     }
 
 
-    private List<ObjectAdapterMemento> getChoiceMementos(final ObjectAdapter[] argumentsIfAvailable) {
+    private List<ObjectAdapterMemento> getChoiceMementos(final ManagedObject[] argumentsIfAvailable) {
         
         val commonContext = super.getCommonContext();
         
-        final List<ObjectAdapter> choices =
+        val choices =
                 scalarModel.getChoices(argumentsIfAvailable, commonContext.getAuthenticationSession());
 
         return _Lists.map(choices, commonContext::mementoFor);
@@ -167,7 +167,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
     // in corresponding code in ReferencePanelFactory, these is a branch for different types of providers
     // (choice vs autoComplete).  Here though - because values don't currently support autoComplete - no branch is required
     @Override
-    protected ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(final ObjectAdapter[] argsIfAvailable) {
+    protected ChoiceProvider<ObjectAdapterMemento> buildChoiceProvider(ManagedObject[] argsIfAvailable) {
         final List<ObjectAdapterMemento> choicesMementos = getChoiceMementos(argsIfAvailable);
         return new ObjectAdapterMementoProviderForValueChoices(scalarModel, choicesMementos);
     }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
index ccd8954..a0d4fb6 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
@@ -48,6 +48,7 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.functions._Functions;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ModelAbstract;
@@ -359,7 +360,7 @@ class IsisToWicketTreeAdapter {
      * @return Wicket's ITreeProvider
      */
     @SuppressWarnings({ "rawtypes", "unchecked" })
-    private static ITreeProvider<TreeModel> toITreeProvider(ModelAbstract<ObjectAdapter> model) {
+    private static ITreeProvider<TreeModel> toITreeProvider(ModelAbstract<ManagedObject> model) {
 
         val commonContext = model.getCommonContext();
         val treeNode = (TreeNode) model.getObject().getPojo();
@@ -389,7 +390,7 @@ class IsisToWicketTreeAdapter {
         public LoadableDetachableTreeModel(TreeModel tModel) {
             super(tModel);
             this.treePath = tModel.getTreePath();
-            this.id = (RootOid) tModel.getObject().getOid();
+            this.id = (RootOid) ManagedObject._oid(tModel.getObject());
             this.hashCode = Objects.hash(id.hashCode(), treePath.hashCode());
             this.commonContext = tModel.getCommonContext();
         }
@@ -448,7 +449,9 @@ class IsisToWicketTreeAdapter {
      * @return Wicket's model for collapse/expand state
      */
     @SuppressWarnings({ "rawtypes" })
-    private static TreeExpansionModel toIModelRepresentingCollapseExpandState(ModelAbstract<ObjectAdapter> model) {
+    private static TreeExpansionModel toIModelRepresentingCollapseExpandState(
+            ModelAbstract<ManagedObject> model) {
+        
         val treeNode = (TreeNode) model.getObject().getPojo();
         val treeState = treeNode.getTreeState();
         val commonContext = model.getCommonContext();
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanelFactories.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanelFactories.java
index 98e995e..e147faa 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanelFactories.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/TreePanelFactories.java
@@ -22,7 +22,6 @@ package org.apache.isis.viewer.wicket.ui.components.tree;
 import org.apache.wicket.Component;
 import org.apache.wicket.model.IModel;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
@@ -30,6 +29,8 @@ import org.apache.isis.viewer.wicket.ui.ComponentFactoryAbstract;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupPanel;
 
+import lombok.val;
+
 /**
  * {@link ComponentFactory} for {@link MarkupPanel}.
  */
@@ -82,7 +83,7 @@ public class TreePanelFactories {
             }
 
             final ValueModel valueModel = (ValueModel) model;
-            final ObjectAdapter adapter = valueModel.getObject();
+            val adapter = valueModel.getObject();
             if(adapter==null || adapter.getPojo()==null) {
                 return ApplicationAdvice.DOES_NOT_APPLY;
             }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/unknown/UnknownModelPanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/unknown/UnknownModelPanel.java
index 47c6145..204e022 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/unknown/UnknownModelPanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/unknown/UnknownModelPanel.java
@@ -23,10 +23,12 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
+import lombok.val;
+
 public class UnknownModelPanel extends PanelAbstract<IModel<?>> {
 
     private static final long serialVersionUID = 1L;
@@ -55,13 +57,14 @@ public class UnknownModelPanel extends PanelAbstract<IModel<?>> {
         buf.append(model.getClass().getSimpleName()).append(" ");
         if(model instanceof EntityModel) {
             EntityModel entityModel = (EntityModel) model;
-            ObjectAdapter objectAdapter = entityModel.getObject();
+            val objectAdapter = entityModel.getObject();
             if(objectAdapter != null) {
-                if(objectAdapter.getOid().isValue()) {
+                
+                if(ManagedObject.isValue(objectAdapter)) {
                     //FIXME[ISIS-1976] should be properly intercepted by another Panel and not fall through to the unknowns                     
                     buf.append("FIXME[ISIS-1976] VALUE '" + objectAdapter.getPojo()+"'");
                 } else {
-                    buf.append("??? objectAdapter oid: " + objectAdapter.getOid());    
+                    buf.append("??? objectAdapter oid: " + ManagedObject._oid(objectAdapter));    
                 }
             } else {
                 buf.append("??? objectAdapter is NULL");
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
index 63a65f3..53ff861 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/value/StandaloneValuePanel.java
@@ -21,11 +21,12 @@ package org.apache.isis.viewer.wicket.ui.components.value;
 
 import org.apache.wicket.markup.html.basic.Label;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract2;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
 
+import lombok.val;
+
 /**
  * Panel for rendering any value types that do not have their own custom
  * {@link ScalarPanelAbstract2 panel} to render them.
@@ -37,7 +38,7 @@ public class StandaloneValuePanel extends PanelAbstract<ValueModel> {
 
     public StandaloneValuePanel(final String id, final ValueModel valueModel) {
         super(id, valueModel);
-        final ObjectAdapter objectAdapter = getModel().getObject();
+        val objectAdapter = getModel().getObject();
 
         final String label = objectAdapter.titleString(null);
         add(new Label(ID_STANDALONE_VALUE, label));
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
index 655c349..da5341c 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/breadcrumbs/BreadcrumbPanel.java
@@ -42,7 +42,6 @@ import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.errors.JGrowlUtil;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
-import org.apache.isis.viewer.wicket.ui.panels.PanelBase;
 
 import lombok.val;
 
@@ -74,7 +73,7 @@ public class BreadcrumbPanel extends PanelAbstract<IModel<Void>> {
             }
 
             private String titleFor(final EntityModel model) {
-                return model.getObjectAdapterMemento().getObjectAdapter().titleString(null);
+                return model.getObjectAdapterMemento().getObjectAdapter(commonContext.getSpecificationLoader()).titleString(null);
             }
 
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java
index 310d5f2..4ce0584 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/entitysimplelink/EntityLinkSimplePanel.java
@@ -24,17 +24,22 @@ import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.FormComponentPanel;
 
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.ui.ComponentFactory;
 import org.apache.isis.viewer.wicket.ui.ComponentType;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.CancelHintRequired;
 import org.apache.isis.viewer.wicket.ui.components.widgets.formcomponent.FormComponentPanelAbstract;
 
+import lombok.val;
+
 /**
  * {@link FormComponentPanel} representing a reference to an entity: a link and
  * (optionally) an autocomplete field.
  */
-public class EntityLinkSimplePanel extends FormComponentPanelAbstract<ObjectAdapter> implements CancelHintRequired  {
+public class EntityLinkSimplePanel 
+extends FormComponentPanelAbstract<ManagedObject> 
+implements CancelHintRequired  {
 
     private static final long serialVersionUID = 1L;
 
@@ -62,7 +67,7 @@ public class EntityLinkSimplePanel extends FormComponentPanelAbstract<ObjectAdap
     }
 
     private void syncWithInput() {
-        final ObjectAdapter adapter = getEntityModel().getObject(); // getPendingElseCurrentAdapter();
+        val adapter = getEntityModel().getObject(); // getPendingElseCurrentAdapter();
 
         if (adapter != null) {
             final EntityModel entityModelForLink = getEntityModel();
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
index 55643cb..a42414b 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/linkandlabel/ActionLink.java
@@ -33,8 +33,8 @@ import org.apache.wicket.util.time.Duration;
 
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.value.LocalResourcePath;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettingsAccessor;
@@ -45,8 +45,9 @@ import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.button.Buttons;
 import lombok.Getter;
+import lombok.val;
 
-public abstract class ActionLink extends AjaxLink<ObjectAdapter> implements IAjaxIndicatorAware {
+public abstract class ActionLink extends AjaxLink<ManagedObject> implements IAjaxIndicatorAware {
 
     private static final long serialVersionUID = 1L;
 
@@ -219,8 +220,8 @@ public abstract class ActionLink extends AjaxLink<ObjectAdapter> implements IAja
 
                 @Override
                 protected IRequestHandler getRequestHandler() {
-                    ObjectAdapter resultAdapter = actionModel.execute();
-                    final Object value = resultAdapter.getPojo();
+                    val resultAdapter = actionModel.execute();
+                    val value = resultAdapter.getPojo();
                     return ActionModel.redirectHandler(value);
                 }
             };
@@ -238,10 +239,10 @@ public abstract class ActionLink extends AjaxLink<ObjectAdapter> implements IAja
 
                 @Override
                 protected IRequestHandler getRequestHandler() {
-                    final ObjectAdapter resultAdapter = actionModel.execute();
-                    final Object value = resultAdapter!=null ? resultAdapter.getPojo() : null;
+                    val resultAdapter = actionModel.execute();
+                    val value = resultAdapter!=null ? resultAdapter.getPojo() : null;
 
-                    final IRequestHandler handler = ActionModel.downloadHandler(value);
+                    val handler = ActionModel.downloadHandler(value);
 
                     //ISIS-1619, prevent clients from caching the response content
                     return isIdempotentOrCachable(actionModel)
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 498b24f..795e3d8 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
@@ -36,7 +36,6 @@ import org.apache.isis.applib.layout.grid.bootstrap3.BS3Grid;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 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.facets.object.grid.GridFacet;
 import org.apache.isis.metamodel.postprocessors.param.ActionParameterDefaultsFacetFromAssociatedCollection;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -109,11 +108,11 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
                             toggledMementosProviderIfAny.getToggles();
 
                     final List<Object> selectedPojos = _Lists.transform(selectedMementos, stream->stream
-                            .map((@Nullable final ObjectAdapterMemento input) -> {
-                                if(input == null) {
+                            .map((@Nullable final ObjectAdapterMemento memento) -> {
+                                if(memento == null) {
                                     return null;
                                 }
-                                final ObjectAdapter objectAdapter = input.getObjectAdapter();
+                                val objectAdapter = memento.getObjectAdapter(commonContext.getSpecificationLoader());
                                 return objectAdapter != null ? objectAdapter.getPojo() : null;
                             })
                             .filter(_NullSafe::isPresent)
@@ -261,7 +260,7 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
                     // (One way this can occur is if an event subscriber has a defect and throws an exception; in which case
                     // the EventBus' exception handler will automatically veto.  This results in a growl message rather than
                     // an error page, but is probably 'good enough').
-                    final ObjectAdapter targetAdapter = actionModel.getTargetAdapter();
+                    val targetAdapter = actionModel.getTargetAdapter();
 
                     final EntityPage entityPage = new EntityPage(getCommonContext(), targetAdapter, null);
 
@@ -293,7 +292,7 @@ public abstract class ActionLinkFactoryAbstract implements ActionLinkFactory {
     }
 
     protected LinkAndLabel newLinkAndLabel(
-            final ObjectAdapter objectAdapter,
+            final ManagedObject objectAdapter,
             final ObjectAction objectAction,
             final AbstractLink link) {
 
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
index 2afe8a2..cc3836b 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
@@ -38,6 +38,7 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.IsisConverterLocator;
 import org.apache.isis.webapp.context.IsisWebAppCommonContext;
 
 import lombok.Getter;
+import lombok.val;
 
 public abstract class ObjectAdapterMementoProviderAbstract extends ChoiceProvider<ObjectAdapterMemento> {
 
@@ -63,7 +64,7 @@ public abstract class ObjectAdapterMementoProviderAbstract extends ChoiceProvide
             return NULL_DISPLAY_TEXT;
         }
 
-        final ObjectAdapter objectAdapter = choice.getObjectAdapter();
+        val objectAdapter = choice.getObjectAdapter(commonContext.getSpecificationLoader());
         final IConverter<Object> converter = findConverter(objectAdapter);
         return converter != null
                 ? converter.convertToString(objectAdapter.getPojo(), getLocale())
@@ -122,7 +123,7 @@ public abstract class ObjectAdapterMementoProviderAbstract extends ChoiceProvide
             matches.addAll(choicesMementos);
         } else {
             for (ObjectAdapterMemento candidate : choicesMementos) {
-                ObjectAdapter objectAdapter = candidate.getObjectAdapter();
+                val objectAdapter = candidate.getObjectAdapter(commonContext.getSpecificationLoader());
                 String title = objectAdapter.titleString(objectAdapter);
                 if (title.toLowerCase().contains(term.toLowerCase())) {
                     matches.add(candidate);
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
index 59e9a3c..13b417e 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
@@ -43,8 +43,8 @@ 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.spec.ManagedObject;
 import org.apache.isis.runtime.memento.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 
@@ -64,9 +64,9 @@ extends ObjectAdapterMementoProviderAbstract {
         
         val commonContext = super.getCommonContext();
         
-        val autoCompleteChoices = _Lists.<ObjectAdapter>newArrayList();
+        val autoCompleteChoices = _Lists.<ManagedObject>newArrayList();
         if (getScalarModel().hasAutoComplete()) {
-            final List<ObjectAdapter> autoCompleteAdapters =
+            val autoCompleteAdapters =
                     getScalarModel().getAutoComplete(term, commonContext.getAuthenticationSession());
             autoCompleteChoices.addAll(autoCompleteAdapters);
         }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
index b2782bb..7775a95 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/entity/EntityPage.java
@@ -37,6 +37,7 @@ import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.isis.metamodel.facets.object.grid.GridFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
@@ -102,7 +103,7 @@ public class EntityPage extends PageAbstract {
         this(pageParameters, entityModel, null);
     }
 
-    public EntityPage(IsisWebAppCommonContext commonContext, ObjectAdapter adapter) {
+    public EntityPage(IsisWebAppCommonContext commonContext, ManagedObject adapter) {
         this(commonContext, adapter, null);
     }
 
@@ -112,7 +113,7 @@ public class EntityPage extends PageAbstract {
      */
     public EntityPage(
             IsisWebAppCommonContext commonContext, 
-            ObjectAdapter adapter, 
+            ManagedObject adapter, 
             ConcurrencyException exIfAny) {
         
         this(PageParametersUtils.newPageParameters(), newEntityModel(commonContext, adapter, exIfAny));
@@ -120,7 +121,7 @@ public class EntityPage extends PageAbstract {
 
     private static EntityModel newEntityModel(
             IsisWebAppCommonContext commonContext,
-            ObjectAdapter adapter,
+            ManagedObject adapter,
             ConcurrencyException exIfAny) {
         
         val entityModel = EntityModel.ofAdapter(commonContext, adapter);
@@ -162,7 +163,7 @@ public class EntityPage extends PageAbstract {
     }
 
     private void buildPage() {
-        final ObjectAdapter objectAdapter;
+        final ManagedObject objectAdapter;
         try {
             // check object still exists
             objectAdapter = model.getObject();
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index 2f16484..ae79ba1 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -44,10 +44,10 @@ import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.metamodel.facets.actions.redirect.RedirectFacet;
 import org.apache.isis.metamodel.facets.properties.renderunchanged.UnchangingFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.runtime.memento.ObjectAdapterMemento;
 import org.apache.isis.runtime.system.session.IsisRequestCycle;
@@ -70,7 +70,7 @@ import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 @Log4j2
-public final class FormExecutorDefault<M extends BookmarkableModel<ObjectAdapter> & ParentEntityModelProvider>
+public final class FormExecutorDefault<M extends BookmarkableModel<ManagedObject> & ParentEntityModelProvider>
 implements FormExecutor {
 
     private static final long serialVersionUID = 1L;
@@ -102,7 +102,7 @@ implements FormExecutor {
             final boolean withinPrompt) {
 
         Command command = null;
-        ObjectAdapter targetAdapter = null;
+        ManagedObject targetAdapter = null;
 
         final EntityModel targetEntityModel = model.getParentEntityModel();
 
@@ -142,15 +142,14 @@ implements FormExecutor {
             //
             // (The DB exception might actually be thrown by the flush() that follows.
             //
-            final ObjectAdapter resultAdapter = obtainResultAdapter();
+            val resultAdapter = obtainResultAdapter();
             // flush any queued changes; any concurrency or violation exceptions will actually be thrown here
             IsisRequestCycle.onResultAdapterObtained();
 
 
             // update target, since version updated (concurrency checks)
-            targetEntityModel.resetVersion();
             targetAdapter = targetEntityModel.load();
-            if(!targetAdapter.isDestroyed()) {
+            if(!ManagedObject._isDestroyed(targetAdapter)) {
                 targetEntityModel.resetPropertyModels();
             }
 
@@ -179,7 +178,7 @@ implements FormExecutor {
                     targetEntityModel.setObject(resultAdapter);
                     targetAdapter = targetEntityModel.load();
                 }
-                if(!targetAdapter.isDestroyed()) {
+                if(!ManagedObject._isDestroyed(targetAdapter)) {
                     targetEntityModel.resetPropertyModels();
                 }
 
@@ -256,8 +255,8 @@ implements FormExecutor {
     }
 
     private boolean shouldRedirect(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter resultAdapter,
+            final ManagedObject targetAdapter,
+            final ManagedObject resultAdapter,
             final RedirectFacet redirectFacet) {
 
         if(redirectFacet == null) {
@@ -283,8 +282,8 @@ implements FormExecutor {
     }
 
     private boolean differs(
-            final ObjectAdapter targetAdapter,
-            final ObjectAdapter resultAdapter) {
+            final ManagedObject targetAdapter,
+            final ManagedObject resultAdapter) {
 
         final ObjectAdapterMemento targetOam = getCommonContext().mementoFor(targetAdapter);
         final ObjectAdapterMemento resultOam = getCommonContext().mementoFor(resultAdapter);
@@ -348,12 +347,12 @@ implements FormExecutor {
     }
 
     private void forwardOnConcurrencyException(
-            final ObjectAdapter targetAdapter,
+            final ManagedObject targetAdapter,
             final ConcurrencyException ex) {
 
         // this will not preserve the URL (because pageParameters are not copied over)
         // but trying to preserve them seems to cause the 302 redirect to be swallowed somehow
-        final EntityPage entityPage = new EntityPage(model.getCommonContext() , targetAdapter, ex);
+        val entityPage = new EntityPage(model.getCommonContext() , targetAdapter, ex);
         
         // force any changes in state etc to happen now prior to the redirect;
         // in the case of an object being returned, this should cause our page mementos
@@ -536,7 +535,7 @@ implements FormExecutor {
 
     ///////////////////////////////////////////////////////////////////////////////
 
-    private ObjectAdapter obtainTargetAdapter() {
+    private ManagedObject obtainTargetAdapter() {
         return formExecutorStrategy.obtainTargetAdapter();
     }
 
@@ -548,12 +547,12 @@ implements FormExecutor {
         formExecutorStrategy.onExecuteAndProcessResults(target);
     }
 
-    private ObjectAdapter obtainResultAdapter() {
+    private ManagedObject obtainResultAdapter() {
         return formExecutorStrategy.obtainResultAdapter();
     }
 
     private void redirectTo(
-            final ObjectAdapter resultAdapter,
+            final ManagedObject resultAdapter,
             final AjaxRequestTarget target) {
         formExecutorStrategy.redirectTo(resultAdapter, target);
     }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorStrategy.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorStrategy.java
index 52d03c1..0c460ff 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorStrategy.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorStrategy.java
@@ -20,24 +20,22 @@ package org.apache.isis.viewer.wicket.ui.panels;
 
 import org.apache.wicket.ajax.AjaxRequestTarget;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.models.BookmarkableModel;
 import org.apache.isis.viewer.wicket.model.models.ParentEntityModelProvider;
 
-public interface FormExecutorStrategy<M extends BookmarkableModel<ObjectAdapter> & ParentEntityModelProvider> {
+public interface FormExecutorStrategy<M extends BookmarkableModel<ManagedObject> & ParentEntityModelProvider> {
 
     M getModel();
 
-    ObjectAdapter obtainTargetAdapter();
+    ManagedObject obtainTargetAdapter();
 
     String getReasonInvalidIfAny();
 
-    void onExecuteAndProcessResults(final AjaxRequestTarget target);
+    void onExecuteAndProcessResults(AjaxRequestTarget target);
 
-    ObjectAdapter obtainResultAdapter();
+    ManagedObject obtainResultAdapter();
 
-    void redirectTo(
-            final ObjectAdapter resultAdapter,
-            final AjaxRequestTarget target);
+    void redirectTo(ManagedObject resultAdapter, AjaxRequestTarget target);
 
 }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
index ebee5b0..d9cd804 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PromptFormAbstract.java
@@ -40,7 +40,7 @@ import org.apache.wicket.util.string.AppendingStringBuffer;
 
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.exceptions._Exceptions.FluentException;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.models.ActionPromptProvider;
@@ -55,11 +55,11 @@ import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour;
 import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 
-public abstract class PromptFormAbstract<T extends BookmarkableModel<ObjectAdapter>
+public abstract class PromptFormAbstract<T extends BookmarkableModel<ManagedObject>
 & ParentEntityModelProvider
-& IModel<ObjectAdapter>
+& IModel<ManagedObject>
 & FormExecutorContext>
-extends FormAbstract<ObjectAdapter>
+extends FormAbstract<ManagedObject>
 implements ScalarModelSubscriber2 {
 
     private static final long serialVersionUID = 1L;