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/28 17:16:14 UTC

[isis] 02/10: ISIS-2158: further remove uses of 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 e1311812a60a43350078ba0d52c6ffeb4da3d579
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Oct 25 18:58:16 2019 +0200

    ISIS-2158: further remove uses of ObjectAdapter
    
    - RO Viewer no longer uses any ObjectAdapter
---
 .../isis/applib/mixins/dto/DtoMappingHelper.java   |   2 +-
 .../commons/internal/exceptions/_Exceptions.java   |   4 +-
 .../apache/isis/metamodel/MetaModelContext.java    |  16 +-
 .../isis/metamodel/MetaModelContext_usingIoc.java  |   7 +
 .../metamodel/adapter/loader/ObjectLoader.java     |  75 ++++
 .../ObjectLoader_Builder.java}                     |  35 +-
 .../loader/ObjectLoader_builtinHandlers.java       | 260 +++++++++++++
 .../metamodel/adapter/oid/factory/OidFactory.java  |  20 +-
 .../adapter/oid/factory/OidFactory_Builder.java    |   9 +-
 ...viders.java => OidFactory_builtinHandlers.java} |  18 +-
 .../facets/object/entity/EntityFacet.java          |   9 +-
 .../apache/isis/metamodel/spec/ManagedObject.java  | 133 +++++--
 .../specloader/SpecificationLoaderDefault.java     |   3 +-
 .../metamodel/MetaModelContext_forTesting.java     |   4 +
 .../JdoPersistenceCapableFacetImpl.java            |  29 +-
 ...{RendererContext.java => IResourceContext.java} |  32 +-
 .../restfulobjects/rendering/LinkBuilder.java      |   8 +-
 .../viewer/restfulobjects/rendering/OidUtils.java  | 102 +----
 .../restfulobjects/rendering/RendererFactory.java  |   5 +-
 .../rendering/ReprRendererAbstract.java            |  44 +--
 .../viewer/restfulobjects/rendering/Responses.java |   4 +-
 .../AbstractObjectMemberReprRenderer.java          |  22 +-
 .../domainobjects/ActionResultReprRenderer.java    |  20 +-
 .../domainobjects/DomainObjectLinkTo.java          |  22 +-
 .../domainobjects/DomainObjectReprRenderer.java    | 113 +++---
 .../domainobjects/DomainServiceLinkTo.java         |   6 +-
 .../rendering/domainobjects/JsonValueEncoder.java  |  11 +-
 .../domainobjects/JsonValueEncoder_Converters.java |  39 +-
 .../rendering/domainobjects/ListReprRenderer.java  |  16 +-
 .../domainobjects/ObjectActionReprRenderer.java    |  33 +-
 .../domainobjects/ObjectAdapterLinkTo.java         |   8 +-
 .../rendering/domainobjects/ObjectAndAction.java   |   4 +-
 .../domainobjects/ObjectAndActionInvocation.java   |  20 +-
 .../domainobjects/ObjectAndCollection.java         |   4 +-
 .../domainobjects/ObjectAndCollection2.java        |   4 +-
 .../rendering/domainobjects/ObjectAndMember.java   |   8 +-
 .../rendering/domainobjects/ObjectAndProperty.java |   4 +-
 .../domainobjects/ObjectAndProperty2.java          |   8 +-
 .../ObjectCollectionReprRenderer.java              |  30 +-
 .../domainobjects/ObjectPropertyReprRenderer.java  |  22 +-
 .../rendering/domainobjects/OidUtils.java          |  54 ---
 .../domainobjects/ScalarValueReprRenderer.java     |  10 +-
 .../AbstractTypeFeatureReprRenderer.java           |   4 +-
 .../AbstractTypeMemberReprRenderer.java            |   8 +-
 .../domaintypes/ActionDescriptionReprRenderer.java |  12 +-
 .../ActionParameterDescriptionReprRenderer.java    |  12 +-
 .../CollectionDescriptionReprRenderer.java         |   8 +-
 .../domaintypes/DomainTypeReprRenderer.java        |  28 +-
 .../PropertyDescriptionReprRenderer.java           |   8 +-
 .../domaintypes/TypeActionResultReprRenderer.java  |   4 +-
 .../domaintypes/TypeListReprRenderer.java          |   6 +-
 .../rendering/service/RepresentationService.java   |  30 +-
 .../RepresentationServiceContentNegotiator.java    |  26 +-
 .../service/conneg/ContentNegotiationService.java  |  30 +-
 .../conneg/ContentNegotiationServiceAbstract.java  |  32 +-
 ...entNegotiationServiceForRestfulObjectsV1_0.java |  92 ++---
 .../ContentNegotiationServiceOrgApacheIsisV1.java  | 100 ++---
 .../ContentNegotiationServiceXRoDomainType.java    |  22 +-
 .../viewer/restfulobjects/rendering/util/Util.java |  12 -
 .../JsonValueEncoderTest_asAdapter.java            |  16 +-
 .../restfulobjects/server/ResourceContext.java     |  19 +-
 .../resources/DomainObjectResourceServerside.java  |  64 ++--
 .../server/resources/DomainResourceHelper.java     | 409 ++++++++++-----------
 .../resources/DomainServiceResourceServerside.java |  18 +-
 .../resources/DomainServicesListReprRenderer.java  |  12 +-
 .../server/resources/HealthReprRenderer.java       |   4 +-
 .../server/resources/HomePageReprRenderer.java     |  39 +-
 .../server/resources/JsonParserHelper.java         |  22 +-
 .../server/resources/ObjectActionArgHelper.java    |  22 +-
 .../resources/ObjectAdapterAccessHelper.java       |  22 +-
 .../resources/ObjectAdapterUpdateHelper.java       |  10 +-
 .../server/resources/ResourceAbstract.java         |  12 +-
 .../server/resources/UserReprRenderer.java         |  18 +-
 .../server/resources/VersionReprRenderer.java      |  12 +-
 .../isis/testdomain/shiro/ShiroSecmanLdapTest.java |   2 +-
 .../shiro/ShiroSecmanLdap_restfulStressTest.java   |   7 +
 .../fixtures/fixturescripts/FixtureScript.java     |   2 +-
 77 files changed, 1367 insertions(+), 1054 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java b/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java
index 4eb15eb..47b4fb3 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java
@@ -58,7 +58,7 @@ public class DtoMappingHelper {
         case VIEW_MODEL:
             return BookmarkObjectState.VIEW_MODEL;
         default:
-            throw _Exceptions.unmatchedCase("objectState '%s' not recognized", bookmark.getObjectState());
+            throw _Exceptions.illegalArgument("objectState '%s' not recognized", bookmark.getObjectState());
         }
 
     }
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
index 255998c..344772e 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/exceptions/_Exceptions.java
@@ -72,9 +72,9 @@ public final class _Exceptions {
      * @param _case the unmatched case to be reported
      * @return
      */
-    public static final IllegalArgumentException unmatchedCase(String format, @Nullable Object _case) {
+    public static final IllegalArgumentException illegalArgument(String format, @Nullable Object ... args) {
         requires(format, "format");
-        return new IllegalArgumentException(String.format(format, _case));
+        return new IllegalArgumentException(String.format(format, args));
     }
 
     public static final NoSuchElementException noSuchElement(String msg) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext.java
index 53fce51..09d1d1c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext.java
@@ -31,6 +31,7 @@ import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
 import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
+import org.apache.isis.metamodel.adapter.loader.ObjectLoader;
 import org.apache.isis.metamodel.services.homepage.HomePageAction;
 import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
@@ -47,9 +48,6 @@ import org.apache.isis.security.authorization.manager.AuthorizationManager;
  */
 public interface MetaModelContext {
 
-    // -- INTERFACE
-    //@Deprecated IsisConfigurationLegacy getConfigurationLegacy();
-    
     IsisSystemEnvironment getSystemEnvironment();
     
     /**
@@ -90,7 +88,14 @@ public interface MetaModelContext {
 
     HomePageAction getHomePageAction();
 
+    ObjectLoader getObjectLoader();
+    
+    @Deprecated
     Stream<ObjectAdapter> streamServiceAdapters();
+    
+    default Stream<ManagedObject> streamServiceAdapters2() {
+        return streamServiceAdapters().map(ManagedObject.class::cast);
+    }
 
     ObjectAdapter lookupServiceAdapterById(String serviceId);
     
@@ -206,6 +211,11 @@ public interface MetaModelContext {
         default <T> T getSingletonElseFail(Class<T> type) {
             return getMetaModelContext().getSingletonElseFail(type);
         }
+        
+        @Override
+        default ObjectLoader getObjectLoader() {
+            return getObjectLoader();
+        }
 
     }
     
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext_usingIoc.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext_usingIoc.java
index 9f456ab..cae7130 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext_usingIoc.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext_usingIoc.java
@@ -37,6 +37,7 @@ import org.apache.isis.commons.internal.ioc.IocContainer;
 import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
+import org.apache.isis.metamodel.adapter.loader.ObjectLoader;
 import org.apache.isis.metamodel.services.ServiceUtil;
 import org.apache.isis.metamodel.services.homepage.HomePageAction;
 import org.apache.isis.metamodel.services.homepage.HomePageResolverService;
@@ -153,6 +154,12 @@ class MetaModelContext_usingIoc implements MetaModelContext {
         return iocContainer.getSingletonElseFail(type);
     }
 
+    // -- OBJECT LOADING
+    
+    @Getter(onMethod = @__(@Override))
+    final ObjectLoader objectLoader = ObjectLoader.buildDefault(this);    
+
+    
     // -- HELPER
 
     private final _Lazy<Map<String, ObjectAdapter>> objectAdaptersForBeansOfKnownSort = 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/loader/ObjectLoader.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/loader/ObjectLoader.java
new file mode 100644
index 0000000..0cf87b7
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/loader/ObjectLoader.java
@@ -0,0 +1,75 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.metamodel.adapter.loader;
+
+import org.apache.isis.metamodel.MetaModelContext;
+import org.apache.isis.metamodel.MetaModelContextAware;
+import org.apache.isis.metamodel.spec.ManagedObject;
+import org.apache.isis.metamodel.spec.ObjectSpecification;
+
+import lombok.Value;
+import lombok.val;
+
+/**
+ * @since 2.0
+ */
+public interface ObjectLoader {
+
+    ManagedObject loadObject(ObjectLoadRequest objectLoadRequest);
+
+    // -- REQUEST
+    
+    @Value(staticConstructor = "of")
+    public static class ObjectLoadRequest {
+        ObjectSpecification objectSpecification;
+        String objectIdentifier;
+    }
+    
+    // -- HANDLER
+    
+    public interface Handler extends MetaModelContextAware {
+        boolean isHandling(ObjectLoadRequest objectLoadRequest);
+        ManagedObject loadObject(ObjectLoadRequest objectLoadRequest);
+    }
+
+    // -- BUILDER
+    
+    public interface ObjectLoaderBuilder {
+        ObjectLoaderBuilder add(Handler handler);
+        ObjectLoader build();
+    }
+
+    public static ObjectLoaderBuilder builder(MetaModelContext metaModelContext) {
+        return new ObjectLoader_Builder(metaModelContext);
+    }
+
+    public static ObjectLoader buildDefault(MetaModelContext metaModelContext) {
+        val objectLoader = ObjectLoader.builder(metaModelContext)
+                .add(new ObjectLoader_builtinHandlers.GuardAgainstNull())
+                .add(new ObjectLoader_builtinHandlers.LoadService())
+                .add(new ObjectLoader_builtinHandlers.LoadValue())
+                .add(new ObjectLoader_builtinHandlers.LoadViewModel())
+                .add(new ObjectLoader_builtinHandlers.LoadEntity())
+                .add(new ObjectLoader_builtinHandlers.LoadOther())
+                .build();
+        return objectLoader;
+    }
+    
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_Builder.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/loader/ObjectLoader_Builder.java
similarity index 52%
copy from core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_Builder.java
copy to core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/loader/ObjectLoader_Builder.java
index 6a862a3..8ac93a5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_Builder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/loader/ObjectLoader_Builder.java
@@ -17,41 +17,46 @@
  *  under the License.
  */
 
-package org.apache.isis.metamodel.adapter.oid.factory;
+package org.apache.isis.metamodel.adapter.loader;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
-import org.apache.isis.metamodel.adapter.oid.factory.OidFactory.OidFactoryBuilder;
-import org.apache.isis.metamodel.adapter.oid.factory.OidFactory.OidProvider;
+import org.apache.isis.metamodel.MetaModelContext;
+import org.apache.isis.metamodel.adapter.loader.ObjectLoader.ObjectLoaderBuilder;
 
+import lombok.RequiredArgsConstructor;
 import lombok.val;
 
-class OidFactory_Builder implements OidFactoryBuilder {
+@RequiredArgsConstructor
+class ObjectLoader_Builder implements ObjectLoaderBuilder {
+    
+    private final MetaModelContext metaModelContext;
 
-    private final List<OidProvider> handler = new ArrayList<>();
+    private final List<ObjectLoader.Handler> handlers = new ArrayList<>();
 
     @Override
-    public OidFactoryBuilder add(OidProvider oidProvider) {
-        handler.add(oidProvider);
+    public ObjectLoader_Builder add(ObjectLoader.Handler handler) {
+        handler.setMetaModelContext(metaModelContext);
+        handlers.add(handler);
         return this;
     }
 
     @Override
-    public OidFactory build() {
-        return managedObject -> {
+    public ObjectLoader build() {
+        return oid -> {
 
-            val rootOid = handler.stream()
-                    .filter(h->h.isHandling(managedObject))
+            val managedObject = handlers.stream()
+                    .filter(h->h.isHandling(oid))
                     .findFirst()
-                    .map(h->h.oidFor(managedObject))
+                    .map(h->h.loadObject(oid))
                     .orElse(null);
 
-            Objects.requireNonNull(rootOid, 
-                    () -> "Could not create an Oid for managedObject: " + managedObject);
+            Objects.requireNonNull(managedObject, 
+                    () -> "Could not create a ManagedObject for Oid: " + oid);
 
-            return rootOid;
+            return managedObject;
         };
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/loader/ObjectLoader_builtinHandlers.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/loader/ObjectLoader_builtinHandlers.java
new file mode 100644
index 0000000..f4bfeb5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/loader/ObjectLoader_builtinHandlers.java
@@ -0,0 +1,260 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.metamodel.adapter.loader;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Modifier;
+
+import org.apache.isis.commons.collections.Bin;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
+import org.apache.isis.metamodel.MetaModelContext;
+import org.apache.isis.metamodel.adapter.loader.ObjectLoader.Handler;
+import org.apache.isis.metamodel.adapter.loader.ObjectLoader.ObjectLoadRequest;
+import org.apache.isis.metamodel.facets.object.entity.EntityFacet;
+import org.apache.isis.metamodel.facets.object.viewmodel.ViewModelFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
+import org.apache.isis.metamodel.spec.ObjectSpecification;
+
+import lombok.Data;
+import lombok.val;
+
+/**
+ * 
+ * @since 2.0
+ *
+ */
+final class ObjectLoader_builtinHandlers {
+
+    // -- NULL GUARD
+    
+    @Data
+    public static class GuardAgainstNull implements Handler {
+        
+        private MetaModelContext metaModelContext;
+        
+        @Override
+        public boolean isHandling(ObjectLoadRequest objectLoadRequest) {
+            
+            if(objectLoadRequest==null) {
+                return true;
+            }
+            
+            val spec = objectLoadRequest.getObjectSpecification();
+            if(spec == null) {
+                // eg "NONEXISTENT:123"
+                return true;
+            }
+
+            // we don't guard against the identifier being null, because, this is ok 
+            // for services and values
+            return false;
+        }
+
+        @Override
+        public ManagedObject loadObject(ObjectLoadRequest objectLoadRequest) {
+            return null; // yes null
+        }
+
+    }
+    
+    // -- MANAGED BEANS
+
+    @Data
+    public static class LoadService implements Handler {
+        
+        private MetaModelContext metaModelContext;
+
+        @Override
+        public boolean isHandling(ObjectLoadRequest objectLoadRequest) {
+            
+            val spec = objectLoadRequest.getObjectSpecification();
+            return spec.isManagedBean();
+        }
+
+        @Override
+        public ManagedObject loadObject(ObjectLoadRequest objectLoadRequest) {
+            
+            val spec = objectLoadRequest.getObjectSpecification();
+            val beanName = spec.getSpecId().asString();
+            
+            val servicePojo = metaModelContext.getServiceRegistry()
+                .lookupRegisteredBeanById(beanName)
+                .map(ManagedBeanAdapter::getInstance)
+                .flatMap(Bin::getFirst)
+                .orElseThrow(()->_Exceptions.noSuchElement(
+                        "loader: %s loading beanName %s", 
+                        this.getClass().getName(), beanName));
+            
+            return ManagedObject.of(spec, servicePojo);
+        }
+
+    }
+    
+    // -- VALUES
+    
+    @Data
+    public static class LoadValue implements Handler {
+
+        private MetaModelContext metaModelContext;
+        
+        @Override
+        public boolean isHandling(ObjectLoadRequest objectLoadRequest) {
+            
+            val spec = objectLoadRequest.getObjectSpecification();
+            return spec.isValue();
+        }
+
+        @Override
+        public ManagedObject loadObject(ObjectLoadRequest objectLoadRequest) {
+            
+            // cannot load a value
+            
+            val spec = objectLoadRequest.getObjectSpecification();
+            throw _Exceptions.illegalArgument(
+                    "cannot load a value, loader: %s loading ObjectSpecification %s", 
+                        this.getClass().getName(), spec);
+        }
+
+    }
+
+    // -- VIEW MODELS
+    
+    @Data
+    public static class LoadViewModel implements Handler {
+        
+        private MetaModelContext metaModelContext;
+
+        @Override
+        public boolean isHandling(ObjectLoadRequest objectLoadRequest) {
+            
+            val spec = objectLoadRequest.getObjectSpecification();
+            return spec.isViewModel();
+        }
+
+        @Override
+        public ManagedObject loadObject(ObjectLoadRequest objectLoadRequest) {
+            
+            val spec = objectLoadRequest.getObjectSpecification();
+            val viewModelFacet = spec.getFacet(ViewModelFacet.class);
+            if(viewModelFacet == null) {
+                throw _Exceptions.illegalArgument(
+                        "ObjectSpecification is missing a ViewModelFacet: %s", spec);
+            }
+            
+            val memento = objectLoadRequest.getObjectIdentifier();
+            final Object viewModelPojo;
+            if(viewModelFacet.getRecreationMechanism().isInitializes()) {
+                viewModelPojo = this.instantiateAndInjectServices(spec);
+                viewModelFacet.initialize(viewModelPojo, memento);
+            } else {
+                viewModelPojo = viewModelFacet.instantiate(spec.getCorrespondingClass(), memento);
+            }
+            
+            return ManagedObject.of(spec, viewModelPojo);
+        }
+        
+        private Object instantiateAndInjectServices(ObjectSpecification spec) {
+
+            val type = spec.getCorrespondingClass();
+            if (type.isArray()) {
+                return Array.newInstance(type.getComponentType(), 0);
+            }
+
+            if (Modifier.isAbstract(type.getModifiers())) {
+                throw _Exceptions.illegalArgument("Cannot create an instance of an abstract class '%s', "
+                        + "loader: %s loading ObjectSpecification %s", 
+                        type, this.getClass().getName(), spec);
+            }
+
+            final Object newInstance;
+            try {
+                newInstance = type.newInstance();
+            } catch (final IllegalAccessException | InstantiationException e) {
+                throw _Exceptions.illegalArgument("Failed to create instance of type '%s', "
+                        + "loader: %s loading ObjectSpecification %s", 
+                        type, this.getClass().getName(), spec);
+            }
+
+            metaModelContext.getServiceInjector().injectServicesInto(newInstance);
+            return newInstance;
+        }
+
+    }
+
+    // -- ENTITIES
+    
+    @Data
+    public static class LoadEntity implements Handler {
+        
+        private MetaModelContext metaModelContext;
+
+        @Override
+        public boolean isHandling(ObjectLoadRequest objectLoadRequest) {
+            
+            val spec = objectLoadRequest.getObjectSpecification();
+            return spec.isEntity();
+        }
+
+        @Override
+        public ManagedObject loadObject(ObjectLoadRequest objectLoadRequest) {
+
+            val spec = objectLoadRequest.getObjectSpecification();
+            val entityFacet = spec.getFacet(EntityFacet.class);
+            if(entityFacet==null) {
+                throw _Exceptions.illegalArgument(
+                        "ObjectSpecification is missing an EntityFacet: %s", spec);
+            }
+            
+            val identifier = objectLoadRequest.getObjectIdentifier();
+            val entityPojo = entityFacet.fetchByIdentifier(spec, identifier);
+            
+            metaModelContext.getServiceInjector().injectServicesInto(entityPojo);
+            
+            return ManagedObject.of(spec, entityPojo);
+        }
+
+    }
+    
+    // -- UNKNOWN LOAD REQUEST
+    
+    @Data
+    public static class LoadOther implements Handler {
+        
+        private MetaModelContext metaModelContext;
+
+        @Override
+        public boolean isHandling(ObjectLoadRequest objectLoadRequest) {
+            return true; // the last handler in the chain
+        }
+
+        @Override
+        public ManagedObject loadObject(ObjectLoadRequest objectLoadRequest) {
+
+            // unknown object load request
+            
+            throw _Exceptions.illegalArgument(
+                    "unknown object load request, loader: %s loading ObjectSpecification %s", 
+                        this.getClass().getName(), objectLoadRequest.getObjectSpecification());
+
+        }
+
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory.java
index 27d41fd..f58e61e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory.java
@@ -31,13 +31,17 @@ public interface OidFactory {
 
     RootOid oidFor(ManagedObject managedObject);
 
-    public interface OidProvider {
+    // -- HANDLER
+    
+    public interface Handler {
         boolean isHandling(ManagedObject managedObject);
         RootOid oidFor(ManagedObject managedObject);
     }
 
+    // -- BUILDER
+    
     public interface OidFactoryBuilder {
-        OidFactoryBuilder add(OidProvider handler);
+        OidFactoryBuilder add(Handler handler);
         OidFactory build();
     }
 
@@ -47,12 +51,12 @@ public interface OidFactory {
 
     public static OidFactory buildDefault() {
         val oidFactory = OidFactory.builder()
-                .add(new OidFactory_OidProviders.GuardAgainstRootOid())
-                .add(new OidFactory_OidProviders.OidForServices())
-                .add(new OidFactory_OidProviders.OidForValues())
-                .add(new OidFactory_OidProviders.OidForViewModels())
-                .add(new OidFactory_OidProviders.OidForEntities())
-                .add(new OidFactory_OidProviders.OidForOthers())
+                .add(new OidFactory_builtinHandlers.GuardAgainstRootOid())
+                .add(new OidFactory_builtinHandlers.OidForServices())
+                .add(new OidFactory_builtinHandlers.OidForValues())
+                .add(new OidFactory_builtinHandlers.OidForViewModels())
+                .add(new OidFactory_builtinHandlers.OidForEntities())
+                .add(new OidFactory_builtinHandlers.OidForOthers())
                 .build();
         return oidFactory;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_Builder.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_Builder.java
index 6a862a3..17c1fa4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_Builder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_Builder.java
@@ -24,17 +24,16 @@ import java.util.List;
 import java.util.Objects;
 
 import org.apache.isis.metamodel.adapter.oid.factory.OidFactory.OidFactoryBuilder;
-import org.apache.isis.metamodel.adapter.oid.factory.OidFactory.OidProvider;
 
 import lombok.val;
 
 class OidFactory_Builder implements OidFactoryBuilder {
 
-    private final List<OidProvider> handler = new ArrayList<>();
+    private final List<OidFactory.Handler> handlers = new ArrayList<>();
 
     @Override
-    public OidFactoryBuilder add(OidProvider oidProvider) {
-        handler.add(oidProvider);
+    public OidFactoryBuilder add(OidFactory.Handler handler) {
+        handlers.add(handler);
         return this;
     }
 
@@ -42,7 +41,7 @@ class OidFactory_Builder implements OidFactoryBuilder {
     public OidFactory build() {
         return managedObject -> {
 
-            val rootOid = handler.stream()
+            val rootOid = handlers.stream()
                     .filter(h->h.isHandling(managedObject))
                     .findFirst()
                     .map(h->h.oidFor(managedObject))
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_OidProviders.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_builtinHandlers.java
similarity index 90%
rename from core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_OidProviders.java
rename to core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_builtinHandlers.java
index 48898e4..69b52db 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_OidProviders.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/adapter/oid/factory/OidFactory_builtinHandlers.java
@@ -24,7 +24,7 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.config.SystemConstants;
 import org.apache.isis.metamodel.adapter.oid.Oid;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
-import org.apache.isis.metamodel.adapter.oid.factory.OidFactory.OidProvider;
+import org.apache.isis.metamodel.adapter.oid.factory.OidFactory.Handler;
 import org.apache.isis.metamodel.facets.object.entity.EntityFacet;
 import org.apache.isis.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.metamodel.facets.object.viewmodel.ViewModelFacet;
@@ -32,10 +32,10 @@ import org.apache.isis.metamodel.spec.ManagedObject;
 
 import lombok.val;
 
-class OidFactory_OidProviders {
+class OidFactory_builtinHandlers {
 
 
-    static class GuardAgainstRootOid implements OidProvider {
+    static class GuardAgainstRootOid implements Handler {
 
         @Override
         public boolean isHandling(ManagedObject managedObject) {
@@ -51,7 +51,7 @@ class OidFactory_OidProviders {
 
     }
 
-    static class OidForServices implements OidProvider {
+    static class OidForServices implements Handler {
 
         @Override
         public boolean isHandling(ManagedObject managedObject) {
@@ -66,7 +66,7 @@ class OidFactory_OidProviders {
 
     }
 
-    static class OidForEntities implements OidProvider {
+    static class OidForEntities implements Handler {
 
         @Override
         public boolean isHandling(ManagedObject managedObject) {
@@ -82,13 +82,13 @@ class OidFactory_OidProviders {
                 val msg = String.format("entity '%s' has not EntityFacet associated", managedObject);
                 throw _Exceptions.unrecoverable(msg);
             }
-            val identifier = entityFacet.identifierFor(pojo);
+            val identifier = entityFacet.identifierFor(spec, pojo);
             return Oid.Factory.persistentOf(spec.getSpecId(), identifier);
         }
 
     }
 
-    static class OidForValues implements OidProvider {
+    static class OidForValues implements Handler {
 
         @Override
         public boolean isHandling(ManagedObject managedObject) {
@@ -102,7 +102,7 @@ class OidFactory_OidProviders {
 
     }
 
-    static class OidForViewModels implements OidProvider {
+    static class OidForViewModels implements Handler {
 
         @Override
         public boolean isHandling(ManagedObject managedObject) {
@@ -119,7 +119,7 @@ class OidFactory_OidProviders {
 
     }
 
-    static class OidForOthers implements OidProvider {
+    static class OidForOthers implements Handler {
 
         @Override
         public boolean isHandling(ManagedObject managedObject) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
index 830e945..024d82d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/entity/EntityFacet.java
@@ -20,6 +20,7 @@
 package org.apache.isis.metamodel.facets.object.entity;
 
 import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.spec.ObjectSpecification;
 
 /**
  * Indicates that this class is managed by a persistence context.
@@ -27,6 +28,12 @@ import org.apache.isis.metamodel.facetapi.Facet;
  */
 public interface EntityFacet extends Facet {
 
-    String identifierFor(Object pojo);
+    String identifierFor(ObjectSpecification spec, Object pojo);
+
+    Object fetchByIdentifier(ObjectSpecification spec, String identifier);
+    
+    void persist(ObjectSpecification spec, Object pojo);
+
+    
 
 }
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 6dde30d..f9494a8 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
@@ -25,12 +25,18 @@ import java.util.List;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import org.apache.isis.applib.domain.DomainObjectList;
 import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.adapter.loader.ObjectLoader;
 import org.apache.isis.metamodel.adapter.oid.Oid;
 import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.adapter.oid.factory.OidFactory;
+import org.apache.isis.metamodel.adapter.version.Version;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.metamodel.specloader.SpecificationLoaderDefault;
 
 import lombok.EqualsAndHashCode;
 import lombok.Getter;
@@ -207,9 +213,6 @@ public interface ManagedObject {
         return new LazyManagedObject(specLoader, pojo);
     }
     
-    // -- SHORTCUTS
-    
-    
     // -- UNWRAPPING
     
     public static Object unwrapPojo(final ManagedObject adapter) {
@@ -247,7 +250,51 @@ public interface ManagedObject {
             .map(ManagedObject::unwrapPojo)
             .collect(Collectors.toList());
     }
+    
+    // -- SHORTCUTS
+    
+    public static String getDomainType(ManagedObject objectAdapter) {
+        if (objectAdapter == null) {
+            return null;
+        }
+        return objectAdapter.getSpecification().getSpecId().asString();
+    }
+    
+    // -- BASIC PREDICATES
+
+    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 book-markable
+            return true;
+        }
+        return false;
+    }
+
+    static boolean isNull(ManagedObject adapter) {
+        if(adapter==null) {
+            return true;
+        }
+        return adapter.getPojo()==null;
+    }
+    
     // -- DEPRECATIONS (in an attempt to decouple the metamodel from ObjectAdapter)
     
     @Deprecated
@@ -262,13 +309,11 @@ public interface ManagedObject {
     
     @Deprecated
     static boolean _isDestroyed(ManagedObject adapter) {
-        //TODO only applicable when persistable
         return ManagedObject.promote(adapter).isDestroyed();
     }
 
     @Deprecated
     static RootOid _collectionOidIfAny(ManagedObject adapter) {
-        // TODO Auto-generated method stub
         val oid = ManagedObject.promote(adapter).getOid();
         if(!(oid instanceof RootOid)) {
             return null;
@@ -290,6 +335,15 @@ public interface ManagedObject {
         return true;
     }
     
+    @Deprecated
+    static Version _version(ManagedObject adapter) {
+        if(adapter instanceof ObjectAdapter) {
+            return ((ObjectAdapter)adapter).getVersion();
+        }
+        System.err.println("version support is not fully implemented yet");
+        return null;
+    }
+    
     // -- OID UTILITIES
     
     static final class Oids {
@@ -317,41 +371,50 @@ public interface ManagedObject {
         return null;
     }
     
-    // -- BASIC PREDICATES
-
-    static boolean isEntity(ManagedObject adapter) {
-        if(adapter==null) {
-            return false;
+    static RootOid _rootOidElseThrow(ManagedObject adapter) {
+        val rootOid = _rootOidIfAny(adapter);
+        if(rootOid==null) {
+            throw new IllegalArgumentException("adapter must be a root adapter");
         }
-        return adapter.getSpecification().isEntity();
+        return rootOid;
     }
-
-    static boolean isValue(ManagedObject adapter) {
-        if(adapter==null) {
-            return false;
-        }
-        return adapter.getSpecification().isValue();
+    
+    static String _instanceIdIfAny(ManagedObject adapter) {
+        String oidStr = ManagedObject._rootOidElseThrow(adapter).enStringNoVersion();
+        // REVIEW: it's a bit hokey to join these together just to split them out again.
+        return oidStr != null ? Oid.unmarshaller().splitInstanceId(oidStr): null;
     }
 
-    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 book-markable
-            return true;
-        }
-        return false;
+    @Deprecated
+    static ManagedObject _adapterOfList(DomainObjectList list) {
+        // TODO Auto-generated method stub
+        // legacy of
+        // resourceContext.adapterOfPojo(list);
+        throw _Exceptions.notImplemented();
     }
 
-    static boolean isNull(ManagedObject adapter) {
-        if(adapter==null) {
-            return true;
-        }
-        return adapter.getPojo()==null;
+    @Deprecated
+    static void _makePersistentInTransaction(ManagedObject adapter) {
+        
+        // TODO Auto-generated method stub
+        // legacy of
+        // getResourceContext().makePersistentInTransaction(adapter);
+        throw _Exceptions.notImplemented();
     }
 
-
-
-}
+    @Deprecated
+    static ManagedObject _adapterOfRootOid(SpecificationLoader specificationLoader, RootOid rootOid) {
+        
+        val mmc = ((SpecificationLoaderDefault)specificationLoader).getMetaModelContext();
+        
+        val spec = specificationLoader.loadSpecification(rootOid.getObjectSpecId());
+        val objectId = rootOid.getIdentifier();
+        
+        val objectLoadRequest = ObjectLoader.ObjectLoadRequest.of(spec, objectId);
+        val managedObject = mmc.getObjectLoader().loadObject(objectLoadRequest);
+        
+        return managedObject;
+        
+    }
+    
+ }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
index 535cfe0..054a101 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
@@ -58,6 +58,7 @@ import org.apache.isis.schema.utils.CommonDtoUtils;
 
 import static org.apache.isis.commons.internal.base._With.requires;
 
+import lombok.Getter;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
@@ -90,7 +91,7 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
     private ProgrammingModel programmingModel;
     private FacetProcessor facetProcessor;
     private PostProcessor postProcessor;
-    private MetaModelContext metaModelContext; // cannot inject, would cause circular dependency
+    @Getter private MetaModelContext metaModelContext; // cannot inject, would cause circular dependency
     
     private final SpecificationCacheDefault<ObjectSpecification> cache = 
             new SpecificationCacheDefault<>();
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java
index 294d234..7d1a4ac 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java
@@ -37,6 +37,7 @@ import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
 import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
+import org.apache.isis.metamodel.adapter.loader.ObjectLoader;
 import org.apache.isis.metamodel.progmodel.ProgrammingModel;
 import org.apache.isis.metamodel.services.events.MetamodelEventService;
 import org.apache.isis.metamodel.services.homepage.HomePageAction;
@@ -146,6 +147,9 @@ public final class MetaModelContext_forTesting implements MetaModelContext {
         return serviceAdaptersById.get(serviceId);
     }
     
+    @Getter(onMethod = @__(@Override))
+    final ObjectLoader objectLoader = ObjectLoader.buildDefault(this);
+    
     // -- LOOKUP
 
     @Override
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
index 90ac80f..4998121 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/metamodel/facets/object/persistencecapable/JdoPersistenceCapableFacetImpl.java
@@ -19,14 +19,14 @@
 package org.apache.isis.jdo.metamodel.facets.object.persistencecapable;
 
 import java.util.UUID;
-import java.util.stream.Stream;
 
 import javax.jdo.annotations.IdentityType;
 
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.metamodel.facetapi.Facet;
+import org.apache.isis.metamodel.adapter.oid.Oid;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
+import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.runtime.system.context.IsisContext;
 
 import lombok.val;
@@ -38,11 +38,26 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
             final String tableOrTypeName,
             final IdentityType identityType,
             final FacetHolder holder) {
+        
         super(schemaName, tableOrTypeName, identityType, holder);
     }
 
     @Override
-    public String identifierFor(Object pojo) {
+    public Object fetchByIdentifier(ObjectSpecification spec, String identifier) {
+        
+        //TODO simplify, spec is already loaded
+        
+        val persistenceSession = IsisContext.getPersistenceSession().get();
+        val adapter = persistenceSession.getObjectAdapterByIdProvider()
+                .adapterFor(Oid.Factory.persistentOf(spec.getSpecId(), identifier)); 
+        
+        return adapter.getPojo();
+    }
+    
+    @Override
+    public String identifierFor(ObjectSpecification spec, Object pojo) {
+
+        //TODO simplify, spec is already loaded
         
         if(pojo==null || !isPersistableType(pojo.getClass())) {
             return "?";
@@ -59,6 +74,12 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
         }
     }
 
+    @Override
+    public void persist(ObjectSpecification spec, Object pojo) {
+        // TODO Auto-generated method stub
+        
+    }
+
     // -- HELPER
     
     private final static _Lazy<Class<?>> persistable_type = _Lazy.threadSafe(()->{
@@ -76,4 +97,6 @@ public class JdoPersistenceCapableFacetImpl extends JdoPersistenceCapableFacetAb
     }
 
 
+
+
 }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/IResourceContext.java
similarity index 68%
rename from core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java
rename to core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/IResourceContext.java
index 684e058..5d64e13 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererContext.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/IResourceContext.java
@@ -23,13 +23,18 @@ import java.util.List;
 import javax.ws.rs.core.MediaType;
 
 import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.applib.services.registry.ServiceRegistry;
+import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.metamodel.MetaModelContext;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.runtime.system.context.session.RuntimeContext;
+import org.apache.isis.metamodel.spec.ManagedObject;
+import org.apache.isis.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.security.authentication.AuthenticationSession;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectReprRenderer;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAdapterLinkTo;
 import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
 
-public interface RendererContext extends RuntimeContext {
+public interface IResourceContext {
 
     String urlFor(final String url);
 
@@ -61,21 +66,36 @@ public interface RendererContext extends RuntimeContext {
      * @param objectAdapter - the object proposed to be rendered eagerly
      * @return whether this adapter has already been rendered (implying the caller should not render the value).
      */
-    boolean canEagerlyRender(ObjectAdapter objectAdapter);
+    boolean canEagerlyRender(ManagedObject objectAdapter);
 
     /**
      * Applies only when rendering a domain object.
      */
     RepresentationService.Intent getIntent();
+    
+    ObjectAdapterLinkTo getObjectAdapterLinkTo();
+    void setObjectAdapterLinkTo(ObjectAdapterLinkTo adapterLinkTo);
+    
+    AuthenticationSession getAuthenticationSession();
+    
+    SpecificationLoader getSpecificationLoader();
+    MetaModelContext getMetaModelContext(); // TODO derive from specLoader
+    ServiceRegistry getServiceRegistry(); // TODO derive from specLoader
+    IsisConfiguration getConfiguration(); // TODO derive from specLoader
 
     // -- TEMPORARY FOR REFACTORING
 
-    default ObjectAdapter getObjectAdapterElseNull(String oidFromHref) {
+    @Deprecated
+    default ManagedObject getObjectAdapterElseNull(String oidFromHref) {
         return OidUtils.getObjectAdapterElseNull(this, oidFromHref);
     }
 
-    default ObjectAdapter getObjectAdapterElseNull(String domainType, String instanceIdEncoded) {
+    @Deprecated
+    default ManagedObject getObjectAdapterElseNull(String domainType, String instanceIdEncoded) {
         return OidUtils.getObjectAdapterElseNull(this, domainType, instanceIdEncoded);
     }
 
+    
+    
+
 }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
index 0cf46b7..a0ff7e1 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/LinkBuilder.java
@@ -28,15 +28,15 @@ import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
 
 public final class LinkBuilder {
 
-    public static LinkBuilder newBuilder(final RendererContext resourceContext, final String rel, final RepresentationType representationType, final String hrefFormat, final Object... hrefArgs) {
+    public static LinkBuilder newBuilder(final IResourceContext resourceContext, final String rel, final RepresentationType representationType, final String hrefFormat, final Object... hrefArgs) {
         return newBuilder(resourceContext, rel, representationType.getJsonElseXmlMediaType(), hrefFormat, hrefArgs);
     }
 
-    public static LinkBuilder newBuilder(final RendererContext resourceContext, final String rel, final MediaType mediaType, final String hrefFormat, final Object... hrefArgs) {
+    public static LinkBuilder newBuilder(final IResourceContext resourceContext, final String rel, final MediaType mediaType, final String hrefFormat, final Object... hrefArgs) {
         return new LinkBuilder(resourceContext, rel, String.format(hrefFormat, hrefArgs), mediaType);
     }
 
-    private final RendererContext resourceContext;
+    private final IResourceContext resourceContext;
     private final JsonRepresentation representation = JsonRepresentation.newMap();
 
     private final String rel;
@@ -48,7 +48,7 @@ public final class LinkBuilder {
     private JsonRepresentation arguments;
     private JsonRepresentation value;
 
-    protected LinkBuilder(final RendererContext resourceContext, final String rel, final String href, final MediaType mediaType) {
+    protected LinkBuilder(final IResourceContext resourceContext, final String rel, final String href, final MediaType mediaType) {
         this.resourceContext = resourceContext;
         this.rel = rel;
         this.href = href;
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/OidUtils.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/OidUtils.java
index d0f78cb..5229b39 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/OidUtils.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/OidUtils.java
@@ -18,21 +18,13 @@
  */
 package org.apache.isis.viewer.restfulobjects.rendering;
 
-import org.apache.isis.commons.collections.Bin;
-import org.apache.isis.commons.internal.assertions._Assert;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.commons.internal.ioc.ManagedBeanAdapter;
-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.exceptions.persistence.ObjectNotFoundException;
-import org.apache.isis.metamodel.exceptions.persistence.PojoRecreationException;
-import org.apache.isis.metamodel.facets.object.viewmodel.ViewModelFacet;
-
-import static org.apache.isis.commons.internal.base._With.mapIfPresentElse;
+import org.apache.isis.metamodel.spec.ManagedObject;
 
 import lombok.val;
 
+@Deprecated // use framework API instead, needs migration
 final class OidUtils {
 
     private OidUtils() {
@@ -41,104 +33,36 @@ final class OidUtils {
     /**
      * @return {@code null} if not persistent and not a view model.
      */
-    public static ObjectAdapter getObjectAdapterElseNull(
-            final RendererContext rendererContext,
+    public static ManagedObject getObjectAdapterElseNull(
+            final IResourceContext resourceContext,
             final String domainType, 
             final String instanceIdEncoded) {
 
         final String instanceIdUnencoded = UrlDecoderUtils.urlDecode(instanceIdEncoded);
         String oidStrUnencoded = Oid.marshaller().joinAsOid(domainType, instanceIdUnencoded);
-        return getObjectAdapter(rendererContext, oidStrUnencoded);
+        return getObjectAdapter(resourceContext, oidStrUnencoded);
     }
 
     /**
-     * see {@link #getObjectAdapterElseNull(org.apache.isis.viewer.restfulobjects.rendering.RendererContext, String, String)}
+     * see {@link #getObjectAdapterElseNull(org.apache.isis.viewer.restfulobjects.rendering.IResourceContext, String, String)}
      */
-    public static ObjectAdapter getObjectAdapterElseNull(
-            final RendererContext rendererContext,
+    public static ManagedObject getObjectAdapterElseNull(
+            final IResourceContext resourceContext,
             final String oidStrEncoded) {
 
         String oidStrUnencoded = UrlDecoderUtils.urlDecode(oidStrEncoded);
-        return getObjectAdapter(rendererContext, oidStrUnencoded);
+        return getObjectAdapter(resourceContext, oidStrUnencoded);
     }
 
     // -- HELPER
 
-    private static ObjectAdapter getObjectAdapter(
-            final RendererContext rendererContext,
+    private static ManagedObject getObjectAdapter(
+            final IResourceContext resourceContext,
             final String oidStrUnencoded) {
 
-        final RootOid rootOid = RootOid.deString(oidStrUnencoded);
-        final Object domainObject = domainObjectForAny(rendererContext, rootOid);
-
-        return rendererContext.adapterOfPojo(domainObject);
-    }
-
-    private static Object domainObjectForAny(final RendererContext rendererContext, final RootOid rootOid) {
-
-        val specId = rootOid.getObjectSpecId();
-        val spec = rendererContext.getSpecificationLoader().lookupBySpecIdElseLoad(specId);
-        if(spec == null) {
-            // eg "NONEXISTENT:123"
-            return null;
-        }
-
-        //TODO[2158] remove eventually
-        _Assert.assertEquals("expected same", 
-                spec.getBeanSort().isViewModel(), 
-                spec.containsFacet(ViewModelFacet.class));
-        
-        if(spec.getBeanSort().isViewModel()) {
-
-            try {
-                val fixedRootOid = ensureConsistentOidState(rootOid);
-                val adapter = rendererContext.adapterOfPojo(fixedRootOid);
-
-                val pojo = mapIfPresentElse(adapter, ObjectAdapter::getPojo, null);
-                return pojo;
-
-            } catch(ObjectNotFoundException | PojoRecreationException ex) {
-                return null;
-            }
-        } else if(spec.getBeanSort().isEntity()){
-            try {
-                val pojo = rendererContext.fetchPersistentPojoInTransaction(rootOid);
-                //TODO[ISIS-1976] changed behavior: predicate was objectAdapter.isTransient();
-                return rendererContext.stateOf(pojo).isDetached()
-                        ? null 
-                                : pojo;
-            } catch(ObjectNotFoundException ex) {
-                return null;
-            }
-        } else if(spec.getBeanSort().isManagedBean()){
-            
-            val servicePojo = rendererContext.getServiceRegistry()
-                    .lookupRegisteredBeanById(spec.getSpecId().asString())
-                    .map(ManagedBeanAdapter::getInstance)
-                    .flatMap(Bin::getFirst)
-                    .orElse(null);
-            
-            if(servicePojo!=null) {
-                return servicePojo;
-            }
-            // fall through and throw
-            
-        } 
-        throw _Exceptions.unrecoverableFormatted(
-                "unhandled request for a %s having rootId %s",
-                spec,
-                rootOid);
-        
+        val rootOid = RootOid.deString(oidStrUnencoded);
+        return ManagedObject._adapterOfRootOid(resourceContext.getSpecificationLoader(), rootOid);
     }
 
-    private static RootOid ensureConsistentOidState(RootOid rootOid) {
-        // this is a hack; the RO viewer when rendering the URL for the view model loses the "view model" indicator
-        // ("*") from the specId, meaning that the marshalling logic above in RootOidDefault.deString() creates an
-        // oid in the wrong state.  The code below checks for this and recreates the oid with the current state of 'view model'
-        if(!rootOid.isViewModel()) {
-            return Oid.Factory.viewmodelOf(rootOid.getObjectSpecId(), rootOid.getIdentifier());
-        }
-        return rootOid;
-    }
 
 }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererFactory.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererFactory.java
index 14d51a5..a996acd 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererFactory.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/RendererFactory.java
@@ -25,6 +25,9 @@ public interface RendererFactory {
 
     RepresentationType getRepresentationType();
 
-    ReprRenderer<?, ?> newRenderer(RendererContext resourceContext, LinkFollowSpecs linkFollower, JsonRepresentation representation);
+    ReprRenderer<?, ?> newRenderer(
+            IResourceContext resourceContext, 
+            LinkFollowSpecs linkFollower, 
+            JsonRepresentation representation);
 
 }
\ No newline at end of file
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
index cff9f94..4b5fcbc 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/ReprRendererAbstract.java
@@ -26,8 +26,8 @@ import javax.ws.rs.core.MediaType;
 
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
@@ -42,7 +42,7 @@ import lombok.val;
 public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>, T> 
 implements ReprRenderer<R, T> {
 
-    @Getter protected final RendererContext rendererContext;
+    @Getter protected final IResourceContext resourceContext;
     @Getter protected final JsonValueEncoder jsonValueEncoder;
     
     private final LinkFollowSpecs linkFollower;
@@ -55,24 +55,24 @@ implements ReprRenderer<R, T> {
     protected boolean includesSelf;
 
     public ReprRendererAbstract(
-            final RendererContext rendererContext,
+            final IResourceContext resourceContext,
             final LinkFollowSpecs linkFollower,
             final RepresentationType representationType,
             final JsonRepresentation representation) {
-        this.rendererContext = rendererContext;
-        this.jsonValueEncoder = rendererContext.getServiceRegistry()
+        this.resourceContext = resourceContext;
+        this.jsonValueEncoder = resourceContext.getServiceRegistry()
                 .lookupServiceElseFail(JsonValueEncoder.class);
                 
         this.linkFollower = asProvidedElseCreate(linkFollower);
         this.representationType = representationType;
         this.representation = representation;
 
-        this.interactionInitiatedBy = determineInteractionInitiatedByFrom(this.rendererContext);
+        this.interactionInitiatedBy = determineInteractionInitiatedByFrom(this.resourceContext);
     }
 
     private static InteractionInitiatedBy determineInteractionInitiatedByFrom(
-            final RendererContext rendererContext) {
-        return rendererContext.getInteractionInitiatedBy();
+            final IResourceContext resourceContext) {
+        return resourceContext.getInteractionInitiatedBy();
     }
 
     protected InteractionInitiatedBy getInteractionInitiatedBy() {
@@ -87,7 +87,7 @@ implements ReprRenderer<R, T> {
         if (linkFollower != null) {
             return linkFollower;
         }
-        return LinkFollowSpecs.create(rendererContext.getFollowLinks());
+        return LinkFollowSpecs.create(resourceContext.getFollowLinks());
     }
 
     @Override
@@ -107,7 +107,7 @@ implements ReprRenderer<R, T> {
 
     public R withLink(final Rel rel, final String href) {
         if (href != null) {
-            getLinks().arrayAdd(LinkBuilder.newBuilder(rendererContext, rel.getName(), representationType, href).build());
+            getLinks().arrayAdd(LinkBuilder.newBuilder(resourceContext, rel.getName(), representationType, href).build());
         }
         return cast(this);
     }
@@ -140,13 +140,13 @@ implements ReprRenderer<R, T> {
         if (objectSpec == null) {
             return;
         }
-        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getRendererContext(), rel, objectSpec);
+        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), rel, objectSpec);
         JsonRepresentation link = linkBuilder.build();
         getLinks().arrayAdd(link);
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final DomainTypeReprRenderer renderer = new DomainTypeReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap())
+            final DomainTypeReprRenderer renderer = new DomainTypeReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap())
                     .with(objectSpec);
             link.mapPut("value", renderer.render());
         }
@@ -187,29 +187,29 @@ implements ReprRenderer<R, T> {
      */
     protected final void addExtensionsIsisProprietaryChangedObjects() {
 
-        // TODO: have removed UpdateNotifier, plan is to re-introduce using the IsisTransaction enlisted objects
-        // (which would also allow newly-created objects to be shown)
-        final List<ObjectAdapter> changedObjects = _Lists.newArrayList(); // updateNotifier.getChangedObjects();
-        final List<ObjectAdapter> disposedObjects = _Lists.newArrayList(); // updateNotifier.getDisposedObjects();
+        // TODO: have removed UpdateNotifier, plan is to re-introduce using the IsisTransaction 
+        // enlisted objects (which would also allow newly-created objects to be shown)
+        final List<ManagedObject> changedObjects = _Lists.newArrayList(); // updateNotifier.getChangedObjects();
+        final List<ManagedObject> disposedObjects = _Lists.newArrayList(); // updateNotifier.getDisposedObjects();
 
         addToExtensions("changed", changedObjects);
         addToExtensions("disposed", disposedObjects);
     }
 
-    private void addToExtensions(final String key, final List<ObjectAdapter> adapters) {
+    private void addToExtensions(final String key, final List<ManagedObject> adapters) {
         if(adapters == null || adapters.isEmpty()) {
             return;
         }
         final JsonRepresentation adapterList = JsonRepresentation.newArray();
         getExtensions().mapPut(key, adapterList);
-        for (final ObjectAdapter adapter : adapters) {
-            adapterList.arrayAdd(DomainObjectReprRenderer.newLinkToBuilder(getRendererContext(), Rel.VALUE, adapter).build());
+        for (val adapter : adapters) {
+            adapterList.arrayAdd(DomainObjectReprRenderer.newLinkToBuilder(getResourceContext(), Rel.VALUE, adapter).build());
         }
     }
 
-    protected Stream<ObjectAdapter> streamServiceAdapters() {
-        val metaModelContext = rendererContext.getMetaModelContext();
-        return metaModelContext.streamServiceAdapters();
+    protected Stream<ManagedObject> streamServiceAdapters() {
+        val metaModelContext = resourceContext.getMetaModelContext();
+        return metaModelContext.streamServiceAdapters2();
     }
 
 }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Responses.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Responses.java
index d9e5ecd..b00e769 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Responses.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/Responses.java
@@ -106,7 +106,7 @@ public final class Responses {
 
     private static Date now(ReprRenderer<?, ?> renderer) {
         if(renderer instanceof ReprRendererAbstract) {
-            ((ReprRendererAbstract<?, ?>)renderer).getRendererContext().getServiceRegistry()
+            ((ReprRendererAbstract<?, ?>)renderer).getResourceContext().getServiceRegistry()
             .lookupServiceElseFail(ClockService.class).nowAsDateTime().toDate();
         }
         return new Date();
@@ -142,7 +142,7 @@ public final class Responses {
     public static JsonMapper.PrettyPrinting inferPrettyPrinting(ReprRenderer<?, ?> renderer) {
 
         if(renderer instanceof ReprRendererAbstract) {
-            val systemEnvironment =  ((ReprRendererAbstract<?, ?>) renderer).getRendererContext()
+            val systemEnvironment =  ((ReprRendererAbstract<?, ?>) renderer).getResourceContext()
                     .getMetaModelContext().getSystemEnvironment();
             return systemEnvironment.isPrototyping()
                     ? JsonMapper.PrettyPrinting.ENABLE 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
index 97a097f..9e23634 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
@@ -21,16 +21,16 @@ package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 import com.fasterxml.jackson.databind.node.NullNode;
 
 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.facetapi.Facet;
+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.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 
 public abstract class AbstractObjectMemberReprRenderer<R extends ReprRendererAbstract<R, ObjectAndMember<T>>, T extends ObjectMember> 
@@ -67,7 +67,7 @@ extends ReprRendererAbstract<R, ObjectAndMember<T>> {
 
     protected ObjectAdapterLinkTo linkTo;
 
-    protected ObjectAdapter objectAdapter;
+    protected ManagedObject objectAdapter;
     protected Mode mode = Mode.INLINE; // unless we determine otherwise
     /**
      * Derived from {@link #objectMember} using {@link org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberType#determineFrom(org.apache.isis.metamodel.spec.feature.ObjectFeature)}
@@ -85,13 +85,13 @@ extends ReprRendererAbstract<R, ObjectAndMember<T>> {
     private final Where where;
 
     public AbstractObjectMemberReprRenderer(
-            final RendererContext rendererContext,
+            final IResourceContext resourceContext,
             final LinkFollowSpecs linkFollower,
             final String memberId,
             final RepresentationType representationType,
             final JsonRepresentation representation,
             final Where where) {
-        super(rendererContext, linkFollower, representationType, representation);
+        super(resourceContext, linkFollower, representationType, representation);
         this.memberId = memberId;
         this.where = where;
     }
@@ -117,7 +117,7 @@ extends ReprRendererAbstract<R, ObjectAndMember<T>> {
      * {@link #objectAdapter}).
      */
     public R usingLinkTo(final ObjectAdapterLinkTo linkTo) {
-        this.linkTo = linkTo.usingUrlBase(rendererContext).with(objectAdapter);
+        this.linkTo = linkTo.usingUrlBase(resourceContext).with(objectAdapter);
         return cast(this);
     }
 
@@ -165,7 +165,7 @@ extends ReprRendererAbstract<R, ObjectAndMember<T>> {
      */
     protected void renderMemberContent() {
 
-        if(!rendererContext.suppressMemberId()) {
+        if(!resourceContext.suppressMemberId()) {
             representation.mapPut("id", objectMember.getId());
         }
 
@@ -173,7 +173,7 @@ extends ReprRendererAbstract<R, ObjectAndMember<T>> {
             representation.mapPut("memberType", objectMemberType.getName());
         }
 
-        if (mode.isInline() && !rendererContext.suppressMemberLinks()) {
+        if (mode.isInline() && !resourceContext.suppressMemberLinks()) {
             addDetailsLinkIfPersistent();
         }
 
@@ -188,7 +188,7 @@ extends ReprRendererAbstract<R, ObjectAndMember<T>> {
         if (mode.isFollowed() || mode.isStandalone() || mode.isMutated()) {
             addMutatorLinksIfEnabled();
 
-            if(!mode.isInline() || !rendererContext.suppressUpdateLink()) {
+            if(!mode.isInline() || !resourceContext.suppressUpdateLink()) {
                 putExtensionsIsisProprietary();
             }
             addLinksToFormalDomainModel();
@@ -255,7 +255,7 @@ extends ReprRendererAbstract<R, ObjectAndMember<T>> {
     }
 
     private void addDetailsLinkIfPersistent() {
-        if (!objectAdapter.isRepresentingPersistent()) {
+        if (!ManagedObject.isBookmarkable(objectAdapter)) {
             return;
         }
         final JsonRepresentation link = linkTo.memberBuilder(Rel.DETAILS, objectMemberType, objectMember).build();
@@ -276,7 +276,7 @@ extends ReprRendererAbstract<R, ObjectAndMember<T>> {
     protected abstract void followDetailsLink(JsonRepresentation detailsLink);
 
     protected final void putDisabledReasonIfDisabled() {
-        if(rendererContext.suppressMemberDisabledReason()) {
+        if(resourceContext.suppressMemberDisabledReason()) {
             return;
         }
         final String disabledReasonRep = usability().getReason();
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
index 58167a1..eb158a0 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
@@ -23,8 +23,8 @@ import java.util.stream.Stream;
 
 import com.fasterxml.jackson.databind.node.NullNode;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
@@ -34,17 +34,17 @@ import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
 import org.apache.isis.viewer.restfulobjects.applib.domainobjects.ActionResultRepresentation.ResultType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 
 public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultReprRenderer, ObjectAndActionInvocation> {
 
     private ObjectAdapterLinkTo adapterLinkTo = new DomainObjectLinkTo();
 
-    private ObjectAdapter objectAdapter;
+    private ManagedObject objectAdapter;
     private ObjectAction action;
     private JsonRepresentation arguments;
-    private ObjectAdapter returnedAdapter;
+    private ManagedObject returnedAdapter;
     private final SelfLink selfLink;
     private ObjectAndActionInvocation objectAndActionInvocation;
 
@@ -53,11 +53,11 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
     }
 
     public ActionResultReprRenderer(
-            final RendererContext rendererContext,
+            final IResourceContext resourceContext,
             final LinkFollowSpecs linkFollower,
             final SelfLink selfLink,
             final JsonRepresentation representation) {
-        super(rendererContext, linkFollower, RepresentationType.ACTION_RESULT, representation);
+        super(resourceContext, linkFollower, RepresentationType.ACTION_RESULT, representation);
         this.selfLink = selfLink;
     }
 
@@ -137,11 +137,11 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
 
         case LIST:
 
-            final Stream<ObjectAdapter> collectionAdapters =
+            final Stream<ManagedObject> collectionAdapters =
             CollectionFacet.Utils.streamAdapters(returnedAdapter);
 
             final ListReprRenderer listReprRenderer =
-                    new ListReprRenderer(rendererContext, null, representation).withElementRel(Rel.ELEMENT);
+                    new ListReprRenderer(resourceContext, null, representation).withElementRel(Rel.ELEMENT);
             listReprRenderer.with(collectionAdapters)
             .withReturnType(action.getReturnType())
             .withElementType(returnedAdapter.getElementSpecification());
@@ -151,7 +151,7 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
         case SCALAR_VALUE:
 
             final ScalarValueReprRenderer scalarValueReprRenderer =
-            new ScalarValueReprRenderer(rendererContext, null, representation);
+            new ScalarValueReprRenderer(resourceContext, null, representation);
             scalarValueReprRenderer.with(returnedAdapter)
             .withReturnType(action.getReturnType());
 
@@ -160,7 +160,7 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
         case DOMAIN_OBJECT:
 
             final DomainObjectReprRenderer objectReprRenderer =
-            new DomainObjectReprRenderer(rendererContext, null, representation);
+            new DomainObjectReprRenderer(resourceContext, null, representation);
 
             objectReprRenderer.with(returnedAdapter).includesSelf();
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
index b4e1c7d..303410c 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectLinkTo.java
@@ -18,26 +18,26 @@
  */
 package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 
 public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
 
-    protected RendererContext rendererContext;
-    protected ObjectAdapter objectAdapter;
+    protected IResourceContext resourceContext;
+    protected ManagedObject objectAdapter;
 
     @Override
-    public final DomainObjectLinkTo usingUrlBase(final RendererContext resourceContext) {
-        this.rendererContext = resourceContext;
+    public final DomainObjectLinkTo usingUrlBase(final IResourceContext resourceContext) {
+        this.resourceContext = resourceContext;
         return this;
     }
 
     @Override
-    public ObjectAdapterLinkTo with(final ObjectAdapter objectAdapter) {
+    public ObjectAdapterLinkTo with(final ManagedObject objectAdapter) {
         this.objectAdapter = objectAdapter;
         return this;
     }
@@ -49,7 +49,7 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
 
     @Override
     public LinkBuilder builder(final Rel rel) {
-        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(rendererContext, relElseDefault(rel).getName(), RepresentationType.DOMAIN_OBJECT, linkRef(new StringBuilder()).toString());
+        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(resourceContext, relElseDefault(rel).getName(), RepresentationType.DOMAIN_OBJECT, linkRef(new StringBuilder()).toString());
         linkBuilder.withTitle(objectAdapter.titleString());
         return linkBuilder;
     }
@@ -58,8 +58,8 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
      * hook method
      */
     protected StringBuilder linkRef(StringBuilder buf) {
-        String domainType = OidUtils.getDomainType(objectAdapter);
-        String instanceId = OidUtils.getInstanceId(objectAdapter);
+        String domainType = ManagedObject.getDomainType(objectAdapter);
+        String instanceId = ManagedObject._instanceIdIfAny(objectAdapter);
         return buf.append("objects/").append(domainType).append("/").append(instanceId);
     }
 
@@ -90,7 +90,7 @@ public class DomainObjectLinkTo implements ObjectAdapterLinkTo {
             buf.append("/").append(part);
         }
         final String url = buf.toString();
-        return LinkBuilder.newBuilder(rendererContext, rel.andParam(memberType.getName(), objectMember.getId()), representationType, url);
+        return LinkBuilder.newBuilder(resourceContext, rel.andParam(memberType.getName(), objectMember.getId()), representationType, url);
     }
 
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
index 9a08513..5270e69 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainObjectReprRenderer.java
@@ -23,7 +23,6 @@ import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.isis.applib.annotation.DomainServiceLayout;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.facets.object.domainservicelayout.DomainServiceLayoutFacet;
 import org.apache.isis.metamodel.facets.object.title.TitleFacet;
@@ -41,47 +40,47 @@ import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.DomainTypeReprRenderer;
 
 import lombok.val;
 
-public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectReprRenderer, ObjectAdapter> {
+public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectReprRenderer, ManagedObject> {
 
     private static final String X_RO_DOMAIN_TYPE = "x-ro-domain-type";
 
     public static LinkBuilder newLinkToBuilder(
-            final RendererContext rendererContext, 
+            final IResourceContext resourceContext, 
             final Rel rel, 
-            final ObjectAdapter objectAdapter) {
+            final ManagedObject objectAdapter) {
         
-        String domainType = OidUtils.getDomainType(objectAdapter);
-        String instanceId = OidUtils.getInstanceId(objectAdapter);
+        String domainType = ManagedObject.getDomainType(objectAdapter);
+        String instanceId = ManagedObject._instanceIdIfAny(objectAdapter);
         final String url = "objects/" + domainType + "/" + instanceId;
-        return LinkBuilder.newBuilder(rendererContext, rel.getName(), RepresentationType.DOMAIN_OBJECT, url).withTitle(objectAdapter.titleString(null));
+        return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.DOMAIN_OBJECT, url).withTitle(objectAdapter.titleString(null));
     }
 
     public static LinkBuilder newLinkToObjectLayoutBuilder(
-            final RendererContext rendererContext, 
-            final ObjectAdapter objectAdapter) {
+            final IResourceContext resourceContext, 
+            final ManagedObject objectAdapter) {
         
         final Rel rel = Rel.OBJECT_LAYOUT;
-        String domainType = OidUtils.getDomainType(objectAdapter);
-        String instanceId = OidUtils.getInstanceId(objectAdapter);
+        String domainType = ManagedObject.getDomainType(objectAdapter);
+        String instanceId = ManagedObject._instanceIdIfAny(objectAdapter);
         final String url = "objects/" + domainType + "/" + instanceId + "/object-layout";
-        return LinkBuilder.newBuilder(rendererContext, rel.getName(), RepresentationType.OBJECT_LAYOUT, url);
+        return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.OBJECT_LAYOUT, url);
     }
 
     public static LinkBuilder newLinkToObjectIconBuilder(
-            final RendererContext rendererContext, 
-            final ObjectAdapter objectAdapter) {
+            final IResourceContext resourceContext, 
+            final ManagedObject objectAdapter) {
         
         final Rel rel = Rel.OBJECT_ICON;
-        String domainType = OidUtils.getDomainType(objectAdapter);
-        String instanceId = OidUtils.getInstanceId(objectAdapter);
+        String domainType = ManagedObject.getDomainType(objectAdapter);
+        String instanceId = ManagedObject._instanceIdIfAny(objectAdapter);
         final String url = "objects/" + domainType + "/" + instanceId + "/image";
-        return LinkBuilder.newBuilder(rendererContext, rel.getName(), RepresentationType.OBJECT_IMAGE, url);
+        return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.OBJECT_IMAGE, url);
     }
 
     private static enum Mode {
@@ -124,11 +123,11 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
     }
 
     private ObjectAdapterLinkTo linkToBuilder;
-    private ObjectAdapter objectAdapter;
+    private ManagedObject objectAdapter;
     private Mode mode = Mode.REGULAR;
 
     public DomainObjectReprRenderer(
-            final RendererContext resourceContext,
+            final IResourceContext resourceContext,
             final LinkFollowSpecs linkFollower,
             final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.DOMAIN_OBJECT, representation);
@@ -140,14 +139,14 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
      * generating links.
      */
     public DomainObjectReprRenderer usingLinkToBuilder(final ObjectAdapterLinkTo objectAdapterLinkToBuilder) {
-        this.linkToBuilder = objectAdapterLinkToBuilder.usingUrlBase(rendererContext);
+        this.linkToBuilder = objectAdapterLinkToBuilder.usingUrlBase(resourceContext);
         return this;
     }
 
     @Override
-    public DomainObjectReprRenderer with(final ObjectAdapter objectAdapter) {
+    public DomainObjectReprRenderer with(final ManagedObject objectAdapter) {
         this.objectAdapter = objectAdapter;
-        String domainTypeHref = DomainTypeReprRenderer.newLinkToBuilder(getRendererContext(), Rel.DOMAIN_TYPE, objectAdapter.getSpecification()).build().getString("href");
+        String domainTypeHref = DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.DOMAIN_TYPE, objectAdapter.getSpecification()).build().getString("href");
         addMediaTypeParams(X_RO_DOMAIN_TYPE, domainTypeHref);
         return this;
     }
@@ -164,7 +163,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         if (!(mode.isArgs())) {
 
             // self, extensions.oid
-            if (objectAdapter.isRepresentingPersistent()) {
+            if (ManagedObject.isBookmarkable(objectAdapter)) {
                 if (includesSelf) {
                     addLinkToSelf();
                 }
@@ -195,7 +194,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         }
 
         // described by
-        if (mode.includeDescribedBy() && !rendererContext.suppressDescribedByLinks()) {
+        if (mode.includeDescribedBy() && !resourceContext.suppressDescribedByLinks()) {
             addLinkToDescribedBy();
             addLinkToObjectLayout();
             addLinkToObjectIcon();
@@ -204,14 +203,14 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
             addLinkToUp();
         }
 
-        if (!mode.isArgs() && !rendererContext.objectPropertyValuesOnly()) {
+        if (!mode.isArgs() && !resourceContext.objectPropertyValuesOnly()) {
             // update/persist
             addPersistLinkIfTransientAndPersistable();
             addUpdatePropertiesLinkIfRequired();
 
             // extensions
             getExtensions().mapPut("isService", isService);
-            getExtensions().mapPut("isPersistent", objectAdapter.isRepresentingPersistent());
+            getExtensions().mapPut("isPersistent", ManagedObject.isBookmarkable(objectAdapter));
             if(isService) {
                 final ObjectSpecification objectSpec = objectAdapter.getSpecification();
                 final DomainServiceLayoutFacet layoutFacet =
@@ -234,7 +233,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
             final DomainObjectReprRenderer renderer =
-                    new DomainObjectReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+                    new DomainObjectReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
             renderer.with(objectAdapter);
             link.mapPut("value", renderer.render());
         }
@@ -243,11 +242,11 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
     }
 
     private void addLinkToDescribedBy() {
-        final JsonRepresentation link = DomainTypeReprRenderer.newLinkToBuilder(getRendererContext(), Rel.DESCRIBEDBY, objectAdapter.getSpecification()).build();
+        final JsonRepresentation link = DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.DESCRIBEDBY, objectAdapter.getSpecification()).build();
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final DomainTypeReprRenderer renderer = new DomainTypeReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+            final DomainTypeReprRenderer renderer = new DomainTypeReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
             renderer.with(objectAdapter.getSpecification());
             link.mapPut("value", renderer.render());
         }
@@ -256,36 +255,36 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
 
     private void addLinkToObjectLayout() {
         final LinkBuilder linkBuilder = DomainObjectReprRenderer
-                .newLinkToObjectLayoutBuilder(getRendererContext(), objectAdapter);
+                .newLinkToObjectLayoutBuilder(getResourceContext(), objectAdapter);
         final JsonRepresentation link = linkBuilder.build();
         getLinks().arrayAdd(link);
     }
 
     private void addLinkToObjectIcon() {
         final LinkBuilder linkBuilder = DomainObjectReprRenderer
-                .newLinkToObjectIconBuilder(getRendererContext(), objectAdapter);
+                .newLinkToObjectIconBuilder(getResourceContext(), objectAdapter);
         final JsonRepresentation link = linkBuilder.build();
         getLinks().arrayAdd(link);
     }
 
     private void addLinkToUp() {
-        final JsonRepresentation link = LinkBuilder.newBuilder(rendererContext, Rel.UP.getName(), RepresentationType.LIST, "services").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(resourceContext, Rel.UP.getName(), RepresentationType.LIST, "services").build();
         getLinks().arrayAdd(link);
     }
 
     private String getDomainType() {
-        return org.apache.isis.viewer.restfulobjects.rendering.domainobjects.OidUtils.getDomainType(objectAdapter);
+        return ManagedObject.getDomainType(objectAdapter);
     }
 
     private String getInstanceId() {
-        return org.apache.isis.viewer.restfulobjects.rendering.domainobjects.OidUtils.getInstanceId(objectAdapter);
+        return ManagedObject._instanceIdIfAny(objectAdapter);
     }
 
     private String getOidStr() {
-        return org.apache.isis.viewer.restfulobjects.rendering.domainobjects.OidUtils.getOidStr(objectAdapter);
+        return ManagedObject._rootOidElseThrow(objectAdapter).enStringNoVersion();
     }
 
-    private DomainObjectReprRenderer withMembers(final ObjectAdapter objectAdapter) {
+    private DomainObjectReprRenderer withMembers(final ManagedObject objectAdapter) {
         final JsonRepresentation appendTo =
                 mode.isUpdatePropertiesLinkArgs() ? representation : JsonRepresentation.newMap();
         final List<ObjectAssociation> associations = objectAdapter.getSpecification()
@@ -294,7 +293,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
 
         addProperties(objectAdapter, appendTo, associations);
 
-        if(!rendererContext.objectPropertyValuesOnly()) {
+        if(!resourceContext.objectPropertyValuesOnly()) {
             if (!mode.isArgs() ) {
                 addCollections(objectAdapter, appendTo, associations);
             }
@@ -312,11 +311,11 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         return this;
     }
 
-    private void addProperties(final ObjectAdapter objectAdapter, final JsonRepresentation members, final List<ObjectAssociation> associations) {
+    private void addProperties(final ManagedObject objectAdapter, final JsonRepresentation members, final List<ObjectAssociation> associations) {
         for (final ObjectAssociation assoc : associations) {
 
             if (mode.checkVisibility()) {
-                final Consent visibility = assoc.isVisible(objectAdapter, getInteractionInitiatedBy(), rendererContext.getWhere());
+                final Consent visibility = assoc.isVisible(objectAdapter, getInteractionInitiatedBy(), resourceContext.getWhere());
                 if (!visibility.isAllowed()) {
                     continue;
                 }
@@ -329,7 +328,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
             final LinkFollowSpecs linkFollowerForProp = getLinkFollowSpecs().follow("members[" + property.getId() + "]");
             final JsonRepresentation propertyRepresentation = JsonRepresentation.newMap();
             final ObjectPropertyReprRenderer renderer =
-                    new ObjectPropertyReprRenderer(getRendererContext(), linkFollowerForProp, property.getId(), propertyRepresentation);
+                    new ObjectPropertyReprRenderer(getResourceContext(), linkFollowerForProp, property.getId(), propertyRepresentation);
             renderer.with(new ObjectAndProperty(objectAdapter, property)).usingLinkTo(linkToBuilder);
 
             if (mode.isArgs()) {
@@ -340,18 +339,18 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
             }
 
             final JsonRepresentation propertyValueRepresentation = renderer.render();
-            final JsonRepresentation propertyRepr = rendererContext.objectPropertyValuesOnly()
+            final JsonRepresentation propertyRepr = resourceContext.objectPropertyValuesOnly()
                     ? propertyValueRepresentation.getRepresentation("value")
                             : propertyValueRepresentation;
                     members.mapPut(assoc.getId(), propertyRepr);
         }
     }
 
-    private void addCollections(final ObjectAdapter objectAdapter, final JsonRepresentation members, final List<ObjectAssociation> associations) {
+    private void addCollections(final ManagedObject objectAdapter, final JsonRepresentation members, final List<ObjectAssociation> associations) {
         for (final ObjectAssociation assoc : associations) {
 
             if (mode.checkVisibility()) {
-                final Consent visibility = assoc.isVisible(objectAdapter, getInteractionInitiatedBy(), rendererContext.getWhere());
+                final Consent visibility = assoc.isVisible(objectAdapter, getInteractionInitiatedBy(), resourceContext.getWhere());
                 if (!visibility.isAllowed()) {
                     continue;
                 }
@@ -367,7 +366,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
                     "members[" + collection.getId() + "]");
             final JsonRepresentation collectionRepresentation = JsonRepresentation.newMap();
             final ObjectCollectionReprRenderer renderer =
-                    new ObjectCollectionReprRenderer(getRendererContext(), linkFollowerForColl, collection.getId(), collectionRepresentation);
+                    new ObjectCollectionReprRenderer(getResourceContext(), linkFollowerForColl, collection.getId(), collectionRepresentation);
 
             renderer.with(new ObjectAndCollection(objectAdapter, collection)).usingLinkTo(linkToBuilder);
             if(mode.isEventSerialization()) {
@@ -379,19 +378,19 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
     }
 
     private void addActions(
-            final ObjectAdapter objectAdapter, 
+            final ManagedObject objectAdapter, 
             final Stream<ObjectAction> actions, 
             final JsonRepresentation members) {
 
         actions
         .filter(action->{
-            final Consent visibility = action.isVisible(objectAdapter, getInteractionInitiatedBy(), rendererContext.getWhere());
+            final Consent visibility = action.isVisible(objectAdapter, getInteractionInitiatedBy(), resourceContext.getWhere());
             return visibility.isAllowed();
         })
         .forEach(action->{
             final LinkFollowSpecs linkFollowSpecs = getLinkFollowSpecs().follow("members["+action.getId()+"]");
             final ObjectActionReprRenderer renderer = 
-                    new ObjectActionReprRenderer(getRendererContext(), linkFollowSpecs, action.getId(), 
+                    new ObjectActionReprRenderer(getResourceContext(), linkFollowSpecs, action.getId(), 
                             JsonRepresentation.newMap());
 
             renderer.with(new ObjectAndAction(objectAdapter, action)).usingLinkTo(linkToBuilder);
@@ -401,15 +400,15 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
     }
 
     private void addPersistLinkIfTransientAndPersistable() {
-        if (objectAdapter.isRepresentingPersistent()) {
+        if (ManagedObject.isBookmarkable(objectAdapter)) {
             return;
         }
         final DomainObjectReprRenderer renderer =
-                new DomainObjectReprRenderer(getRendererContext(), null, JsonRepresentation.newMap());
+                new DomainObjectReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         final JsonRepresentation domainObjectRepr = renderer.with(objectAdapter).asPersistLinkArguments().render();
 
         final String domainType = objectAdapter.getSpecification().getSpecId().asString();
-        final LinkBuilder persistLinkBuilder = LinkBuilder.newBuilder(getRendererContext(), Rel.PERSIST.getName(), RepresentationType.DOMAIN_OBJECT, "objects/%s", domainType).withHttpMethod(RestfulHttpMethod.POST).withArguments(domainObjectRepr);
+        final LinkBuilder persistLinkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.PERSIST.getName(), RepresentationType.DOMAIN_OBJECT, "objects/%s", domainType).withHttpMethod(RestfulHttpMethod.POST).withArguments(domainObjectRepr);
         getLinks().arrayAdd(persistLinkBuilder.build());
     }
 
@@ -434,7 +433,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         if(mode.isEventSerialization()) {
             return;
         }
-        if (!objectAdapter.isRepresentingPersistent()) {
+        if (!ManagedObject.isBookmarkable(objectAdapter)) {
             return;
         }
         final boolean isService = objectAdapter.getSpecification().isManagedBean();
@@ -443,17 +442,17 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         }
 
         final DomainObjectReprRenderer renderer =
-                new DomainObjectReprRenderer(getRendererContext(), null, JsonRepresentation.newMap());
+                new DomainObjectReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         final JsonRepresentation domainObjectRepr = renderer.with(objectAdapter).asUpdatePropertiesLinkArguments().render();
 
-        if(!getRendererContext().suppressUpdateLink()) {
-            final LinkBuilder updateLinkBuilder = LinkBuilder.newBuilder(getRendererContext(), Rel.UPDATE.getName(), RepresentationType.DOMAIN_OBJECT, "objects/%s/%s", getDomainType(), getInstanceId()).withHttpMethod(RestfulHttpMethod.PUT).withArguments(domainObjectRepr);
+        if(!getResourceContext().suppressUpdateLink()) {
+            final LinkBuilder updateLinkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.UPDATE.getName(), RepresentationType.DOMAIN_OBJECT, "objects/%s/%s", getDomainType(), getInstanceId()).withHttpMethod(RestfulHttpMethod.PUT).withArguments(domainObjectRepr);
             getLinks().arrayAdd(updateLinkBuilder.build());
         }
     }
 
 
-    public static Object valueOrRef(RendererContext context, JsonValueEncoder jsonValueEncoder, ManagedObject adapter) {
+    public static Object valueOrRef(IResourceContext context, JsonValueEncoder jsonValueEncoder, ManagedObject adapter) {
         
         val spec = adapter.getSpecification();
         if(spec.isValue()) {
@@ -465,7 +464,7 @@ public class DomainObjectReprRenderer extends ReprRendererAbstract<DomainObjectR
         return DomainObjectReprRenderer.newLinkToBuilder(
                 context, 
                 Rel.VALUE, 
-                ManagedObject.promote(adapter))
+                adapter)
                 .withTitle(title)
                 .build();
     }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
index d8a68db..e3cac2e 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/DomainServiceLinkTo.java
@@ -18,8 +18,8 @@
  */
 package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.services.ServiceUtil;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
@@ -28,14 +28,14 @@ public class DomainServiceLinkTo extends DomainObjectLinkTo {
     private String serviceId;
 
     @Override
-    public ObjectAdapterLinkTo with(final ObjectAdapter objectAdapter) {
+    public ObjectAdapterLinkTo with(final ManagedObject objectAdapter) {
         serviceId = ServiceUtil.idOfAdapter(objectAdapter);
         return super.with(objectAdapter);
     }
 
     @Override
     public LinkBuilder builder(final Rel rel) {
-        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(rendererContext,
+        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(resourceContext,
                 relElseDefault(rel).andParam("serviceId", serviceId),
                 RepresentationType.DOMAIN_OBJECT,
                 linkRef(new StringBuilder()).toString());
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
index 6461788..aef3cc3 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder.java
@@ -32,7 +32,6 @@ import org.springframework.stereotype.Service;
 
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
 import org.apache.isis.metamodel.facets.object.parseable.TextEntryParseException;
@@ -68,7 +67,7 @@ public class JsonValueEncoder {
         }
     }
 
-    public ObjectAdapter asAdapter(
+    public ManagedObject asAdapter(
             final ObjectSpecification objectSpec, 
             final JsonRepresentation argValueRepr, 
             final String format) {
@@ -100,7 +99,7 @@ public class JsonValueEncoder {
             throw new IllegalArgumentException("Unable to parse value");
         }
 
-        final ObjectAdapter asAdapter = jvc.asAdapter(argValueRepr, format);
+        final ManagedObject asAdapter = jvc.asAdapter(argValueRepr, format);
         if(asAdapter != null) {
             return asAdapter;
         }
@@ -119,7 +118,7 @@ public class JsonValueEncoder {
     }
 
     public Object appendValueAndFormat(
-            ObjectAdapter objectAdapter, 
+            ManagedObject objectAdapter, 
             JsonRepresentation repr, 
             String format, 
             boolean suppressExtensions) {
@@ -175,7 +174,7 @@ public class JsonValueEncoder {
         return adapter != null? adapter.getPojo(): NullNode.getInstance();
     }
 
-    ObjectAdapter adapterFor(Object pojo) {
+    ManagedObject adapterFor(Object pojo) {
         return objectAdapterProvider.adapterFor(pojo);
     }
     
@@ -206,7 +205,7 @@ public class JsonValueEncoder {
         /**
          * The value, otherwise <tt>null</tt>.
          */
-        public abstract ObjectAdapter asAdapter(JsonRepresentation repr, String format);
+        public abstract ManagedObject asAdapter(JsonRepresentation repr, String format);
 
         public Object appendValueAndFormat(
                 ManagedObject objectAdapter, 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder_Converters.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder_Converters.java
index dcb05bd..02bf7cf 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder_Converters.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoder_Converters.java
@@ -32,7 +32,6 @@ import org.joda.time.format.DateTimeFormatter;
 import org.joda.time.format.ISODateTimeFormat;
 
 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.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.JsonValueEncoder.JsonValueConverter;
@@ -45,13 +44,13 @@ import lombok.val;
  */
 public final class JsonValueEncoder_Converters {
 
-    public List<JsonValueConverter> asList(final Function<Object, ObjectAdapter> pojoToAdapter) {
+    public List<JsonValueConverter> asList(final Function<Object, ManagedObject> pojoToAdapter) {
         
         val converters = _Lists.<JsonValueConverter>newArrayList(); 
         
         converters.add(new JsonValueConverter(null, "string", String.class){
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isString()) {
                     return pojoToAdapter.apply(repr.asString());
                 }
@@ -72,7 +71,7 @@ public final class JsonValueEncoder_Converters {
 
         converters.add(new JsonValueConverter(null, "boolean", boolean.class, Boolean.class){
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isBoolean()) {
                     return pojoToAdapter.apply(repr.asBoolean());
                 }
@@ -93,7 +92,7 @@ public final class JsonValueEncoder_Converters {
 
         converters.add(new JsonValueConverter("int", "byte", byte.class, Byte.class){
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isNumber()) {
                     return pojoToAdapter.apply(repr.asNumber().byteValue());
                 }
@@ -123,7 +122,7 @@ public final class JsonValueEncoder_Converters {
 
         converters.add(new JsonValueConverter("int", "short", short.class, Short.class){
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isNumber()) {
                     return pojoToAdapter.apply(repr.asNumber().shortValue());
                 }
@@ -153,7 +152,7 @@ public final class JsonValueEncoder_Converters {
 
         converters.add(new JsonValueConverter("int", "int", int.class, Integer.class){
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isInt()) {
                     return pojoToAdapter.apply(repr.asInt());
                 }
@@ -183,7 +182,7 @@ public final class JsonValueEncoder_Converters {
 
         converters.add(new JsonValueConverter("int", "long", long.class, Long.class){
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isLong()) {
                     return pojoToAdapter.apply(repr.asLong());
                 }
@@ -214,7 +213,7 @@ public final class JsonValueEncoder_Converters {
 
         converters.add(new JsonValueConverter("decimal", "float", float.class, Float.class){
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isDecimal()) {
                     return pojoToAdapter.apply(repr.asDouble().floatValue());
                 }
@@ -248,7 +247,7 @@ public final class JsonValueEncoder_Converters {
 
         converters.add(new JsonValueConverter("decimal", "double", double.class, Double.class){
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isDecimal()) {
                     return pojoToAdapter.apply(repr.asDouble());
                 }
@@ -285,7 +284,7 @@ public final class JsonValueEncoder_Converters {
 
         converters.add(new JsonValueConverter(null, "char", char.class, Character.class){
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isString()) {
                     final String str = repr.asString();
                     if(str != null && str.length()>0) {
@@ -318,7 +317,7 @@ public final class JsonValueEncoder_Converters {
 
         converters.add(new JsonValueConverter("big-integer(18)", "javamathbiginteger", BigInteger.class){
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isString()) {
                     return pojoToAdapter.apply(new BigInteger(repr.asString()));
                 }
@@ -352,7 +351,7 @@ public final class JsonValueEncoder_Converters {
 
         converters.add(new JsonValueConverter("big-decimal", "javamathbigdecimal", BigDecimal.class){
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isString()) {
                     return pojoToAdapter.apply(new BigDecimal(repr.asString()));
                 }
@@ -397,7 +396,7 @@ public final class JsonValueEncoder_Converters {
                     );
 
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isString()) {
                     final String dateStr = repr.asString();
                     for (DateTimeFormatter formatter : formatters) {
@@ -438,7 +437,7 @@ public final class JsonValueEncoder_Converters {
                     );
 
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isString()) {
                     final String dateStr = repr.asString();
                     for (DateTimeFormatter formatter : formatters) {
@@ -479,7 +478,7 @@ public final class JsonValueEncoder_Converters {
                     );
 
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isString()) {
                     final String dateStr = repr.asString();
                     for (DateTimeFormatter formatter : formatters) {
@@ -519,7 +518,7 @@ public final class JsonValueEncoder_Converters {
                     JsonRepresentation.yyyyMMddTHHmmssZ.withZoneUTC()
                     );
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isString()) {
                     final String dateStr = repr.asString();
                     for (DateTimeFormatter formatter : formatters) {
@@ -559,7 +558,7 @@ public final class JsonValueEncoder_Converters {
                     JsonRepresentation.yyyyMMdd.withZoneUTC()
                     );
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isString()) {
                     final String dateStr = repr.asString();
                     for (DateTimeFormatter formatter : formatters) {
@@ -599,7 +598,7 @@ public final class JsonValueEncoder_Converters {
                     JsonRepresentation._HHmmss.withZoneUTC()
                     );
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isString()) {
                     final String dateStr = repr.asString();
                     for (DateTimeFormatter formatter : formatters) {
@@ -633,7 +632,7 @@ public final class JsonValueEncoder_Converters {
         converters.add(new JsonValueConverter("utc-millisec", "javasqltimestamp", java.sql.Timestamp.class){
 
             @Override
-            public ObjectAdapter asAdapter(JsonRepresentation repr, String format) {
+            public ManagedObject asAdapter(JsonRepresentation repr, String format) {
                 if (repr.isLong()) {
                     final Long millis = repr.asLong();
                     final java.sql.Timestamp parsedTimestamp = new java.sql.Timestamp(millis);
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
index 16c2bcf..ef24b3c 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ListReprRenderer.java
@@ -22,35 +22,35 @@ import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-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.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 
-public class ListReprRenderer extends ReprRendererAbstract<ListReprRenderer, Stream<ObjectAdapter>> {
+public class ListReprRenderer extends ReprRendererAbstract<ListReprRenderer, Stream<ManagedObject>> {
 
     private ObjectAdapterLinkTo linkTo;
-    private List<ObjectAdapter> objectAdapters;
+    private List<ManagedObject> objectAdapters;
     private ObjectSpecification elementType;
     private ObjectSpecification returnType;
     private Rel elementRel;
 
-    public ListReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    public ListReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.LIST, representation);
         usingLinkToBuilder(new DomainObjectLinkTo());
     }
 
     public ListReprRenderer usingLinkToBuilder(final ObjectAdapterLinkTo objectAdapterLinkToBuilder) {
-        this.linkTo = objectAdapterLinkToBuilder.usingUrlBase(rendererContext);
+        this.linkTo = objectAdapterLinkToBuilder.usingUrlBase(resourceContext);
         return this;
     }
 
     @Override
-    public ListReprRenderer with(final Stream<ObjectAdapter> objectAdapters) {
+    public ListReprRenderer with(final Stream<ManagedObject> objectAdapters) {
         this.objectAdapters = objectAdapters!=null 
                 ? objectAdapters
                         .filter(adapter->!adapter.getSpecification().isHidden())
@@ -105,7 +105,7 @@ public class ListReprRenderer extends ReprRendererAbstract<ListReprRenderer, Str
 
             final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("value");
             if (linkFollower.matches(linkToObject)) {
-                final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap()
+                final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap()
                         );
                 final JsonRepresentation domainObject = renderer.with(adapter).render();
                 linkToObject.mapPut("value", domainObject);
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
index 0441c54..1646518 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
@@ -28,7 +28,6 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
@@ -38,23 +37,23 @@ import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.ActionDescriptionReprRenderer;
 
 import lombok.val;
 
 public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<ObjectActionReprRenderer, ObjectAction> {
 
-    public ObjectActionReprRenderer(RendererContext rendererContext) {
-        this(rendererContext, null, null, JsonRepresentation.newMap());
+    public ObjectActionReprRenderer(IResourceContext resourceContext) {
+        this(resourceContext, null, null, JsonRepresentation.newMap());
     }
 
     public ObjectActionReprRenderer(
-            final RendererContext rendererContext,
+            final IResourceContext resourceContext,
             final LinkFollowSpecs linkFollowSpecs,
             String actionId,
             final JsonRepresentation representation) {
-        super(rendererContext, linkFollowSpecs, actionId, RepresentationType.OBJECT_ACTION, representation,
+        super(resourceContext, linkFollowSpecs, actionId, RepresentationType.OBJECT_ACTION, representation,
                 Where.OBJECT_FORMS);
     }
 
@@ -80,7 +79,7 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
      */
     @Override
     protected void followDetailsLink(final JsonRepresentation detailsLink) {
-        final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(getRendererContext(), getLinkFollowSpecs(), null, JsonRepresentation.newMap());
+        final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(getResourceContext(), getLinkFollowSpecs(), null, JsonRepresentation.newMap());
         renderer.with(new ObjectAndAction(objectAdapter, objectMember)).usingLinkTo(linkTo).asFollowed();
         detailsLink.mapPut("value", renderer.render());
     }
@@ -109,12 +108,12 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
             return super.linkToForMutatorInvoke();
         }
         final DomainServiceLinkTo linkTo = new DomainServiceLinkTo();
-        return linkTo.usingUrlBase(getRendererContext()).with(contributingServiceAdapter());
+        return linkTo.usingUrlBase(getResourceContext()).with(contributingServiceAdapter());
     }
 
-    private ObjectAdapter contributingServiceAdapter() {
+    private ManagedObject contributingServiceAdapter() {
         final ObjectSpecification serviceType = objectMember.getOnType();
-        final Stream<ObjectAdapter> serviceAdapters = streamServiceAdapters();
+        final Stream<ManagedObject> serviceAdapters = streamServiceAdapters();
         return serviceAdapters
                 .filter(serviceAdapter->serviceAdapter.getSpecification() == serviceType)
                 .findFirst()
@@ -141,7 +140,7 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
     // ///////////////////////////////////////////////////
 
     private ObjectActionReprRenderer addParameterDetails() {
-        boolean gsoc2013 = getRendererContext().getConfiguration().getViewer().getRestfulobjects().getGsoc2013().isLegacyParamDetails();
+        boolean gsoc2013 = getResourceContext().getConfiguration().getViewer().getRestfulobjects().getGsoc2013().isLegacyParamDetails();
         if(gsoc2013) {
             final List<Object> parameters = _Lists.newArrayList();
             for (int i = 0; i < objectMember.getParameterCount(); i++) {
@@ -190,7 +189,7 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
         for (val choiceAdapter : choiceAdapters) {
             // REVIEW: previously was using the spec of the parameter, but think instead it should be the spec of the adapter itself
             // final ObjectSpecification choiceSpec = param.getSpecification();
-            list.add(DomainObjectReprRenderer.valueOrRef(rendererContext, super.getJsonValueEncoder(), choiceAdapter));
+            list.add(DomainObjectReprRenderer.valueOrRef(resourceContext, super.getJsonValueEncoder(), choiceAdapter));
         }
         return list;
     }
@@ -202,7 +201,7 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
         }
         // REVIEW: previously was using the spec of the parameter, but think instead it should be the spec of the adapter itself
         // final ObjectSpecification defaultSpec = param.getSpecification();
-        return DomainObjectReprRenderer.valueOrRef(rendererContext, super.getJsonValueEncoder(), defaultAdapter);
+        return DomainObjectReprRenderer.valueOrRef(resourceContext, super.getJsonValueEncoder(), defaultAdapter);
     }
 
     // ///////////////////////////////////////////////////
@@ -211,10 +210,10 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
 
     @Override
     protected void addLinksToFormalDomainModel() {
-        if(rendererContext.suppressDescribedByLinks()) {
+        if(resourceContext.suppressDescribedByLinks()) {
             return;
         }
-        final JsonRepresentation link = ActionDescriptionReprRenderer.newLinkToBuilder(rendererContext, Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build();
+        final JsonRepresentation link = ActionDescriptionReprRenderer.newLinkToBuilder(resourceContext, Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build();
         getLinks().arrayAdd(link);
     }
 
@@ -222,8 +221,8 @@ public class ObjectActionReprRenderer extends AbstractObjectMemberReprRenderer<O
     protected void addLinksIsisProprietary() {
         // umm...
         if (false /*objectMember.isContributed() */) {
-            final ObjectAdapter serviceAdapter = contributingServiceAdapter();
-            final JsonRepresentation contributedByLink = DomainObjectReprRenderer.newLinkToBuilder(rendererContext, Rel.CONTRIBUTED_BY, serviceAdapter).build();
+            final ManagedObject serviceAdapter = contributingServiceAdapter();
+            final JsonRepresentation contributedByLink = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.CONTRIBUTED_BY, serviceAdapter).build();
             getLinks().arrayAdd(contributedByLink);
         }
     }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAdapterLinkTo.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAdapterLinkTo.java
index 0d0220d..8baccdc 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAdapterLinkTo.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAdapterLinkTo.java
@@ -18,18 +18,18 @@
  */
 package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 
 public interface ObjectAdapterLinkTo {
 
-    ObjectAdapterLinkTo usingUrlBase(RendererContext resourceContext);
+    ObjectAdapterLinkTo usingUrlBase(IResourceContext resourceContext);
 
-    ObjectAdapterLinkTo with(ObjectAdapter objectAdapter);
+    ObjectAdapterLinkTo with(ManagedObject objectAdapter);
 
     LinkBuilder builder();
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndAction.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndAction.java
index da56bb3..d0522d2 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndAction.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndAction.java
@@ -18,12 +18,12 @@
  */
 package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 
 public class ObjectAndAction extends ObjectAndMember<ObjectAction> {
 
-    public ObjectAndAction(final ObjectAdapter objectAdapter, final ObjectAction action) {
+    public ObjectAndAction(final ManagedObject objectAdapter, final ObjectAction action) {
         super(objectAdapter, action);
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
index d0ac686..48d3b50 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
@@ -20,9 +20,9 @@ package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
 import java.util.List;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
@@ -30,19 +30,19 @@ import org.apache.isis.viewer.restfulobjects.applib.domainobjects.ActionResultRe
 
 public class ObjectAndActionInvocation {
 
-    private final ObjectAdapter objectAdapter;
+    private final ManagedObject objectAdapter;
     private final ObjectAction action;
     private final JsonRepresentation arguments;
-    private final List<ObjectAdapter> argAdapters;
-    private final ObjectAdapter returnedAdapter;
+    private final List<ManagedObject> argAdapters;
+    private final ManagedObject returnedAdapter;
     private final ActionResultReprRenderer.SelfLink selfLink;
 
     public ObjectAndActionInvocation(
-            final ObjectAdapter objectAdapter,
+            final ManagedObject objectAdapter,
             final ObjectAction action,
             final JsonRepresentation arguments,
-            final List<ObjectAdapter> argAdapters,
-            final ObjectAdapter returnedAdapter,
+            final List<ManagedObject> argAdapters,
+            final ManagedObject returnedAdapter,
             final ActionResultReprRenderer.SelfLink selfLink) {
         this.objectAdapter = objectAdapter;
         this.action = action;
@@ -52,7 +52,7 @@ public class ObjectAndActionInvocation {
         this.selfLink = selfLink;
     }
 
-    public ObjectAdapter getObjectAdapter() {
+    public ManagedObject getObjectAdapter() {
         return objectAdapter;
     }
 
@@ -64,11 +64,11 @@ public class ObjectAndActionInvocation {
         return arguments;
     }
 
-    public List<ObjectAdapter> getArgAdapters() {
+    public List<ManagedObject> getArgAdapters() {
         return argAdapters;
     }
 
-    public ObjectAdapter getReturnedAdapter() {
+    public ManagedObject getReturnedAdapter() {
         return returnedAdapter;
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndCollection.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndCollection.java
index 589bf45..0412cb8 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndCollection.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndCollection.java
@@ -18,12 +18,12 @@
  */
 package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
 
 public class ObjectAndCollection extends ObjectAndMember<OneToManyAssociation> {
 
-    public ObjectAndCollection(final ObjectAdapter objectAdapter, final OneToManyAssociation collection) {
+    public ObjectAndCollection(final ManagedObject objectAdapter, final OneToManyAssociation collection) {
         super(objectAdapter, collection);
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndCollection2.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndCollection2.java
index d9b95da..6f5eb87 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndCollection2.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndCollection2.java
@@ -18,7 +18,7 @@
  */
 package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
 
 public class ObjectAndCollection2 extends ObjectAndCollection {
@@ -26,7 +26,7 @@ public class ObjectAndCollection2 extends ObjectAndCollection {
     private final MemberReprMode memberReprMode;
 
     public ObjectAndCollection2(
-            final ObjectAdapter objectAdapter,
+            final ManagedObject objectAdapter,
             final OneToManyAssociation collection,
             final MemberReprMode memberReprMode) {
         super(objectAdapter, collection);
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndMember.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndMember.java
index 700c679..2f87a6a 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndMember.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndMember.java
@@ -18,20 +18,20 @@
  */
 package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.ObjectMember;
 
 public abstract class ObjectAndMember<T extends ObjectMember> {
 
-    private final ObjectAdapter objectAdapter;
+    private final ManagedObject objectAdapter;
     private final T objectMember;
 
-    public ObjectAndMember(final ObjectAdapter objectAdapter, final T objectMember) {
+    public ObjectAndMember(final ManagedObject objectAdapter, final T objectMember) {
         this.objectAdapter = objectAdapter;
         this.objectMember = objectMember;
     }
 
-    public ObjectAdapter getObjectAdapter() {
+    public ManagedObject getObjectAdapter() {
         return objectAdapter;
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndProperty.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndProperty.java
index a0adb4d..0641ec2 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndProperty.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndProperty.java
@@ -18,12 +18,12 @@
  */
 package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 
 public class ObjectAndProperty extends ObjectAndMember<OneToOneAssociation> {
 
-    public ObjectAndProperty(final ObjectAdapter objectAdapter, final OneToOneAssociation property) {
+    public ObjectAndProperty(final ManagedObject objectAdapter, final OneToOneAssociation property) {
         super(objectAdapter, property);
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndProperty2.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndProperty2.java
index 7202985..0b63c56 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndProperty2.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndProperty2.java
@@ -18,14 +18,18 @@
  */
 package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 
 public class ObjectAndProperty2 extends ObjectAndProperty {
 
     private final MemberReprMode memberReprMode;
 
-    public ObjectAndProperty2(final ObjectAdapter objectAdapter, final OneToOneAssociation property, final MemberReprMode memberReprMode) {
+    public ObjectAndProperty2(
+            ManagedObject objectAdapter,
+            OneToOneAssociation property, 
+            MemberReprMode memberReprMode) {
+        
         super(objectAdapter, property);
         this.memberReprMode = memberReprMode;
     }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
index 64e7237..c5acd39 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectCollectionReprRenderer.java
@@ -25,7 +25,6 @@ import java.util.stream.Stream;
 
 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.collections.collection.defaultview.DefaultViewFacet;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -35,7 +34,7 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.CollectionDescriptionReprRenderer;
 
 import lombok.val;
@@ -43,11 +42,16 @@ import lombok.val;
 public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRenderer<ObjectCollectionReprRenderer, OneToManyAssociation> {
 
     public ObjectCollectionReprRenderer(
-            final RendererContext rendererContext,
+            final IResourceContext resourceContext,
             final LinkFollowSpecs linkFollowSpecs,
             final String collectionId,
             final JsonRepresentation representation) {
-        super(rendererContext, linkFollowSpecs, collectionId, RepresentationType.OBJECT_COLLECTION, representation,
+        
+        super(resourceContext, 
+                linkFollowSpecs, 
+                collectionId, 
+                RepresentationType.OBJECT_COLLECTION, 
+                representation,
                 Where.PARENTED_TABLES);
     }
 
@@ -61,9 +65,9 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
         renderMemberContent();
 
         final LinkFollowSpecs followValue = getLinkFollowSpecs().follow("value");
-        boolean eagerlyRender = rendererContext.honorUiHints() && renderEagerly() || !followValue.isTerminated();
+        boolean eagerlyRender = resourceContext.honorUiHints() && renderEagerly() || !followValue.isTerminated();
 
-        if ((mode.isInline() && eagerlyRender) || mode.isStandalone() || mode.isMutated() || mode.isEventSerialization() || !objectAdapter.isRepresentingPersistent()) {
+        if ((mode.isInline() && eagerlyRender) || mode.isStandalone() || mode.isMutated() || mode.isEventSerialization() || !ManagedObject.isBookmarkable(objectAdapter)) {
             addValue(followValue);
         }
         if(!mode.isEventSerialization()) {
@@ -93,7 +97,7 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
         }
 
         final LinkFollowSpecs followHref = linkFollower.follow("href");
-        boolean eagerlyRender = rendererContext.honorUiHints() && renderEagerly(valueAdapter) || !followHref.isTerminated();
+        boolean eagerlyRender = resourceContext.honorUiHints() && renderEagerly(valueAdapter) || !followHref.isTerminated();
 
         final Stream<ManagedObject> elementAdapters = CollectionFacet.Utils.streamAdapters(valueAdapter);
 
@@ -101,9 +105,9 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
 
         elementAdapters.forEach(elementAdapter->{
             final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer
-                    .newLinkToBuilder(rendererContext, Rel.VALUE, ManagedObject.promote(elementAdapter));
+                    .newLinkToBuilder(resourceContext, Rel.VALUE, ManagedObject.promote(elementAdapter));
             if(eagerlyRender) {
-                final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getRendererContext(), followHref, JsonRepresentation.newMap()
+                final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getResourceContext(), followHref, JsonRepresentation.newMap()
                         );
                 renderer.with(ManagedObject.promote(elementAdapter));
                 if(mode.isEventSerialization()) {
@@ -120,7 +124,7 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
     }
 
     private boolean renderEagerly(ManagedObject valueAdapter) {
-        return renderEagerly() && rendererContext.canEagerlyRender(ManagedObject.promote(valueAdapter));
+        return renderEagerly() && resourceContext.canEagerlyRender(ManagedObject.promote(valueAdapter));
     }
 
     // ///////////////////////////////////////////////////
@@ -133,7 +137,7 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
     @Override
     protected void followDetailsLink(final JsonRepresentation detailsLink) {
         final JsonRepresentation representation = JsonRepresentation.newMap();
-        final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(getRendererContext(), getLinkFollowSpecs(), null,
+        final ObjectCollectionReprRenderer renderer = new ObjectCollectionReprRenderer(getResourceContext(), getLinkFollowSpecs(), null,
                 representation);
         renderer.with(new ObjectAndCollection(objectAdapter, objectMember)).asFollowed();
         detailsLink.mapPut("value", renderer.render());
@@ -168,10 +172,10 @@ public class ObjectCollectionReprRenderer extends AbstractObjectMemberReprRender
 
     @Override
     protected void addLinksToFormalDomainModel() {
-        if(rendererContext.suppressDescribedByLinks()) {
+        if(resourceContext.suppressDescribedByLinks()) {
             return;
         }
-        final JsonRepresentation link = CollectionDescriptionReprRenderer.newLinkToBuilder(rendererContext, Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build();
+        final JsonRepresentation link = CollectionDescriptionReprRenderer.newLinkToBuilder(resourceContext, Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build();
         getLinks().arrayAdd(link);
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
index 76a9612..98b59c1 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
@@ -40,7 +40,7 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.PropertyDescriptionReprRenderer;
 
 import lombok.val;
@@ -48,12 +48,12 @@ import lombok.val;
 public class ObjectPropertyReprRenderer 
 extends AbstractObjectMemberReprRenderer<ObjectPropertyReprRenderer, OneToOneAssociation> {
 
-    public ObjectPropertyReprRenderer(RendererContext context) {
+    public ObjectPropertyReprRenderer(IResourceContext context) {
         this(context, null, null, JsonRepresentation.newMap());
     }
 
     public ObjectPropertyReprRenderer(
-            final RendererContext context,
+            final IResourceContext context,
             final LinkFollowSpecs linkFollower,
             final String propertyId,
             final JsonRepresentation representation) {
@@ -115,11 +115,11 @@ extends AbstractObjectMemberReprRenderer<ObjectPropertyReprRenderer, OneToOneAss
                     format = String.format("big-integer");
                 }
             }
-            return jsonValueEncoder.appendValueAndFormat(ManagedObject.promote(valueAdapter), representation, format, rendererContext.suppressMemberExtensions());
+            return jsonValueEncoder.appendValueAndFormat(ManagedObject.promote(valueAdapter), representation, format, resourceContext.suppressMemberExtensions());
         }
 
         boolean eagerlyRender =
-                (renderEagerly() && rendererContext.canEagerlyRender(ManagedObject.promote(valueAdapter)))
+                (renderEagerly() && resourceContext.canEagerlyRender(ManagedObject.promote(valueAdapter)))
                 || (linkFollower != null && !linkFollower.isTerminated());
 
         if(valueAdapter == null) {
@@ -130,10 +130,10 @@ extends AbstractObjectMemberReprRenderer<ObjectPropertyReprRenderer, OneToOneAss
             final TitleFacet titleFacet = spec.getFacet(TitleFacet.class);
             final String title = titleFacet.title(valueAdapter);
 
-            final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer.newLinkToBuilder(rendererContext, Rel.VALUE, ManagedObject.promote(valueAdapter)).withTitle(title);
+            final LinkBuilder valueLinkBuilder = DomainObjectReprRenderer.newLinkToBuilder(resourceContext, Rel.VALUE, ManagedObject.promote(valueAdapter)).withTitle(title);
             if(eagerlyRender) {
                 final DomainObjectReprRenderer renderer = 
-                        new DomainObjectReprRenderer(rendererContext, linkFollower, JsonRepresentation.newMap());
+                        new DomainObjectReprRenderer(resourceContext, linkFollower, JsonRepresentation.newMap());
                 renderer.with(ManagedObject.promote(valueAdapter));
                 if(mode.isEventSerialization()) {
                     renderer.asEventSerialization();
@@ -178,7 +178,7 @@ extends AbstractObjectMemberReprRenderer<ObjectPropertyReprRenderer, OneToOneAss
     @Override
     protected void followDetailsLink(final JsonRepresentation detailsLink) {
         final JsonRepresentation representation = JsonRepresentation.newMap();
-        final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(getRendererContext(), getLinkFollowSpecs(), null, representation);
+        final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(getResourceContext(), getLinkFollowSpecs(), null, representation);
         renderer.with(new ObjectAndProperty(objectAdapter, objectMember)).asFollowed();
         detailsLink.mapPut("value", renderer.render());
     }
@@ -226,7 +226,7 @@ extends AbstractObjectMemberReprRenderer<ObjectPropertyReprRenderer, OneToOneAss
             // final ObjectSpecification choiceSpec = objectMember.getSpecification();
 
             // REVIEW: check that it works for ToDoItem$Category, though...
-            list.add(DomainObjectReprRenderer.valueOrRef(rendererContext, super.getJsonValueEncoder(), choiceAdapter));
+            list.add(DomainObjectReprRenderer.valueOrRef(resourceContext, super.getJsonValueEncoder(), choiceAdapter));
         }
         return list;
     }
@@ -237,10 +237,10 @@ extends AbstractObjectMemberReprRenderer<ObjectPropertyReprRenderer, OneToOneAss
 
     @Override
     protected void addLinksToFormalDomainModel() {
-        if(rendererContext.suppressDescribedByLinks()) {
+        if(resourceContext.suppressDescribedByLinks()) {
             return;
         }
-        final JsonRepresentation link = PropertyDescriptionReprRenderer.newLinkToBuilder(getRendererContext(), Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build();
+        final JsonRepresentation link = PropertyDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), Rel.DESCRIBEDBY, objectAdapter.getSpecification(), objectMember).build();
         getLinks().arrayAdd(link);
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/OidUtils.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/OidUtils.java
deleted file mode 100644
index d3a8898..0000000
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/OidUtils.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
-
-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.spec.ManagedObject;
-
-final class OidUtils {
-
-    private OidUtils() {
-    }
-
-    public static String getDomainType(final ManagedObject objectAdapter) {
-        if (objectAdapter == null) {
-            return null;
-        }
-        return objectAdapter.getSpecification().getSpecId().asString();
-    }
-
-    public static String getInstanceId(final ObjectAdapter objectAdapter) {
-        String oidStr = getOidStr(objectAdapter);
-        // REVIEW: it's a bit hokey to join these together just to split them out again.
-        return oidStr != null ? Oid.unmarshaller().splitInstanceId(oidStr): null;
-    }
-
-
-    public static String getOidStr(final ObjectAdapter objectAdapter) {
-        final Oid oid = objectAdapter.getOid();
-        if (!(oid instanceof RootOid)) {
-            throw new IllegalArgumentException("objectAdapter must be a root adapter");
-        }
-        return oid.enStringNoVersion();
-    }
-
-
-}
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
index 377a769..389e275 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ScalarValueReprRenderer.java
@@ -20,22 +20,22 @@ package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
 import javax.ws.rs.core.MediaType;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.object.encodeable.EncodableFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererException;
 
-public class ScalarValueReprRenderer extends ReprRendererAbstract<ScalarValueReprRenderer, ObjectAdapter> {
+public class ScalarValueReprRenderer extends ReprRendererAbstract<ScalarValueReprRenderer, ManagedObject> {
 
     private ObjectSpecification returnType;
 
     public ScalarValueReprRenderer(
-            final RendererContext resourceContext,
+            final IResourceContext resourceContext,
             final LinkFollowSpecs linkFollower,
             final JsonRepresentation representation) {
         super(resourceContext, linkFollower, null, representation); // null for representationType (there is none)
@@ -53,7 +53,7 @@ public class ScalarValueReprRenderer extends ReprRendererAbstract<ScalarValueRep
     }
 
     @Override
-    public ScalarValueReprRenderer with(final ObjectAdapter objectAdapter) {
+    public ScalarValueReprRenderer with(final ManagedObject objectAdapter) {
         final EncodableFacet facet = objectAdapter.getSpecification().getFacet(EncodableFacet.class);
         if (facet == null) {
             throw ReprRendererException.create("Not an (encodable) value", objectAdapter.titleString());
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeFeatureReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeFeatureReprRenderer.java
index 444c888..140f9dd 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeFeatureReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeFeatureReprRenderer.java
@@ -24,7 +24,7 @@ import org.apache.isis.metamodel.spec.feature.ObjectFeature;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 
 public abstract class AbstractTypeFeatureReprRenderer<R extends ReprRendererAbstract<R, ParentSpecAndFeature<T>>, T extends ObjectFeature> extends ReprRendererAbstract<R, ParentSpecAndFeature<T>> {
@@ -32,7 +32,7 @@ public abstract class AbstractTypeFeatureReprRenderer<R extends ReprRendererAbst
     protected ObjectSpecification objectSpecification;
     protected T objectFeature;
 
-    public AbstractTypeFeatureReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
+    public AbstractTypeFeatureReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, representationType, representation);
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeMemberReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeMemberReprRenderer.java
index dd8b9fb..022465d 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeMemberReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/AbstractTypeMemberReprRenderer.java
@@ -24,7 +24,7 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberType;
 
@@ -32,7 +32,7 @@ public abstract class AbstractTypeMemberReprRenderer<R extends ReprRendererAbstr
 
     protected MemberType memberType;
 
-    public AbstractTypeMemberReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
+    public AbstractTypeMemberReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final RepresentationType representationType, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, representationType, representation);
     }
 
@@ -59,7 +59,7 @@ public abstract class AbstractTypeMemberReprRenderer<R extends ReprRendererAbstr
 
     @Override
     protected void addLinkUpToParent() {
-        final LinkBuilder parentLinkBuilder = DomainTypeReprRenderer.newLinkToBuilder(rendererContext, Rel.UP, objectSpecification);
+        final LinkBuilder parentLinkBuilder = DomainTypeReprRenderer.newLinkToBuilder(resourceContext, Rel.UP, objectSpecification);
         getLinks().arrayAdd(parentLinkBuilder.build());
     }
 
@@ -71,7 +71,7 @@ public abstract class AbstractTypeMemberReprRenderer<R extends ReprRendererAbstr
 
         final ObjectMember objectMember = getObjectFeature();
         final LinkBuilder linkBuilder = LinkBuilder.newBuilder(
-                getRendererContext(), Rel.SELF.getName(), getMediaType(),
+                getResourceContext(), Rel.SELF.getName(), getMediaType(),
                 "domain-types/%s/%s%s", getParentSpecification().getSpecId().asString(), getMemberType().getUrlPart(), objectMember.getId());
         getLinks().arrayAdd(linkBuilder.build());
     }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/ActionDescriptionReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/ActionDescriptionReprRenderer.java
index 2a0c38f..b174f85 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/ActionDescriptionReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/ActionDescriptionReprRenderer.java
@@ -29,18 +29,18 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 
 public class ActionDescriptionReprRenderer extends AbstractTypeMemberReprRenderer<ActionDescriptionReprRenderer, ObjectAction> {
 
-    public static LinkBuilder newLinkToBuilder(final RendererContext resourceContext, final Rel rel, final ObjectSpecification objectSpecification, final ObjectAction objectAction) {
+    public static LinkBuilder newLinkToBuilder(final IResourceContext resourceContext, final Rel rel, final ObjectSpecification objectSpecification, final ObjectAction objectAction) {
         final String domainType = objectSpecification.getSpecId().asString();
         final String actionId = objectAction.getId();
         final String url = "domain-types/" + domainType + "/actions/" + actionId;
         return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.ACTION_DESCRIPTION, url);
     }
 
-    public ActionDescriptionReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    public ActionDescriptionReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.ACTION_DESCRIPTION, representation);
     }
 
@@ -55,7 +55,7 @@ public class ActionDescriptionReprRenderer extends AbstractTypeMemberReprRendere
         final JsonRepresentation parameterList = JsonRepresentation.newArray();
         final List<ObjectActionParameter> parameters = getObjectFeature().getParameters();
         for (final ObjectActionParameter parameter : parameters) {
-            final LinkBuilder linkBuilder = ActionParameterDescriptionReprRenderer.newLinkToBuilder(getRendererContext(), Rel.ACTION_PARAM, objectSpecification, parameter);
+            final LinkBuilder linkBuilder = ActionParameterDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), Rel.ACTION_PARAM, objectSpecification, parameter);
             parameterList.arrayAdd(linkBuilder.build());
         }
 
@@ -68,7 +68,7 @@ public class ActionDescriptionReprRenderer extends AbstractTypeMemberReprRendere
             return;
         }
         final ObjectSpecification typeOfSpec = facet.valueSpec();
-        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getRendererContext(), Rel.ELEMENT_TYPE, typeOfSpec);
+        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.ELEMENT_TYPE, typeOfSpec);
         getLinks().arrayAdd(linkBuilder.build());
     }
 
@@ -77,7 +77,7 @@ public class ActionDescriptionReprRenderer extends AbstractTypeMemberReprRendere
         if (returnType == null) {
             return;
         }
-        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getRendererContext(), Rel.RETURN_TYPE, returnType);
+        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.RETURN_TYPE, returnType);
         getLinks().arrayAdd(linkBuilder.build());
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/ActionParameterDescriptionReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/ActionParameterDescriptionReprRenderer.java
index ff06466..0e5ac6d 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/ActionParameterDescriptionReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/ActionParameterDescriptionReprRenderer.java
@@ -27,11 +27,11 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 
 public class ActionParameterDescriptionReprRenderer extends AbstractTypeFeatureReprRenderer<ActionParameterDescriptionReprRenderer, ObjectActionParameter> {
 
-    public static LinkBuilder newLinkToBuilder(final RendererContext resourceContext, final Rel rel, final ObjectSpecification objectSpecification, final ObjectActionParameter objectActionParameter) {
+    public static LinkBuilder newLinkToBuilder(final IResourceContext resourceContext, final Rel rel, final ObjectSpecification objectSpecification, final ObjectActionParameter objectActionParameter) {
         final String domainType = objectSpecification.getSpecId().asString();
         final ObjectAction objectAction = objectActionParameter.getAction();
         final String actionId = objectAction.getId();
@@ -40,7 +40,7 @@ public class ActionParameterDescriptionReprRenderer extends AbstractTypeFeatureR
         return LinkBuilder.newBuilder(resourceContext, rel.andParam("id", deriveId(objectActionParameter)), RepresentationType.ACTION_PARAMETER_DESCRIPTION, url);
     }
 
-    public ActionParameterDescriptionReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    public ActionParameterDescriptionReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.ACTION_PARAMETER_DESCRIPTION, representation);
     }
 
@@ -67,14 +67,14 @@ public class ActionParameterDescriptionReprRenderer extends AbstractTypeFeatureR
         if (!includesSelf) {
             return;
         }
-        getLinks().arrayAdd(newLinkToBuilder(getRendererContext(), Rel.SELF, getParentSpecification(), getObjectFeature()).build());
+        getLinks().arrayAdd(newLinkToBuilder(getResourceContext(), Rel.SELF, getParentSpecification(), getObjectFeature()).build());
     }
 
     @Override
     protected void addLinkUpToParent() {
         final ObjectAction parentAction = this.objectFeature.getAction();
 
-        final LinkBuilder parentLinkBuilder = ActionDescriptionReprRenderer.newLinkToBuilder(rendererContext, Rel.UP, objectSpecification, parentAction);
+        final LinkBuilder parentLinkBuilder = ActionDescriptionReprRenderer.newLinkToBuilder(resourceContext, Rel.UP, objectSpecification, parentAction);
         getLinks().arrayAdd(parentLinkBuilder.build());
     }
 
@@ -91,7 +91,7 @@ public class ActionParameterDescriptionReprRenderer extends AbstractTypeFeatureR
 
     @Override
     protected void addLinksSpecificToFeature() {
-        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(rendererContext, Rel.RETURN_TYPE, objectFeature.getSpecification());
+        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(resourceContext, Rel.RETURN_TYPE, objectFeature.getSpecification());
         getLinks().arrayAdd(linkBuilder.build());
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/CollectionDescriptionReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/CollectionDescriptionReprRenderer.java
index dc3fcdd..149b749 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/CollectionDescriptionReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/CollectionDescriptionReprRenderer.java
@@ -25,18 +25,18 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 
 public class CollectionDescriptionReprRenderer extends AbstractTypeMemberReprRenderer<CollectionDescriptionReprRenderer, OneToManyAssociation> {
 
-    public static LinkBuilder newLinkToBuilder(final RendererContext resourceContext, final Rel rel, final ObjectSpecification objectSpecification, final OneToManyAssociation collection) {
+    public static LinkBuilder newLinkToBuilder(final IResourceContext resourceContext, final Rel rel, final ObjectSpecification objectSpecification, final OneToManyAssociation collection) {
         final String domainType = objectSpecification.getSpecId().asString();
         final String collectionId = collection.getId();
         final String url = "domain-types/" + domainType + "/collections/" + collectionId;
         return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.COLLECTION_DESCRIPTION, url);
     }
 
-    public CollectionDescriptionReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    public CollectionDescriptionReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.COLLECTION_DESCRIPTION, representation);
     }
 
@@ -50,7 +50,7 @@ public class CollectionDescriptionReprRenderer extends AbstractTypeMemberReprRen
         if (elementType == null) {
             return;
         }
-        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getRendererContext(), Rel.ELEMENT_TYPE, elementType);
+        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.ELEMENT_TYPE, elementType);
         getLinks().arrayAdd(linkBuilder.build());
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
index 8ba0675..ae045f3 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
@@ -34,19 +34,19 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 
 public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprRenderer, ObjectSpecification> {
 
-    public static LinkBuilder newLinkToBuilder(final RendererContext resourceContext, final Rel rel, final ObjectSpecification objectSpec) {
+    public static LinkBuilder newLinkToBuilder(final IResourceContext resourceContext, final Rel rel, final ObjectSpecification objectSpec) {
         final String typeFullName = objectSpec.getSpecId().asString();
         final String url = String.format("domain-types/%s", typeFullName);
         return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.DOMAIN_TYPE, url);
     }
 
     public static LinkBuilder newLinkToLayoutBuilder(
-            final RendererContext resourceContext,
+            final IResourceContext resourceContext,
             final ObjectSpecification objectSpec) {
         final Rel rel = Rel.LAYOUT;
         final String typeFullName = objectSpec.getSpecId().asString();
@@ -56,7 +56,7 @@ public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprR
 
     private ObjectSpecification objectSpecification;
 
-    public DomainTypeReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    public DomainTypeReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.DOMAIN_TYPE, representation);
     }
 
@@ -75,10 +75,10 @@ public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprR
 
         // self
         if (includesSelf) {
-            final JsonRepresentation selfLink = newLinkToBuilder(getRendererContext(), Rel.SELF, objectSpecification).build();
+            final JsonRepresentation selfLink = newLinkToBuilder(getResourceContext(), Rel.SELF, objectSpecification).build();
             getLinks().arrayAdd(selfLink);
 
-            final JsonRepresentation layoutLink = newLinkToLayoutBuilder(getRendererContext(), objectSpecification).build();
+            final JsonRepresentation layoutLink = newLinkToLayoutBuilder(getResourceContext(), objectSpecification).build();
             getLinks().arrayAdd(layoutLink);
         }
 
@@ -102,11 +102,11 @@ public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprR
         associations.forEach(association->{
             if (association.isOneToOneAssociation()) {
                 final OneToOneAssociation property = (OneToOneAssociation) association;
-                final LinkBuilder linkBuilder = PropertyDescriptionReprRenderer.newLinkToBuilder(getRendererContext(), Rel.PROPERTY, objectSpecification, property);
+                final LinkBuilder linkBuilder = PropertyDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), Rel.PROPERTY, objectSpecification, property);
                 membersList.arrayAdd(linkBuilder.build());
             } else if (association.isOneToManyAssociation()) {
                 final OneToManyAssociation collection = (OneToManyAssociation) association;
-                final LinkBuilder linkBuilder = CollectionDescriptionReprRenderer.newLinkToBuilder(getRendererContext(), Rel.PROPERTY, objectSpecification, collection);
+                final LinkBuilder linkBuilder = CollectionDescriptionReprRenderer.newLinkToBuilder(getResourceContext(), Rel.PROPERTY, objectSpecification, collection);
                 membersList.arrayAdd(linkBuilder.build());
             }
         });
@@ -115,7 +115,7 @@ public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprR
 
         actions.forEach(action->{
             final LinkBuilder linkBuilder = ActionDescriptionReprRenderer
-                    .newLinkToBuilder(getRendererContext(), Rel.ACTION, objectSpecification, action);
+                    .newLinkToBuilder(getResourceContext(), Rel.ACTION, objectSpecification, action);
             membersList.arrayAdd(linkBuilder.build());            
         });
 
@@ -138,8 +138,8 @@ public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprR
     private JsonRepresentation linkToIsSubtypeOf() {
         final String url = "domain-types/" + objectSpecification.getSpecId().asString() + "/type-actions/isSubtypeOf/invoke";
 
-        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getRendererContext(), Rel.INVOKE.andParam("typeaction", "isSubtypeOf"), RepresentationType.TYPE_ACTION_RESULT, url);
-        final JsonRepresentation arguments = argumentsTo(getRendererContext(), "supertype", null);
+        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.INVOKE.andParam("typeaction", "isSubtypeOf"), RepresentationType.TYPE_ACTION_RESULT, url);
+        final JsonRepresentation arguments = argumentsTo(getResourceContext(), "supertype", null);
         final JsonRepresentation link = linkBuilder.withArguments(arguments).build();
         return link;
     }
@@ -147,13 +147,13 @@ public class DomainTypeReprRenderer extends ReprRendererAbstract<DomainTypeReprR
     private JsonRepresentation linkToIsSupertypeOf() {
         final String url = "domain-types/" + objectSpecification.getSpecId().asString() + "/type-actions/isSupertypeOf/invoke";
 
-        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getRendererContext(), Rel.INVOKE.andParam("typeaction", "isSupertypeOf"), RepresentationType.TYPE_ACTION_RESULT, url);
-        final JsonRepresentation arguments = argumentsTo(getRendererContext(), "subtype", null);
+        final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.INVOKE.andParam("typeaction", "isSupertypeOf"), RepresentationType.TYPE_ACTION_RESULT, url);
+        final JsonRepresentation arguments = argumentsTo(getResourceContext(), "subtype", null);
         final JsonRepresentation link = linkBuilder.withArguments(arguments).build();
         return link;
     }
 
-    public static JsonRepresentation argumentsTo(final RendererContext resourceContext, final String paramName, final ObjectSpecification objectSpec) {
+    public static JsonRepresentation argumentsTo(final IResourceContext resourceContext, final String paramName, final ObjectSpecification objectSpec) {
         final JsonRepresentation arguments = JsonRepresentation.newMap();
         final JsonRepresentation link = JsonRepresentation.newMap();
         arguments.mapPut(paramName, link);
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/PropertyDescriptionReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/PropertyDescriptionReprRenderer.java
index c231de3..6a05bd9 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/PropertyDescriptionReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/PropertyDescriptionReprRenderer.java
@@ -26,18 +26,18 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 
 public class PropertyDescriptionReprRenderer extends AbstractTypeMemberReprRenderer<PropertyDescriptionReprRenderer, OneToOneAssociation> {
 
-    public static LinkBuilder newLinkToBuilder(final RendererContext resourceContext, final Rel rel, final ObjectSpecification objectSpecification, final OneToOneAssociation property) {
+    public static LinkBuilder newLinkToBuilder(final IResourceContext resourceContext, final Rel rel, final ObjectSpecification objectSpecification, final OneToOneAssociation property) {
         final String domainType = objectSpecification.getSpecId().asString();
         final String propertyId = property.getId();
         final String url = "domain-types/" + domainType + "/properties/" + propertyId;
         return LinkBuilder.newBuilder(resourceContext, rel.getName(), RepresentationType.PROPERTY_DESCRIPTION, url);
     }
 
-    public PropertyDescriptionReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    public PropertyDescriptionReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.PROPERTY_DESCRIPTION, representation);
     }
 
@@ -60,7 +60,7 @@ public class PropertyDescriptionReprRenderer extends AbstractTypeMemberReprRende
         if (returnType == null) {
             return;
         }
-        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getRendererContext(), Rel.RETURN_TYPE, returnType);
+        final LinkBuilder linkBuilder = DomainTypeReprRenderer.newLinkToBuilder(getResourceContext(), Rel.RETURN_TYPE, returnType);
         getLinks().arrayAdd(linkBuilder.build());
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeActionResultReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeActionResultReprRenderer.java
index 9763909..5065034 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeActionResultReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeActionResultReprRenderer.java
@@ -24,7 +24,7 @@ import org.apache.isis.viewer.restfulobjects.applib.LinkRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 
 public class TypeActionResultReprRenderer extends ReprRendererAbstract<TypeActionResultReprRenderer, ObjectSpecification> {
@@ -33,7 +33,7 @@ public class TypeActionResultReprRenderer extends ReprRendererAbstract<TypeActio
     private LinkRepresentation selfLink;
     private Object value;
 
-    public TypeActionResultReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    public TypeActionResultReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.TYPE_ACTION_RESULT, representation);
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeListReprRenderer.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeListReprRenderer.java
index 916601e..f3b1232 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeListReprRenderer.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domaintypes/TypeListReprRenderer.java
@@ -26,14 +26,14 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 
 public class TypeListReprRenderer extends ReprRendererAbstract<TypeListReprRenderer, Collection<ObjectSpecification>> {
 
     private Collection<ObjectSpecification> specifications;
 
-    public TypeListReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    public TypeListReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.TYPE_LIST, representation);
     }
 
@@ -53,7 +53,7 @@ public class TypeListReprRenderer extends ReprRendererAbstract<TypeListReprRende
 
         final JsonRepresentation specList = JsonRepresentation.newArray();
         for (final ObjectSpecification objectSpec : specifications) {
-            final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getRendererContext(), Rel.DOMAIN_TYPE.getName(), RepresentationType.DOMAIN_TYPE, "domain-types/%s", objectSpec.getSpecId().asString());
+            final LinkBuilder linkBuilder = LinkBuilder.newBuilder(getResourceContext(), Rel.DOMAIN_TYPE.getName(), RepresentationType.DOMAIN_TYPE, "domain-types/%s", objectSpec.getSpecId().asString());
             specList.arrayAdd(linkBuilder.build());
         }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
index cd8bc76..07ec5e5 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationService.java
@@ -20,12 +20,10 @@ package org.apache.isis.viewer.restfulobjects.rendering.service;
 
 import javax.ws.rs.core.Response;
 
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.metamodel.spec.ManagedObject;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberReprMode;
-import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAdapterLinkTo;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAction;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndActionInvocation;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCollection;
@@ -42,7 +40,7 @@ import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndPr
 public interface RepresentationService {
 
     /**
-     * As returned by {@link RendererContext6#getIntent()}, applies only to the representation of
+     * As returned by {@link resourceContext6#getIntent()}, applies only to the representation of
      * domain objects.
      */
     enum Intent {
@@ -60,36 +58,28 @@ public interface RepresentationService {
         NOT_APPLICABLE
     }
 
-    @Programmatic
     Response objectRepresentation(
-            Context resourceContext,
-            ObjectAdapter objectAdapter);
+            IResourceContext resourceContext,
+            ManagedObject objectAdapter);
 
-    @Programmatic
     Response propertyDetails(
-            Context rendererContext,
+            IResourceContext resourceContext,
             ObjectAndProperty objectAndProperty,
             MemberReprMode memberReprMode);
 
-    @Programmatic
     Response collectionDetails(
-            Context rendererContext,
+            IResourceContext resourceContext,
             ObjectAndCollection objectAndCollection,
             MemberReprMode memberReprMode);
 
-    @Programmatic
     Response actionPrompt(
-            Context rendererContext,
+            IResourceContext resourceContext,
             ObjectAndAction objectAndAction);
 
-    @Programmatic
     Response actionResult(
-            Context rendererContext,
+            IResourceContext resourceContext,
             ObjectAndActionInvocation objectAndActionInvocation,
             ActionResultReprRenderer.SelfLink selfLink);
-
-    interface Context extends RendererContext {
-        ObjectAdapterLinkTo getAdapterLinkTo();
-    }
+    
 
 }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java
index 7072aa7..da67861 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java
@@ -28,8 +28,8 @@ import javax.ws.rs.core.Response.ResponseBuilder;
 
 import org.springframework.stereotype.Service;
 
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer.SelfLink;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberReprMode;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAction;
@@ -42,17 +42,17 @@ import org.apache.isis.viewer.restfulobjects.rendering.service.conneg.ContentNeg
 @Service
 public class RepresentationServiceContentNegotiator implements RepresentationService {
 
-
+    @Inject List<ContentNegotiationService> contentNegotiationServices;
+    
     @PostConstruct
     public void init() {
     }
 
 
     @Override
-    @Programmatic
     public Response objectRepresentation(
-            final Context renderContext,
-            final ObjectAdapter objectAdapter) {
+            final IResourceContext renderContext,
+            final ManagedObject objectAdapter) {
 
         final ResponseBuilder responseBuilder = buildResponse(new Function<ContentNegotiationService, ResponseBuilder>() {
             @Override
@@ -66,9 +66,8 @@ public class RepresentationServiceContentNegotiator implements RepresentationSer
     }
 
     @Override
-    @Programmatic
     public Response propertyDetails(
-            final Context renderContext,
+            final IResourceContext renderContext,
             final ObjectAndProperty objectAndProperty,
             final MemberReprMode memberReprMode) {
 
@@ -85,9 +84,8 @@ public class RepresentationServiceContentNegotiator implements RepresentationSer
 
 
     @Override
-    @Programmatic
     public Response collectionDetails(
-            final Context renderContext,
+            final IResourceContext renderContext,
             final ObjectAndCollection objectAndCollection,
             final MemberReprMode memberReprMode) {
 
@@ -106,9 +104,8 @@ public class RepresentationServiceContentNegotiator implements RepresentationSer
 
 
     @Override
-    @Programmatic
     public Response actionPrompt(
-            final Context renderContext,
+            final IResourceContext renderContext,
             final ObjectAndAction objectAndAction) {
 
         final ResponseBuilder responseBuilder = buildResponse(new Function<ContentNegotiationService, ResponseBuilder>() {
@@ -124,9 +121,8 @@ public class RepresentationServiceContentNegotiator implements RepresentationSer
 
 
     @Override
-    @Programmatic
     public Response actionResult(
-            final Context renderContext,
+            final IResourceContext renderContext,
             final ObjectAndActionInvocation objectAndActionInvocation,
             final SelfLink selfLink) {
 
@@ -176,5 +172,5 @@ public class RepresentationServiceContentNegotiator implements RepresentationSer
         return responseBuilder.build();
     }
 
-    @Inject List<ContentNegotiationService> contentNegotiationServices;
+    
 }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationService.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationService.java
index 1318195..d4cf358 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationService.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationService.java
@@ -22,13 +22,12 @@ import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.ws.rs.core.Response;
 
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAction;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndActionInvocation;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCollection;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndProperty;
-import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
 
 public interface ContentNegotiationService {
 
@@ -38,28 +37,23 @@ public interface ContentNegotiationService {
     @PreDestroy
     public void shutdown();
 
-    @Programmatic
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext,
-            final ObjectAdapter objectAdapter);
+            IResourceContext renderContext,
+            ManagedObject objectAdapter);
 
-    @Programmatic
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext,
-            final ObjectAndProperty objectAndProperty);
+            IResourceContext renderContext,
+            ObjectAndProperty objectAndProperty);
 
-    @Programmatic
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext,
-            final ObjectAndCollection objectAndCollection);
+            IResourceContext renderContext,
+            ObjectAndCollection objectAndCollection);
 
-    @Programmatic
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext,
-            final ObjectAndAction objectAndAction);
+            IResourceContext renderContext,
+            ObjectAndAction objectAndAction);
 
-    @Programmatic
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext,
-            final ObjectAndActionInvocation objectAndActionInvocation);
+            IResourceContext renderContext,
+            ObjectAndActionInvocation objectAndActionInvocation);
 }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
index b02e401..749907c 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
@@ -27,67 +27,63 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.factory.InstanceUtil;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAction;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndActionInvocation;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCollection;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndProperty;
-import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
 
 public abstract class ContentNegotiationServiceAbstract implements ContentNegotiationService {
 
     @Override
-    @Programmatic
+    
     @PostConstruct
     public void init() {}
 
     @Override
-    @Programmatic
     @PreDestroy
     public void shutdown() {}
 
     @Override
-    @Programmatic
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext2,
-            final ObjectAdapter objectAdapter) {
+            final IResourceContext renderContext2,
+            final ManagedObject objectAdapter) {
         return null;
     }
 
     @Override
-    @Programmatic
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext2,
+            final IResourceContext renderContext2,
             final ObjectAndProperty objectAndProperty)  {
         return null;
     }
 
     @Override
-    @Programmatic
+    
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext2,
+            final IResourceContext renderContext2,
             final ObjectAndCollection objectAndCollection) {
         return null;
     }
 
     @Override
-    @Programmatic
+    
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext2,
+            final IResourceContext renderContext2,
             final ObjectAndAction objectAndAction)  {
         return null;
     }
 
     @Override
-    @Programmatic
+    
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext2,
+            final IResourceContext renderContext2,
             final ObjectAndActionInvocation objectAndActionInvocation) {
         return null;
     }
@@ -97,12 +93,12 @@ public abstract class ContentNegotiationServiceAbstract implements ContentNegoti
     /**
      * Potential hook to allow a domain object to be mapped.
      */
-    protected Object objectOf(final ObjectAdapter objectAdapter) {
+    protected Object objectOf(final ManagedObject objectAdapter) {
         return objectAdapter.getPojo();
     }
 
     protected Object returnedObjectOf(final ObjectAndActionInvocation objectAndActionInvocation) {
-        final ObjectAdapter returnedAdapter = objectAndActionInvocation.getReturnedAdapter();
+        final ManagedObject returnedAdapter = objectAndActionInvocation.getReturnedAdapter();
         return objectOf(returnedAdapter);
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
index 0d19671..92426c8 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
@@ -35,10 +35,10 @@ import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.domain.DomainObjectList;
 import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.version.Version;
 import org.apache.isis.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
@@ -46,6 +46,7 @@ import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
 import org.apache.isis.viewer.restfulobjects.rendering.Caching;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.Responses;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer;
@@ -61,6 +62,8 @@ import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectColle
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectPropertyReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
 
+import lombok.val;
+
 @DomainService(
         nature = NatureOfService.DOMAIN
         )
@@ -82,14 +85,14 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
 
     @Override
     public ResponseBuilder buildResponse(
-            final RepresentationService.Context rendererContext,
-            final ObjectAdapter objectAdapter) {
+            final IResourceContext resourceContext,
+            final ManagedObject objectAdapter) {
 
-        final List<MediaType> list = rendererContext.getAcceptableMediaTypes();
+        final List<MediaType> list = resourceContext.getAcceptableMediaTypes();
         ensureCompatibleAcceptHeader(RepresentationType.DOMAIN_OBJECT, list);
 
         final ResponseBuilder responseBuilder = buildResponseTo(
-                rendererContext, objectAdapter, JsonRepresentation.newMap(), null);
+                resourceContext, objectAdapter, JsonRepresentation.newMap(), null);
 
         return responseBuilder(responseBuilder);
     }
@@ -98,25 +101,25 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
      * Not API
      */
     ResponseBuilder buildResponseTo(
-            final RepresentationService.Context rendererContext,
-            final ObjectAdapter objectAdapter,
+            final IResourceContext resourceContext,
+            final ManagedObject objectAdapter,
             final JsonRepresentation representationIfAnyRequired,
             final JsonRepresentation rootRepresentation) {
 
         final DomainObjectReprRenderer renderer =
-                new DomainObjectReprRenderer(rendererContext, null, representationIfAnyRequired);
+                new DomainObjectReprRenderer(resourceContext, null, representationIfAnyRequired);
         renderer.with(objectAdapter).includesSelf();
 
         final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE, rootRepresentation);
 
         if(true) {
-            final RepresentationService.Intent intent = rendererContext.getIntent();
+            final RepresentationService.Intent intent = resourceContext.getIntent();
             if(intent == RepresentationService.Intent.JUST_CREATED) {
                 responseBuilder.status(Response.Status.CREATED);
             }
         }
 
-        final Version version = objectAdapter.getVersion();
+        final Version version = ManagedObject._version(objectAdapter);
         if (version != null && version.getTime() != null) {
             responseBuilder.tag(etagFormat().format(version.getTime()));
         }
@@ -129,15 +132,15 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
 
     @Override
     public ResponseBuilder buildResponse(
-            final RepresentationService.Context rendererContext,
+            final IResourceContext resourceContext,
             final ObjectAndProperty objectAndProperty) {
 
-        final List<MediaType> list = rendererContext.getAcceptableMediaTypes();
+        final List<MediaType> list = resourceContext.getAcceptableMediaTypes();
         ensureCompatibleAcceptHeader(RepresentationType.OBJECT_PROPERTY, list);
 
-        final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(rendererContext);
+        final ObjectPropertyReprRenderer renderer = new ObjectPropertyReprRenderer(resourceContext);
         renderer.with(objectAndProperty)
-        .usingLinkTo(rendererContext.getAdapterLinkTo());
+        .usingLinkTo(resourceContext.getObjectAdapterLinkTo());
 
         if(objectAndProperty instanceof ObjectAndProperty2) {
             final ObjectAndProperty2 objectAndProperty2 = (ObjectAndProperty2) objectAndProperty;
@@ -152,14 +155,14 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
 
     @Override
     public ResponseBuilder buildResponse(
-            final RepresentationService.Context rendererContext,
+            final IResourceContext resourceContext,
             final ObjectAndCollection objectAndCollection) {
 
-        final List<MediaType> list = rendererContext.getAcceptableMediaTypes();
+        final List<MediaType> list = resourceContext.getAcceptableMediaTypes();
         ensureCompatibleAcceptHeader(RepresentationType.OBJECT_COLLECTION, list);
 
         final ResponseBuilder responseBuilder =
-                buildResponseTo(rendererContext, objectAndCollection, JsonRepresentation.newMap(), null);
+                buildResponseTo(resourceContext, objectAndCollection, JsonRepresentation.newMap(), null);
 
         return responseBuilder(responseBuilder);
     }
@@ -168,14 +171,14 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
      * Not API
      */
     ResponseBuilder buildResponseTo(
-            final RepresentationService.Context rendererContext,
+            final IResourceContext resourceContext,
             final ObjectAndCollection objectAndCollection,
             final JsonRepresentation representation,
             final JsonRepresentation rootRepresentation) {
         final ObjectCollectionReprRenderer renderer =
-                new ObjectCollectionReprRenderer(rendererContext, null, null, representation);
+                new ObjectCollectionReprRenderer(resourceContext, null, null, representation);
         renderer.with(objectAndCollection)
-        .usingLinkTo(rendererContext.getAdapterLinkTo());
+        .usingLinkTo(resourceContext.getObjectAdapterLinkTo());
 
         if(objectAndCollection instanceof ObjectAndCollection2) {
             final ObjectAndCollection2 objectAndCollection2 = (ObjectAndCollection2) objectAndCollection;
@@ -188,15 +191,15 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
 
     @Override
     public ResponseBuilder buildResponse(
-            final RepresentationService.Context rendererContext,
+            final IResourceContext resourceContext,
             final ObjectAndAction objectAndAction) {
 
-        final List<MediaType> list = rendererContext.getAcceptableMediaTypes();
+        final List<MediaType> list = resourceContext.getAcceptableMediaTypes();
         ensureCompatibleAcceptHeader(RepresentationType.OBJECT_ACTION, list);
 
-        final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(rendererContext);
+        final ObjectActionReprRenderer renderer = new ObjectActionReprRenderer(resourceContext);
         renderer.with(objectAndAction)
-        .usingLinkTo(rendererContext.getAdapterLinkTo())
+        .usingLinkTo(resourceContext.getObjectAdapterLinkTo())
         .asStandalone();
 
         final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE);
@@ -206,16 +209,16 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
 
     @Override
     public ResponseBuilder buildResponse(
-            final RepresentationService.Context rendererContext,
+            final IResourceContext resourceContext,
             final ObjectAndActionInvocation objectAndActionInvocation) {
 
         final ResponseBuilder responseBuilder;
 
-        final List<MediaType> acceptableMediaTypes = rendererContext.getAcceptableMediaTypes();
+        final List<MediaType> acceptableMediaTypes = resourceContext.getAcceptableMediaTypes();
         if(isAccepted(RepresentationType.DOMAIN_OBJECT, acceptableMediaTypes, true)) {
 
-            final ObjectAdapter adapter;
-            final Collection<ObjectAdapter> collectionAdapters = objectAdaptersFrom(objectAndActionInvocation);
+            final ManagedObject adapter;
+            final Collection<ManagedObject> collectionAdapters = objectAdaptersFrom(objectAndActionInvocation);
 
             if(collectionAdapters != null) {
                 final ObjectSpecification elementSpec = elementSpecFrom(objectAndActionInvocation);
@@ -224,15 +227,15 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
                 final String actionArguments = actionArgumentsFrom(objectAndActionInvocation);
                 final DomainObjectList list = domainObjectListFrom(collectionAdapters, elementSpec, actionOwningType, actionId, actionArguments);
 
-                adapter = rendererContext.adapterOfPojo(list);
+                adapter = ManagedObject._adapterOfList(list);
 
             } else {
                 adapter = objectAndActionInvocation.getReturnedAdapter();
             }
-            responseBuilder = buildResponse(rendererContext, adapter);
+            responseBuilder = buildResponse(resourceContext, adapter);
 
         } else if(isAccepted(RepresentationType.ACTION_RESULT, acceptableMediaTypes)) {
-            responseBuilder = buildResponseTo(rendererContext, objectAndActionInvocation, JsonRepresentation.newMap(), null);
+            responseBuilder = buildResponseTo(resourceContext, objectAndActionInvocation, JsonRepresentation.newMap(), null);
         } else {
             throw RestfulObjectsApplicationException.create(RestfulResponse.HttpStatusCode.NOT_ACCEPTABLE);
         }
@@ -251,11 +254,11 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
     private static String actionArgumentsFrom(final ObjectAndActionInvocation objectAndActionInvocation) {
         final StringBuilder buf = new StringBuilder();
         final List<ObjectActionParameter> parameters = objectAndActionInvocation.getAction().getParameters();
-        final List<ObjectAdapter> argAdapters = objectAndActionInvocation.getArgAdapters();
+        final List<ManagedObject> argAdapters = objectAndActionInvocation.getArgAdapters();
         if(parameters.size() == argAdapters.size()) {
             for (int i = 0; i < parameters.size(); i++) {
                 final ObjectActionParameter param = parameters.get(i);
-                final ObjectAdapter argAdapter = argAdapters.get(i);
+                final ManagedObject argAdapter = argAdapters.get(i);
 
                 if(buf.length() > 0) {
                     buf.append(",");
@@ -268,7 +271,7 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
         return buf.toString();
     }
 
-    private static String titleOf(final ObjectAdapter argumentAdapter) {
+    private static String titleOf(final ManagedObject argumentAdapter) {
         return argumentAdapter!=null?argumentAdapter.titleString(null):"";
     }
 
@@ -277,7 +280,7 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
     }
 
     private static DomainObjectList domainObjectListFrom(
-            final Collection<ObjectAdapter> collectionAdapters,
+            final Collection<ManagedObject> collectionAdapters,
             final ObjectSpecification elementSpec,
             final String actionOwningType,
             final String actionId,
@@ -285,15 +288,16 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
 
         final String title = titleFrom(collectionAdapters, elementSpec);
 
-        final DomainObjectList list = new DomainObjectList(title, elementSpec.getSpecId().asString(), actionOwningType, actionId, actionArguments);
-        for (final ObjectAdapter adapter : collectionAdapters) {
+        final DomainObjectList list = new DomainObjectList(
+                title, elementSpec.getSpecId().asString(), actionOwningType, actionId, actionArguments);
+        for (val adapter : collectionAdapters) {
             list.getObjects().add(adapter.getPojo());
         }
         return list;
     }
 
     private static String titleFrom(
-            final Collection<ObjectAdapter> collectionAdapters,
+            final Collection<ManagedObject> collectionAdapters,
             final ObjectSpecification elementSpec) {
         final String singularName = elementSpec.getSingularName();
         final String pluralName = elementSpec.getPluralName();
@@ -320,8 +324,8 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
                         : specificationLoader.loadSpecification(Object.class) ;
     }
 
-    private Collection<ObjectAdapter> objectAdaptersFrom(final ObjectAndActionInvocation objectAndActionInvocation) {
-        final ObjectAdapter returnedAdapter = objectAndActionInvocation.getReturnedAdapter();
+    private Collection<ManagedObject> objectAdaptersFrom(final ObjectAndActionInvocation objectAndActionInvocation) {
+        final ManagedObject returnedAdapter = objectAndActionInvocation.getReturnedAdapter();
         final ObjectSpecification returnType = objectAndActionInvocation.getAction().getReturnType();
 
         final CollectionFacet collectionFacet = returnType.getFacet(CollectionFacet.class);
@@ -334,17 +338,17 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
      * Not API
      */
     ResponseBuilder buildResponseTo(
-            final RepresentationService.Context rendererContext,
+            final IResourceContext resourceContext,
             final ObjectAndActionInvocation objectAndActionInvocation,
             final JsonRepresentation representation,
             final JsonRepresentation rootRepresentation) {
         final ActionResultReprRenderer renderer =
-                new ActionResultReprRenderer(rendererContext, null, objectAndActionInvocation.getSelfLink(), representation);
+                new ActionResultReprRenderer(resourceContext, null, objectAndActionInvocation.getSelfLink(), representation);
         renderer.with(objectAndActionInvocation)
-        .using(rendererContext.getAdapterLinkTo());
+        .using(resourceContext.getObjectAdapterLinkTo());
 
         final ResponseBuilder responseBuilder = Responses.ofOk(renderer, Caching.NONE, rootRepresentation);
-        Responses.addLastModifiedAndETagIfAvailable(responseBuilder, objectAndActionInvocation.getObjectAdapter().getVersion());
+        Responses.addLastModifiedAndETagIfAvailable(responseBuilder, ManagedObject._version(objectAndActionInvocation.getObjectAdapter()));
         return responseBuilder;
     }
 
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java
index 84692ae..2d5c249 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheIsisV1.java
@@ -31,7 +31,6 @@ import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.client.SuppressionType;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facets.collections.modify.CollectionFacet;
@@ -42,7 +41,7 @@ import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.domainobjects.ActionResultRepresentation;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndAction;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndActionInvocation;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndCollection;
@@ -102,20 +101,20 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
      */
     @Override
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context rendererContext,
-            final ObjectAdapter objectAdapter) {
+            final IResourceContext resourceContext,
+            final ManagedObject objectAdapter) {
 
-        boolean canAccept = canAccept(rendererContext);
+        boolean canAccept = canAccept(resourceContext);
         if(!canAccept) {
             return null;
         }
 
-        final EnumSet<SuppressionType> suppression = suppress(rendererContext);
+        final EnumSet<SuppressionType> suppression = suppress(resourceContext);
         final boolean suppressRO = suppression.contains(SuppressionType.RO);
 
         final JsonRepresentation rootRepresentation = JsonRepresentation.newMap();
 
-        appendObjectTo(rendererContext, objectAdapter, rootRepresentation, suppression);
+        appendObjectTo(resourceContext, objectAdapter, rootRepresentation, suppression);
 
         final JsonRepresentation $$roRepresentation;
         if(!suppressRO) {
@@ -126,7 +125,7 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
         }
         final Response.ResponseBuilder responseBuilder =
                 restfulObjectsV1_0.buildResponseTo(
-                        rendererContext, objectAdapter, $$roRepresentation, rootRepresentation);
+                        resourceContext, objectAdapter, $$roRepresentation, rootRepresentation);
 
         responseBuilder.type(CONTENT_TYPE_OAI_V1_OBJECT);
 
@@ -138,7 +137,7 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
      */
     @Override
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context rendererContext,
+            final IResourceContext resourceContext,
             final ObjectAndProperty objectAndProperty)  {
 
         return null;
@@ -150,21 +149,21 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
      */
     @Override
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context rendererContext,
+            final IResourceContext resourceContext,
             final ObjectAndCollection objectAndCollection) {
 
-        if(!canAccept(rendererContext)) {
+        if(!canAccept(resourceContext)) {
             return null;
         }
-        final EnumSet<SuppressionType> suppression = suppress(rendererContext);
+        final EnumSet<SuppressionType> suppression = suppress(resourceContext);
         final boolean suppressRO = suppression.contains(SuppressionType.RO);
 
         final JsonRepresentation rootRepresentation = JsonRepresentation.newArray();
 
-        ObjectAdapter objectAdapter = objectAndCollection.getObjectAdapter();
+        ManagedObject objectAdapter = objectAndCollection.getObjectAdapter();
         OneToManyAssociation collection = objectAndCollection.getMember();
 
-        appendCollectionTo(rendererContext, objectAdapter, collection, rootRepresentation, suppression);
+        appendCollectionTo(resourceContext, objectAdapter, collection, rootRepresentation, suppression);
 
         final JsonRepresentation $$roRepresentation;
         if(!suppressRO) {
@@ -180,7 +179,7 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
 
         final Response.ResponseBuilder responseBuilder =
                 restfulObjectsV1_0.buildResponseTo(
-                        rendererContext, objectAndCollection, $$roRepresentation, rootRepresentation);
+                        resourceContext, objectAndCollection, $$roRepresentation, rootRepresentation);
 
         responseBuilder.type(CONTENT_TYPE_OAI_V1_OBJECT_COLLECTION);
 
@@ -192,7 +191,7 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
      */
     @Override
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context rendererContext,
+            final IResourceContext resourceContext,
             final ObjectAndAction objectAndAction)  {
         return null;
     }
@@ -208,13 +207,13 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
      */
     @Override
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context rendererContext,
+            final IResourceContext resourceContext,
             final ObjectAndActionInvocation objectAndActionInvocation) {
 
-        if(!canAccept(rendererContext)) {
+        if(!canAccept(resourceContext)) {
             return null;
         }
-        final EnumSet<SuppressionType> suppression = suppress(rendererContext);
+        final EnumSet<SuppressionType> suppression = suppress(resourceContext);
         final boolean suppressRO = suppression.contains(SuppressionType.RO);
 
         JsonRepresentation rootRepresentation = null;
@@ -225,7 +224,7 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
             $$roRepresentation = null;
         }
 
-        final ObjectAdapter returnedAdapter = objectAndActionInvocation.getReturnedAdapter();
+        final ManagedObject returnedAdapter = objectAndActionInvocation.getReturnedAdapter();
         final ObjectSpecification returnType = objectAndActionInvocation.getAction().getReturnType();
 
         if (returnedAdapter == null) {
@@ -237,7 +236,7 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
         case DOMAIN_OBJECT:
 
             rootRepresentation = JsonRepresentation.newMap();
-            appendObjectTo(rendererContext, returnedAdapter, rootRepresentation, suppression);
+            appendObjectTo(resourceContext, returnedAdapter, rootRepresentation, suppression);
 
             break;
 
@@ -247,9 +246,10 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
 
             final CollectionFacet collectionFacet = returnType.getFacet(CollectionFacet.class);
 
-            final Stream<ObjectAdapter> collectionAdapters = CollectionFacet.Utils.streamAdapters(returnedAdapter);
+            final Stream<ManagedObject> collectionAdapters = 
+                    CollectionFacet.Utils.streamAdapters(returnedAdapter);
 
-            appendStreamTo(rendererContext, collectionAdapters, rootRepresentation, suppression);
+            appendStreamTo(resourceContext, collectionAdapters, rootRepresentation, suppression);
 
             // $$ro representation will be an object in the list with a single property named "$$ro"
             if(!suppressRO) {
@@ -269,7 +269,7 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
 
         final Response.ResponseBuilder responseBuilder =
                 restfulObjectsV1_0.buildResponseTo(
-                        rendererContext, objectAndActionInvocation, $$roRepresentation, rootRepresentation);
+                        resourceContext, objectAndActionInvocation, $$roRepresentation, rootRepresentation);
 
         // set appropriate Content-Type
         responseBuilder.type(
@@ -288,26 +288,26 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
         return responseBuilder;
     }
 
-    boolean canAccept(final RepresentationService.Context rendererContext) {
-        final List<MediaType> acceptableMediaTypes = rendererContext.getAcceptableMediaTypes();
+    boolean canAccept(final IResourceContext resourceContext) {
+        final List<MediaType> acceptableMediaTypes = resourceContext.getAcceptableMediaTypes();
         return mediaTypeParameterMatches(acceptableMediaTypes, "profile", ACCEPT_PROFILE);
     }
 
     protected EnumSet<SuppressionType> suppress(
-            final RepresentationService.Context rendererContext) {
-        final List<MediaType> acceptableMediaTypes = rendererContext.getAcceptableMediaTypes();
+            final IResourceContext resourceContext) {
+        final List<MediaType> acceptableMediaTypes = resourceContext.getAcceptableMediaTypes();
         return SuppressionType.ParseUtil.parse(mediaTypeParameterList(acceptableMediaTypes, "suppress"));
     }
 
     private void appendObjectTo(
-            final RepresentationService.Context rendererContext,
-            final ObjectAdapter objectAdapter,
+            final IResourceContext resourceContext,
+            final ManagedObject objectAdapter,
             final JsonRepresentation rootRepresentation,
             final EnumSet<SuppressionType> suppression) {
 
-        appendPropertiesTo(rendererContext, objectAdapter, rootRepresentation, suppression);
+        appendPropertiesTo(resourceContext, objectAdapter, rootRepresentation, suppression);
 
-        final Where where = rendererContext.getWhere();
+        final Where where = resourceContext.getWhere();
         final Stream<OneToManyAssociation> collections = objectAdapter.getSpecification()
                 .streamCollections(Contributed.INCLUDED);
 
@@ -316,24 +316,25 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
 
             rootRepresentation.mapPut(collection.getId(), collectionRepresentation);
 
-            final InteractionInitiatedBy interactionInitiatedBy = determineInteractionInitiatedByFrom(rendererContext);
+            final InteractionInitiatedBy interactionInitiatedBy = determineInteractionInitiatedByFrom(resourceContext);
             final Consent visibility = collection.isVisible(objectAdapter, interactionInitiatedBy, where);
             if (!visibility.isAllowed()) {
                 return;
             }
 
-            appendCollectionTo(rendererContext, objectAdapter, collection, collectionRepresentation, suppression);
+            appendCollectionTo(resourceContext, objectAdapter, collection, collectionRepresentation, suppression);
         });
 
     }
 
     private void appendPropertiesTo(
-            final RepresentationService.Context rendererContext,
-            final ObjectAdapter objectAdapter,
+            final IResourceContext resourceContext,
+            final ManagedObject objectAdapter,
             final JsonRepresentation rootRepresentation,
             final EnumSet<SuppressionType> suppression) {
-        final InteractionInitiatedBy interactionInitiatedBy = determineInteractionInitiatedByFrom(rendererContext);
-        final Where where = rendererContext.getWhere();
+        
+        final InteractionInitiatedBy interactionInitiatedBy = determineInteractionInitiatedByFrom(resourceContext);
+        final Where where = resourceContext.getWhere();
         final Stream<OneToOneAssociation> properties = objectAdapter.getSpecification()
                 .streamProperties(Contributed.INCLUDED);
 
@@ -345,7 +346,7 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
 
             final JsonRepresentation propertyRepresentation = JsonRepresentation.newMap();
             final ObjectPropertyReprRenderer renderer =
-                    new ObjectPropertyReprRenderer(rendererContext, null, property.getId(), propertyRepresentation)
+                    new ObjectPropertyReprRenderer(resourceContext, null, property.getId(), propertyRepresentation)
                     .asStandalone();
             renderer.with(new ObjectAndProperty(objectAdapter, property));
 
@@ -383,40 +384,39 @@ public class ContentNegotiationServiceOrgApacheIsisV1 extends ContentNegotiation
     }
 
     private void appendCollectionTo(
-            final RepresentationService.Context rendererContext,
-            final ObjectAdapter objectAdapter,
+            final IResourceContext resourceContext,
+            final ManagedObject objectAdapter,
             final OneToManyAssociation collection,
             final JsonRepresentation representation, 
             final EnumSet<SuppressionType> suppression) {
 
-        val interactionInitiatedBy = determineInteractionInitiatedByFrom(rendererContext);
+        val interactionInitiatedBy = determineInteractionInitiatedByFrom(resourceContext);
         val valueAdapter = collection.get(objectAdapter, interactionInitiatedBy);
         if (valueAdapter == null) {
             return;
         }
 
-        final Stream<ObjectAdapter> adapters = CollectionFacet.Utils.streamAdapters(valueAdapter)
-                .map(x->ManagedObject.promote(x));
-        appendStreamTo(rendererContext, adapters, representation, suppression);
+        final Stream<ManagedObject> adapters = CollectionFacet.Utils.streamAdapters(valueAdapter);
+        appendStreamTo(resourceContext, adapters, representation, suppression);
     }
 
     private void appendStreamTo(
-            final RepresentationService.Context rendererContext,
-            final Stream<ObjectAdapter> adapters,
+            final IResourceContext resourceContext,
+            final Stream<ManagedObject> adapters,
             final JsonRepresentation collectionRepresentation, 
             final EnumSet<SuppressionType> suppression) {
 
         adapters.forEach(elementAdapter->{
             JsonRepresentation elementRepresentation = JsonRepresentation.newMap();
-            appendPropertiesTo(rendererContext, elementAdapter, elementRepresentation, suppression);
+            appendPropertiesTo(resourceContext, elementAdapter, elementRepresentation, suppression);
 
             collectionRepresentation.arrayAdd(elementRepresentation);
         });
     }
 
     private static InteractionInitiatedBy determineInteractionInitiatedByFrom(
-            final RendererContext rendererContext) {
-        return rendererContext.getInteractionInitiatedBy();
+            final IResourceContext resourceContext) {
+        return resourceContext.getInteractionInitiatedBy();
     }
 
 }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.java
index 3d97339..5a972e5 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.java
@@ -25,13 +25,13 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Service;
 
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.services.conmap.ContentMappingService;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndActionInvocation;
 import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
@@ -50,19 +50,21 @@ import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationSer
  *     unambiguously serialize it.
  * </p>
  */
-@DomainService(nature = NatureOfService.DOMAIN)
+@Service
 @Order(100) //in effect, is the relative priority (lower numbers have higher priority)
 public class ContentNegotiationServiceXRoDomainType extends ContentNegotiationServiceAbstract {
 
     public static final String X_RO_DOMAIN_TYPE = "x-ro-domain-type";
 
+    @Inject List<ContentMappingService> contentMappingServices;
+    
     /**
      * search for an accept header in form <code>application/xml;profile=urn:org.restfulobjects:repr-types/object;x-ro-domain-type=todoapp.dto.module.todoitem.ToDoItemDto</code>
      */
     @Override
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext,
-            final ObjectAdapter objectAdapter) {
+            final IResourceContext renderContext,
+            final ManagedObject objectAdapter) {
 
         final Object domainObject = objectOf(objectAdapter);
         final RepresentationType representationType = RepresentationType.DOMAIN_OBJECT;
@@ -76,7 +78,7 @@ public class ContentNegotiationServiceXRoDomainType extends ContentNegotiationSe
     }
 
     protected MediaType mediaTypeFrom(
-            final RepresentationService.Context renderContext,
+            final IResourceContext renderContext,
             final RepresentationType representationType) {
         final List<MediaType> acceptableMediaTypes = renderContext.getAcceptableMediaTypes();
         MediaType mediaType =
@@ -94,7 +96,7 @@ public class ContentNegotiationServiceXRoDomainType extends ContentNegotiationSe
      */
     @Override
     public Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext,
+            final IResourceContext renderContext,
             final ObjectAndActionInvocation objectAndActionInvocation) {
 
         final RepresentationType representationType = RepresentationType.ACTION_RESULT;
@@ -112,7 +114,7 @@ public class ContentNegotiationServiceXRoDomainType extends ContentNegotiationSe
     }
 
     protected Response.ResponseBuilder buildResponse(
-            final RepresentationService.Context renderContext,
+            final IResourceContext renderContext,
             final Object domainObject,
             final RepresentationType representationType) {
 
@@ -154,6 +156,6 @@ public class ContentNegotiationServiceXRoDomainType extends ContentNegotiationSe
         return domainObject;
     }
 
-    @Inject List<ContentMappingService> contentMappingServices;
+    
 
 }
diff --git a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/Util.java b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/Util.java
index 1b25f08..a1314d6 100644
--- a/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/Util.java
+++ b/core/viewer-restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/util/Util.java
@@ -21,7 +21,6 @@ package org.apache.isis.viewer.restfulobjects.rendering.util;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
-import java.util.Map;
 
 import com.fasterxml.jackson.core.JsonParseException;
 import com.fasterxml.jackson.databind.JsonMappingException;
@@ -80,17 +79,6 @@ public final class Util {
         return read(queryStringTrimmed, "query string");
     }
 
-    /**
-     * REVIEW - looks similar to above methods, but now unused; can it be deleted?
-     */
-    public static JsonRepresentation readParameterMapAsMap(final Map<String, String[]> parameterMap) {
-        final JsonRepresentation map = JsonRepresentation.newMap();
-        for (final Map.Entry<String, String[]> parameter : parameterMap.entrySet()) {
-            map.mapPut(parameter.getKey(), parameter.getValue()[0]);
-        }
-        return map;
-    }
-
     private static JsonRepresentation read(final String args, final String argsNature) {
         try {
             final JsonRepresentation jsonRepr = JsonMapper.instance().read(args);
diff --git a/core/viewer-restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_asAdapter.java b/core/viewer-restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_asAdapter.java
index 7984df4..6d1e8c0 100644
--- a/core/viewer-restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_asAdapter.java
+++ b/core/viewer-restfulobjects/rendering/src/test/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest_asAdapter.java
@@ -52,6 +52,8 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertThat;
 
+import lombok.val;
+
 public class JsonValueEncoderTest_asAdapter {
 
     @Rule public JUnitRuleMockery2 context = 
@@ -136,7 +138,7 @@ public class JsonValueEncoderTest_asAdapter {
         });
 
         // when
-        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
+        val adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
 
         // then
         assertSame(mockObjectAdapter, adapter);
@@ -183,7 +185,7 @@ public class JsonValueEncoderTest_asAdapter {
         });
 
         // when
-        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
+        val adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
 
         // then
         assertSame(mockObjectAdapter, adapter);
@@ -225,7 +227,7 @@ public class JsonValueEncoderTest_asAdapter {
         });
 
         // when
-        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
+        val adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
 
         // then
         assertSame(mockObjectAdapter, adapter);
@@ -272,7 +274,7 @@ public class JsonValueEncoderTest_asAdapter {
         });
 
         // when
-        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
+        val adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
 
         // then
         assertSame(mockObjectAdapter, adapter);
@@ -305,7 +307,7 @@ public class JsonValueEncoderTest_asAdapter {
         });
 
         // when
-        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
+        val adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
 
         // then
         assertSame(mockObjectAdapter, adapter);
@@ -338,7 +340,7 @@ public class JsonValueEncoderTest_asAdapter {
         });
 
         // when
-        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
+        val adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
 
         // then
         assertSame(mockObjectAdapter, adapter);
@@ -371,7 +373,7 @@ public class JsonValueEncoderTest_asAdapter {
         });
 
         // when
-        final ObjectAdapter adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
+        val adapter = jsonValueEncoder.asAdapter(mockObjectSpec, representation, null);
 
         // then
         assertSame(mockObjectAdapter, adapter);
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
index 87a7fdc..972d8b0 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/ResourceContext.java
@@ -36,29 +36,30 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.metamodel.MetaModelContext;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.Oid;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.runtime.system.context.session.RuntimeContextBase;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.DomainModel;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulRequest.RequestParameter;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse.HttpStatusCode;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAdapterLinkTo;
 import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
 import org.apache.isis.viewer.restfulobjects.rendering.util.Util;
 import org.apache.isis.webapp.IsisWebAppUtils;
 
 import lombok.Getter;
+import lombok.Setter;
 
-public class ResourceContext extends RuntimeContextBase implements RendererContext {
+public class ResourceContext extends RuntimeContextBase implements IResourceContext {
 
     @Getter private final HttpHeaders httpHeaders;
     @Getter private final UriInfo uriInfo;
     @Getter private final Request request;
-    //not used ... private final Providers providers;
     @Getter private final HttpServletRequest httpServletRequest;
     @Getter private final HttpServletResponse httpServletResponse;
     @Getter private final SecurityContext securityContext;
@@ -214,8 +215,8 @@ public class ResourceContext extends RuntimeContextBase implements RendererConte
     // -- canEagerlyRender
     private Set<Oid> rendered = _Sets.newHashSet();
     @Override
-    public boolean canEagerlyRender(ObjectAdapter objectAdapter) {
-        final Oid oid = objectAdapter.getOid();
+    public boolean canEagerlyRender(ManagedObject objectAdapter) {
+        final Oid oid = ManagedObject._oid(objectAdapter);
         return rendered.add(oid);
     }
 
@@ -272,4 +273,10 @@ public class ResourceContext extends RuntimeContextBase implements RendererConte
         return httpHeaders.getAcceptableMediaTypes();
     }
 
+
+    @Getter(onMethod = @__(@Override))
+    @Setter(onMethod = @__(@Override))
+    private ObjectAdapterLinkTo objectAdapterLinkTo;
+
+
 }
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
index 8fcbdb2..2c77631 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainObjectResourceServerside.java
@@ -46,10 +46,10 @@ import org.apache.isis.commons.internal.base._Bytes;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.resources._Resources;
 import org.apache.isis.commons.internal.url.UrlDecoderUtil;
-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.object.grid.GridFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecId;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
@@ -66,7 +66,6 @@ import org.apache.isis.viewer.restfulobjects.rendering.Responses;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberReprMode;
 import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
-//TODO deprecated non standard import org.apache.isis.viewer.restfulobjects.rendering.service.conneg.PrettyPrinting;
 import org.apache.isis.viewer.restfulobjects.rendering.util.Util;
 import org.apache.isis.viewer.restfulobjects.server.resources.serialization.SerializationStrategy;
 
@@ -106,9 +105,9 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
             throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.BAD_REQUEST, "Could not determine type of domain object to persist (no class with domainType Id of '%s')", domainType);
         }
 
-        final ObjectAdapter objectAdapter = getResourceContext().newTransientInstance(domainTypeSpec);
+        final ManagedObject adapter = getResourceContext().newTransientInstance(domainTypeSpec);
 
-        final ObjectAdapterUpdateHelper updateHelper = new ObjectAdapterUpdateHelper(getResourceContext(), objectAdapter);
+        final ObjectAdapterUpdateHelper updateHelper = new ObjectAdapterUpdateHelper(getResourceContext(), adapter);
 
         final JsonRepresentation membersMap = objectRepr.getMap("members");
         if (membersMap == null) {
@@ -119,13 +118,15 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
             throw RestfulObjectsApplicationException.createWithBody(HttpStatusCode.BAD_REQUEST, objectRepr, "Illegal property value");
         }
 
-        final Consent validity = objectAdapter.getSpecification().isValid(objectAdapter, InteractionInitiatedBy.USER);
+        final Consent validity = adapter.getSpecification().isValid(adapter, InteractionInitiatedBy.USER);
         if (validity.isVetoed()) {
             throw RestfulObjectsApplicationException.createWithBody(HttpStatusCode.BAD_REQUEST, objectRepr, validity.getReason());
         }
-        getResourceContext().makePersistentInTransaction(objectAdapter);
+        
+        ManagedObject._makePersistentInTransaction(adapter);
+        
 
-        return newDomainResourceHelper(objectAdapter).objectRepresentation();
+        return newDomainResourceHelper(adapter).objectRepresentation();
     }
 
 
@@ -141,11 +142,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR,
         MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT, RestfulMediaType.APPLICATION_XML_ERROR
     })
-    //TODO deprecated non standard @PrettyPrinting
     public Response object(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId) {
         init(RepresentationType.DOMAIN_OBJECT, Where.OBJECT_FORMS, RepresentationService.Intent.ALREADY_PERSISTENT);
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
 
         return newDomainResourceHelper(objectAdapter).objectRepresentation();
     }
@@ -159,7 +159,6 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT, RestfulMediaType.APPLICATION_JSON_ERROR,
         MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT, RestfulMediaType.APPLICATION_XML_ERROR
     })
-    //TODO deprecated non standard @PrettyPrinting
     public Response object(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, final InputStream object) {
 
         init(RepresentationType.DOMAIN_OBJECT, Where.OBJECT_FORMS, RepresentationService.Intent.ALREADY_PERSISTENT);
@@ -170,7 +169,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
             throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.BAD_REQUEST, "Body is not a map; got %s", argRepr);
         }
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final ObjectAdapterUpdateHelper updateHelper = new ObjectAdapterUpdateHelper(getResourceContext(), objectAdapter);
 
         if (!updateHelper.copyOverProperties(argRepr, ObjectAdapterUpdateHelper.Intent.UPDATE_EXISTING)) {
@@ -270,7 +269,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
         init(RepresentationType.OBJECT_LAYOUT, Where.ANYWHERE, RepresentationService.Intent.NOT_APPLICABLE);
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final ObjectSpecification objectSpec = objectAdapter.getSpecification();
         final String iconName = objectSpec.getIconName(objectAdapter);
         final Class<?> correspondingClass = objectSpec.getCorrespondingClass();
@@ -289,7 +288,6 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_LAYOUT_BS3,
         MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_LAYOUT_BS3
     })
-    //TODO deprecated non standard  @PrettyPrinting
     public Response layout(
             @PathParam("domainType")
             final String domainType,
@@ -311,7 +309,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         if(gridFacet == null) {
             builder = Responses.ofNotFound();
         } else {
-            final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+            final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
             Grid grid = gridFacet.getGrid(objectAdapter);
             addLinks(domainType, instanceId, grid);
             builder = Response.status(Response.Status.OK)
@@ -389,11 +387,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_JSON_ERROR,
         MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_PROPERTY, RestfulMediaType.APPLICATION_XML_ERROR
     })
-    //TODO deprecated non standard @PrettyPrinting
     public Response propertyDetails(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("propertyId") final String propertyId) {
         init(RepresentationType.OBJECT_PROPERTY, Where.OBJECT_FORMS, RepresentationService.Intent.NOT_APPLICABLE);
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final DomainResourceHelper helper = newDomainResourceHelper(objectAdapter);
 
         return helper.propertyDetails(
@@ -415,7 +412,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
         setCommandExecutor(Command.Executor.USER);
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final DomainResourceHelper helper = newDomainResourceHelper(objectAdapter);
         final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(getResourceContext(), objectAdapter);
 
@@ -425,7 +422,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         final ObjectSpecification propertySpec = property.getSpecification();
         final String bodyAsString = Util.asStringUtf8(body);
 
-        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), propertySpec).parseAsMapWithSingleValue(
+        final ManagedObject argAdapter = new JsonParserHelper(getResourceContext(), propertySpec).parseAsMapWithSingleValue(
                 bodyAsString);
 
         final Consent consent = property.isAssociationValid(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
@@ -454,7 +451,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
         setCommandExecutor(Command.Executor.USER);
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final DomainResourceHelper helper = newDomainResourceHelper(objectAdapter);
         final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(getResourceContext(), objectAdapter);
 
@@ -491,11 +488,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_JSON_ERROR,
         MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_COLLECTION, RestfulMediaType.APPLICATION_XML_ERROR
     })
-    // TODO deprecated non standard  @PrettyPrinting
     public Response accessCollection(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId) {
         init(RepresentationType.OBJECT_COLLECTION, Where.PARENTED_TABLES, RepresentationService.Intent.NOT_APPLICABLE);
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
 
         return newDomainResourceHelper(objectAdapter).collectionDetails(collectionId, MemberReprMode.READ);
     }
@@ -511,7 +507,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
     public Response addToSet(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId, final InputStream body) {
         init(Where.PARENTED_TABLES, RepresentationService.Intent.NOT_APPLICABLE);
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final DomainResourceHelper helper = newDomainResourceHelper(objectAdapter);
         final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(getResourceContext(), objectAdapter);
 
@@ -524,7 +520,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
         final ObjectSpecification collectionSpec = collection.getSpecification();
         final String bodyAsString = Util.asStringUtf8(body);
-        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(
+        final ManagedObject argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(
                 bodyAsString);
 
         final Consent consent = collection.isValidToAdd(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
@@ -548,7 +544,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
     public Response addToList(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId, final InputStream body) {
         init(Where.PARENTED_TABLES, RepresentationService.Intent.NOT_APPLICABLE);
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final DomainResourceHelper helper = newDomainResourceHelper(objectAdapter);
         final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(getResourceContext(), objectAdapter);
 
@@ -561,7 +557,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
         final ObjectSpecification collectionSpec = collection.getSpecification();
         final String bodyAsString = Util.asStringUtf8(body);
-        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(
+        final ManagedObject argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(
                 bodyAsString);
 
         final Consent consent = collection.isValidToAdd(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
@@ -585,7 +581,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
     public Response removeFromCollection(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("collectionId") final String collectionId) {
         init(Where.PARENTED_TABLES, RepresentationService.Intent.NOT_APPLICABLE);
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final DomainResourceHelper helper = newDomainResourceHelper(objectAdapter);
         final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(getResourceContext(), objectAdapter);
 
@@ -593,7 +589,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
                 collectionId, ObjectAdapterAccessHelper.Intent.MUTATE);
 
         final ObjectSpecification collectionSpec = collection.getSpecification();
-        final ObjectAdapter argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(
+        final ManagedObject argAdapter = new JsonParserHelper(getResourceContext(), collectionSpec).parseAsMapWithSingleValue(
                 getResourceContext().getUrlUnencodedQueryString());
 
         final Consent consent = collection.isValidToRemove(objectAdapter, argAdapter, InteractionInitiatedBy.USER);
@@ -618,11 +614,10 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_OBJECT_ACTION, RestfulMediaType.APPLICATION_JSON_ERROR,
         MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_OBJECT_ACTION, RestfulMediaType.APPLICATION_XML_ERROR
     })
-    //TODO deprecated non standard @PrettyPrinting
     public Response actionPrompt(@PathParam("domainType") String domainType, @PathParam("instanceId") final String instanceId, @PathParam("actionId") final String actionId) {
         init(RepresentationType.OBJECT_ACTION, Where.OBJECT_FORMS, RepresentationService.Intent.NOT_APPLICABLE);
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final DomainResourceHelper helper = newDomainResourceHelper(objectAdapter);
 
         return helper.actionPrompt(actionId);
@@ -655,7 +650,6 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR,
         MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_ACTION_RESULT, RestfulMediaType.APPLICATION_XML_ERROR
     })
-    //TODO deprecated non standard @PrettyPrinting
     public Response invokeActionQueryOnly(
             final @PathParam("domainType") String domainType,
             final @PathParam("instanceId") String instanceId,
@@ -670,7 +664,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
         final JsonRepresentation arguments = getResourceContext().getQueryStringAsJsonRepr();
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final DomainResourceHelper helper = newDomainResourceHelper(objectAdapter);
 
         return helper.invokeActionQueryOnly(actionId, arguments);
@@ -684,7 +678,6 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR,
         MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_ACTION_RESULT, RestfulMediaType.APPLICATION_XML_ERROR
     })
-    //TODO deprecated non standard @PrettyPrinting
     public Response invokeActionIdempotent(
             final @PathParam("domainType") String domainType,
             final @PathParam("instanceId") String instanceId,
@@ -697,7 +690,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
         final JsonRepresentation arguments = getResourceContext().getQueryStringAsJsonRepr();
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final DomainResourceHelper helper = newDomainResourceHelper(objectAdapter);
 
         return helper.invokeActionIdempotent(actionId, arguments);
@@ -711,7 +704,6 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
         MediaType.APPLICATION_JSON, RestfulMediaType.APPLICATION_JSON_ACTION_RESULT, RestfulMediaType.APPLICATION_JSON_ERROR,
         MediaType.APPLICATION_XML, RestfulMediaType.APPLICATION_XML_ACTION_RESULT, RestfulMediaType.APPLICATION_XML_ERROR
     })
-    //TODO deprecated non standard @PrettyPrinting
     public Response invokeAction(
             @PathParam("domainType") String domainType,
             @PathParam("instanceId") final String instanceId,
@@ -724,7 +716,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
 
         final JsonRepresentation arguments = getResourceContext().getQueryStringAsJsonRepr();
 
-        final ObjectAdapter objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
+        final ManagedObject objectAdapter = getObjectAdapterElseThrowNotFound(domainType, instanceId);
         final DomainResourceHelper helper = newDomainResourceHelper(objectAdapter);
 
         return helper.invokeAction(actionId, arguments);
@@ -736,7 +728,7 @@ public class DomainObjectResourceServerside extends ResourceAbstract implements
     }
 
 
-    private DomainResourceHelper newDomainResourceHelper(final ObjectAdapter objectAdapter) {
+    private DomainResourceHelper newDomainResourceHelper(final ManagedObject objectAdapter) {
         return new DomainResourceHelper(getResourceContext(), objectAdapter);
     }
 
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
index 3f621ed..d1c0850 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
@@ -20,34 +20,18 @@ package org.apache.isis.viewer.restfulobjects.server.resources;
 
 import java.util.List;
 
-import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import org.apache.isis.applib.annotation.SemanticsOf;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.xactn.TransactionService;
-import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.metamodel.MetaModelContext;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.metamodel.adapter.oid.Oid;
-import org.apache.isis.metamodel.adapter.oid.RootOid;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.metamodel.services.homepage.HomePageAction;
 import org.apache.isis.metamodel.spec.ManagedObject;
-import org.apache.isis.metamodel.spec.ManagedObjectState;
-import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.isis.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.runtime.memento.Data;
-import org.apache.isis.runtime.persistence.FixturesInstalledState;
-import org.apache.isis.security.authentication.AuthenticationSession;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ActionResultReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainObjectLinkTo;
@@ -60,195 +44,194 @@ import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndPr
 import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
 import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
 
-import lombok.Getter;
-
 class DomainResourceHelper {
 
-    static class RepresentationServiceContextAdapter implements RepresentationService.Context {
-
-        private final RendererContext rendererContext;
-        @Getter private final ObjectAdapterLinkTo adapterLinkTo;
-        @Getter private RepresentationService.Intent intent;
-
-        RepresentationServiceContextAdapter(
-                final RendererContext rendererContext,
-                final ObjectAdapterLinkTo adapterLinkTo) {
-            this.rendererContext = rendererContext;
-            this.adapterLinkTo = adapterLinkTo;
-            this.intent = rendererContext.getIntent();
-        }
-
-        @Override
-        public String urlFor(String url) {
-            return rendererContext.urlFor(url);
-        }
-
-        @Override
-        public AuthenticationSession getAuthenticationSession() {
-            return rendererContext.getAuthenticationSession();
-        }
-
-        @Override
-        public IsisConfiguration getConfiguration() {
-            return rendererContext.getConfiguration();
-        }
-
-        @Override
-        public Where getWhere() {
-            return rendererContext.getWhere();
-        }
-
-        @Override
-        public List<List<String>> getFollowLinks() {
-            return rendererContext.getFollowLinks();
-        }
-
-        @Override
-        public boolean isValidateOnly() {
-            return rendererContext.isValidateOnly();
-        }
-
-        @Override
-        public List<MediaType> getAcceptableMediaTypes() {
-            return rendererContext.getAcceptableMediaTypes();
-        }
-
-        @Override
-        public boolean canEagerlyRender(ObjectAdapter objectAdapter) {
-            return rendererContext.canEagerlyRender(objectAdapter);
-        }
-
-        @Override
-        public boolean honorUiHints() {
-            return rendererContext.honorUiHints();
-        }
-
-        @Override
-        public boolean objectPropertyValuesOnly() {
-            return rendererContext.objectPropertyValuesOnly();
-        }
-
-        @Override
-        public boolean suppressDescribedByLinks() {
-            return rendererContext.suppressDescribedByLinks();
-        }
-
-        @Override
-        public boolean suppressUpdateLink() {
-            return rendererContext.suppressUpdateLink();
-        }
-
-        @Override
-        public boolean suppressMemberId() {
-            return rendererContext.suppressMemberId();
-        }
-
-        @Override
-        public boolean suppressMemberLinks() {
-            return rendererContext.suppressMemberLinks();
-        }
-
-        @Override
-        public boolean suppressMemberExtensions() {
-            return rendererContext.suppressMemberExtensions();
-        }
-
-        @Override
-        public boolean suppressMemberDisabledReason() {
-            return rendererContext.suppressMemberDisabledReason();
-        }
-
-        @Override
-        public InteractionInitiatedBy getInteractionInitiatedBy() {
-            return rendererContext.getInteractionInitiatedBy();
-        }
-
-        @Override
-        public SpecificationLoader getSpecificationLoader() {
-            return rendererContext.getSpecificationLoader();
-        }
-
-        @Override
-        public ServiceInjector getServiceInjector() {
-            return rendererContext.getServiceInjector();
-        }
-
-        @Override
-        public ServiceRegistry getServiceRegistry() {
-            return rendererContext.getServiceRegistry();
-        }
-
-        @Override
-        public ObjectAdapter adapterOfPojo(Object pojo) {
-            return rendererContext.adapterOfPojo(pojo);
-        }
-
-        @Override
-        public ObjectAdapter adapterOfMemento(ObjectSpecification spec, Oid oid, Data data) {
-            return rendererContext.adapterOfMemento(spec, oid, data);
-        }
-
-        @Override
-        public ObjectAdapter newTransientInstance(ObjectSpecification domainTypeSpec) {
-            return rendererContext.newTransientInstance(domainTypeSpec);
-        }
-
-        @Override
-        public void makePersistentInTransaction(ObjectAdapter objectAdapter) {
-            rendererContext.makePersistentInTransaction(objectAdapter);
-        }
-
-        @Override
-        public Object fetchPersistentPojoInTransaction(RootOid rootOid) {
-            return rendererContext.fetchPersistentPojoInTransaction(rootOid);
-        }
-
-        @Override
-        public ManagedObjectState stateOf(Object domainObject) {
-            return rendererContext.stateOf(domainObject);
-        }
-
-        @Override
-        public void logoutAuthenticationSession() {
-            rendererContext.logoutAuthenticationSession();
-        }
-
-        @Override
-        public HomePageAction getHomePageAction() {
-            return rendererContext.getHomePageAction();
-        }
-
-        @Override
-        public FixturesInstalledState getFixturesInstalledState() {
-            return rendererContext.getFixturesInstalledState();
-        }
-
-        @Override
-        public MetaModelContext getMetaModelContext() {
-            return rendererContext.getMetaModelContext();
-        }
-
-
-    }
-
-    private final RepresentationServiceContextAdapter representationServiceContext;
+//    static class RepresentationServiceContextAdapter implements resourceContext {
+//
+//        private final resourceContext resourceContext;
+//        @Getter private final ObjectAdapterLinkTo adapterLinkTo;
+//        @Getter private RepresentationService.Intent intent;
+//
+//        RepresentationServiceContextAdapter(
+//                final resourceContext resourceContext,
+//                final ObjectAdapterLinkTo adapterLinkTo) {
+//            
+//            this.resourceContext = resourceContext;
+//            this.adapterLinkTo = adapterLinkTo;
+//            this.intent = resourceContext.getIntent();
+//        }
+//
+//        @Override
+//        public String urlFor(String url) {
+//            return resourceContext.urlFor(url);
+//        }
+//
+//        @Override
+//        public AuthenticationSession getAuthenticationSession() {
+//            return resourceContext.getAuthenticationSession();
+//        }
+//
+//        @Override
+//        public IsisConfiguration getConfiguration() {
+//            return resourceContext.getConfiguration();
+//        }
+//
+//        @Override
+//        public Where getWhere() {
+//            return resourceContext.getWhere();
+//        }
+//
+//        @Override
+//        public List<List<String>> getFollowLinks() {
+//            return resourceContext.getFollowLinks();
+//        }
+//
+//        @Override
+//        public boolean isValidateOnly() {
+//            return resourceContext.isValidateOnly();
+//        }
+//
+//        @Override
+//        public List<MediaType> getAcceptableMediaTypes() {
+//            return resourceContext.getAcceptableMediaTypes();
+//        }
+//
+//        @Override
+//        public boolean canEagerlyRender(ManagedObject objectAdapter) {
+//            return resourceContext.canEagerlyRender(objectAdapter);
+//        }
+//
+//        @Override
+//        public boolean honorUiHints() {
+//            return resourceContext.honorUiHints();
+//        }
+//
+//        @Override
+//        public boolean objectPropertyValuesOnly() {
+//            return resourceContext.objectPropertyValuesOnly();
+//        }
+//
+//        @Override
+//        public boolean suppressDescribedByLinks() {
+//            return resourceContext.suppressDescribedByLinks();
+//        }
+//
+//        @Override
+//        public boolean suppressUpdateLink() {
+//            return resourceContext.suppressUpdateLink();
+//        }
+//
+//        @Override
+//        public boolean suppressMemberId() {
+//            return resourceContext.suppressMemberId();
+//        }
+//
+//        @Override
+//        public boolean suppressMemberLinks() {
+//            return resourceContext.suppressMemberLinks();
+//        }
+//
+//        @Override
+//        public boolean suppressMemberExtensions() {
+//            return resourceContext.suppressMemberExtensions();
+//        }
+//
+//        @Override
+//        public boolean suppressMemberDisabledReason() {
+//            return resourceContext.suppressMemberDisabledReason();
+//        }
+//
+//        @Override
+//        public InteractionInitiatedBy getInteractionInitiatedBy() {
+//            return resourceContext.getInteractionInitiatedBy();
+//        }
+//
+//        @Override
+//        public SpecificationLoader getSpecificationLoader() {
+//            return resourceContext.getSpecificationLoader();
+//        }
+//
+//        @Override
+//        public ServiceInjector getServiceInjector() {
+//            return resourceContext.getServiceInjector();
+//        }
+//
+//        @Override
+//        public ServiceRegistry getServiceRegistry() {
+//            return resourceContext.getServiceRegistry();
+//        }
+//
+//        @Override
+//        public ManagedObject adapterOfPojo(Object pojo) {
+//            return resourceContext.adapterOfPojo(pojo);
+//        }
+//
+//        @Override
+//        public ManagedObject adapterOfMemento(ObjectSpecification spec, Oid oid, Data data) {
+//            return resourceContext.adapterOfMemento(spec, oid, data);
+//        }
+//
+//        @Override
+//        public ManagedObject newTransientInstance(ObjectSpecification domainTypeSpec) {
+//            return resourceContext.newTransientInstance(domainTypeSpec);
+//        }
+//
+//        @Override
+//        public void makePersistentInTransaction(ManagedObject objectAdapter) {
+//            resourceContext.makePersistentInTransaction(objectAdapter);
+//        }
+//
+//        @Override
+//        public Object fetchPersistentPojoInTransaction(RootOid rootOid) {
+//            return resourceContext.fetchPersistentPojoInTransaction(rootOid);
+//        }
+//
+//        @Override
+//        public ManagedObjectState stateOf(Object domainObject) {
+//            return resourceContext.stateOf(domainObject);
+//        }
+//
+//        @Override
+//        public void logoutAuthenticationSession() {
+//            resourceContext.logoutAuthenticationSession();
+//        }
+//
+//        @Override
+//        public HomePageAction getHomePageAction() {
+//            return resourceContext.getHomePageAction();
+//        }
+//
+//        @Override
+//        public FixturesInstalledState getFixturesInstalledState() {
+//            return resourceContext.getFixturesInstalledState();
+//        }
+//
+//        @Override
+//        public MetaModelContext getMetaModelContext() {
+//            return resourceContext.getMetaModelContext();
+//        }
+//
+//
+//    }
+
+    private final IResourceContext resourceContext;
     private final RepresentationService representationService;
     private final TransactionService transactionService;
 
-    public DomainResourceHelper(final ResourceContext resourceContext, final ObjectAdapter objectAdapter) {
+    public DomainResourceHelper(final ResourceContext resourceContext, final ManagedObject objectAdapter) {
         this(resourceContext, objectAdapter, new DomainObjectLinkTo());
     }
 
     public DomainResourceHelper(
-            final ResourceContext resourceContext,
-            final ObjectAdapter objectAdapter,
+            final IResourceContext resourceContext,
+            final ManagedObject objectAdapter,
             final ObjectAdapterLinkTo adapterLinkTo) {
 
+        resourceContext.setObjectAdapterLinkTo(adapterLinkTo);
+        
         this.resourceContext = resourceContext;
         this.objectAdapter = objectAdapter;
 
-        representationServiceContext = new RepresentationServiceContextAdapter(resourceContext, adapterLinkTo);
-
         adapterLinkTo.usingUrlBase(this.resourceContext)
         .with(this.objectAdapter);
 
@@ -256,8 +239,7 @@ class DomainResourceHelper {
         transactionService = lookupService(TransactionService.class);
     }
 
-    private final ResourceContext resourceContext;
-    private final ObjectAdapter objectAdapter;
+    private final ManagedObject objectAdapter;
 
 
     // //////////////////////////////////////
@@ -271,7 +253,7 @@ class DomainResourceHelper {
     public Response objectRepresentation() {
         transactionService.flushTransaction();
         return representationService
-                .objectRepresentation(representationServiceContext, objectAdapter);
+                .objectRepresentation(resourceContext, objectAdapter);
     }
 
     /**
@@ -283,12 +265,12 @@ class DomainResourceHelper {
             final String propertyId,
             final MemberReprMode memberMode) {
 
-        ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+        ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
 
         final OneToOneAssociation property = accessHelper.getPropertyThatIsVisibleForIntent(propertyId, ObjectAdapterAccessHelper.Intent.ACCESS);
 
         transactionService.flushTransaction();
-        return representationService.propertyDetails(representationServiceContext, new ObjectAndProperty2(objectAdapter, property, memberMode), memberMode);
+        return representationService.propertyDetails(resourceContext, new ObjectAndProperty2(objectAdapter, property, memberMode), memberMode);
     }
 
 
@@ -301,12 +283,12 @@ class DomainResourceHelper {
             final String collectionId,
             final MemberReprMode memberMode) {
 
-        ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+        ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
 
         final OneToManyAssociation collection = accessHelper.getCollectionThatIsVisibleForIntent(collectionId, ObjectAdapterAccessHelper.Intent.ACCESS);
 
         transactionService.flushTransaction();
-        return representationService.collectionDetails(representationServiceContext, new ObjectAndCollection2(objectAdapter, collection, memberMode), memberMode);
+        return representationService.collectionDetails(resourceContext, new ObjectAndCollection2(objectAdapter, collection, memberMode), memberMode);
     }
 
 
@@ -317,12 +299,12 @@ class DomainResourceHelper {
      */
     public Response actionPrompt(final String actionId) {
 
-        ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+        ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
 
         final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.ACCESS);
 
         transactionService.flushTransaction();
-        return representationService.actionPrompt(representationServiceContext, new ObjectAndAction(objectAdapter, action));
+        return representationService.actionPrompt(resourceContext, new ObjectAndAction(objectAdapter, action));
     }
 
     /**
@@ -337,7 +319,7 @@ class DomainResourceHelper {
      */
     public Response invokeActionQueryOnly(final String actionId, final JsonRepresentation arguments) {
 
-        final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+        final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
 
         final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.MUTATE);
 
@@ -361,7 +343,7 @@ class DomainResourceHelper {
      */
     public Response invokeActionIdempotent(final String actionId, final JsonRepresentation arguments) {
 
-        final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+        final ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
 
         final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.MUTATE);
 
@@ -379,7 +361,7 @@ class DomainResourceHelper {
      */
     public Response invokeAction(final String actionId, final JsonRepresentation arguments) {
 
-        ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(representationServiceContext, objectAdapter);
+        ObjectAdapterAccessHelper accessHelper = new ObjectAdapterAccessHelper(resourceContext, objectAdapter);
 
         final ObjectAction action = accessHelper.getObjectActionThatIsVisibleForIntent(actionId, ObjectAdapterAccessHelper.Intent.MUTATE);
 
@@ -392,32 +374,31 @@ class DomainResourceHelper {
             final JsonRepresentation arguments,
             final ActionResultReprRenderer.SelfLink selfLink) {
 
-        final RepresentationService.Context rendererContext = representationServiceContext;
-        final ObjectAdapter objectAdapter = this.objectAdapter;
+        final ManagedObject objectAdapter = this.objectAdapter;
 
-        final ObjectActionArgHelper argHelper = new ObjectActionArgHelper(rendererContext, objectAdapter, action);
+        final ObjectActionArgHelper argHelper = new ObjectActionArgHelper(resourceContext, objectAdapter, action);
 
-        final List<ObjectAdapter> argAdapters = argHelper.parseAndValidateArguments(arguments);
+        final List<ManagedObject> argAdapters = argHelper.parseAndValidateArguments(arguments);
 
-        if(rendererContext.isValidateOnly()) {
+        if(resourceContext.isValidateOnly()) {
             // nothing more to do.
             // if there had been a validation error, then an exception would have been thrown above.
             return Response.noContent().build();
         }
 
         // invoke
-        final ObjectAdapter mixedInAdapter = null; // action will automatically fill in if a mixin
-        final ObjectAdapter[] argAdapterArr = argAdapters.toArray(new ObjectAdapter[argAdapters.size()]);
-        final ObjectAdapter returnedAdapter = ManagedObject.promote(action.execute(
+        final ManagedObject mixedInAdapter = null; // action will automatically fill in if a mixin
+        final ManagedObject[] argAdapterArr = argAdapters.toArray(new ManagedObject[argAdapters.size()]);
+        final ManagedObject returnedAdapter = action.execute(
                 objectAdapter,  mixedInAdapter, argAdapterArr,
-                InteractionInitiatedBy.USER));
+                InteractionInitiatedBy.USER);
 
         final ObjectAndActionInvocation objectAndActionInvocation =
                 new ObjectAndActionInvocation(objectAdapter, action, arguments, argAdapters, returnedAdapter, selfLink);
 
         // response
         transactionService.flushTransaction();
-        return representationService.actionResult(representationServiceContext, objectAndActionInvocation, selfLink);
+        return representationService.actionResult(resourceContext, objectAndActionInvocation, selfLink);
     }
 
 
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
index 55d4232..d2a84b7 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServiceResourceServerside.java
@@ -36,8 +36,8 @@ import javax.ws.rs.core.Response;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.commons.internal.url.UrlDecoderUtil;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facets.object.domainservice.DomainServiceFacet;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
@@ -56,7 +56,7 @@ import lombok.val;
 @Path("/services")
 public class DomainServiceResourceServerside extends ResourceAbstract implements DomainServiceResource {
 
-    private final static Predicate<ObjectAdapter> NATURE_REST_ALSO = (final ObjectAdapter input) -> {
+    private final static Predicate<ManagedObject> NATURE_REST_ALSO = (final ManagedObject input) -> {
         final ObjectSpecification specification = input.getSpecification();
         final DomainServiceFacet facet = specification.getFacet(DomainServiceFacet.class);
         if (facet == null) {
@@ -76,7 +76,7 @@ public class DomainServiceResourceServerside extends ResourceAbstract implements
 
         val metaModelContext = super.getResourceContext().getMetaModelContext();
 
-        final Stream<ObjectAdapter> serviceAdapters = metaModelContext.streamServiceAdapters()
+        final Stream<ManagedObject> serviceAdapters = metaModelContext.streamServiceAdapters2()
                 .filter(NATURE_REST_ALSO);
 
         final DomainServicesListReprRenderer renderer = new DomainServicesListReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
@@ -116,7 +116,7 @@ public class DomainServiceResourceServerside extends ResourceAbstract implements
     public Response service(@PathParam("serviceId") final String serviceId) {
         init(RepresentationType.DOMAIN_OBJECT, Where.OBJECT_FORMS, RepresentationService.Intent.ALREADY_PERSISTENT);
 
-        final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
+        final ManagedObject serviceAdapter = getServiceAdapter(serviceId);
 
         final DomainObjectReprRenderer renderer = new DomainObjectReprRenderer(getResourceContext(), null, JsonRepresentation.newMap());
         renderer.usingLinkToBuilder(new DomainServiceLinkTo())
@@ -156,7 +156,7 @@ public class DomainServiceResourceServerside extends ResourceAbstract implements
     public Response actionPrompt(@PathParam("serviceId") final String serviceId, @PathParam("actionId") final String actionId) {
         init(RepresentationType.OBJECT_ACTION, Where.OBJECT_FORMS, RepresentationService.Intent.ALREADY_PERSISTENT);
 
-        final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
+        final ManagedObject serviceAdapter = getServiceAdapter(serviceId);
         final DomainResourceHelper helper = newDomainResourceHelper(serviceAdapter);
 
         return helper.actionPrompt(actionId);
@@ -201,7 +201,7 @@ public class DomainServiceResourceServerside extends ResourceAbstract implements
 
         final JsonRepresentation arguments = getResourceContext().getQueryStringAsJsonRepr();
 
-        final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
+        final ManagedObject serviceAdapter = getServiceAdapter(serviceId);
         final DomainResourceHelper helper = newDomainResourceHelper(serviceAdapter);
 
         return helper.invokeActionQueryOnly(actionId, arguments);
@@ -226,7 +226,7 @@ public class DomainServiceResourceServerside extends ResourceAbstract implements
 
         final JsonRepresentation arguments = getResourceContext().getQueryStringAsJsonRepr();
 
-        final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
+        final ManagedObject serviceAdapter = getServiceAdapter(serviceId);
         final DomainResourceHelper helper = newDomainResourceHelper(serviceAdapter);
 
         return helper.invokeActionIdempotent(actionId, arguments);
@@ -247,7 +247,7 @@ public class DomainServiceResourceServerside extends ResourceAbstract implements
 
         final JsonRepresentation arguments = getResourceContext().getQueryStringAsJsonRepr();
 
-        final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
+        final ManagedObject serviceAdapter = getServiceAdapter(serviceId);
         final DomainResourceHelper helper = newDomainResourceHelper(serviceAdapter);
 
         return helper.invokeAction(actionId, arguments);
@@ -258,7 +258,7 @@ public class DomainServiceResourceServerside extends ResourceAbstract implements
         throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.METHOD_NOT_ALLOWED, "Deleting an action invocation resource is not allowed.");
     }
 
-    private DomainResourceHelper newDomainResourceHelper(final ObjectAdapter serviceAdapter) {
+    private DomainResourceHelper newDomainResourceHelper(final ManagedObject serviceAdapter) {
         return new DomainResourceHelper(getResourceContext(), serviceAdapter, new DomainServiceLinkTo());
     }
 
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServicesListReprRenderer.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServicesListReprRenderer.java
index a2c474d..8a055b4 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServicesListReprRenderer.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainServicesListReprRenderer.java
@@ -23,12 +23,12 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ListReprRenderer;
 
 public class DomainServicesListReprRenderer extends ListReprRenderer {
 
-    public DomainServicesListReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    public DomainServicesListReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, representation);
     }
 
@@ -46,11 +46,11 @@ public class DomainServicesListReprRenderer extends ListReprRenderer {
 
 
     private void addLinkToSelf() {
-        final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.SELF.getName(), RepresentationType.LIST, "services").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(getResourceContext(), Rel.SELF.getName(), RepresentationType.LIST, "services").build();
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final DomainServicesListReprRenderer renderer = new DomainServicesListReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+            final DomainServicesListReprRenderer renderer = new DomainServicesListReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
             renderer.with(streamServiceAdapters());
             link.mapPut("value", renderer.render());
         }
@@ -59,11 +59,11 @@ public class DomainServicesListReprRenderer extends ListReprRenderer {
     }
 
     private void addLinkToUp() {
-        final JsonRepresentation link = LinkBuilder.newBuilder(rendererContext, Rel.UP.getName(), RepresentationType.HOME_PAGE, "").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(resourceContext, Rel.UP.getName(), RepresentationType.HOME_PAGE, "").build();
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final HomePageReprRenderer renderer = new HomePageReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+            final HomePageReprRenderer renderer = new HomePageReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
             link.mapPut("value", renderer.render());
         }
         getLinks().arrayAdd(link);
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HealthReprRenderer.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HealthReprRenderer.java
index f707560..7af317a 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HealthReprRenderer.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HealthReprRenderer.java
@@ -22,13 +22,13 @@ import org.apache.isis.applib.services.health.Health;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 
 public class HealthReprRenderer extends ReprRendererAbstract<HealthReprRenderer, Health> {
 
     HealthReprRenderer(
-            final RendererContext resourceContext,
+            final IResourceContext resourceContext,
             final LinkFollowSpecs linkFollower,
             final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.HEALTH, representation);
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageReprRenderer.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageReprRenderer.java
index 75b3f38..1e5bec5 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageReprRenderer.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/HomePageReprRenderer.java
@@ -21,7 +21,7 @@ package org.apache.isis.viewer.restfulobjects.server.resources;
 import java.util.Collection;
 import java.util.stream.Stream;
 
-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.security.authentication.AuthenticationSession;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
@@ -29,18 +29,17 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.DomainServiceLinkTo;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ListReprRenderer;
 import org.apache.isis.viewer.restfulobjects.rendering.domaintypes.TypeListReprRenderer;
-import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
 
 import lombok.val;
 
 public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRenderer, Void> {
 
-    HomePageReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    HomePageReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.HOME_PAGE, representation);
     }
 
@@ -57,13 +56,13 @@ public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRende
             addLinkToSelf();
         }
 
-        val metaModelContext = super.getRendererContext().getMetaModelContext();
+        val metaModelContext = super.getResourceContext().getMetaModelContext();
 
-        addLinkToUser(getRendererContext().getAuthenticationSession());
+        addLinkToUser(getResourceContext().getAuthenticationSession());
         addLinkToMenuBars();
-        addLinkToServices(metaModelContext.streamServiceAdapters());
+        addLinkToServices(metaModelContext.streamServiceAdapters2());
         addLinkToVersion();
-        addLinkToDomainTypes(((ResourceContext)getRendererContext()).getSpecificationLoader().snapshotSpecifications());
+        addLinkToDomainTypes(getResourceContext().getSpecificationLoader().snapshotSpecifications());
 
         // inks and extensions
         representation.mapPut("extensions", JsonRepresentation.newMap());
@@ -72,36 +71,36 @@ public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRende
     }
 
     private void addLinkToSelf() {
-        final JsonRepresentation link = LinkBuilder.newBuilder(rendererContext, Rel.SELF.getName(), RepresentationType.HOME_PAGE, "").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(resourceContext, Rel.SELF.getName(), RepresentationType.HOME_PAGE, "").build();
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final HomePageReprRenderer renderer = new HomePageReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+            final HomePageReprRenderer renderer = new HomePageReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
             link.mapPut("value", renderer.render());
         }
         getLinks().arrayAdd(link);
     }
 
     private void addLinkToVersion() {
-        final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.VERSION.getName(), RepresentationType.VERSION, "version").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(getResourceContext(), Rel.VERSION.getName(), RepresentationType.VERSION, "version").build();
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final VersionReprRenderer renderer = new VersionReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+            final VersionReprRenderer renderer = new VersionReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
             link.mapPut("value", renderer.render());
         }
 
         getLinks().arrayAdd(link);
     }
 
-    private void addLinkToServices(Stream<ObjectAdapter> serviceAdapters) {
+    private void addLinkToServices(Stream<ManagedObject> serviceAdapters) {
 
-        final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.SERVICES.getName(), RepresentationType.LIST, "services").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(getResourceContext(), Rel.SERVICES.getName(), RepresentationType.LIST, "services").build();
 
         final LinkFollowSpecs linkFollowSpecs = getLinkFollowSpecs().follow("links");
         if (linkFollowSpecs.matches(link)) {
 
-            final ListReprRenderer renderer = new ListReprRenderer(getRendererContext(), linkFollowSpecs, JsonRepresentation.newMap());
+            final ListReprRenderer renderer = new ListReprRenderer(getResourceContext(), linkFollowSpecs, JsonRepresentation.newMap());
             renderer.usingLinkToBuilder(new DomainServiceLinkTo()).withLink(Rel.SELF, "services").with(serviceAdapters);
 
             link.mapPut("value", renderer.render());
@@ -111,11 +110,11 @@ public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRende
     }
 
     private void addLinkToUser(AuthenticationSession authenticationSession) {
-        final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.USER.getName(), RepresentationType.USER, "user").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(getResourceContext(), Rel.USER.getName(), RepresentationType.USER, "user").build();
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final UserReprRenderer renderer = new UserReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+            final UserReprRenderer renderer = new UserReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
             renderer.with(authenticationSession);
             link.mapPut("value", renderer.render());
         }
@@ -125,17 +124,17 @@ public class HomePageReprRenderer extends ReprRendererAbstract<HomePageReprRende
 
     private void addLinkToMenuBars() {
         final JsonRepresentation link = LinkBuilder
-                .newBuilder(getRendererContext(), Rel.MENUBARS.getName(), RepresentationType.MENUBARS, "menuBars").build();
+                .newBuilder(getResourceContext(), Rel.MENUBARS.getName(), RepresentationType.MENUBARS, "menuBars").build();
         getLinks().arrayAdd(link);
     }
 
     private void addLinkToDomainTypes(final Collection<ObjectSpecification> specifications) {
 
-        final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.DOMAIN_TYPES.getName(), RepresentationType.TYPE_LIST, "domain-types").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(getResourceContext(), Rel.DOMAIN_TYPES.getName(), RepresentationType.TYPE_LIST, "domain-types").build();
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final TypeListReprRenderer renderer = new TypeListReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+            final TypeListReprRenderer renderer = new TypeListReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
             renderer.withLink(Rel.SELF, "domain-types").with(specifications);
             link.mapPut("value", renderer.render());
         }
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java
index 99e5545..a8500a4 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/JsonParserHelper.java
@@ -21,33 +21,33 @@ package org.apache.isis.viewer.restfulobjects.server.resources;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.Oid;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.JsonValueEncoder;
 import org.apache.isis.viewer.restfulobjects.rendering.util.Util;
 
 /**
  * Utility class that encapsulates the logic for parsing some content (JSON, or a simple string that is JSON)
- * into an{@link org.apache.isis.metamodel.adapter.ObjectAdapter} of a specified
+ * into an{@link ManagedObject} of a specified
  * {@link org.apache.isis.metamodel.spec.ObjectSpecification type}.
  */
 public class JsonParserHelper {
 
     private final static Pattern OBJECT_OID = Pattern.compile(".*objects\\/([^/]+)\\/(.+)");
 
-    private final RendererContext rendererContext;
+    private final IResourceContext resourceContext;
     private final ObjectSpecification objectSpec;
     private final JsonValueEncoder jsonValueEncoder;
 
-    public JsonParserHelper(RendererContext rendererContext, ObjectSpecification objectSpecification) {
+    public JsonParserHelper(IResourceContext resourceContext, ObjectSpecification objectSpecification) {
         this.objectSpec = objectSpecification;
-        this.rendererContext = rendererContext;
-        this.jsonValueEncoder = rendererContext.getServiceRegistry()
+        this.resourceContext = resourceContext;
+        this.jsonValueEncoder = resourceContext.getServiceRegistry()
                 .lookupServiceElseFail(JsonValueEncoder.class);
     }
 
@@ -57,12 +57,12 @@ public class JsonParserHelper {
      *            - as per {@link org.apache.isis.viewer.restfulobjects.rendering.util.Util#asStringUtf8(java.io.InputStream)}
      * @return
      */
-    ObjectAdapter parseAsMapWithSingleValue(final String bodyAsString) {
+    ManagedObject parseAsMapWithSingleValue(final String bodyAsString) {
         final JsonRepresentation arguments = Util.readAsMap(bodyAsString);
         return parseAsMapWithSingleValue(arguments);
     }
 
-    ObjectAdapter parseAsMapWithSingleValue(final JsonRepresentation arguments) {
+    ManagedObject parseAsMapWithSingleValue(final JsonRepresentation arguments) {
         final JsonRepresentation representation = arguments.getRepresentation("value");
         if (arguments.size() != 1 || representation == null) {
             throw RestfulObjectsApplicationException.createWithMessage(RestfulResponse.HttpStatusCode.BAD_REQUEST, "Body should be a map with a single key 'value' whose value represents an instance of type '%s'", resourceFor(objectSpec));
@@ -77,7 +77,7 @@ public class JsonParserHelper {
      *            - expected to be either a String or a Map (ie from within a
      *            List, built by parsing a JSON structure).
      */
-    ObjectAdapter objectAdapterFor(final JsonRepresentation argRepr) {
+    ManagedObject objectAdapterFor(final JsonRepresentation argRepr) {
 
         if (argRepr == null) {
             return null;
@@ -131,7 +131,7 @@ public class JsonParserHelper {
             throw new IllegalArgumentException(reason);
         }
 
-        final ObjectAdapter objectAdapter = rendererContext.getObjectAdapterElseNull(oidFromHref);
+        final ManagedObject objectAdapter = resourceContext.getObjectAdapterElseNull(oidFromHref);
         if (objectAdapter == null) {
             final String reason = "'href' does not reference a known entity";
             argRepr.mapPut("invalidReason", reason);
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java
index 1020753..795afc4 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectActionArgHelper.java
@@ -22,15 +22,15 @@ import java.util.List;
 import java.util.Map;
 
 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.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 
 /**
@@ -39,30 +39,30 @@ import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplication
  */
 public class ObjectActionArgHelper {
 
-    private final RendererContext rendererContext;
-    private final ObjectAdapter objectAdapter;
+    private final IResourceContext resourceContext;
+    private final ManagedObject objectAdapter;
     private final ObjectAction action;
 
     public ObjectActionArgHelper(
-            final RendererContext rendererContext,
-            final ObjectAdapter objectAdapter,
+            final IResourceContext resourceContext,
+            final ManagedObject objectAdapter,
             final ObjectAction action) {
-        this.rendererContext = rendererContext;
+        this.resourceContext = resourceContext;
         this.objectAdapter = objectAdapter;
         this.action = action;
     }
 
-    public List<ObjectAdapter> parseAndValidateArguments(final JsonRepresentation arguments) {
+    public List<ManagedObject> parseAndValidateArguments(final JsonRepresentation arguments) {
         final List<JsonRepresentation> argList = argListFor(action, arguments);
 
-        final List<ObjectAdapter> argAdapters = _Lists.newArrayList();
+        final List<ManagedObject> argAdapters = _Lists.newArrayList();
         final List<ObjectActionParameter> parameters = action.getParameters();
         boolean valid = true;
         for (int i = 0; i < argList.size(); i++) {
             final JsonRepresentation argRepr = argList.get(i);
             final ObjectSpecification paramSpec = parameters.get(i).getSpecification();
             try {
-                final ObjectAdapter argAdapter = new JsonParserHelper(rendererContext, paramSpec).objectAdapterFor(argRepr);
+                final ManagedObject argAdapter = new JsonParserHelper(resourceContext, paramSpec).objectAdapterFor(argRepr);
                 argAdapters.add(argAdapter);
 
                 // validate individual arg
@@ -80,7 +80,7 @@ public class ObjectActionArgHelper {
         }
 
         // validate entire argument set
-        final ObjectAdapter[] argArray = argAdapters.toArray(new ObjectAdapter[0]);
+        final ManagedObject[] argArray = argAdapters.toArray(new ManagedObject[0]);
         final Consent consent = action.isArgumentSetValid(objectAdapter, argArray, InteractionInitiatedBy.USER);
         if (consent.isVetoed()) {
             arguments.mapPut("x-ro-invalidReason", consent.getReason());
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java
index 1700fa2..525f5fd 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterAccessHelper.java
@@ -19,9 +19,9 @@
 package org.apache.isis.viewer.restfulobjects.server.resources;
 
 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.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
@@ -29,13 +29,13 @@ import org.apache.isis.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.MemberType;
 
 /**
  * Utility class that encapsulates the logic for checking access to the specified
- * {@link org.apache.isis.metamodel.adapter.ObjectAdapter object}'s members.
+ * {@link ManagedObject}'s members.
  */
 public class ObjectAdapterAccessHelper {
 
@@ -52,19 +52,19 @@ public class ObjectAdapterAccessHelper {
         }
     }
 
-    private final ObjectAdapter objectAdapter;
-    private final RendererContext rendererContext;
+    private final ManagedObject objectAdapter;
+    private final IResourceContext resourceContext;
 
-    public ObjectAdapterAccessHelper(RendererContext rendererContext, ObjectAdapter objectAdapter) {
+    public ObjectAdapterAccessHelper(IResourceContext resourceContext, ManagedObject objectAdapter) {
         this.objectAdapter = objectAdapter;
-        this.rendererContext = rendererContext;
+        this.resourceContext = resourceContext;
     }
 
     public OneToOneAssociation getPropertyThatIsVisibleForIntent(
             final String propertyId, final Intent intent) {
 
         //[ahuber] unused, any side-effects?
-        final Where where = rendererContext.getWhere();
+        final Where where = resourceContext.getWhere();
 
         final ObjectAssociation association;
         try {
@@ -87,7 +87,7 @@ public class ObjectAdapterAccessHelper {
             final String collectionId, final Intent intent) {
 
         //[ahuber] unused, any side-effects?
-        final Where where = rendererContext.getWhere();
+        final Where where = resourceContext.getWhere();
 
         final ObjectAssociation association;
         try {
@@ -108,7 +108,7 @@ public class ObjectAdapterAccessHelper {
             final String actionId, final Intent intent) {
 
         //[ahuber] unused, any side-effects?
-        final Where where = rendererContext.getWhere();
+        final Where where = resourceContext.getWhere();
 
         final ObjectAction action;
         try {
@@ -126,7 +126,7 @@ public class ObjectAdapterAccessHelper {
     public <T extends ObjectMember> T memberThatIsVisibleForIntent(
             final T objectMember, final MemberType memberType, final Intent intent) {
 
-        final Where where = rendererContext.getWhere();
+        final Where where = resourceContext.getWhere();
 
         final String memberId = objectMember.getId();
         final Consent visibilityConsent =
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java
index 94f0152..740fe66 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ObjectAdapterUpdateHelper.java
@@ -20,9 +20,9 @@ package org.apache.isis.viewer.restfulobjects.server.resources;
 
 import java.util.stream.Stream;
 
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.spec.ObjectSpecification;
 import org.apache.isis.metamodel.spec.feature.Contributed;
 import org.apache.isis.metamodel.spec.feature.ObjectAssociation;
@@ -32,7 +32,7 @@ import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
 
 /**
  * Utility class that encapsulates the logic for updating an
- * {@link org.apache.isis.metamodel.adapter.ObjectAdapter object}'s with the
+ * {@link ManagedObject}'s with the
  * values of a {@link org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation}.
  *
  * <p>
@@ -41,10 +41,10 @@ import org.apache.isis.viewer.restfulobjects.server.ResourceContext;
  */
 public class ObjectAdapterUpdateHelper {
 
-    private final ObjectAdapter objectAdapter;
+    private final ManagedObject objectAdapter;
     private final ResourceContext resourceContext;
 
-    public ObjectAdapterUpdateHelper(ResourceContext resourceContext, ObjectAdapter objectAdapter) {
+    public ObjectAdapterUpdateHelper(ResourceContext resourceContext, ManagedObject objectAdapter) {
         this.objectAdapter = objectAdapter;
         this.resourceContext = resourceContext;
     }
@@ -143,7 +143,7 @@ public class ObjectAdapterUpdateHelper {
 
             // ok, we have a value, and
             // (if validating) then the property is not invisible, and is not disabled
-            final ObjectAdapter valueAdapter;
+            final ManagedObject valueAdapter;
             try {
                 valueAdapter = new JsonParserHelper(resourceContext, propertySpec).objectAdapterFor(propertyRepr);
             } catch(IllegalArgumentException ex) {
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
index bb69664..f3f48d9 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/ResourceAbstract.java
@@ -34,8 +34,8 @@ import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.command.CommandContext;
 import org.apache.isis.commons.internal.url.UrlDecoderUtil;
 import org.apache.isis.metamodel.MetaModelContext;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.metamodel.spec.ManagedObject;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.runtime.system.context.IsisContext;
 import org.apache.isis.runtime.system.session.IsisSession;
@@ -123,8 +123,8 @@ public abstract class ResourceAbstract {
     // Isis integration
     // //////////////////////////////////////////////////////////////
 
-    protected ObjectAdapter getObjectAdapterElseThrowNotFound(String domainType, final String instanceId) {
-        ObjectAdapter objectAdapter = getObjectAdapterElseNull(domainType, instanceId);
+    protected ManagedObject getObjectAdapterElseThrowNotFound(String domainType, final String instanceId) {
+        ManagedObject objectAdapter = getObjectAdapterElseNull(domainType, instanceId);
 
         if (objectAdapter == null) {
             final String instanceIdUnencoded = org.apache.isis.viewer.restfulobjects.rendering.UrlDecoderUtils.urlDecode(instanceId);
@@ -134,16 +134,16 @@ public abstract class ResourceAbstract {
         return objectAdapter;
     }
 
-    protected ObjectAdapter getObjectAdapterElseNull(String domainType, final String instanceId) {
+    protected ManagedObject getObjectAdapterElseNull(String domainType, final String instanceId) {
         return resourceContext.getObjectAdapterElseNull(domainType, instanceId);
     }
 
-    protected ObjectAdapter getServiceAdapter(final String serviceId) {
+    protected ManagedObject getServiceAdapter(final String serviceId) {
 
         val metaModelContext = resourceContext.getServiceRegistry()
                 .lookupServiceElseFail(MetaModelContext.class);
 
-        final ObjectAdapter serviceAdapter = metaModelContext.lookupServiceAdapterById(serviceId);
+        final ManagedObject serviceAdapter = metaModelContext.lookupServiceAdapterById(serviceId);
         if(serviceAdapter==null) {
             throw RestfulObjectsApplicationException.createWithMessage(HttpStatusCode.NOT_FOUND, 
                     "Could not locate service '%s'", serviceId);    
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserReprRenderer.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserReprRenderer.java
index bb551cb..b4ba8d6 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserReprRenderer.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/UserReprRenderer.java
@@ -24,13 +24,13 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 
 public class UserReprRenderer extends ReprRendererAbstract<UserReprRenderer, AuthenticationSession> {
 
-    UserReprRenderer(final RendererContext rendererContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
-        super(rendererContext, linkFollower, RepresentationType.USER, representation);
+    UserReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+        super(resourceContext, linkFollower, RepresentationType.USER, representation);
     }
 
     @Override
@@ -57,12 +57,12 @@ public class UserReprRenderer extends ReprRendererAbstract<UserReprRenderer, Aut
     }
 
     private void addLinkToSelf() {
-        final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.SELF.getName(), RepresentationType.USER, "user").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(getResourceContext(), Rel.SELF.getName(), RepresentationType.USER, "user").build();
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final UserReprRenderer renderer = new UserReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
-            renderer.with(getRendererContext().getAuthenticationSession());
+            final UserReprRenderer renderer = new UserReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
+            renderer.with(getResourceContext().getAuthenticationSession());
             link.mapPut("value", renderer.render());
         }
 
@@ -70,18 +70,18 @@ public class UserReprRenderer extends ReprRendererAbstract<UserReprRenderer, Aut
     }
 
     private void addLinkToUp() {
-        final JsonRepresentation link = LinkBuilder.newBuilder(rendererContext, Rel.UP.getName(), RepresentationType.HOME_PAGE, "").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(resourceContext, Rel.UP.getName(), RepresentationType.HOME_PAGE, "").build();
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final HomePageReprRenderer renderer = new HomePageReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+            final HomePageReprRenderer renderer = new HomePageReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
             link.mapPut("value", renderer.render());
         }
         getLinks().arrayAdd(link);
     }
 
     private void addLinkToLogout() {
-        final JsonRepresentation link = LinkBuilder.newBuilder(rendererContext, Rel.LOGOUT.getName(), RepresentationType.HOME_PAGE, "user/logout").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(resourceContext, Rel.LOGOUT.getName(), RepresentationType.HOME_PAGE, "user/logout").build();
 
         getLinks().arrayAdd(link);
     }
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionReprRenderer.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionReprRenderer.java
index 5b81a83..9933777 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionReprRenderer.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/VersionReprRenderer.java
@@ -27,7 +27,7 @@ import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkBuilder;
 import org.apache.isis.viewer.restfulobjects.rendering.LinkFollowSpecs;
-import org.apache.isis.viewer.restfulobjects.rendering.RendererContext;
+import org.apache.isis.viewer.restfulobjects.rendering.IResourceContext;
 import org.apache.isis.viewer.restfulobjects.rendering.ReprRendererAbstract;
 import org.apache.isis.viewer.restfulobjects.server.RestfulObjectsApplication;
 
@@ -35,7 +35,7 @@ public class VersionReprRenderer extends ReprRendererAbstract<VersionReprRendere
 
     private static final String META_INF_POM_PROPERTIES = "/META-INF/maven/org.apache.isis.viewer/isis-viewer-restfulobjects-server/pom.properties";
 
-    VersionReprRenderer(final RendererContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
+    VersionReprRenderer(final IResourceContext resourceContext, final LinkFollowSpecs linkFollower, final JsonRepresentation representation) {
         super(resourceContext, linkFollower, RepresentationType.VERSION, representation);
     }
 
@@ -62,11 +62,11 @@ public class VersionReprRenderer extends ReprRendererAbstract<VersionReprRendere
     }
 
     private void addLinkToSelf() {
-        final JsonRepresentation link = LinkBuilder.newBuilder(getRendererContext(), Rel.SELF.getName(), RepresentationType.VERSION, "version").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(getResourceContext(), Rel.SELF.getName(), RepresentationType.VERSION, "version").build();
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final VersionReprRenderer renderer = new VersionReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+            final VersionReprRenderer renderer = new VersionReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
             link.mapPut("value", renderer.render());
         }
 
@@ -74,11 +74,11 @@ public class VersionReprRenderer extends ReprRendererAbstract<VersionReprRendere
     }
 
     private void addLinkToUp() {
-        final JsonRepresentation link = LinkBuilder.newBuilder(rendererContext, Rel.UP.getName(), RepresentationType.HOME_PAGE, "").build();
+        final JsonRepresentation link = LinkBuilder.newBuilder(resourceContext, Rel.UP.getName(), RepresentationType.HOME_PAGE, "").build();
 
         final LinkFollowSpecs linkFollower = getLinkFollowSpecs().follow("links");
         if (linkFollower.matches(link)) {
-            final HomePageReprRenderer renderer = new HomePageReprRenderer(getRendererContext(), linkFollower, JsonRepresentation.newMap());
+            final HomePageReprRenderer renderer = new HomePageReprRenderer(getResourceContext(), linkFollower, JsonRepresentation.newMap());
             link.mapPut("value", renderer.render());
         }
         getLinks().arrayAdd(link);
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/ShiroSecmanLdapTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/ShiroSecmanLdapTest.java
index 79d7966..9d49a7f 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/ShiroSecmanLdapTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/ShiroSecmanLdapTest.java
@@ -92,7 +92,7 @@ class ShiroSecmanLdapTest extends AbstractShiroTest {
     @Inject ServiceInjector serviceInjector;
 
     @BeforeEach
-    void setupSvenInDb() {
+    void beforeEach() {
         
         setSecurityManager(serviceInjector, "classpath:shiro-secman-ldap.ini");
         
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/ShiroSecmanLdap_restfulStressTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/ShiroSecmanLdap_restfulStressTest.java
index 1d9f723..88e2207 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/ShiroSecmanLdap_restfulStressTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/shiro/ShiroSecmanLdap_restfulStressTest.java
@@ -21,6 +21,7 @@ package org.apache.isis.testdomain.shiro;
 import javax.inject.Inject;
 
 import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -36,6 +37,7 @@ import org.apache.isis.extensions.secman.encryption.jbcrypt.IsisBootSecmanEncryp
 import org.apache.isis.extensions.secman.jdo.IsisBootSecmanPersistenceJdo;
 import org.apache.isis.extensions.secman.model.IsisBootSecmanModel;
 import org.apache.isis.extensions.secman.shiro.IsisBootSecmanRealmShiro;
+import org.apache.isis.security.shiro.WebModuleShiro;
 import org.apache.isis.testdomain.Incubating;
 import org.apache.isis.testdomain.Smoketest;
 import org.apache.isis.testdomain.conf.Configuration_usingJdoAndShiro;
@@ -91,6 +93,11 @@ class ShiroSecmanLdap_restfulStressTest extends AbstractShiroTest {
     @Inject SecurityModuleConfig securityConfig;
     @Inject ServiceInjector serviceInjector;
     
+    @BeforeAll
+    static void setup() {
+        WebModuleShiro.setShiroIniResource("classpath:shiro-secman-ldap.ini");
+    }
+    
     @BeforeEach
     void beforeEach() {
         
diff --git a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScript.java b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScript.java
index 930986e..da6f60f 100644
--- a/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScript.java
+++ b/extensions/fixtures/src/main/java/org/apache/isis/extensions/fixtures/fixturescripts/FixtureScript.java
@@ -666,7 +666,7 @@ extends AbstractViewModel {
                 return childFixtureScript;
 
             default:
-                throw _Exceptions.unmatchedCase("Execution strategy: '%s' not recognized", executionStrategy);
+                throw _Exceptions.illegalArgument("Execution strategy: '%s' not recognized", executionStrategy);
             }
         }