You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2020/01/07 23:06:21 UTC

[isis] 03/03: ISIS-2226: converts action args back to List

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

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

commit 7a993bb037c73a723a6e377b42c472b9db3b1aae
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 7 22:22:44 2020 +0000

    ISIS-2226: converts action args back to List<T>
    
    ... because Can<T> cannot hold nulls.
---
 .../isis/metamodel/facets/DomainEventHelper.java   |  6 +--
 .../invocation/ActionDomainEventFacetAbstract.java | 10 +++--
 .../action/invocation/ActionInvocationFacet.java   |  4 +-
 ...ctionInvocationFacetForDomainEventAbstract.java | 10 ++---
 .../actions/action/invocation/CommandUtil.java     |  6 ++-
 .../actions/validate/ActionValidationFacet.java    |  4 +-
 .../method/ActionValidationFacetViaMethod.java     |  2 +-
 .../ActionParameterAutoCompleteFacet.java          |  4 +-
 .../ActionParameterAutoCompleteFacetViaMethod.java |  4 +-
 .../param/choices/ActionParameterChoicesFacet.java |  4 +-
 .../choices/ActionParameterChoicesFacetNone.java   |  4 +-
 ...rameterChoicesFacetDerivedFromChoicesFacet.java |  4 +-
 .../ActionParameterChoicesFacetViaMethod.java      |  2 +-
 .../defaults/ActionParameterDefaultsFacet.java     |  4 +-
 .../ActionParameterDefaultsFacetViaMethod.java     |  2 +-
 .../disable/ActionParameterDisabledFacet.java      |  4 +-
 .../ActionParameterDisabledFacetViaMethod.java     |  2 +-
 .../param/hide/ActionParameterHiddenFacet.java     |  4 +-
 .../ActionParameterHiddenFacetViaMethod.java       |  2 +-
 .../interactions/ActionArgUsabilityContext.java    |  6 ++-
 .../interactions/ActionArgValidityContext.java     |  9 +++--
 .../interactions/ActionArgVisibilityContext.java   |  6 ++-
 .../interactions/ActionValidityContext.java        |  6 ++-
 ...arameterChoicesFacetFromParentedCollection.java |  2 +-
 ...meterDefaultsFacetFromAssociatedCollection.java |  3 +-
 .../command/CommandDtoServiceInternal.java         |  4 +-
 .../services/homepage/HomePageAction.java          |  4 +-
 .../ixn/InteractionDtoServiceInternal.java         |  4 +-
 .../apache/isis/metamodel/spec/ManagedObject.java  | 24 ++++++-----
 .../isis/metamodel/spec/feature/ObjectAction.java  | 14 +++----
 .../spec/feature/ObjectActionParameter.java        | 13 +++---
 .../specimpl/ObjectActionContributee.java          | 15 +++----
 .../specloader/specimpl/ObjectActionDefault.java   | 46 +++++++++++-----------
 .../specloader/specimpl/ObjectActionMixedIn.java   |  4 +-
 .../specimpl/ObjectActionParameterAbstract.java    | 29 +++++++-------
 .../ObjectActionParameterContributeeAbstract.java  | 11 +++---
 .../ObjectActionParameterMixedInAbstract.java      |  6 ++-
 .../specimpl/OneToManyAssociationContributee.java  |  5 ++-
 .../specimpl/OneToManyAssociationMixedIn.java      | 10 ++---
 .../specimpl/OneToOneAssociationContributee.java   |  3 +-
 .../specimpl/OneToOneAssociationMixedIn.java       | 12 ++----
 .../command/CommandDtoServiceInternalDefault.java  |  6 +--
 .../command/CommandExecutorServiceDefault.java     | 11 +++---
 .../ixn/InteractionDtoServiceInternalDefault.java  |  2 +-
 .../handlers/DomainObjectInvocationHandler.java    |  8 ++--
 .../domainobjects/ObjectAndActionInvocation.java   |  9 +++--
 ...entNegotiationServiceForRestfulObjectsV1_0.java |  2 +-
 .../viewer/resources/ObjectActionArgHelper.java    |  7 ++--
 .../wicket/model/models/ActionArgumentModel.java   |  4 +-
 .../viewer/wicket/model/models/ActionModel.java    | 13 +++---
 .../viewer/wicket/model/models/ScalarModel.java    | 30 +++++++-------
 .../components/actions/ActionParametersForm.java   |  3 +-
 .../components/scalars/ScalarPanelAbstract2.java   |  5 ++-
 .../scalars/ScalarPanelSelect2Abstract.java        | 12 +++---
 .../scalars/reference/ReferencePanel.java          |  3 +-
 .../valuechoices/ValueChoicesSelect2Panel.java     |  4 +-
 ...derForReferenceParamOrPropertyAutoComplete.java |  9 +++--
 57 files changed, 243 insertions(+), 203 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java
index 067ecb2..212ccad 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/DomainEventHelper.java
@@ -68,7 +68,7 @@ public class DomainEventHelper {
             final IdentifiedHolder identified,
             final ManagedObject targetAdapter,
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> argumentAdapters,
+            final List<ManagedObject> argumentAdapters,
             final ManagedObject resultAdapter) {
         
         return postEventForAction(phase, uncheckedCast(eventType), /*existingEvent*/null, objectAction, identified, 
@@ -83,7 +83,7 @@ public class DomainEventHelper {
             final IdentifiedHolder identified,
             final ManagedObject targetAdapter,
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> argumentAdapters,
+            final List<ManagedObject> argumentAdapters,
             final ManagedObject resultAdapter) {
         
         return postEventForAction(phase, 
@@ -99,7 +99,7 @@ public class DomainEventHelper {
             final IdentifiedHolder identified,
             final ManagedObject targetAdapter,
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> argumentAdapters,
+            final List<ManagedObject> argumentAdapters,
             final ManagedObject resultAdapter) {
         
         _Assert.assertTypeIsInstanceOf(eventType, ActionDomainEvent.class);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
index 06d01d5..36b2e52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionDomainEventFacetAbstract.java
@@ -19,6 +19,9 @@
 
 package org.apache.isis.metamodel.facets.actions.action.invocation;
 
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.isis.applib.events.domain.AbstractDomainEvent;
 import org.apache.isis.applib.events.domain.ActionDomainEvent;
 import org.apache.isis.applib.services.i18n.TranslatableString;
@@ -27,7 +30,6 @@ import org.apache.isis.applib.services.wrapper.events.InteractionEvent;
 import org.apache.isis.applib.services.wrapper.events.UsabilityEvent;
 import org.apache.isis.applib.services.wrapper.events.ValidityEvent;
 import org.apache.isis.applib.services.wrapper.events.VisibilityEvent;
-import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facetapi.IdentifiedHolder;
 import org.apache.isis.metamodel.facets.DomainEventHelper;
@@ -142,7 +144,7 @@ implements ActionDomainEventFacet {
         return ((ActionInteractionContext) ic).getObjectAction();
     }
 
-    private static Can<ManagedObject> argumentAdaptersFrom(
+    private static List<ManagedObject> argumentAdaptersFrom(
             final InteractionContext<? extends InteractionEvent> ic) {
         
         val contributee = ic.getContributeeWithParamIndex();
@@ -153,11 +155,11 @@ implements ActionDomainEventFacet {
                     ? contributee.getValue()
                             : ManagedObject.empty();
             
-            return Can.ofSingleton(adapter);    
+            return Collections.singletonList(adapter);
                 
         }
 
-        return Can.empty();
+        return Collections.emptyList();
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java
index d47138e..21c2b9c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacet.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.facets.actions.action.invocation;
 
+import java.util.List;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
@@ -40,7 +42,7 @@ public interface ActionInvocationFacet extends Facet {
             ObjectAction owningAction,
             ManagedObject targetAdapter,
             ManagedObject mixedInAdapter,  // null for regular or contributed (not mixin) actions
-            Can<ManagedObject> argumentAdapters,
+            List<ManagedObject> argumentAdapters,
             InteractionInitiatedBy interactionInitiatedBy);
     
     ObjectSpecification getReturnType();
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
index d9e2900..db57555 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/ActionInvocationFacetForDomainEventAbstract.java
@@ -122,7 +122,7 @@ implements ImperativeFacet {
             final ObjectAction owningAction,
             final ManagedObject targetAdapter,
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> argumentAdapters,
+            final List<ManagedObject> argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final ManagedObject executionResult = 
@@ -155,7 +155,7 @@ implements ImperativeFacet {
             final ObjectAction owningAction,
             final ManagedObject targetAdapter,
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> argumentAdapters,
+            final List<ManagedObject> argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
         // similar code in PropertySetterOrClearFacetFDEA
 
@@ -260,7 +260,7 @@ implements ImperativeFacet {
 
     private Object invokeMethodElseFromCache(
             final ManagedObject targetAdapter, 
-            final Can<ManagedObject> arguments)
+            final List<ManagedObject> arguments)
                     throws IllegalAccessException, InvocationTargetException {
 
         final Object[] executionParameters = ManagedObject.unwrapPojoArray(arguments);
@@ -424,9 +424,9 @@ implements ImperativeFacet {
     private final class DomainEventMemberExecutor 
     implements Interaction.MemberExecutor<Interaction.ActionInvocation> {
         
-        private final Can<ManagedObject> argumentAdapters;
+        private final List<ManagedObject> argumentAdapters;
         private final ManagedObject targetAdapter;
-        private final Can<ManagedObject> argumentAdapterList;
+        private final List<ManagedObject> argumentAdapterList;
         private final Command command;
         private final ObjectAction owningAction;
         private final ManagedObject mixinElseRegularAdapter;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java
index dde8f61..9892069 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/action/invocation/CommandUtil.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.facets.actions.action.invocation;
 
+import java.util.List;
+
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._NullSafe;
@@ -63,7 +65,7 @@ public class CommandUtil {
     
     public static String argDescriptionFor(
             final ObjectAction owningAction,
-            final Can<ManagedObject> arguments) {
+            final List<ManagedObject> arguments) {
         
         val argsBuf = new StringBuilder();
         val parameters = owningAction.getParameters();
@@ -71,7 +73,7 @@ public class CommandUtil {
             // should be the case
             int i=0;
             for (ObjectActionParameter param : parameters) {
-                CommandUtil.appendParamArg(argsBuf, param, arguments.getOrThrow(i++));
+                CommandUtil.appendParamArg(argsBuf, param, arguments.get(i++));
             }
         }
         return argsBuf.toString();
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/validate/ActionValidationFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/validate/ActionValidationFacet.java
index 6ec767a..898d96e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/validate/ActionValidationFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/validate/ActionValidationFacet.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.facets.actions.validate;
 
+import java.util.List;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
@@ -44,5 +46,5 @@ public interface ActionValidationFacet extends Facet, ValidatingInteractionAdvis
     /**
      * Reason why the validation has failed, or <tt>null</tt> if okay.
      */
-    public String invalidReason(ManagedObject target, Can<ManagedObject> arguments);
+    public String invalidReason(ManagedObject target, List<ManagedObject> arguments);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java
index 6be2414..b38f5f9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/actions/validate/method/ActionValidationFacetViaMethod.java
@@ -60,7 +60,7 @@ public class ActionValidationFacetViaMethod extends ActionValidationFacetAbstrac
     }
 
     @Override
-    public String invalidReason(final ManagedObject owningAdapter, final Can<ManagedObject> proposedArgumentAdapters) {
+    public String invalidReason(final ManagedObject owningAdapter, final List<ManagedObject> proposedArgumentAdapters) {
         final Object returnValue = ManagedObject.InvokeUtil.invoke(method, owningAdapter, proposedArgumentAdapters);
         if(returnValue instanceof String) {
             return (String) returnValue;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
index 98fb5cd..bea5de8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/ActionParameterAutoCompleteFacet.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.facets.param.autocomplete;
 
+import java.util.List;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
@@ -36,7 +38,7 @@ public interface ActionParameterAutoCompleteFacet extends Facet {
 
     public Object[] autoComplete(
             ManagedObject inObject,
-            Can<ManagedObject> pendingArgs,
+            List<ManagedObject> pendingArgs,
             String searchArg,
             InteractionInitiatedBy interactionInitiatedBy);
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
index f207460..b392fce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/autocomplete/method/ActionParameterAutoCompleteFacetViaMethod.java
@@ -79,14 +79,14 @@ implements ImperativeFacet {
     @Override
     public Object[] autoComplete(
             final ManagedObject owningAdapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final Object collectionOrArray = 
                 ManagedObject.InvokeUtil.invokeAutofit(
                         method, owningAdapter, pendingArgs, 
-                        Can.ofSingleton(Optional.ofNullable(searchArg)));
+                        Collections.singletonList(Optional.ofNullable(searchArg)));
         
         if (collectionOrArray == null) {
             return _Constants.emptyObjects;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
index 2fab36f..0032dbf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacet.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.facets.param.choices;
 
+import java.util.List;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.Facet;
@@ -36,6 +38,6 @@ public interface ActionParameterChoicesFacet extends Facet {
 
     public Object[] getChoices(
             ManagedObject target,
-            Can<ManagedObject> pendingArgs,
+            List<ManagedObject> pendingArgs,
             InteractionInitiatedBy interactionInitiatedBy);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
index c01e23f..e380b79 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/ActionParameterChoicesFacetNone.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.facets.param.choices;
 
+import java.util.List;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -33,7 +35,7 @@ public class ActionParameterChoicesFacetNone extends ActionParameterChoicesFacet
     @Override
     public Object[] getChoices(
             final ManagedObject adapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         return new ManagedObject[0];
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
index 3a6c8d6..48cb14c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/enums/ActionParameterChoicesFacetDerivedFromChoicesFacet.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.facets.param.choices.enums;
 
+import java.util.List;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal._Constants;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
@@ -38,7 +40,7 @@ public class ActionParameterChoicesFacetDerivedFromChoicesFacet extends ActionPa
     @Override
     public Object[] getChoices(
             final ManagedObject adapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         final FacetHolder facetHolder = getFacetHolder();
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
index f1f1d62..b36490e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/choices/methodnum/ActionParameterChoicesFacetViaMethod.java
@@ -70,7 +70,7 @@ implements ImperativeFacet {
     @Override
     public Object[] getChoices(
             final ManagedObject owningAdapter,
-            final Can<ManagedObject> pendingArgs, 
+            final List<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         final Object choices =
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
index 2c97147..1c5c847 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/ActionParameterDefaultsFacet.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.facets.param.defaults;
 
+import java.util.List;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -35,6 +37,6 @@ public interface ActionParameterDefaultsFacet extends Facet {
 
     public abstract Object getDefault(
             ManagedObject target,
-            Can<ManagedObject> parameters,
+            List<ManagedObject> parameters,
             Integer paramNumUpdated);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
index e3d1fc9..9311426 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/defaults/methodnum/ActionParameterDefaultsFacetViaMethod.java
@@ -71,7 +71,7 @@ public class ActionParameterDefaultsFacetViaMethod extends ActionParameterDefaul
     @Override
     public Object getDefault(
             final ManagedObject target,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final Integer paramNumUpdated) {
 
         // this isn't a dependent defaults situation, so just evaluate the default.
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
index 2a9ab95..94c3b42 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/ActionParameterDisabledFacet.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.facets.param.disable;
 
+import java.util.List;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.interactions.DisablingInteractionAdvisor;
@@ -36,5 +38,5 @@ public interface ActionParameterDisabledFacet extends Facet, DisablingInteractio
     /**
      * Reason why the parameter is disabled, or <tt>null</tt> if okay.
      */
-    public String disabledReason(ManagedObject target, Can<ManagedObject> arguments);
+    public String disabledReason(ManagedObject target, List<ManagedObject> arguments);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
index de35541..74db06c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/disable/method/ActionParameterDisabledFacetViaMethod.java
@@ -69,7 +69,7 @@ implements ImperativeFacet {
     @Override
     public String disabledReason(
             final ManagedObject owningAdapter, 
-            final Can<ManagedObject> argumentAdapters) {
+            final List<ManagedObject> argumentAdapters) {
         
         final Object returnValue = ManagedObject.InvokeUtil
                 .invokeAutofit(method, owningAdapter, argumentAdapters);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java
index d1a773b..1f802c6 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/ActionParameterHiddenFacet.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.facets.param.hide;
 
+import java.util.List;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.interactions.HidingInteractionAdvisor;
@@ -37,5 +39,5 @@ public interface ActionParameterHiddenFacet extends Facet, HidingInteractionAdvi
     /**
      * Whether the parameter is hidden.
      */
-    public boolean isHidden(ManagedObject target, Can<ManagedObject> arguments);
+    public boolean isHidden(ManagedObject target, List<ManagedObject> arguments);
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
index 430d162..6782ad2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/param/hide/method/ActionParameterHiddenFacetViaMethod.java
@@ -59,7 +59,7 @@ public class ActionParameterHiddenFacetViaMethod extends ActionParameterHiddenFa
     @Override
     public boolean isHidden(
             final ManagedObject owningAdapter, 
-            final Can<ManagedObject> argumentAdapters) {
+            final List<ManagedObject> argumentAdapters) {
         
         final Object returnValue = ManagedObject.InvokeUtil
                 .invokeAutofit(method, owningAdapter, argumentAdapters);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java
index e45fd3e..c4bd2a3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgUsabilityContext.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.interactions;
 
+import java.util.List;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.ActionArgumentUsabilityEvent;
@@ -43,14 +45,14 @@ extends UsabilityContext<ActionArgumentUsabilityEvent>
 implements ActionInteractionContext {
 
     @Getter(onMethod = @__(@Override)) private final ObjectAction objectAction;
-    @Getter private final Can<ManagedObject> args;
+    @Getter private final List<ManagedObject> args;
     @Getter private final int position;
 
     public ActionArgUsabilityContext(
             final ManagedObject targetAdapter,
             final ObjectAction objectAction,
             final Identifier id,
-            final Can<ManagedObject> args,
+            final List<ManagedObject> args,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgValidityContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgValidityContext.java
index cb87a49..562e4a5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgValidityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgValidityContext.java
@@ -19,9 +19,10 @@
 
 package org.apache.isis.metamodel.interactions;
 
+import java.util.List;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.wrapper.events.ActionArgumentEvent;
-import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.consent.InteractionContextType;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -39,14 +40,14 @@ public class ActionArgValidityContext extends ValidityContext<ActionArgumentEven
 
     @Getter(onMethod = @__(@Override)) private final ObjectAction objectAction;
     @Getter(onMethod = @__(@Override)) private final ManagedObject proposed;
-    @Getter private final Can<ManagedObject> args;
+    @Getter private final List<ManagedObject> args;
     @Getter private final int position;
 
     public ActionArgValidityContext(
             final ManagedObject targetAdapter,
             final ObjectAction objectAction,
             final Identifier id,
-            final Can<ManagedObject> args,
+            final List<ManagedObject> args,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
         super(InteractionContextType.ACTION_PROPOSED_ARGUMENT, targetAdapter, id, interactionInitiatedBy);
@@ -54,7 +55,7 @@ public class ActionArgValidityContext extends ValidityContext<ActionArgumentEven
 
         this.args = args;
         this.position = position;
-        this.proposed = args.getOrThrow(position);
+        this.proposed = args.get(position);
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java
index 41a01fa..24f506f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionArgVisibilityContext.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.interactions;
 
+import java.util.List;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.events.ActionArgumentVisibilityEvent;
@@ -43,14 +45,14 @@ extends VisibilityContext<ActionArgumentVisibilityEvent>
 implements ActionInteractionContext {
 
     @Getter(onMethod = @__(@Override)) private final ObjectAction objectAction;
-    @Getter private final Can<ManagedObject> args;
+    @Getter private final List<ManagedObject> args;
     @Getter private final int position;
     
     public ActionArgVisibilityContext(
             final ManagedObject targetAdapter,
             final ObjectAction objectAction,
             final Identifier id,
-            final Can<ManagedObject> args,
+            final List<ManagedObject> args,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionValidityContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionValidityContext.java
index 8f45f75..73141f3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionValidityContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/interactions/ActionValidityContext.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.metamodel.interactions;
 
+import java.util.List;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.services.wrapper.events.ActionInvocationEvent;
 import org.apache.isis.commons.collections.Can;
@@ -40,13 +42,13 @@ extends ValidityContext<ActionInvocationEvent>
 implements ActionInteractionContext {
 
     @Getter(onMethod = @__(@Override)) private final ObjectAction objectAction;
-    @Getter private final Can<ManagedObject> args;
+    @Getter private final List<ManagedObject> args;
 
     public ActionValidityContext(
             final ManagedObject targetAdapter,
             final ObjectAction objectAction,
             final Identifier id,
-            final Can<ManagedObject> args,
+            final List<ManagedObject> args,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         super(InteractionContextType.ACTION_INVOKE, targetAdapter, id, interactionInitiatedBy);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
index 2022d61..7b728be 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterChoicesFacetFromParentedCollection.java
@@ -47,7 +47,7 @@ public class ActionParameterChoicesFacetFromParentedCollection extends ActionPar
     @Override
     public Object[] getChoices(
             final ManagedObject target,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final ManagedObject parentAdapter = determineParentAdapter(target);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
index e937d0f..64ab2ce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/postprocessors/param/ActionParameterDefaultsFacetFromAssociatedCollection.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.metamodel.postprocessors.param;
 
+import java.util.List;
 import java.util.function.Function;
 
 import org.apache.isis.applib.ApplicationException;
@@ -53,7 +54,7 @@ public class ActionParameterDefaultsFacetFromAssociatedCollection extends Action
     @Override
     public Object getDefault(
             final ManagedObject target,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final Integer paramNumUpdated) {
         
         return _selectedPojos.get();
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/command/CommandDtoServiceInternal.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/command/CommandDtoServiceInternal.java
index a3c3750..fb16ced 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/command/CommandDtoServiceInternal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/command/CommandDtoServiceInternal.java
@@ -45,7 +45,7 @@ public interface CommandDtoServiceInternal {
     CommandDto asCommandDto(
             final List<ManagedObject> targetAdapters,
             final ObjectAction objectAction,
-            final Can<ManagedObject> argAdapters);
+            final List<ManagedObject> argAdapters);
 
     /**
      * Returns a JAXB DTO (hence convertible to XML) that represents the intention to edit (set or clear) a property on
@@ -61,7 +61,7 @@ public interface CommandDtoServiceInternal {
     void addActionArgs(
             final ObjectAction objectAction,
             final ActionDto actionDto,
-            final Can<ManagedObject> argAdapters);
+            final List<ManagedObject> argAdapters);
 
     @Programmatic
     void addPropertyValue(
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/homepage/HomePageAction.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/homepage/HomePageAction.java
index a7eeb68..079d111 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/homepage/HomePageAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/homepage/HomePageAction.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.metamodel.services.homepage;
 
+import java.util.Collections;
+
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
@@ -40,7 +42,7 @@ public final class HomePageAction {
     public Object getHomePagePojo() {
 
         final ManagedObject mixedInAdapter = null;
-        final Can<ManagedObject> parameters = Can.empty();
+        val parameters = Collections.<ManagedObject>emptyList();
 
         final ManagedObject resultAdapter = objectAction.executeWithRuleChecking(
                 objectAdapter, mixedInAdapter, parameters,
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ixn/InteractionDtoServiceInternal.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ixn/InteractionDtoServiceInternal.java
index 9dc0b96..bc829fe 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ixn/InteractionDtoServiceInternal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/services/ixn/InteractionDtoServiceInternal.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.metamodel.services.ixn;
 
+import java.util.List;
+
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.spec.ManagedObject;
@@ -32,7 +34,7 @@ public interface InteractionDtoServiceInternal {
     ActionInvocationDto asActionInvocationDto(
             ObjectAction objectAction,
             ManagedObject targetAdapter,
-            Can<ManagedObject> argumentAdapters);
+            List<ManagedObject> argumentAdapters);
 
     @Programmatic
     PropertyEditDto asPropertyEditDto(
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 75f2344..8d07c3f 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
@@ -242,7 +242,7 @@ public interface ManagedObject {
         return adapter != null ? adapter.getPojo() : null;
     }
 
-    public static Object[] unwrapPojoArray(final Can<ManagedObject> adapters) {
+    public static Object[] unwrapPojoArray(final List<ManagedObject> adapters) {
         if (adapters == null) {
             return null;
         }
@@ -254,6 +254,10 @@ public interface ManagedObject {
         return unwrappedObjects;
     }
     
+    public static Object[] unwrapPojoArray(final Can<ManagedObject> adapters) {
+        return unwrapPojoArray(adapters.toList());
+    }
+
     public static Object[] unwrapPojoArray(final ManagedObject[] adapters) {
         if (adapters == null) {
             return null;
@@ -423,8 +427,8 @@ public interface ManagedObject {
             return MethodExtensions.invoke(method, unwrapPojo(adapter), new Object[] {arg0});
         }
     
-        public static Object invoke(Method method, ManagedObject adapter, Can<ManagedObject> args) {
-            return invoke(method, adapter, args.toArray(ManagedObject.class));
+        public static Object invoke(Method method, ManagedObject adapter, List<ManagedObject> args) {
+            return invoke(method, adapter, args.toArray(new ManagedObject[0]));
         }
 
         public static Object invoke(Method method, ManagedObject adapter, ManagedObject arg0Adapter) {
@@ -469,8 +473,8 @@ public interface ManagedObject {
         public static Object invokeAutofit(
                 final Method method, 
                 final ManagedObject target, 
-                final Can<? extends ManagedObject> pendingArgs,
-                final Can<Optional<Object>> additionalArgValues) {
+                final List<? extends ManagedObject> pendingArgs,
+                final List<Optional<Object>> additionalArgValues) {
     
             val argArray = adjust(method, pendingArgs, additionalArgValues);
             
@@ -478,20 +482,20 @@ public interface ManagedObject {
         }
 
         /**
-         * same as {@link #invokeAutofit(Method, ManagedObject, Can, Can)} w/o additionalArgValues 
+         * same as {@link #invokeAutofit(Method, ManagedObject, List, List)} w/o additionalArgValues
          */
         public static Object invokeAutofit(
                 final Method method, 
                 final ManagedObject target, 
-                final Can<? extends ManagedObject> pendingArgs) {
+                final List<? extends ManagedObject> pendingArgs) {
             
-            return invokeAutofit(method, target, pendingArgs, Can.empty());
+            return invokeAutofit(method, target, pendingArgs, Collections.emptyList());
         }
     
         private static Object[] adjust(
                 final Method method, 
-                final Can<? extends ManagedObject> pendingArgs,
-                final Can<Optional<Object>> additionalArgValues) {
+                final List<? extends ManagedObject> pendingArgs,
+                final List<Optional<Object>> additionalArgValues) {
             
             val parameterTypes = method.getParameterTypes();
             val paramCount = parameterTypes.length;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
index 5a7b761..478b6ce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectAction.java
@@ -109,7 +109,7 @@ public interface ObjectAction extends ObjectMember {
     ManagedObject executeWithRuleChecking(
             final ManagedObject target,
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> parameters,
+            final List<ManagedObject> parameters,
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) throws AuthorizationException;
 
@@ -124,7 +124,7 @@ public interface ObjectAction extends ObjectMember {
     ManagedObject execute(
             ManagedObject targetAdapter,
             ManagedObject mixedInAdapter,
-            Can<ManagedObject> parameters,
+            List<ManagedObject> parameters,
             final InteractionInitiatedBy interactionInitiatedBy);
 
 
@@ -135,26 +135,26 @@ public interface ObjectAction extends ObjectMember {
      *
      * <p>
      *     Basically just calls (the helper methods also called by) first
-     *     {@link #isEachIndividualArgumentValid(ManagedObject, ManagedObject[], InteractionInitiatedBy)} 
+     *     {@link #isEachIndividualArgumentValid(ManagedObject, List, InteractionInitiatedBy)}
      *     and then
-     *     {@link #isArgumentSetValid(ManagedObject, ManagedObject[], InteractionInitiatedBy)}.  
+     *     {@link #isArgumentSetValid(ManagedObject, List, InteractionInitiatedBy)}
      *     Those methods are
      *     separated out so that viewers have more fine-grained control.
      * </p>
      */
     Consent isProposedArgumentSetValid(
             ManagedObject object,
-            Can<ManagedObject> proposedArguments,
+            List<ManagedObject> proposedArguments,
             InteractionInitiatedBy interactionInitiatedBy);
 
     Consent isEachIndividualArgumentValid(
             ManagedObject objectAdapter,
-            Can<ManagedObject> proposedArguments,
+            List<ManagedObject> proposedArguments,
             InteractionInitiatedBy interactionInitiatedBy);
 
     Consent isArgumentSetValid(
             ManagedObject objectAdapter,
-            Can<ManagedObject> proposedArguments,
+            List<ManagedObject> proposedArguments,
             InteractionInitiatedBy interactionInitiatedBy);
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
index 85abee4..fb480d7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/spec/feature/ObjectActionParameter.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.metamodel.spec.feature;
 
+import java.util.List;
 import java.util.function.Predicate;
 
 import javax.annotation.Nullable;
@@ -75,7 +76,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
     // internal API
     ActionArgValidityContext createProposedArgumentInteractionContext(
             ManagedObject targetObject,
-            Can<ManagedObject> args,
+            List<ManagedObject> args,
             int position,
             InteractionInitiatedBy interactionInitiatedBy);
 
@@ -92,7 +93,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      */
     Can<ManagedObject> getAutoComplete(
             ManagedObject adapter,
-            Can<ManagedObject> pendingArgs,
+            List<ManagedObject> pendingArgs,
             String searchArg,
             InteractionInitiatedBy interactionInitiatedBy);
 
@@ -111,13 +112,13 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      */
     Can<ManagedObject> getChoices(
             ManagedObject adapter,
-            Can<ManagedObject> pendingArgs,
+            List<ManagedObject> pendingArgs,
             InteractionInitiatedBy interactionInitiatedBy);
 
 
     ManagedObject getDefault(
             ManagedObject adapter,
-            Can<ManagedObject> pendingArgs,
+            List<ManagedObject> pendingArgs,
             Integer paramNumUpdated);
 
 
@@ -130,7 +131,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      */
     Consent isVisible(
             ManagedObject targetAdapter,
-            Can<ManagedObject> pendingArgs,
+            List<ManagedObject> pendingArgs,
             InteractionInitiatedBy interactionInitiatedBy);
 
     /**
@@ -142,7 +143,7 @@ public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
      */
     Consent isUsable(
             ManagedObject targetAdapter,
-            Can<ManagedObject> pendingArgs,
+            List<ManagedObject> pendingArgs,
             InteractionInitiatedBy interactionInitiatedBy);
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionContributee.java
index e76e0ef..c8bd808 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -168,7 +168,7 @@ public class ObjectActionContributee extends ObjectActionDefault implements Cont
     @Override
     public Consent isProposedArgumentSetValid(
             final ManagedObject contributee,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         val serviceArguments = argsPlusContributee(contributee, proposedArguments);
@@ -179,7 +179,7 @@ public class ObjectActionContributee extends ObjectActionDefault implements Cont
     @Override
     public Consent isEachIndividualArgumentValid(
             final ManagedObject contributee,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         val serviceArguments = argsPlusContributee(contributee, proposedArguments);
@@ -190,7 +190,7 @@ public class ObjectActionContributee extends ObjectActionDefault implements Cont
     @Override
     public Consent isArgumentSetValid(
             final ManagedObject contributee,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         val serviceArguments = argsPlusContributee(contributee, proposedArguments);
@@ -202,7 +202,7 @@ public class ObjectActionContributee extends ObjectActionDefault implements Cont
     public ManagedObject execute(
             final ManagedObject targetAdapter,
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> argumentAdapters,
+            final List<ManagedObject> argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         setupCommand(targetAdapter, argumentAdapters);
@@ -213,11 +213,12 @@ public class ObjectActionContributee extends ObjectActionDefault implements Cont
     }
 
 
-    private Can<ManagedObject> argsPlusContributee(
+    private List<ManagedObject> argsPlusContributee(
             final ManagedObject contributee, 
-            final Can<ManagedObject> arguments) {
+            final List<ManagedObject> arguments) {
         
-        return arguments.add(contributeeParamIndex, contributee);
+        arguments.add(contributeeParamIndex, contributee);
+        return arguments;
     }
 
     // //////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java
index f7bd86b..63a8967 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -242,10 +242,10 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
 
     /**
      * The Validates all arguments individually (by calling same helper that
-     * {@link #isEachIndividualArgumentValid(ManagedObject, ManagedObject[], InteractionInitiatedBy)} delegates to)
+     * {@link #isEachIndividualArgumentValid(ManagedObject, List, InteractionInitiatedBy)} delegates to)
      * and if there are no validation errors, then validates the entire argument
      * set (by calling same helper that
-     * {@link #isArgumentSetValid(ManagedObject, ManagedObject[], InteractionInitiatedBy)} delegates to).
+     * {@link #isArgumentSetValid(ManagedObject, List, InteractionInitiatedBy)} delegates to).
      *
      * <p>
      * The two other validation methods mentioned above are separated out to allow viewers (such as the RO viewer) to
@@ -255,7 +255,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     @Override
     public Consent isProposedArgumentSetValid(
             final ManagedObject targetObject,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final InteractionResultSet resultSet = new InteractionResultSet();
@@ -271,10 +271,10 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
 
     /**
      * Normally action validation is all performed by
-     * {@link #isProposedArgumentSetValid(ManagedObject, ManagedObject[], InteractionInitiatedBy)}, which calls
-     * {@link #isEachIndividualArgumentValid(ManagedObject, ManagedObject[], InteractionInitiatedBy) this method} to
+     * {@link #isProposedArgumentSetValid(ManagedObject, List, InteractionInitiatedBy)}, which calls
+     * {@link #isEachIndividualArgumentValid(ManagedObject, List, InteractionInitiatedBy) this method} to
      * validate arguments individually, and then
-     * {@link #isArgumentSetValid(ManagedObject, ManagedObject[], InteractionInitiatedBy) validate argument set}
+     * {@link #isArgumentSetValid(ManagedObject, List, InteractionInitiatedBy) validate argument set}
      * afterwards.
      *
      * <p>
@@ -285,7 +285,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     @Override
     public Consent isEachIndividualArgumentValid(
             final ManagedObject objectAdapter,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final InteractionResultSet resultSet = new InteractionResultSet();
@@ -297,7 +297,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
 
     private void validateArgumentsIndividually(
             final ManagedObject objectAdapter,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy,
             final InteractionResultSet resultSet) {
         
@@ -315,10 +315,10 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
 
     /**
      * Normally action validation is all performed by
-     * {@link #isProposedArgumentSetValid(ManagedObject, ManagedObject[], InteractionInitiatedBy)}, which calls
-     * {@link #isEachIndividualArgumentValid(ManagedObject, ManagedObject[], InteractionInitiatedBy)} to
+     * {@link #isProposedArgumentSetValid(ManagedObject, List, InteractionInitiatedBy)}, which calls
+     * {@link #isEachIndividualArgumentValid(ManagedObject, List, InteractionInitiatedBy)} to
      * validate arguments individually, and then
-     * {@link #isArgumentSetValid(ManagedObject, ManagedObject[], InteractionInitiatedBy) this method} to
+     * {@link #isArgumentSetValid(ManagedObject, List, InteractionInitiatedBy) this method} to
      * validate the entire argument set afterwards.
      *
      * <p>
@@ -329,7 +329,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     @Override
     public Consent isArgumentSetValid(
             final ManagedObject objectAdapter,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final InteractionResultSet resultSet = new InteractionResultSet();
@@ -340,7 +340,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
 
     protected void validateArgumentSet(
             final ManagedObject objectAdapter,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy,
             final InteractionResultSet resultSet) {
         
@@ -351,7 +351,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
 
     ActionValidityContext createActionInvocationInteractionContext(
             final ManagedObject targetObject,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         return new ActionValidityContext(targetObject, this, getIdentifier(), proposedArguments,
@@ -366,7 +366,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     public ManagedObject executeWithRuleChecking(
             final ManagedObject target,
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> arguments,
+            final List<ManagedObject> arguments,
             final InteractionInitiatedBy interactionInitiatedBy,
             final Where where) {
 
@@ -393,7 +393,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
 
     /**
      * Sets up the {@link Command}, then delegates off to
-     * {@link #executeInternal(ManagedObject, ManagedObject, ManagedObject[], InteractionInitiatedBy) executeInternal}
+     * {@link #executeInternal(ManagedObject, ManagedObject, List, InteractionInitiatedBy) executeInternal}
      * to invoke the {@link ActionInvocationFacet invocation facet}.
      *
      * @param mixedInAdapter - will be null for regular actions, and for mixin actions.  When a mixin action invokes its underlying mixedIn action, then will be populated (so that the ActionDomainEvent can correctly provide the underlying mixin)
@@ -402,7 +402,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     public ManagedObject execute(
             final ManagedObject targetAdapter,
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> argumentAdapters,
+            final List<ManagedObject> argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         setupCommand(targetAdapter, argumentAdapters);
@@ -416,7 +416,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
     public ManagedObject executeInternal(
             final ManagedObject targetAdapter,
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> argumentAdapters, 
+            final List<ManagedObject> argumentAdapters,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         val actionInvocationFacet = getFacet(ActionInvocationFacet.class);
@@ -469,8 +469,8 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
                     parameterDefaultPojos[i] = paramFacet
                             .getDefault(
                                     target, 
-                                    /*parameters*/ Can.empty(), 
-                                    /*paramNumUpdated*/null);
+                                    Collections.emptyList(),
+                                    null);
                 } else {
                     parameterDefaultPojos[i] = null;
                 }
@@ -613,7 +613,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
      */
     public void setupCommand(
             final ManagedObject targetAdapter,
-            final Can<ManagedObject> argumentAdapters) {
+            final List<ManagedObject> argumentAdapters) {
 
         final CommandContext commandContext = getCommandContext();
         final Command command = commandContext.getCommand();
@@ -629,7 +629,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
 
     private void setupCommandTarget(
             final ManagedObject targetAdapter,
-            final Can<ManagedObject> argumentAdapters) {
+            final List<ManagedObject> argumentAdapters) {
 
         final String arguments = CommandUtil.argDescriptionFor(this, argumentAdapters);
         super.setupCommandTarget(targetAdapter, arguments);
@@ -637,7 +637,7 @@ public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectA
 
     private void setupCommandMementoAndExecutionContext(
             final ManagedObject targetAdapter,
-            final Can<ManagedObject> argumentAdapters) {
+            final List<ManagedObject> argumentAdapters) {
 
         val commandDtoServiceInternal = getCommandDtoService();
         final List<ManagedObject> commandTargetAdapters =
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 466761a..9ed7e69 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -209,7 +209,7 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
     @Override
     protected void validateArgumentSet(
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final InteractionInitiatedBy interactionInitiatedBy,
             final InteractionResultSet resultSet) {
 
@@ -228,7 +228,7 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
     public ManagedObject execute(
             final ManagedObject target,         // will be the mixedInAdapter
             final ManagedObject mixedInAdapter, // will be passed in as null
-            final Can<ManagedObject> arguments,
+            final List<ManagedObject> arguments,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 783842c..847a3ec 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.metamodel.specloader.specimpl;
 
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.isis.applib.Identifier;
@@ -207,7 +208,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
     @Override
     public Can<ManagedObject> getAutoComplete(
             final ManagedObject adapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
@@ -244,7 +245,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
     @Override
     public Can<ManagedObject> getChoices(
             final ManagedObject adapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         val args = argsForDefaultOrChoices(adapter, pendingArgs);
@@ -255,7 +256,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
 
     private Can<ManagedObject> findChoices(
             final ManagedObject target,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
         final List<ManagedObject> adapters = _Lists.newArrayList();
@@ -277,7 +278,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
     @Override
     public ManagedObject getDefault(
             final ManagedObject adapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final Integer paramNumUpdated) {
 
         final ManagedObject target = targetForDefaultOrChoices(adapter);
@@ -288,7 +289,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
 
     private ManagedObject findDefault(
             final ManagedObject target,
-            final Can<ManagedObject> args,
+            final List<ManagedObject> args,
             final Integer paramNumUpdated) {
         
         final ActionParameterDefaultsFacet defaultsFacet = getFacet(ActionParameterDefaultsFacet.class);
@@ -314,9 +315,9 @@ implements ObjectActionParameter, FacetHolder.Delegating {
     /**
      * Hook method; {@link ObjectActionParameterContributee contributed action parameter}s override.
      */
-    protected Can<ManagedObject> argsForDefaultOrChoices(
+    protected List<ManagedObject> argsForDefaultOrChoices(
             final ManagedObject adapter,
-            final Can<ManagedObject> argumentsIfAvailable) {
+            final List<ManagedObject> argumentsIfAvailable) {
         return argumentsIfAvailable;
     }
 
@@ -358,7 +359,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
 
     private ActionArgVisibilityContext createArgumentVisibilityContext(
             final ManagedObject objectAdapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
@@ -369,7 +370,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
     @Override
     public Consent isVisible(
             final ManagedObject targetAdapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final VisibilityContext<?> ic = createArgumentVisibilityContext(
@@ -385,7 +386,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
 
     private ActionArgUsabilityContext createArgumentUsabilityContext(
             final ManagedObject objectAdapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
@@ -401,7 +402,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
     @Override
     public Consent isUsable(
             final ManagedObject targetAdapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
         final UsabilityContext<?> ic = createArgumentUsabilityContext(
@@ -419,7 +420,7 @@ implements ObjectActionParameter, FacetHolder.Delegating {
     @Override
     public ActionArgValidityContext createProposedArgumentInteractionContext(
             final ManagedObject objectAdapter,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
@@ -465,14 +466,14 @@ implements ObjectActionParameter, FacetHolder.Delegating {
      * to do this in two passes, one to build up the argument set as a single
      * unit, and then validate each in turn.
      */
-    private Can<ManagedObject> arguments(final ManagedObject proposedValue) {
+    private List<ManagedObject> arguments(final ManagedObject proposedValue) {
         final int parameterCount = getAction().getParameterCount();
         final ManagedObject[] arguments = new ManagedObject[parameterCount];
         for(int i=0; i< parameterCount; ++i) {
             arguments[i] = ManagedObject.empty();
         }
         arguments[getNumber()] = proposedValue;
-        return Can.ofArray(arguments);
+        return Arrays.asList(arguments);
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
index cef6871..6684c55 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterContributeeAbstract.java
@@ -59,7 +59,7 @@ implements ObjectActionParameterContributee {
     @Override
     public Can<ManagedObject> getAutoComplete(
             final ManagedObject adapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
@@ -81,15 +81,14 @@ implements ObjectActionParameterContributee {
 
     
     @Override
-    protected Can<ManagedObject> argsForDefaultOrChoices(
+    protected List<ManagedObject> argsForDefaultOrChoices(
             final ManagedObject contributee,
-            final Can<ManagedObject> pendingArgs) {
+            final List<ManagedObject> pendingArgs) {
 
-        final List<ManagedObject> suppliedArgs = pendingArgs.stream()
-                .collect(Collectors.toCollection(ArrayList::new));
+        final List<ManagedObject> suppliedArgs = new ArrayList<>(pendingArgs);
         final int contributeeParam = contributeeAction.getContributeeParamIndex();
         ListExtensions.insert(suppliedArgs, contributeeParam, contributee);
-        return Can.ofCollection(suppliedArgs);
+        return suppliedArgs;
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
index 91129cd..8e8887b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectActionParameterMixedInAbstract.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.metamodel.specloader.specimpl;
 
+import java.util.List;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FeatureType;
@@ -45,7 +47,7 @@ implements ObjectActionParameterMixedIn {
     @Override
     public Can<ManagedObject> getAutoComplete(
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final String searchArg,
             final InteractionInitiatedBy interactionInitiatedBy) {
         
@@ -68,7 +70,7 @@ implements ObjectActionParameterMixedIn {
     @Override
     public ActionArgValidityContext createProposedArgumentInteractionContext(
             final ManagedObject mixedInAdapter,
-            final Can<ManagedObject> proposedArguments,
+            final List<ManagedObject> proposedArguments,
             final int position,
             final InteractionInitiatedBy interactionInitiatedBy) {
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
index be1c51b..e36a37b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.metamodel.specloader.specimpl;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.isis.applib.Identifier;
@@ -67,7 +68,7 @@ extends OneToManyAssociationDefault implements ContributeeMember {
         val specLoader = objectAction.getMetaModelContext().getSpecificationLoader();
         // TODO: a bit of a hack; ought really to set up a fallback TypeOfFacetDefault which ensures that there is always
         // a TypeOfFacet for any contributee associations created from contributed actions.
-        val type = actionTypeOfFacet != null? actionTypeOfFacet.value(): Object.class;
+        val type = actionTypeOfFacet != null? actionTypeOfFacet.value(): (Class)Object.class;
         return specLoader.loadSpecification(type);
     }
 
@@ -125,7 +126,7 @@ extends OneToManyAssociationDefault implements ContributeeMember {
             final ManagedObject ownerAdapter, 
             final InteractionInitiatedBy interactionInitiatedBy) {
         
-        val params = Can.ofSingleton(ownerAdapter);
+        val params = Collections.singletonList(ownerAdapter);
         
         return serviceAction.execute(getServiceAdapter(), /*mixin*/null, params, interactionInitiatedBy);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
index afa9e49..31fbbdf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@ -18,11 +18,11 @@
  */
 package org.apache.isis.metamodel.specloader.specimpl;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
@@ -152,12 +152,8 @@ public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault imp
         
         final ManagedObject mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
         return getPublishingServiceInternal().withPublishingSuppressed(
-                new PublisherDispatchService.Block<ManagedObject>() {
-                    @Override public ManagedObject exec() {
-                        return mixinAction.executeInternal(
-                                mixinAdapter, mixedInAdapter, Can.empty(), interactionInitiatedBy);
-                    }
-                });
+                () -> mixinAction.executeInternal(
+                        mixinAdapter, mixedInAdapter, Collections.emptyList(), interactionInitiatedBy));
     }
 
     @Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
index 7cf2d1f..97f9712 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.metamodel.specloader.specimpl;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.isis.applib.Identifier;
@@ -112,7 +113,7 @@ implements ContributeeMember {
             final ManagedObject ownerAdapter, 
             final InteractionInitiatedBy interactionInitiatedBy) {
         
-        val params = Can.ofSingleton(ownerAdapter);
+        val params = Collections.singletonList(ownerAdapter);
         
         return serviceAction.execute(getServiceAdapter(), /*mixin*/null, params, interactionInitiatedBy);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
index 42e8ee0..7db9bce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.metamodel.specloader.specimpl;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.isis.applib.Identifier;
@@ -137,14 +138,9 @@ public class OneToOneAssociationMixedIn extends OneToOneAssociationDefault imple
         val mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
 
         return getPublishingServiceInternal().withPublishingSuppressed(
-                new PublisherDispatchService.Block<ManagedObject>(){
-                    @Override
-                    public ManagedObject exec() {
-                        return mixinAction.executeInternal(
-                                mixinAdapter, mixedInAdapter, Can.empty(), interactionInitiatedBy);
-                    }
-                }
-                );
+                () -> mixinAction.executeInternal(
+                        mixinAdapter, mixedInAdapter, Collections.emptyList(), interactionInitiatedBy)
+        );
     }
 
     @Override
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandDtoServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandDtoServiceInternalDefault.java
index bf91a36..bd79f2c 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandDtoServiceInternalDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandDtoServiceInternalDefault.java
@@ -70,7 +70,7 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
     public CommandDto asCommandDto(
             final List<ManagedObject> targetAdapters,
             final ObjectAction objectAction,
-            final Can<ManagedObject> argAdapters) {
+            final List<ManagedObject> argAdapters) {
 
         final CommandDto dto = asCommandDto(targetAdapters);
 
@@ -130,7 +130,7 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
     public void addActionArgs(
             final ObjectAction objectAction,
             final ActionDto actionDto,
-            final Can<ManagedObject> argAdapters) {
+            final List<ManagedObject> argAdapters) {
         
         final String actionId = CommandUtil.memberIdentifierFor(objectAction);
         final ObjectSpecification onType = objectAction.getOnType();
@@ -144,7 +144,7 @@ public class CommandDtoServiceInternalDefault implements CommandDtoServiceIntern
             final ObjectActionParameter actionParameter = actionParameters.getOrThrow(paramNum);
             final String parameterName = actionParameter.getName();
             final Class<?> paramType = actionParameter.getSpecification().getCorrespondingClass();
-            final ManagedObject argAdapter = argAdapters.getOrThrow(paramNum);
+            final ManagedObject argAdapter = argAdapters.get(paramNum);
             final Object arg = argAdapter != null? argAdapter.getPojo(): null;
             final ParamsDto parameters = CommandDtoUtils.parametersFor(actionDto);
             final List<ParamDto> parameterList = parameters.getParameter();
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandExecutorServiceDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandExecutorServiceDefault.java
index 3df691f..66e85d1 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandExecutorServiceDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/command/CommandExecutorServiceDefault.java
@@ -298,16 +298,15 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
 
     }
 
-    private Can<ManagedObject> argAdaptersFor(final ActionDto actionDto) {
+    private List<ManagedObject> argAdaptersFor(final ActionDto actionDto) {
         
         val paramDtos = paramDtosFrom(actionDto);
-        
-        val argStream = paramDtos
+
+        return paramDtos
                 .stream()
                 .map(CommonDtoUtils::getValue)
-                .map(this::adapterFor);
-                
-        return Can.ofStream(argStream);
+                .map(this::adapterFor)
+                .collect(Collectors.toList());
     }
 
     private static List<ParamDto> paramDtosFrom(final ActionDto actionDto) {
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/ixn/InteractionDtoServiceInternalDefault.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
index ff34330..4c6b716 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/ixn/InteractionDtoServiceInternalDefault.java
@@ -67,7 +67,7 @@ public class InteractionDtoServiceInternalDefault implements InteractionDtoServi
     public ActionInvocationDto asActionInvocationDto(
             final ObjectAction objectAction,
             final ManagedObject targetAdapter,
-            final Can<ManagedObject> argumentAdapters) {
+            final List<ManagedObject> argumentAdapters) {
 
         final Interaction interaction = interactionContext.getInteraction();
         final int nextEventSequence = interaction.next(Interaction.Sequence.INTERACTION.id());
diff --git a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/wrapper/handlers/DomainObjectInvocationHandler.java b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/wrapper/handlers/DomainObjectInvocationHandler.java
index ad992b5..bfe5078 100644
--- a/core/runtime-services/src/main/java/org/apache/isis/runtime/services/wrapper/handlers/DomainObjectInvocationHandler.java
+++ b/core/runtime-services/src/main/java/org/apache/isis/runtime/services/wrapper/handlers/DomainObjectInvocationHandler.java
@@ -23,9 +23,11 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.EnumSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.function.Supplier;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import org.apache.isis.applib.annotation.Where;
@@ -667,7 +669,7 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
     private void checkValidity(
             final ManagedObject targetAdapter, 
             final ObjectAction objectAction, 
-            final Can<ManagedObject> argAdapters) {
+            final List<ManagedObject> argAdapters) {
         
         val interactionResult = objectAction
                 .isProposedArgumentSetValid(targetAdapter, argAdapters,getInteractionInitiatedBy())
@@ -675,10 +677,10 @@ public class DomainObjectInvocationHandler<T> extends DelegatingInvocationHandle
         notifyListenersAndVetoIfRequired(interactionResult);
     }
 
-    private Can<ManagedObject> asObjectAdaptersUnderlying(final Object[] args) {
+    private List<ManagedObject> asObjectAdaptersUnderlying(final Object[] args) {
         val argAdapters = _NullSafe.stream(args)
         .map(getObjectManager()::adapt)
-        .collect(Can.toCan());
+        .collect(Collectors.toList());
         
         return argAdapters;
     }
diff --git a/core/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java b/core/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
index d6ad588..bb24861 100644
--- a/core/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
+++ b/core/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ObjectAndActionInvocation.java
@@ -18,7 +18,8 @@
  */
 package org.apache.isis.viewer.restfulobjects.rendering.domainobjects;
 
-import org.apache.isis.commons.collections.Can;
+import java.util.List;
+
 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;
@@ -32,7 +33,7 @@ public class ObjectAndActionInvocation {
     private final ManagedObject objectAdapter;
     private final ObjectAction action;
     private final JsonRepresentation arguments;
-    private final Can<ManagedObject> argAdapters;
+    private final List<ManagedObject> argAdapters;
     private final ManagedObject returnedAdapter;
     private final ActionResultReprRenderer.SelfLink selfLink;
 
@@ -40,7 +41,7 @@ public class ObjectAndActionInvocation {
             final ManagedObject objectAdapter,
             final ObjectAction action,
             final JsonRepresentation arguments,
-            final Can<ManagedObject> argAdapters,
+            final List<ManagedObject> argAdapters,
             final ManagedObject returnedAdapter,
             final ActionResultReprRenderer.SelfLink selfLink) {
         
@@ -64,7 +65,7 @@ public class ObjectAndActionInvocation {
         return arguments;
     }
 
-    public Can<ManagedObject> getArgAdapters() {
+    public List<ManagedObject> getArgAdapters() {
         return argAdapters;
     }
 
diff --git a/core/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java b/core/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
index c6714be..70fa281 100644
--- a/core/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
+++ b/core/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
@@ -247,7 +247,7 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
                 
                 val paramIndex = i;
                 val param = parameters.getOrThrow(paramIndex);
-                val argAdapter = argAdapters.getOrThrow(paramIndex);
+                val argAdapter = argAdapters.get(paramIndex);
 
                 if(buf.length() > 0) {
                     buf.append(",");
diff --git a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectActionArgHelper.java b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectActionArgHelper.java
index 15d00ce..1c74a2a 100644
--- a/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectActionArgHelper.java
+++ b/core/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/ObjectActionArgHelper.java
@@ -55,7 +55,7 @@ public class ObjectActionArgHelper {
         this.action = action;
     }
 
-    public Can<ManagedObject> parseAndValidateArguments(final JsonRepresentation arguments) {
+    public List<ManagedObject> parseAndValidateArguments(final JsonRepresentation arguments) {
         final List<JsonRepresentation> argList = argListFor(action, arguments);
 
         final List<ManagedObject> argAdapters = _Lists.newArrayList();
@@ -83,9 +83,8 @@ public class ObjectActionArgHelper {
         }
 
         // validate entire argument set
-        val args = Can.ofCollection(argAdapters);
         final Consent consent = action.isArgumentSetValid(
-                objectAdapter, args, InteractionInitiatedBy.USER);
+                objectAdapter, argAdapters, InteractionInitiatedBy.USER);
         if (consent.isVetoed()) {
             arguments.mapPut("x-ro-invalidReason", consent.getReason());
             valid = false;
@@ -98,7 +97,7 @@ public class ObjectActionArgHelper {
                     "Validation failed, see body for details");
         }
 
-        return args;
+        return argAdapters;
     }
 
     private static List<JsonRepresentation> argListFor(final ObjectAction action, final JsonRepresentation arguments) {
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java
index 17f5a4f..d47e15f 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionArgumentModel.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.viewer.wicket.model.models;
 
+import java.util.List;
+
 import org.apache.wicket.model.IModel;
 
 import org.apache.isis.commons.collections.Can;
@@ -30,5 +32,5 @@ public interface ActionArgumentModel extends IModel<ManagedObject> {
 
     void reset();
 
-    void setActionArgsHint(Can<ManagedObject> arguments);
+    void setActionArgsHint(List<ManagedObject> arguments);
 }
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index ee6a4b5..33f8f43 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -23,6 +23,8 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -116,8 +118,6 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
 
     /**
      * Factory method for creating {@link PageParameters}.
-     *
-     * see {@link #ActionModel(PageParameters, SpecificationLoader)}
      */
     public static PageParameters createPageParameters(ManagedObject adapter, ObjectAction objectAction) {
 
@@ -303,7 +303,6 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
 
     /**
      * Copy constructor, as called by {@link #copy()}.
-     * @param commonContext 
      */
     private ActionModel(ActionModel actionModel) {
         super(actionModel.getCommonContext());
@@ -450,7 +449,7 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
     private ManagedObject executeAction() {
 
         val targetAdapter = getTargetAdapter();
-        val arguments = getArgumentsAsImmutable();
+        final List<ManagedObject> arguments = getArgumentsAsImmutable();
         final ObjectAction action = getAction();
 
         // if this action is a mixin, then it will fill in the details automatically.
@@ -509,7 +508,7 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
 
     public String getReasonInvalidIfAny() {
         val targetAdapter = getTargetAdapter();
-        val proposedArguments = getArgumentsAsImmutable();
+        final List<ManagedObject> proposedArguments = getArgumentsAsImmutable();
         final ObjectAction objectAction = getAction();
         final Consent validity = objectAction
                 .isProposedArgumentSetValid(targetAdapter, proposedArguments, InteractionInitiatedBy.USER);
@@ -521,7 +520,7 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
         throw new UnsupportedOperationException("target adapter for ActionModel cannot be changed");
     }
 
-    public Can<ManagedObject> getArgumentsAsImmutable() {
+    public List<ManagedObject> getArgumentsAsImmutable() {
         if(this.arguments.size() < getAction().getParameterCount()) {
             primeArgumentModels();
         }
@@ -532,7 +531,7 @@ public class ActionModel extends BookmarkableModel<ManagedObject> implements For
             final ActionArgumentModel actionArgumentModel = this.arguments.get(i);
             arguments[i] = actionArgumentModel.getObject();
         }
-        return Can.ofArray(arguments);
+        return Collections.unmodifiableList(Arrays.asList(arguments));
     }
 
     @Override
diff --git a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index d549117..a7deaf6 100644
--- a/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -187,7 +187,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public ManagedObject getDefault(
                     final ScalarModel scalarModel,
-                    final Can<ManagedObject> pendingArgs,
+                    final List<ManagedObject> pendingArgs,
                     final int paramNumUpdated,
                     final AuthenticationSession authenticationSession) {
 
@@ -208,7 +208,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public List<ManagedObject> getChoices(
                     final ScalarModel scalarModel,
-                    final Can<ManagedObject> pendingArgs,
+                    final List<ManagedObject> pendingArgs,
                     final AuthenticationSession authenticationSession) {
 
                 final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
@@ -232,7 +232,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public List<ManagedObject> getAutoComplete(
                     final ScalarModel scalarModel,
-                    final Can<ManagedObject> pendingArgs, // ignored for properties
+                    final List<ManagedObject> pendingArgs, // ignored for properties
                     final String searchArg,
                     final AuthenticationSession authenticationSession) {
 
@@ -423,7 +423,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public ManagedObject getDefault(
                     final ScalarModel scalarModel,
-                    final Can<ManagedObject> pendingArgs,
+                    final List<ManagedObject> pendingArgs,
                     final int paramNumUpdated,
                     final AuthenticationSession authenticationSession) {
 
@@ -444,7 +444,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public List<ManagedObject> getChoices(
                     final ScalarModel scalarModel,
-                    final Can<ManagedObject> pendingArgs,
+                    final List<ManagedObject> pendingArgs,
                     final AuthenticationSession authenticationSession) {
                 
                 final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
@@ -470,7 +470,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
             @Override
             public List<ManagedObject> getAutoComplete(
                     final ScalarModel scalarModel,
-                    final Can<ManagedObject> pendingArgs,
+                    final List<ManagedObject> pendingArgs,
                     final String searchArg,
                     final AuthenticationSession authenticationSession) {
                 
@@ -549,7 +549,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
                         scalarModel.getSpecificationLoader());
                 final ManagedObject parentAdapter =
                         scalarModel.getParentEntityModel().load();
-                final ManagedObject defaultAdapter = actionParameter.getDefault(parentAdapter, Can.empty(), null);
+                final ManagedObject defaultAdapter = actionParameter.getDefault(parentAdapter, Collections.emptyList(), null);
                 scalarModel.setObject(defaultAdapter);
             }
 
@@ -625,20 +625,20 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
 
         public abstract ManagedObject getDefault(
                 ScalarModel scalarModel,
-                Can<ManagedObject> pendingArgs,
+                List<ManagedObject> pendingArgs,
                 int paramNumUpdated,
                 AuthenticationSession authenticationSession);
 
         public abstract boolean hasChoices(ScalarModel scalarModel);
         public abstract List<ManagedObject> getChoices(
                 ScalarModel scalarModel,
-                Can<ManagedObject> pendingArgs,
+                List<ManagedObject> pendingArgs,
                 AuthenticationSession authenticationSession);
 
         public abstract boolean hasAutoComplete(ScalarModel scalarModel);
         public abstract List<ManagedObject> getAutoComplete(
                 ScalarModel scalarModel,
-                Can<ManagedObject> pendingArgs,
+                List<ManagedObject> pendingArgs,
                 String searchArg,
                 AuthenticationSession authenticationSession);
 
@@ -917,7 +917,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
     }
 
     public List<ManagedObject> getChoices(
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final AuthenticationSession authenticationSession) {
         
         return kind.getChoices(this, pendingArgs, authenticationSession);
@@ -928,7 +928,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
     }
 
     public List<ManagedObject> getAutoComplete(
-            final Can<ManagedObject> pendingArgs,
+            final List<ManagedObject> pendingArgs,
             final String searchTerm,
             final AuthenticationSession authenticationSession) {
         
@@ -1214,7 +1214,6 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
      * edit mode (eg for a parameter), or can be switched into edit mode, eg for an editable property or an
      * associated action of a property with 'inline_as_if_edit'
      *
-     * @param deploymentCategory - used to determine the actions to discover (can vary, eg if prototyping).
      * @return <tt>true</tt> if the widget for this model must be editable.
      */
     public boolean mustBeEditable() {
@@ -1224,11 +1223,10 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
     }
 
     /**
-     * Similar to {@link #mustBeEditable(DeploymentCategory)}, though not called from the same locations.
+     * Similar to {@link #mustBeEditable()}, though not called from the same locations.
      *
      * My suspicion is that it amounts to more or less the same set of conditions.
      *
-     * @param deploymentCategory
      * @return
      */
     @Override
@@ -1243,7 +1241,7 @@ implements LinksProvider, FormExecutorContext, ActionArgumentModel {
      * @implNote transient because only temporary hint.
      */
     @Getter @Setter
-    private transient Can<ManagedObject> actionArgsHint;
+    private transient List<ManagedObject> actionArgsHint;
 
 
     @Override
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
index ee6f3de..063d700 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actions/ActionParametersForm.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.actions;
 
+import java.util.Collections;
 import java.util.List;
 
 import org.apache.wicket.Component;
@@ -90,7 +91,7 @@ class ActionParametersForm extends PromptFormAbstract<ActionModel> {
             val realTargetAdapter = actionModel.getActionMemento().getAction(getSpecificationLoader())
                     .realTargetAdapter(targetAdapter);
             final Consent consent = apm.getActionParameter(getSpecificationLoader())
-                    .isVisible(realTargetAdapter, Can.empty(), InteractionInitiatedBy.USER);
+                    .isVisible(realTargetAdapter, Collections.emptyList(), InteractionInitiatedBy.USER);
             final boolean allowed = consent.isAllowed();
             paramPanel.setVisible(allowed);
         }
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
index 2e1c8f3..b3516aa 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract2.java
@@ -39,6 +39,7 @@ import org.apache.wicket.model.Model;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.services.metamodel.MetaModelService;
+import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.ioc.BeanSort;
@@ -134,7 +135,7 @@ implements ScalarModelSubscriber2 {
             final AjaxRequestTarget target) {
 
         final ObjectAction action = actionModel.getActionMemento().getAction(getSpecificationLoader());
-        val pendingArguments = actionModel.getArgumentsAsImmutable();
+        final List<ManagedObject> pendingArguments = actionModel.getArgumentsAsImmutable();
 
         // could almost certainly simplify this... (used by visibility and usability checks)
         final ObjectActionParameter actionParameter = action.getParameters().getOrThrow(paramNumToPossiblyUpdate);
@@ -174,7 +175,7 @@ implements ScalarModelSubscriber2 {
         val actionParameterMemento = new ActionParameterMemento(actionParameter);
         val actionArgumentModel = actionModel.getArgumentModel(actionParameterMemento);
 
-        val pendingArg = pendingArguments.getOrThrow(paramNumToPossiblyUpdate);
+        val pendingArg = pendingArguments.get(paramNumToPossiblyUpdate);
         
         if (defaultIfAny != null) {
             scalarModel.setObject(defaultIfAny);
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
index e43a4fe..d80957f 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelSelect2Abstract.java
@@ -113,7 +113,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
     /**
      * sets up the choices, also ensuring that any currently held value is compatible.
      */
-    private void setProviderAndCurrAndPending(Select2 select2, Can<ManagedObject> pendingArgs) {
+    private void setProviderAndCurrAndPending(Select2 select2, List<ManagedObject> pendingArgs) {
 
         final ChoiceProvider<ObjectMemento> choiceProvider = buildChoiceProvider(pendingArgs);
 
@@ -130,12 +130,12 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
     }
 
     /**
-     * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, Can<ManagedObject>)})
+     * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, List<ManagedObject>)})
      */
-    protected abstract ChoiceProvider<ObjectMemento> buildChoiceProvider(Can<ManagedObject> pendingArgs);
+    protected abstract ChoiceProvider<ObjectMemento> buildChoiceProvider(List<ManagedObject> pendingArgs);
 
     /**
-     * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, Can<ManagedObject>)})
+     * Mandatory hook (is called by {@link #setProviderAndCurrAndPending(Select2, List<ManagedObject>)})
      */
     protected abstract void syncIfNull(Select2 select2);
 
@@ -181,7 +181,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
             final int paramNumToPossiblyUpdate,
             final AjaxRequestTarget target) {
 
-        val arguments = actionModel.getArgumentsAsImmutable();
+        final List<ManagedObject> arguments = actionModel.getArgumentsAsImmutable();
 
         val repaint = super.updateIfNecessary(actionModel, paramNumUpdated, paramNumToPossiblyUpdate, target);
 
@@ -198,7 +198,7 @@ public abstract class ScalarPanelSelect2Abstract extends ScalarPanelAbstract2 {
         }
     }
 
-    private boolean updateChoices(Can<ManagedObject> pendingArgs) {
+    private boolean updateChoices(List<ManagedObject> pendingArgs) {
         if (select2 == null) {
             return false;
         }
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
index f578ec9..9348155 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/reference/ReferencePanel.java
@@ -20,6 +20,7 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.reference;
 
 import java.util.ArrayList;
+import java.util.List;
 import java.util.stream.Collectors;
 
 import org.apache.wicket.AttributeModifier;
@@ -340,7 +341,7 @@ public class ReferencePanel extends ScalarPanelSelect2Abstract {
     // //////////////////////////////////////
 
     @Override
-    protected ChoiceProvider<ObjectMemento> buildChoiceProvider(Can<ManagedObject> pendingArgs) {
+    protected ChoiceProvider<ObjectMemento> buildChoiceProvider(List<ManagedObject> pendingArgs) {
         
         val commonContext = super.getCommonContext();
         
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
index a3df988..84401aa 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/valuechoices/ValueChoicesSelect2Panel.java
@@ -74,7 +74,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
     }
 
 
-    private List<ObjectMemento> getChoiceMementos(final Can<ManagedObject> pendingArgs) {
+    private List<ObjectMemento> getChoiceMementos(final List<ManagedObject> pendingArgs) {
         
         val commonContext = super.getCommonContext();
         
@@ -165,7 +165,7 @@ public class ValueChoicesSelect2Panel extends ScalarPanelSelect2Abstract {
     // in corresponding code in ReferencePanelFactory, these is a branch for different types of providers
     // (choice vs autoComplete).  Here though - because values don't currently support autoComplete - no branch is required
     @Override
-    protected ChoiceProvider<ObjectMemento> buildChoiceProvider(Can<ManagedObject> pendingArgs) {
+    protected ChoiceProvider<ObjectMemento> buildChoiceProvider(List<ManagedObject> pendingArgs) {
         final List<ObjectMemento> choicesMementos = getChoiceMementos(pendingArgs);
         return new ObjectAdapterMementoProviderForValueChoices(scalarModel, choicesMementos);
     }
diff --git a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
index 8453be1..6397b23 100644
--- a/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
+++ b/core/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderForReferenceParamOrPropertyAutoComplete.java
@@ -20,6 +20,7 @@ package org.apache.isis.viewer.wicket.ui.components.widgets.select2.providers;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._NullSafe;
@@ -63,13 +64,13 @@ extends ObjectAdapterMementoProviderAbstract {
         
     }
     
-    private Can<ManagedObject> reconstructDependentArgs(List<ObjectMemento> dependentArgMementos) {
+    private List<ManagedObject> reconstructDependentArgs(List<ObjectMemento> dependentArgMementos) {
         val commonContext = super.getCommonContext();
-        val pendingArgsStream = _NullSafe.stream(dependentArgMementos)
+        val pendingArgsList = _NullSafe.stream(dependentArgMementos)
             .map(commonContext::reconstructObject)
-            .map(ManagedObject.class::cast);
+            .map(ManagedObject.class::cast).collect(Collectors.toList());
         
-        return Can.ofStream(pendingArgsStream);
+        return pendingArgsList;
     }
 
 }