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 2022/09/01 09:36:50 UTC

[isis] 01/01: ISIS-3197: adds support for datatables.net

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

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

commit e44e411a5a33c4e3186eed0855768a517003a39f
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Sep 1 10:33:22 2022 +0100

    ISIS-3197: adds support for datatables.net
---
 .../isis/applib/annotation/ActionLayout.java       |   1 +
 .../isis/applib/annotation/CollectionLayout.java   |   9 ++
 .../isis/applib/annotation/DomainObjectLayout.java |   8 ++
 .../isis/applib/annotation/TableDecoration.java    |  60 ++++++++
 bom/pom.xml                                        |   2 +
 .../apache/isis/core/config/IsisConfiguration.java | 157 ++++++++++++++-------
 ...shingPolicies.java => ActionConfigOptions.java} |  57 ++------
 ...ies.java => CollectionLayoutConfigOptions.java} |  41 ++++--
 ...uration.java => DomainObjectConfigOptions.java} |  22 +--
 ...s.java => DomainObjectLayoutConfigOptions.java} |  30 ++--
 ...erPolicies.java => ParameterConfigOptions.java} |   4 +-
 ...nfiguration.java => PropertyConfigOptions.java} |  21 +--
 .../actions/layout/ActionLayoutFacetFactory.java   |   1 +
 .../layout/CollectionLayoutFacetFactory.java       |   8 ++
 .../PagedFacetForCollectionLayoutAnnotation.java   |  11 +-
 ...agedFacetOverriddenByDataTablesDecoration.java} |  17 +--
 .../CollectionLayoutTableDecorationFacet.java      |  75 ++++++++++
 ...lectionLayoutTableDecorationFacetAbstract.java} |  16 +--
 ...orationFacetForCollectionLayoutAnnotation.java} |  12 +-
 ...ForCollectionLayoutAnnotationAsConfigured.java} |  12 +-
 ...youtTableDecorationFacetFromConfiguration.java} |  12 +-
 .../CommandPublishingFacetForActionAnnotation.java |   4 +-
 ...ommandPublishingFacetForPropertyAnnotation.java |   4 +-
 ...onPublishingActionFacetForActionAnnotation.java |   4 +-
 ...blishingPropertyFacetForPropertyAnnotation.java |   4 +-
 .../ImmutableFacetForDomainObjectAnnotation.java   |   4 +-
 ...gePublishingFacetForDomainObjectAnnotation.java |   4 +-
 .../DomainObjectLayoutFacetFactory.java            |   5 +
 .../PagedFacetForDomainObjectLayoutAnnotation.java |  12 +-
 ...agedFacetOverriddenByDataTablesDecoration.java} |  13 +-
 .../DomainObjectLayoutTableDecorationFacet.java    |  74 ++++++++++
 ...nObjectLayoutTableDecorationFacetAbstract.java} |  16 +--
 ...ationFacetForDomainObjectLayoutAnnotation.java} |  12 +-
 ...rDomainObjectLayoutAnnotationAsConfigured.java} |  12 +-
 ...youtTableDecorationFacetFromConfiguration.java} |  12 +-
 .../metamodel/facets/object/paged/PagedFacet.java  |  14 --
 ...ActionFacetForActionAnnotationAsConfigured.java |   4 +-
 .../depdef/ParameterDependentDefaultsFacet.java    |  13 +-
 .../ParameterDependentDefaultsFacetAbstract.java   |   6 +-
 ...pendentDefaultsFacetForParameterAnnotation.java |   4 +-
 ...terDependentDefaultsFacetFromConfiguration.java |   4 +-
 .../apache/isis/core/metamodel/util/Facets.java    |   6 +-
 .../action/ActionAnnotationFacetFactoryTest.java   |   4 +-
 ...tationFacetFactoryTest_executionPublishing.java |  26 ++--
 .../DomainObjectAnnotationFacetFactoryTest.java    |  29 ++--
 core/pom.xml                                       |   6 +
 viewers/wicket/ui/pom.xml                          |  37 ++---
 .../entity/collection/EntityCollectionPanel.java   |   7 +
 .../StandaloneCollectionPanel.java                 |   6 +
 .../isis/viewer/wicket/ui/pages/PageAbstract.java  |  11 ++
 .../bootstrap/css/bootstrap-overrides-all-v2.css   |  18 ++-
 .../DatatablesCssBootstrap5ReferenceWkt.java       |  48 +++++++
 .../datatables/DatatablesCssReferenceWkt.java      |  48 +++++++
 ...DatatablesJavaScriptBootstrap5ReferenceWkt.java |  49 +++++++
 .../DatatablesJavaScriptReferenceWkt.java          |  49 +++++++
 .../DatatablesJavaScriptResourceReferenceInit.java |  75 ++++++++++
 .../ui/pages/common/datatables/dataTables.init.js  |  14 +-
 .../common/viewer/js/jquery.isis.wicket.viewer.js  |   7 +-
 .../config/WicketViewerCssBundleInit.java          |   2 +
 59 files changed, 922 insertions(+), 321 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
index fece9cda9a..6eeadfa62f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/ActionLayout.java
@@ -261,4 +261,5 @@ public @interface ActionLayout {
     String sequence()
             default "";
 
+
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
index f02ced6c30..ee703ec938 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/CollectionLayout.java
@@ -59,6 +59,7 @@ public @interface CollectionLayout {
     String cssClass()
             default "";
 
+
     /**
      * Indicates which view is used by default to render the collection.
      *
@@ -167,4 +168,12 @@ public @interface CollectionLayout {
     Class<? extends Comparator> sortedBy()
             default Comparator.class;
 
+    /**
+     * Whether a parented collection when represented in a table form should additionally be
+     * &quot;decorated&quot; with client-side (javascript) enhancements, for example to enable paging and filtering.
+     */
+    TableDecoration tableDecoration()
+            default TableDecoration.NOT_SPECIFIED;
+
+
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
index 5eeeb6dd27..56b2df4d75 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/DomainObjectLayout.java
@@ -140,6 +140,14 @@ public @interface DomainObjectLayout {
     String plural()
             default "";
 
+    /**
+     * Whether a standalone collection when represented in a table form should additionally be
+     * &quot;decorated&quot; with client-side (javascript) enhancements, for example to enable paging and filtering.
+     */
+    TableDecoration tableDecoration()
+            default TableDecoration.NOT_SPECIFIED;
+
+
     /**
      * Which subclass of {@link CssClassUiEvent} should be used to obtain a CSS class.
      *
diff --git a/api/applib/src/main/java/org/apache/isis/applib/annotation/TableDecoration.java b/api/applib/src/main/java/org/apache/isis/applib/annotation/TableDecoration.java
new file mode 100644
index 0000000000..b350c45c67
--- /dev/null
+++ b/api/applib/src/main/java/org/apache/isis/applib/annotation/TableDecoration.java
@@ -0,0 +1,60 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.applib.annotation;
+
+/**
+ * The options for defining how a parented or standalone collection when represented in a table form should additionally
+ * be &quot;decorated&quot; with client-side (javascript) enhancements.
+ *
+ * <p>
+ *     This is supported by the Wicket viewer, the principle use case being to enable <a href="https://datatables.net>datatables.net</a>
+ *     to be used for client-side paging and filtering.
+ * </p>
+ *
+ * @since 1.x {@index}
+ */
+public enum TableDecoration {
+
+    /**
+     * The collection's table representation should be decorated, if at all, as configured in <tt>application.properties</tt>.
+     *
+     * <p>
+     *     If there is no configuration, then default to use {@link TableDecoration#NONE no} decoration.
+     * </p>
+     */
+    AS_CONFIGURED,
+
+    /**
+     * If this option declares that the collection's table representation should not be decorated.
+     */
+    NONE,
+
+    /**
+     * If this option declares that the collection's table representation be decorated using
+     * <a href="https://datatables.net>datatables.net</a> for client-side paging and filtering.
+     */
+    DATATABLES_NET,
+
+    /**
+     * Ignore the value provided by this annotation (meaning that the framework will keep searching, in meta
+     * annotations or superclasses/interfaces).
+     */
+    NOT_SPECIFIED
+
+}
diff --git a/bom/pom.xml b/bom/pom.xml
index fe4b1d6693..a67a0a4c54 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -348,6 +348,8 @@ It is therefore a copy of org.apache:apache, with customisations clearly identif
         <datanucleus-maven-plugin.version>6.0.0-release</datanucleus-maven-plugin.version>
         <datanucleus-rdbms.version>6.0.1</datanucleus-rdbms.version>
 
+        <datatables.version>1.12.1</datatables.version>
+
         <docx4j.version>11.3.2</docx4j.version>
 
         <easymock.version>4.3</easymock.version>
diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index fc578dbed0..6679ae37f9 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -49,7 +49,8 @@ import org.springframework.validation.annotation.Validated;
 
 import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.ActionLayout;
-import org.apache.isis.applib.annotation.DependentDefaultsPolicy;
+import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Introspection.IntrospectionPolicy;
 import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -63,12 +64,12 @@ import org.apache.isis.applib.services.userui.UserMenu;
 import org.apache.isis.applib.value.semantics.TemporalValueSemantics.TemporalEditingPattern;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.context._Context;
-import org.apache.isis.core.config.metamodel.facets.DefaultViewConfiguration;
-import org.apache.isis.core.config.metamodel.facets.EditingObjectsConfiguration;
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
-import org.apache.isis.core.config.metamodel.facets.PublishingPolicies.ActionPublishingPolicy;
-import org.apache.isis.core.config.metamodel.facets.PublishingPolicies.EntityChangePublishingPolicy;
-import org.apache.isis.core.config.metamodel.facets.PublishingPolicies.PropertyPublishingPolicy;
+import org.apache.isis.core.config.metamodel.facets.ActionConfigOptions;
+import org.apache.isis.core.config.metamodel.facets.DomainObjectLayoutConfigOptions;
+import org.apache.isis.core.config.metamodel.facets.CollectionLayoutConfigOptions;
+import org.apache.isis.core.config.metamodel.facets.DomainObjectConfigOptions;
+import org.apache.isis.core.config.metamodel.facets.ParameterConfigOptions;
+import org.apache.isis.core.config.metamodel.facets.PropertyConfigOptions;
 import org.apache.isis.core.config.metamodel.services.ApplicationFeaturesInitConfiguration;
 import org.apache.isis.core.config.metamodel.specloader.IntrospectionMode;
 import org.apache.isis.core.config.viewer.web.DialogMode;
@@ -133,7 +134,7 @@ public class IsisConfiguration {
              * Setting this option to {@literal true} allows {@code CsrfFilter}(s) to be
              * configured. Yet EXPERIMENTAL.
              *
-             * @see org.springframework.security.web.csrf.CsrfFilter
+             * @see <code>org.springframework.security.web.csrf.CsrfFilter</code>
              * @see "https://www.baeldung.com/spring-security-registered-filters"
              */
             private boolean allowCsrfFilters = false;
@@ -272,7 +273,7 @@ public class IsisConfiguration {
                  *     Note: this applies only to domain entities, not view models.
                  * </p>
                  */
-                private EntityChangePublishingPolicy entityChangePublishing = EntityChangePublishingPolicy.NONE;
+                private DomainObjectConfigOptions.EntityChangePublishingPolicy entityChangePublishing = DomainObjectConfigOptions.EntityChangePublishingPolicy.NONE;
 
                 /**
                  * The default for whether the properties of domain objects can be edited, or whether instead they
@@ -282,7 +283,7 @@ public class IsisConfiguration {
                  * This setting can be overridden on a case-by-case basis using {@link DomainObject#getEditing()  DomainObject#getEditing()}
                  * </p>
                  */
-                private EditingObjectsConfiguration editing = EditingObjectsConfiguration.FALSE;
+                private DomainObjectConfigOptions.EditingObjectsConfiguration editing = DomainObjectConfigOptions.EditingObjectsConfiguration.FALSE;
 
                 private final CreatedLifecycleEvent createdLifecycleEvent = new CreatedLifecycleEvent();
                 @Data
@@ -561,6 +562,12 @@ public class IsisConfiguration {
                  */
                 private int paged = 25;
 
+                /**
+                 * Defines whether the table representation of a standalone collection of this domain class should be
+                 * decorated using a client-side Javascript library, eg for client-side paging and filtering.
+                 */
+                private DomainObjectLayoutConfigOptions.TableDecoration tableDecoration = DomainObjectLayoutConfigOptions.TableDecoration.NONE;
+
                 private final CssClassUiEvent cssClassUiEvent = new CssClassUiEvent();
                 @Data
                 public static class CssClassUiEvent {
@@ -749,7 +756,7 @@ public class IsisConfiguration {
                  *  {@link org.apache.isis.applib.annotation.Action#commandPublishing()}.
                  * </p>
                  */
-                private ActionPublishingPolicy commandPublishing = ActionPublishingPolicy.NONE;
+                private ActionConfigOptions.PublishingPolicy commandPublishing = ActionConfigOptions.PublishingPolicy.NONE;
 
                 /**
                  * The default for whether action invocations should be sent through to the
@@ -767,7 +774,7 @@ public class IsisConfiguration {
                  *  This setting can be overridden on a case-by-case basis using {@link org.apache.isis.applib.annotation.Action#executionPublishing()  Action#executionPublishing()}.
                  * </p>
                  */
-                private ActionPublishingPolicy executionPublishing = ActionPublishingPolicy.NONE;
+                private ActionConfigOptions.PublishingPolicy executionPublishing = ActionConfigOptions.PublishingPolicy.NONE;
 
                 private final DomainEvent domainEvent = new DomainEvent();
                 @Data
@@ -841,6 +848,7 @@ public class IsisConfiguration {
                     @Getter(lazy = true)
                     private final Map<Pattern, String> patternsAsMap = asMap(getPatterns());
 
+
                 }
 
                 private final CssClassFa cssClassFa = new CssClassFa();
@@ -919,7 +927,6 @@ public class IsisConfiguration {
             public static class Property {
 
                 /**
-                 * TODO[2464] semantic renaming audit/dispatch -> publishing
                  * The default for whether property edits should be reified
                  * as a {@link org.apache.isis.applib.services.command.Command},
                  * to be sent to any registered
@@ -929,18 +936,17 @@ public class IsisConfiguration {
                  *
                  * <p>
                  *  This setting can be overridden on a case-by-case basis using
-                 *  {@link org.apache.isis.applib.annotation.Property#commandDispatch()}.
+                 *  {@link org.apache.isis.applib.annotation.Property#commandPublishing()}.
                  * </p>
                  */
-                private PropertyPublishingPolicy commandPublishing = PropertyPublishingPolicy.NONE;
+                private PropertyConfigOptions.PublishingPolicy commandPublishing = PropertyConfigOptions.PublishingPolicy.NONE;
 
                 /**
-                 * TODO[2464] semantic renaming audit/dispatch -> publishing
                  * The default for whether property edits should be sent through to the
                  * {@link org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber} for publishing.
                  *
                  * <p>
-                 * The service's {@link org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber#publish(Execution) publish}
+                 * The service's {@link org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber#onExecution(Execution)}  publish}
                  * method is called only once per transaction, with
                  * {@link Execution} collecting details of
                  * the identity of the target object, the property edited, and the new value of the property.
@@ -948,10 +954,10 @@ public class IsisConfiguration {
                  *
                  * <p>
                  * This setting can be overridden on a case-by-case basis using
-                 * {@link org.apache.isis.applib.annotation.Property#publishing()}.
+                 * {@link org.apache.isis.applib.annotation.Property#executionPublishing()}.
                  * </p>
                  */
-                private PropertyPublishingPolicy executionPublishing = PropertyPublishingPolicy.NONE;
+                private PropertyConfigOptions.PublishingPolicy executionPublishing = PropertyConfigOptions.PublishingPolicy.NONE;
 
                 private final DomainEvent domainEvent = new DomainEvent();
                 @Data
@@ -1076,7 +1082,7 @@ public class IsisConfiguration {
                  *     view.
                  * </p>
                  */
-                private DefaultViewConfiguration defaultView = DefaultViewConfiguration.TABLE;
+                private CollectionLayoutConfigOptions.DefaultView defaultView = CollectionLayoutConfigOptions.DefaultView.TABLE;
 
                 /**
                  * Defines the default number of objects that are shown in a &quot;parented&quot; collection of a
@@ -1089,6 +1095,13 @@ public class IsisConfiguration {
                  * </p>
                  */
                 private int paged = 12;
+
+                /**
+                 * Defines whether the table representation of a collection should be decorated using a client-side
+                 * Javascript library, eg for client-side paging and filtering.
+                 */
+                private CollectionLayoutConfigOptions.TableDecoration tableDecoration = CollectionLayoutConfigOptions.TableDecoration.NONE;
+
             }
 
             private final ViewModel viewModel = new ViewModel();
@@ -1102,10 +1115,8 @@ public class IsisConfiguration {
                     public static class SemanticChecking {
                         /**
                          * Whether to check for inconsistencies between the usage of
-                         * {@link org.apache.isis.applib.annotation.DomainObject},
-                         * {@link org.apache.isis.applib.annotation.ViewModel},
-                         * {@link org.apache.isis.applib.annotation.DomainObjectLayout} and
-                         * {@link org.apache.isis.applib.annotation.ViewModelLayout}.
+                         * {@link org.apache.isis.applib.annotation.DomainObject} and
+                         * {@link org.apache.isis.applib.annotation.DomainObjectLayout}.
                           */
                         private boolean enable = false;
                     }
@@ -1123,15 +1134,16 @@ public class IsisConfiguration {
                      * Influences whether an {@link org.apache.isis.applib.events.ui.CssClassUiEvent} should
                      * be published (on the internal {@link org.apache.isis.applib.services.eventbus.EventBusService})
                      * whenever a view model (annotated with
-                     * {@link org.apache.isis.applib.annotation.ViewModel @ViewModel}) is about to be rendered in the
+                     * {@link org.apache.isis.applib.annotation.DomainObject#nature() @DomainObject#nature} of
+                     * {@link org.apache.isis.applib.annotation.Nature#VIEW_MODEL}) is about to be rendered in the
                      * UI - thereby allowing subscribers to optionally
                      * {@link org.apache.isis.applib.events.ui.CssClassUiEvent#setCssClass(String)} change) the CSS
                      * classes that are used.
                      *
                      * <p>
                      *     The algorithm for determining whether (and what type of) an event is sent depends on the value of the
-                     *     {@link org.apache.isis.applib.annotation.ViewModelLayout#cssClassUiEvent()}  @ViewModelLayout(cssClassEvent=...)} for the
-                     *     domain object in question:
+                     *     {@link org.apache.isis.applib.annotation.DomainObjectLayout#cssClassUiEvent() @DomainObjectLayout(cssClassEvent=...)}
+                     *     for the domain object in question:
                      * </p>
                      *
                      * <ul>
@@ -1160,15 +1172,16 @@ public class IsisConfiguration {
                      * Influences whether an {@link org.apache.isis.applib.events.ui.IconUiEvent} should
                      * be published (on the internal {@link org.apache.isis.applib.services.eventbus.EventBusService})
                      * whenever a view model (annotated with
-                     * {@link org.apache.isis.applib.annotation.ViewModel @ViewModel}) is about to be rendered in the
+                     * {@link org.apache.isis.applib.annotation.DomainObject#nature() @DomainObject#nature} of
+                     * {@link org.apache.isis.applib.annotation.Nature#VIEW_MODEL})  is about to be rendered in the
                      * UI - thereby allowing subscribers to optionally
                      * {@link org.apache.isis.applib.events.ui.IconUiEvent#setIconName(String)} change) the icon that
                      * is used.
                      *
                      * <p>
                      *     The algorithm for determining whether (and what type of) an event is sent depends on the value of the
-                     *     {@link org.apache.isis.applib.annotation.ViewModelLayout#iconUiEvent()}  @ViewModelLayout(iconEvent=...)} for the
-                     *     domain object in question:
+                     *     {@link org.apache.isis.applib.annotation.DomainObjectLayout#iconUiEvent() @ViewModelLayout(iconEvent=...)}
+                     *     for the domain object in question:
                      * </p>
                      *
                      * <ul>
@@ -1197,7 +1210,8 @@ public class IsisConfiguration {
                      * Influences whether an {@link org.apache.isis.applib.events.ui.LayoutUiEvent} should
                      * be published (on the internal {@link org.apache.isis.applib.services.eventbus.EventBusService})
                      * whenever a view model (annotated with
-                     * {@link org.apache.isis.applib.annotation.ViewModel @ViewModel}) is about to be rendered in the
+                     * {@link org.apache.isis.applib.annotation.DomainObject#nature() @DomainObject#nature} of
+                     * {@link org.apache.isis.applib.annotation.Nature#VIEW_MODEL})  is about to be rendered in the
                      * UI - thereby allowing subscribers to optionally
                      * {@link org.apache.isis.applib.events.ui.LayoutUiEvent#setLayout(String)} change) the layout that is used.
                      *
@@ -1208,8 +1222,8 @@ public class IsisConfiguration {
                      *
                      * <p>
                      *     The algorithm for determining whether (and what type of) an event is sent depends on the value of the
-                     *     {@link org.apache.isis.applib.annotation.ViewModelLayout#layoutUiEvent()}  @ViewModelLayout(layoutEvent=...)} for the
-                     *     domain object in question:
+                     *     {@link org.apache.isis.applib.annotation.DomainObjectLayout#layoutUiEvent() @DomainObjectLayout(layoutEvent=...)}
+                     *     for the domain object in question:
                      * </p>
                      *
                      * <ul>
@@ -1238,14 +1252,15 @@ public class IsisConfiguration {
                      * Influences whether an {@link org.apache.isis.applib.events.ui.TitleUiEvent} should
                      * be published (on the internal {@link org.apache.isis.applib.services.eventbus.EventBusService})
                      * whenever a view model (annotated with
-                     * {@link org.apache.isis.applib.annotation.ViewModel @ViewModel}) is about to be rendered in the
+                     * {@link org.apache.isis.applib.annotation.DomainObject#nature() @DomainObject#nature} of
+                     * {@link org.apache.isis.applib.annotation.Nature#VIEW_MODEL})  is about to be rendered in the
                      * UI - thereby allowing subscribers to
                      * optionally {@link org.apache.isis.applib.events.ui.TitleUiEvent#setTitle(String)} change)
                      * the title that is used.
                      *
                      * <p>
                      *     The algorithm for determining whether (and what type of) an event is sent depends on the value of the
-                     *     {@link org.apache.isis.applib.annotation.ViewModelLayout#titleUiEvent()}  @ViewModelLayout(titleEvent=...)} for the
+                     *     {@link org.apache.isis.applib.annotation.DomainObjectLayout#titleUiEvent() @DomainObjectLayout(titleEvent=...)} for the
                      *     domain object in question:
                      * </p>
                      *
@@ -1283,7 +1298,7 @@ public class IsisConfiguration {
                  *     {@link org.apache.isis.applib.annotation.Parameter#dependentDefaultsPolicy() Parameter#dependentDefaultsPolicy()}.
                  * </p>
                  */
-                private ParameterPolicies.DependentDefaultsPolicy dependentDefaultsPolicy = ParameterPolicies.DependentDefaultsPolicy.UPDATE_DEPENDENT;
+                private ParameterConfigOptions.DependentDefaultsPolicy dependentDefaultsPolicy = ParameterConfigOptions.DependentDefaultsPolicy.UPDATE_DEPENDENT;
 
             }
 
@@ -1791,7 +1806,7 @@ public class IsisConfiguration {
             /**
              * Vendor specific SQL syntax to create a DB schema.
              * <p>
-             * This template is passed through {@link String#format(String, schemaName)} to
+             * This template is passed through {@link String#format(String, Object...)} to
              * make the actual SQL statement thats to be used against the configured data-source.
              * <p>
              * Default template is {@literal CREATE SCHEMA IF NOT EXISTS %S} with the schema name
@@ -2622,6 +2637,49 @@ public class IsisConfiguration {
                 }
             }
 
+            private final Table table = new Table();
+            @Data
+            public static class Table {
+
+                private final Decoration decoration = new Decoration();
+                @Data
+                public static class Decoration {
+
+                    private final DataTablesNet dataTablesNet = new DataTablesNet();
+                    @Data
+                    public static class DataTablesNet {
+
+                        /**
+                         * If specified, then the string is passed verbatim as the initialization options for the
+                         * <a href="https://datatables.net">https://datatables.net</a> table decoration
+                         * (as defined by {@link DomainObjectLayout#tableDecoration()} or by
+                         * {@link CollectionLayout#tableDecoration()}).
+                         *
+                         * <p>
+                         *     For example, a value of "info: false, pagingType: 'numbers'" will result in
+                         *     datatables.net being initialized using:
+                         *
+                         *     <pre>
+                         *     $(document).ready(function () {
+                         *       $('table.table-decoration').DataTable({
+                         *         info: false, pagingType: 'numbers'
+                         *       });
+                         *     });
+                         *     </pre>
+                         *     thus switching off the info panel and using the simple 'numbers' paging type.
+                         * </p>
+                         *
+                         * @see <a href="https://datatables.net/examples/basic_init/index.html">https://datatables.net/examples/basic_init/index.html</a>
+                         */
+                        private Optional<String> options = Optional.empty();
+
+                    }
+
+                }
+
+
+            }
+
         }
     }
 
@@ -2684,9 +2742,8 @@ public class IsisConfiguration {
 
 
                 /**
-                 * How to handle objects that are to be
-                 * {@link FixtureScripts#newFixtureResult(FixtureScript, String, Object, boolean) added}
-                 * into a {@link FixtureResult} but which are not yet persisted.
+                 * How to handle objects that are to be added into a <code>FixtureResult</code> but which are not yet
+                 * persisted.
                  */
                 public enum NonPersistedObjectsStrategy {
                     PERSIST,
@@ -2697,11 +2754,10 @@ public class IsisConfiguration {
                  * How to handle fixture scripts that are submitted to be executed more than once.
                  *
                  * <p>
-                 *     Note that this is a {@link FixtureScripts#getMultipleExecutionStrategy() global setting} of the
-                 *     {@link FixtureScripts} service; there isn't (currently) any way to mix-and-match fixture scripts that are
-                 *     written with differing semantics in mind.  Ideally it should be the responsibility of the fixture script
-                 *     itself to determine whether it should be run.  As a partial solution to this, the
-                 *
+                 *     Note that this is a global setting of the <code>FixtureScripts</code> service; there isn't
+                 *     (currently) any way to mix-and-match fixture scripts that are written with differing semantics
+                 *     in mind.  Ideally it should be the responsibility of the fixture script itself to determine
+                 *     whether it should be run.
                  * </p>
                  */
                 public enum MultipleExecutionStrategy {
@@ -2776,7 +2832,7 @@ public class IsisConfiguration {
                  *
                  * <p>
                  * Note that this policy can be overridden on a fixture-by-fixture basis if the fixture implements
-                 * {@link FixtureScriptWithExecutionStrategy}.
+                 * <code>FixtureScriptWithExecutionStrategy</code>.
                  * </p>
                  */
                 private MultipleExecutionStrategy multipleExecutionStrategy = MultipleExecutionStrategy.EXECUTE_ONCE_BY_CLASS;
@@ -3162,7 +3218,8 @@ public class IsisConfiguration {
              * whether to prefer to allow the permission or to veto it.
              *
              * <p>
-             *     This is only used if a {@link org.apache.isis.extensions.secman.applib.permission.spi.PermissionsEvaluationService} has not been declared explicitly.
+             *     This is only used an implementation of secman's <code>PermissionsEvaluationService</code> SPI has
+             *     not been provided explicitly.
              * </p>
              */
             private PermissionsEvaluationPolicy permissionsEvaluationPolicy = PermissionsEvaluationPolicy.ALLOW_BEATS_VETO;
@@ -3190,12 +3247,12 @@ public class IsisConfiguration {
             }
 
             /**
-             * Whether the presence of SecMan should result in the automatic suppression of the {@link org.apache.isis.applib.services.userui.UserMenu}'s
-             * {@link UserMenu#me() me} action.
+             * Whether the presence of SecMan should result in the automatic suppression of the
+             * {@link org.apache.isis.applib.services.userui.UserMenu}'s {@link UserMenu.me#act() me()} action.
              *
              * <p>
              *     This is normally what is required as SecMan's <code>ApplicationUser</code> is a more comprehensive
-             *     representation of the current user.  If the default {@link UserMenu#me() me} action is not
+             *     representation of the current user.  If the default {@link UserMenu.me#act() me()} action is not
              *     suppressed, then the end-user will see two actions with the name &quot;me&quot; in the tertiary menu.
              * </p>
              */
diff --git a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/PublishingPolicies.java b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ActionConfigOptions.java
similarity index 54%
rename from core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/PublishingPolicies.java
rename to core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ActionConfigOptions.java
index a116b89d6e..199cb37d17 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/PublishingPolicies.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ActionConfigOptions.java
@@ -22,60 +22,25 @@ import org.apache.isis.core.config.IsisConfiguration;
 
 import lombok.NonNull;
 
-public final class PublishingPolicies {
+public final class ActionConfigOptions {
 
-    // -- ACTIONS
-
-    public static enum ActionPublishingPolicy {
-        ALL,
-        IGNORE_SAFE,
-        /**
-         * Alias for {@link #IGNORE_SAFE}
-         */
-        IGNORE_QUERY_ONLY,
-        NONE;
-    }
-
-    // -- PROPERTIES
-
-    public enum PropertyPublishingPolicy {
-        ALL,
-        NONE;
-    }
-
-    // -- ENTITIES
-
-    public enum EntityChangePublishingPolicy {
-        ALL,
-        NONE;
-    }
-
-    // -- FACTORIES
-
-    public static ActionPublishingPolicy actionCommandPublishingPolicy(
+    public static PublishingPolicy actionCommandPublishingPolicy(
             final @NonNull IsisConfiguration configuration) {
         return configuration.getApplib().getAnnotation().getAction().getCommandPublishing();
     }
 
-    public static ActionPublishingPolicy actionExecutionPublishingPolicy(
+    public static PublishingPolicy actionExecutionPublishingPolicy(
             final @NonNull IsisConfiguration configuration) {
         return configuration.getApplib().getAnnotation().getAction().getExecutionPublishing();
     }
 
-    public static PropertyPublishingPolicy propertyCommandPublishingPolicy(
-            final @NonNull IsisConfiguration configuration) {
-        return configuration.getApplib().getAnnotation().getProperty().getCommandPublishing();
-    }
-
-    public static PropertyPublishingPolicy propertyExecutionPublishingPolicy(
-            final @NonNull IsisConfiguration configuration) {
-        return configuration.getApplib().getAnnotation().getProperty().getExecutionPublishing();
-    }
-
-    public static EntityChangePublishingPolicy entityChangePublishingPolicy(
-            final @NonNull IsisConfiguration configuration) {
-        return configuration.getApplib().getAnnotation().getDomainObject().getEntityChangePublishing();
+    public static enum PublishingPolicy {
+        ALL,
+        IGNORE_SAFE,
+        /**
+         * Alias for {@link #IGNORE_SAFE}
+         */
+        IGNORE_QUERY_ONLY,
+        NONE;
     }
-
-
 }
diff --git a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/CollectionLayoutConfigOptions.java
similarity index 51%
copy from core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java
copy to core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/CollectionLayoutConfigOptions.java
index 2e2d6c6f1e..07d9872d32 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/CollectionLayoutConfigOptions.java
@@ -22,34 +22,47 @@ import org.apache.isis.core.config.IsisConfiguration;
 
 import lombok.NonNull;
 
-public final class ParameterPolicies {
+public final class CollectionLayoutConfigOptions {
 
-    // -- ACTIONS
+    public enum TableDecoration {
 
-    public static enum DependentDefaultsPolicy {
         /**
-         * Allows user provided parameters in the UI to be overwritten via defaults semantics.
+         * If this option declares that the collection's table representation should not be decorated.
          */
-        UPDATE_DEPENDENT,
+        NONE,
+
         /**
-         * Forbids user provided parameters in the UI to be overwritten via defaults semantics.
+         * If this option declares that the collection's table representation be decorated using
+         * <a href="https://datatables.net>datatables.net</a> for client-side paging and filtering.
          */
-        PRESERVE_CHANGES;
-        public boolean isUpdateDependent() { return this == UPDATE_DEPENDENT; }
-        public boolean isPreserveChanges() { return this == PRESERVE_CHANGES; }
+        DATATABLES_NET;
+
+        public boolean isNone() { return this == NONE; }
+        public boolean isDataTablesNet() { return this == DATATABLES_NET; }
 
-        public static DependentDefaultsPolicy defaultsIfNotSpecifiedOtherwise() {
-            return UPDATE_DEPENDENT; // backwards compatibility
-        }
     }
 
 
     // -- FACTORIES
 
-    public static DependentDefaultsPolicy dependentDefaultsPolicy(
+    public static TableDecoration tableDecoration(
             final @NonNull IsisConfiguration configuration) {
-        return configuration.getApplib().getAnnotation().getParameter().getDependentDefaultsPolicy();
+        return configuration.getApplib().getAnnotation().getCollectionLayout().getTableDecoration();
     }
 
 
+    public enum DefaultView {
+        HIDDEN(),
+        TABLE();
+
+        public String toNameLower() {
+            return name().toLowerCase();
+        }
+
+        public static DefaultView from(IsisConfiguration configuration) {
+            return configuration.getApplib().getAnnotation().getCollectionLayout().getDefaultView();
+        }
+
+
+    }
 }
diff --git a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DefaultViewConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DomainObjectConfigOptions.java
similarity index 66%
copy from core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DefaultViewConfiguration.java
copy to core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DomainObjectConfigOptions.java
index 3656876e88..33ba72326f 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DefaultViewConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DomainObjectConfigOptions.java
@@ -20,17 +20,23 @@ package org.apache.isis.core.config.metamodel.facets;
 
 import org.apache.isis.core.config.IsisConfiguration;
 
-public enum DefaultViewConfiguration {
-    HIDDEN(),
-    TABLE();
+import lombok.NonNull;
 
-    public String toNameLower() {
-        return name().toLowerCase();
-    }
+public final class DomainObjectConfigOptions {
 
-    public static DefaultViewConfiguration from(IsisConfiguration configuration) {
-        return configuration.getApplib().getAnnotation().getCollectionLayout().getDefaultView();
+    public enum EntityChangePublishingPolicy {
+        ALL,
+        NONE;
     }
 
+    public enum EditingObjectsConfiguration {
+        TRUE,
+        FALSE;
+    }
+    
+    public static EntityChangePublishingPolicy entityChangePublishingPolicy(
+            final @NonNull IsisConfiguration configuration) {
+        return configuration.getApplib().getAnnotation().getDomainObject().getEntityChangePublishing();
+    }
 
 }
diff --git a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DomainObjectLayoutConfigOptions.java
similarity index 56%
copy from core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java
copy to core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DomainObjectLayoutConfigOptions.java
index 2e2d6c6f1e..d55678e651 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DomainObjectLayoutConfigOptions.java
@@ -15,6 +15,7 @@
  *  KIND, either express or implied.  See the License for the
  *  specific language governing permissions and limitations
  *  under the License.
+ *
  */
 package org.apache.isis.core.config.metamodel.facets;
 
@@ -22,33 +23,30 @@ import org.apache.isis.core.config.IsisConfiguration;
 
 import lombok.NonNull;
 
-public final class ParameterPolicies {
+public final class DomainObjectLayoutConfigOptions {
 
-    // -- ACTIONS
+    public enum TableDecoration {
 
-    public static enum DependentDefaultsPolicy {
         /**
-         * Allows user provided parameters in the UI to be overwritten via defaults semantics.
+         * If this option declares that the collection's table representation should not be decorated.
          */
-        UPDATE_DEPENDENT,
+        NONE,
+
         /**
-         * Forbids user provided parameters in the UI to be overwritten via defaults semantics.
+         * If this option declares that the collection's table representation be decorated using
+         * <a href="https://datatables.net>datatables.net</a> for client-side paging and filtering.
          */
-        PRESERVE_CHANGES;
-        public boolean isUpdateDependent() { return this == UPDATE_DEPENDENT; }
-        public boolean isPreserveChanges() { return this == PRESERVE_CHANGES; }
+        DATATABLES_NET;
 
-        public static DependentDefaultsPolicy defaultsIfNotSpecifiedOtherwise() {
-            return UPDATE_DEPENDENT; // backwards compatibility
-        }
-    }
+        public boolean isNone() { return this == NONE; }
+        public boolean isDataTablesNet() { return this == DATATABLES_NET; }
 
+    }
 
-    // -- FACTORIES
 
-    public static DependentDefaultsPolicy dependentDefaultsPolicy(
+    public static DomainObjectLayoutConfigOptions.TableDecoration tableDecoration(
             final @NonNull IsisConfiguration configuration) {
-        return configuration.getApplib().getAnnotation().getParameter().getDependentDefaultsPolicy();
+        return configuration.getApplib().getAnnotation().getDomainObjectLayout().getTableDecoration();
     }
 
 
diff --git a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterConfigOptions.java
similarity index 97%
rename from core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java
rename to core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterConfigOptions.java
index 2e2d6c6f1e..a12abdaf1a 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterPolicies.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/ParameterConfigOptions.java
@@ -22,9 +22,7 @@ import org.apache.isis.core.config.IsisConfiguration;
 
 import lombok.NonNull;
 
-public final class ParameterPolicies {
-
-    // -- ACTIONS
+public final class ParameterConfigOptions {
 
     public static enum DependentDefaultsPolicy {
         /**
diff --git a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DefaultViewConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/PropertyConfigOptions.java
similarity index 61%
rename from core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DefaultViewConfiguration.java
rename to core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/PropertyConfigOptions.java
index 3656876e88..dc6f36ffb3 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/DefaultViewConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/PropertyConfigOptions.java
@@ -20,17 +20,22 @@ package org.apache.isis.core.config.metamodel.facets;
 
 import org.apache.isis.core.config.IsisConfiguration;
 
-public enum DefaultViewConfiguration {
-    HIDDEN(),
-    TABLE();
+import lombok.NonNull;
 
-    public String toNameLower() {
-        return name().toLowerCase();
-    }
+public final class PropertyConfigOptions {
 
-    public static DefaultViewConfiguration from(IsisConfiguration configuration) {
-        return configuration.getApplib().getAnnotation().getCollectionLayout().getDefaultView();
+    public static PublishingPolicy propertyCommandPublishingPolicy(
+            final @NonNull IsisConfiguration configuration) {
+        return configuration.getApplib().getAnnotation().getProperty().getCommandPublishing();
     }
 
+    public static PublishingPolicy propertyExecutionPublishingPolicy(
+            final @NonNull IsisConfiguration configuration) {
+        return configuration.getApplib().getAnnotation().getProperty().getExecutionPublishing();
+    }
 
+    public enum PublishingPolicy {
+        ALL,
+        NONE;
+    }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
index cc33a71c92..284b44c702 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
@@ -24,6 +24,7 @@ import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.tabledec.DomainObjectLayoutTableDecorationFacet;
 import org.apache.isis.core.metamodel.facets.actions.position.ActionPositionFacetFallback;
 import org.apache.isis.core.metamodel.facets.actions.redirect.RedirectFacetFallback;
 import org.apache.isis.core.metamodel.facets.members.layout.group.LayoutGroupFacetFromActionLayoutAnnotation;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java
index 0e04a491cd..866598b809 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/CollectionLayoutFacetFactory.java
@@ -24,6 +24,7 @@ import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.collections.layout.tabledec.CollectionLayoutTableDecorationFacet;
 import org.apache.isis.core.metamodel.facets.members.layout.order.LayoutOrderFacetFromCollectionLayoutAnnotation;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorForAmbiguousMixinAnnotations;
 
@@ -72,6 +73,10 @@ extends FacetFactoryAbstract {
                 MemberNamedFacetForCollectionLayoutAnnotation
                 .create(collectionLayoutIfAny, facetHolder));
 
+        addFacetIfPresent(
+                CollectionLayoutTableDecorationFacet
+                        .create(collectionLayoutIfAny, getConfiguration(), facetHolder));
+
         addFacetIfPresent(
                 PagedFacetForCollectionLayoutAnnotation
                 .create(collectionLayoutIfAny, facetHolder));
@@ -79,6 +84,9 @@ extends FacetFactoryAbstract {
         addFacetIfPresent(
                 SortedByFacetForCollectionLayoutAnnotation
                 .create(collectionLayoutIfAny, facetHolder));
+
+
+
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutAnnotation.java
index a4a4e795e1..4d2a1fdf1a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutAnnotation.java
@@ -22,14 +22,23 @@ import java.util.Optional;
 
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.collections.layout.tabledec.CollectionLayoutTableDecorationFacet;
+import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
 import org.apache.isis.core.metamodel.facets.object.paged.PagedFacetAbstract;
 
+import lombok.val;
+
 public class PagedFacetForCollectionLayoutAnnotation extends PagedFacetAbstract {
 
-    public static Optional<PagedFacetForCollectionLayoutAnnotation> create(
+    public static Optional<PagedFacet> create(
             final Optional<CollectionLayout> collectionLayoutIfAny,
             final FacetHolder holder) {
 
+        val tableDecorationFacet = holder.getFacet(CollectionLayoutTableDecorationFacet.class);
+        if (tableDecorationFacet.value().isDataTablesNet()) {
+            return Optional.of(new PagedFacetOverriddenByDataTablesDecoration(holder));
+        }
+
         return collectionLayoutIfAny
                 .map(CollectionLayout::paged)
                 .filter(paged -> paged != -1)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetOverriddenByDataTablesDecoration.java
similarity index 64%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutAnnotation.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetOverriddenByDataTablesDecoration.java
index a4a4e795e1..e13c953a9d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetForCollectionLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/PagedFacetOverriddenByDataTablesDecoration.java
@@ -22,22 +22,13 @@ import java.util.Optional;
 
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.collections.layout.tabledec.CollectionLayoutTableDecorationFacet;
 import org.apache.isis.core.metamodel.facets.object.paged.PagedFacetAbstract;
 
-public class PagedFacetForCollectionLayoutAnnotation extends PagedFacetAbstract {
+public class PagedFacetOverriddenByDataTablesDecoration extends PagedFacetAbstract {
 
-    public static Optional<PagedFacetForCollectionLayoutAnnotation> create(
-            final Optional<CollectionLayout> collectionLayoutIfAny,
-            final FacetHolder holder) {
-
-        return collectionLayoutIfAny
-                .map(CollectionLayout::paged)
-                .filter(paged -> paged != -1)
-                .map(paged -> new PagedFacetForCollectionLayoutAnnotation(paged, holder));
-    }
-
-    private PagedFacetForCollectionLayoutAnnotation(final int paged, final FacetHolder holder) {
-        super(paged, holder);
+    PagedFacetOverriddenByDataTablesDecoration(final FacetHolder holder) {
+        super(Integer.MAX_VALUE, holder);
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacet.java
new file mode 100644
index 0000000000..4af53730f6
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacet.java
@@ -0,0 +1,75 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.isis.core.metamodel.facets.collections.layout.tabledec;
+
+import java.util.Optional;
+
+import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.annotation.Parameter;
+import org.apache.isis.commons.internal.base._Optionals;
+import org.apache.isis.core.config.IsisConfiguration;
+import org.apache.isis.core.config.metamodel.facets.CollectionLayoutConfigOptions;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.SingleValueFacet;
+
+/**
+ * Determines how dependent parameter values should be updated,
+ * if one of the earlier parameter values is changed.
+ * <p>
+ * Corresponds to annotating the action method {@link Parameter#dependentDefaultsPolicy()}.
+ *
+ * @since 2.0
+ */
+public interface CollectionLayoutTableDecorationFacet
+extends SingleValueFacet<CollectionLayoutConfigOptions.TableDecoration> {
+
+    static Optional<CollectionLayoutTableDecorationFacet> create(
+            final Optional<CollectionLayout> collectionLayoutIfAny,
+            final IsisConfiguration configuration,
+            final FacetHolder holder) {
+
+        final CollectionLayoutConfigOptions.TableDecoration defaultPolicyFromConfig =
+                CollectionLayoutConfigOptions.tableDecoration(configuration);
+
+        return _Optionals.orNullable(
+
+        collectionLayoutIfAny
+        .map(CollectionLayout::tableDecoration)
+        .<CollectionLayoutTableDecorationFacet>map(tableDecoration -> {
+            switch (tableDecoration) {
+            case NONE:
+                return new CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotation(
+                        CollectionLayoutConfigOptions.TableDecoration.NONE, holder);
+            case DATATABLES_NET:
+                return new CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotation(
+                        CollectionLayoutConfigOptions.TableDecoration.DATATABLES_NET, holder);
+            case NOT_SPECIFIED:
+            case AS_CONFIGURED:
+                return new CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotation(defaultPolicyFromConfig, holder);
+            default:
+            }
+            throw new IllegalStateException("tableDecoration '" + tableDecoration + "' not recognised");
+        })
+        ,
+        () -> new CollectionLayoutTableDecorationFacetFromConfiguration(defaultPolicyFromConfig, holder));
+
+    }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetAbstract.java
similarity index 66%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetAbstract.java
index aa184e2f2f..9d120cd398 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetAbstract.java
@@ -17,23 +17,23 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
+package org.apache.isis.core.metamodel.facets.collections.layout.tabledec;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.CollectionLayoutConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
 
-abstract class ParameterDependentDefaultsFacetAbstract
-extends SingleValueFacetAbstract<ParameterPolicies.DependentDefaultsPolicy>
-implements ParameterDependentDefaultsFacet {
+abstract class CollectionLayoutTableDecorationFacetAbstract
+extends SingleValueFacetAbstract<CollectionLayoutConfigOptions.TableDecoration>
+implements CollectionLayoutTableDecorationFacet {
 
     private static final Class<? extends Facet> type() {
-        return ParameterDependentDefaultsFacet.class;
+        return CollectionLayoutTableDecorationFacet.class;
     }
 
-    protected ParameterDependentDefaultsFacetAbstract(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+    protected CollectionLayoutTableDecorationFacetAbstract(
+            final CollectionLayoutConfigOptions.TableDecoration value, final FacetHolder holder) {
         super(type(), value, holder);
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotation.java
similarity index 66%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotation.java
index c0bb59a50c..0423facc44 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotation.java
@@ -17,16 +17,16 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
+package org.apache.isis.core.metamodel.facets.collections.layout.tabledec;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.CollectionLayoutConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class ParameterDependentDefaultsFacetFromConfiguration
-extends ParameterDependentDefaultsFacetAbstract {
+public class CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotation
+extends CollectionLayoutTableDecorationFacetAbstract {
 
-    ParameterDependentDefaultsFacetFromConfiguration(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+    CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotation(
+            final CollectionLayoutConfigOptions.TableDecoration value, final FacetHolder holder) {
         super(value, holder);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotationAsConfigured.java
similarity index 64%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotationAsConfigured.java
index c0bb59a50c..186356653d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotationAsConfigured.java
@@ -17,16 +17,16 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
+package org.apache.isis.core.metamodel.facets.collections.layout.tabledec;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.CollectionLayoutConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class ParameterDependentDefaultsFacetFromConfiguration
-extends ParameterDependentDefaultsFacetAbstract {
+public class CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotationAsConfigured
+extends CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotation {
 
-    ParameterDependentDefaultsFacetFromConfiguration(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+    CollectionLayoutTableDecorationFacetForCollectionLayoutAnnotationAsConfigured(
+            final CollectionLayoutConfigOptions.TableDecoration value, final FacetHolder holder) {
         super(value, holder);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetForParameterAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetFromConfiguration.java
similarity index 68%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetForParameterAnnotation.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetFromConfiguration.java
index e36364da56..6a1e82c379 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetForParameterAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/collections/layout/tabledec/CollectionLayoutTableDecorationFacetFromConfiguration.java
@@ -17,16 +17,16 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
+package org.apache.isis.core.metamodel.facets.collections.layout.tabledec;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.CollectionLayoutConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class ParameterDependentDefaultsFacetForParameterAnnotation
-extends ParameterDependentDefaultsFacetAbstract {
+public class CollectionLayoutTableDecorationFacetFromConfiguration
+extends CollectionLayoutTableDecorationFacetAbstract {
 
-    ParameterDependentDefaultsFacetForParameterAnnotation(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+    CollectionLayoutTableDecorationFacetFromConfiguration(
+            final CollectionLayoutConfigOptions.TableDecoration value, final FacetHolder holder) {
         super(value, holder);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java
index 5a05bf35fb..3f2cd2aaaf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacetForActionAnnotation.java
@@ -26,7 +26,7 @@ import org.apache.isis.applib.services.commanddto.processor.CommandDtoProcessor;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.commons.internal.base._Optionals;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.metamodel.facets.PublishingPolicies;
+import org.apache.isis.core.config.metamodel.facets.ActionConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
 
@@ -40,7 +40,7 @@ public class CommandPublishingFacetForActionAnnotation extends CommandPublishing
             final ServiceInjector servicesInjector,
             final FacetHolder holder) {
 
-        val publishingPolicy = PublishingPolicies.actionCommandPublishingPolicy(configuration);
+        val publishingPolicy = ActionConfigOptions.actionCommandPublishingPolicy(configuration);
 
         return _Optionals.orNullable(
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
index 2ffcf478a2..63c5dcdf38 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/command/CommandPublishingFacetForPropertyAnnotation.java
@@ -26,7 +26,7 @@ import org.apache.isis.applib.services.commanddto.processor.CommandDtoProcessor;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.commons.internal.base._Optionals;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.metamodel.facets.PublishingPolicies;
+import org.apache.isis.core.config.metamodel.facets.PropertyConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
 import lombok.val;
@@ -39,7 +39,7 @@ public class CommandPublishingFacetForPropertyAnnotation extends CommandPublishi
             final FacetHolder holder,
             final ServiceInjector servicesInjector) {
 
-        val publishingPolicy = PublishingPolicies.propertyCommandPublishingPolicy(configuration);
+        val publishingPolicy = PropertyConfigOptions.propertyCommandPublishingPolicy(configuration);
 
         return _Optionals.orNullable(
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetForActionAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetForActionAnnotation.java
index fafcf7fb6e..76dd442291 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetForActionAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/execution/ExecutionPublishingActionFacetForActionAnnotation.java
@@ -24,7 +24,7 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.commons.internal.base._Optionals;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.metamodel.facets.PublishingPolicies;
+import org.apache.isis.core.config.metamodel.facets.ActionConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
 
@@ -38,7 +38,7 @@ extends ExecutionPublishingFacetAbstract {
             final IsisConfiguration configuration,
             final FacetHolder holder) {
 
-        val publishingPolicy = PublishingPolicies.actionExecutionPublishingPolicy(configuration);
+        val publishingPolicy = ActionConfigOptions.actionExecutionPublishingPolicy(configuration);
 
         return _Optionals.orNullable(
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetForPropertyAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetForPropertyAnnotation.java
index a5aa850da5..1080565d50 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetForPropertyAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/members/publish/execution/ExecutionPublishingPropertyFacetForPropertyAnnotation.java
@@ -24,7 +24,7 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.commons.internal.base._Optionals;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.metamodel.facets.PublishingPolicies;
+import org.apache.isis.core.config.metamodel.facets.PropertyConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
 import lombok.val;
@@ -37,7 +37,7 @@ extends ExecutionPublishingFacetAbstract {
             final IsisConfiguration configuration,
             final FacetHolder holder) {
 
-        val publishingPolicy = PublishingPolicies.propertyExecutionPublishingPolicy(configuration);
+        val publishingPolicy = PropertyConfigOptions.propertyExecutionPublishingPolicy(configuration);
 
         return _Optionals.orNullable(
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
index 439fe2f1a8..bfba27e892 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/editing/ImmutableFacetForDomainObjectAnnotation.java
@@ -23,7 +23,7 @@ import java.util.Optional;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.metamodel.facets.EditingObjectsConfiguration;
+import org.apache.isis.core.config.metamodel.facets.DomainObjectConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
 import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacetAbstract;
@@ -42,7 +42,7 @@ extends ImmutableFacetAbstract {
 
         final boolean editingDisabledByDefault =
                 configuration.getApplib().getAnnotation().getDomainObject().getEditing()
-                == EditingObjectsConfiguration.FALSE;
+                == DomainObjectConfigOptions.EditingObjectsConfiguration.FALSE;
 
         if(domainObjectIfAny.isPresent()) {
             val domainObject = domainObjectIfAny.get();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/entitychangepublishing/EntityChangePublishingFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/entitychangepublishing/EntityChangePublishingFacetForDomainObjectAnnotation.java
index 92101d7127..38766c2ba5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/entitychangepublishing/EntityChangePublishingFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/entitychangepublishing/EntityChangePublishingFacetForDomainObjectAnnotation.java
@@ -24,7 +24,7 @@ import java.util.Optional;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.metamodel.facets.PublishingPolicies;
+import org.apache.isis.core.config.metamodel.facets.DomainObjectConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.object.publish.entitychange.EntityChangePublishingFacet;
 import org.apache.isis.core.metamodel.facets.object.publish.entitychange.EntityChangePublishingFacetAbstract;
@@ -45,7 +45,7 @@ extends EntityChangePublishingFacetAbstract {
         case NOT_SPECIFIED:
         case AS_CONFIGURED:
 
-            val publishingPolicy = PublishingPolicies.entityChangePublishingPolicy(configuration);
+            val publishingPolicy = DomainObjectConfigOptions.entityChangePublishingPolicy(configuration);
             switch (publishingPolicy) {
             case NONE:
                 return Optional.of(entityChangePublishingIfAny.isPresent()
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
index 8a4cdb5a29..955f24d025 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/DomainObjectLayoutFacetFactory.java
@@ -23,6 +23,7 @@ import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.tabledec.DomainObjectLayoutTableDecorationFacet;
 import org.apache.isis.core.metamodel.services.events.MetamodelEventService;
 
 import lombok.val;
@@ -74,6 +75,10 @@ extends FacetFactoryAbstract {
                 ObjectNamedFacetForDomainObjectLayoutAnnotation
                 .create(domainObjectLayoutIfAny, facetHolder));
 
+        addFacetIfPresent(
+                DomainObjectLayoutTableDecorationFacet
+                        .create(domainObjectLayoutIfAny, getConfiguration(), facetHolder));
+
         addFacetIfPresent(
                 PagedFacetForDomainObjectLayoutAnnotation
                 .create(domainObjectLayoutIfAny, facetHolder));
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/PagedFacetForDomainObjectLayoutAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/PagedFacetForDomainObjectLayoutAnnotation.java
index fa6f6ac49f..428ed44f0c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/PagedFacetForDomainObjectLayoutAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/PagedFacetForDomainObjectLayoutAnnotation.java
@@ -23,15 +23,25 @@ import java.util.Optional;
 
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.tabledec.DomainObjectLayoutTableDecorationFacet;
+import org.apache.isis.core.metamodel.facets.object.paged.PagedFacet;
 import org.apache.isis.core.metamodel.facets.object.paged.PagedFacetAbstract;
 
+import lombok.val;
+
 
 public class PagedFacetForDomainObjectLayoutAnnotation extends PagedFacetAbstract {
 
-    public static Optional<PagedFacetForDomainObjectLayoutAnnotation> create(
+    public static Optional<PagedFacet> create(
             final Optional<DomainObjectLayout> domainObjectLayoutIfAny,
             final FacetHolder holder) {
 
+
+        val tableDecorationFacet = holder.getFacet(DomainObjectLayoutTableDecorationFacet.class);
+        if (tableDecorationFacet.value().isDataTablesNet()) {
+            return Optional.of(new PagedFacetOverriddenByDataTablesDecoration(holder));
+        }
+
         return domainObjectLayoutIfAny
                 .map(DomainObjectLayout::paged)
                 .filter(paged -> paged > 1)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/PagedFacetOverriddenByDataTablesDecoration.java
similarity index 67%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/PagedFacetOverriddenByDataTablesDecoration.java
index c0bb59a50c..69776cef28 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/PagedFacetOverriddenByDataTablesDecoration.java
@@ -15,19 +15,16 @@
  *  KIND, either express or implied.  See the License for the
  *  specific language governing permissions and limitations
  *  under the License.
- *
  */
-package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.paged.PagedFacetAbstract;
 
-public class ParameterDependentDefaultsFacetFromConfiguration
-extends ParameterDependentDefaultsFacetAbstract {
+public class PagedFacetOverriddenByDataTablesDecoration extends PagedFacetAbstract {
 
-    ParameterDependentDefaultsFacetFromConfiguration(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
-        super(value, holder);
+    PagedFacetOverriddenByDataTablesDecoration(final FacetHolder holder) {
+        super(Integer.MAX_VALUE, holder);
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacet.java
new file mode 100644
index 0000000000..73cc2b0351
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacet.java
@@ -0,0 +1,74 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout.tabledec;
+
+import java.util.Optional;
+
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.annotation.Parameter;
+import org.apache.isis.commons.internal.base._Optionals;
+import org.apache.isis.core.config.IsisConfiguration;
+import org.apache.isis.core.config.metamodel.facets.DomainObjectLayoutConfigOptions;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.SingleValueFacet;
+
+/**
+ * Determines how dependent parameter values should be updated,
+ * if one of the earlier parameter values is changed.
+ * <p>
+ * Corresponds to annotating the action method {@link Parameter#dependentDefaultsPolicy()}.
+ *
+ * @since 2.0
+ */
+public interface DomainObjectLayoutTableDecorationFacet
+extends SingleValueFacet<DomainObjectLayoutConfigOptions.TableDecoration> {
+
+    static Optional<DomainObjectLayoutTableDecorationFacet> create(
+            final Optional<DomainObjectLayout> domainObjectLayoutIfAny,
+            final IsisConfiguration configuration,
+            final FacetHolder holder) {
+
+        final DomainObjectLayoutConfigOptions.TableDecoration defaultPolicyFromConfig =
+                DomainObjectLayoutConfigOptions.tableDecoration(configuration);
+
+        return _Optionals.orNullable(
+
+        domainObjectLayoutIfAny
+        .map(DomainObjectLayout::tableDecoration)
+        .<DomainObjectLayoutTableDecorationFacet>map(tableDecoration -> {
+            switch (tableDecoration) {
+            case NONE:
+                return new DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotation(
+                        DomainObjectLayoutConfigOptions.TableDecoration.NONE, holder);
+            case DATATABLES_NET:
+                return new DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotation(
+                        DomainObjectLayoutConfigOptions.TableDecoration.DATATABLES_NET, holder);
+            case NOT_SPECIFIED:
+            case AS_CONFIGURED:
+                return new DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotation(defaultPolicyFromConfig, holder);
+            default:
+            }
+            throw new IllegalStateException("tableDecoration '" + tableDecoration + "' not recognised");
+        })
+        ,
+        () -> new DomainObjectLayoutTableDecorationFacetFromConfiguration(defaultPolicyFromConfig, holder));
+    }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetAbstract.java
similarity index 65%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetAbstract.java
index aa184e2f2f..56c6eceb22 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetAbstract.java
@@ -17,23 +17,23 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout.tabledec;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.DomainObjectLayoutConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
 
-abstract class ParameterDependentDefaultsFacetAbstract
-extends SingleValueFacetAbstract<ParameterPolicies.DependentDefaultsPolicy>
-implements ParameterDependentDefaultsFacet {
+abstract class DomainObjectLayoutTableDecorationFacetAbstract
+extends SingleValueFacetAbstract<DomainObjectLayoutConfigOptions.TableDecoration>
+implements DomainObjectLayoutTableDecorationFacet {
 
     private static final Class<? extends Facet> type() {
-        return ParameterDependentDefaultsFacet.class;
+        return DomainObjectLayoutTableDecorationFacet.class;
     }
 
-    protected ParameterDependentDefaultsFacetAbstract(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+    protected DomainObjectLayoutTableDecorationFacetAbstract(
+            final DomainObjectLayoutConfigOptions.TableDecoration value, final FacetHolder holder) {
         super(type(), value, holder);
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotation.java
similarity index 65%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotation.java
index c0bb59a50c..1c6b8aac28 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotation.java
@@ -17,16 +17,16 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout.tabledec;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.DomainObjectLayoutConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class ParameterDependentDefaultsFacetFromConfiguration
-extends ParameterDependentDefaultsFacetAbstract {
+public class DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotation
+extends DomainObjectLayoutTableDecorationFacetAbstract {
 
-    ParameterDependentDefaultsFacetFromConfiguration(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+    DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotation(
+            final DomainObjectLayoutConfigOptions.TableDecoration value, final FacetHolder holder) {
         super(value, holder);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotationAsConfigured.java
similarity index 63%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotationAsConfigured.java
index c0bb59a50c..f54fdf68bc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotationAsConfigured.java
@@ -17,16 +17,16 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout.tabledec;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.DomainObjectLayoutConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class ParameterDependentDefaultsFacetFromConfiguration
-extends ParameterDependentDefaultsFacetAbstract {
+public class DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotationAsConfigured
+extends DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotation {
 
-    ParameterDependentDefaultsFacetFromConfiguration(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+    DomainObjectLayoutTableDecorationFacetForDomainObjectLayoutAnnotationAsConfigured(
+            final DomainObjectLayoutConfigOptions.TableDecoration value, final FacetHolder holder) {
         super(value, holder);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetFromConfiguration.java
similarity index 67%
copy from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
copy to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetFromConfiguration.java
index c0bb59a50c..842621e09d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/tabledec/DomainObjectLayoutTableDecorationFacetFromConfiguration.java
@@ -17,16 +17,16 @@
  *  under the License.
  *
  */
-package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
+package org.apache.isis.core.metamodel.facets.object.domainobjectlayout.tabledec;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.DomainObjectLayoutConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public class ParameterDependentDefaultsFacetFromConfiguration
-extends ParameterDependentDefaultsFacetAbstract {
+public class DomainObjectLayoutTableDecorationFacetFromConfiguration
+extends DomainObjectLayoutTableDecorationFacetAbstract {
 
-    ParameterDependentDefaultsFacetFromConfiguration(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+    DomainObjectLayoutTableDecorationFacetFromConfiguration(
+            final DomainObjectLayoutConfigOptions.TableDecoration value, final FacetHolder holder) {
         super(value, holder);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/paged/PagedFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/paged/PagedFacet.java
index 14ea5195cc..14b122699b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/paged/PagedFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/paged/PagedFacet.java
@@ -29,18 +29,4 @@ public interface PagedFacet extends Facet {
 
     int value();
 
-    /**
-     * Returns the page-size as held by given {@code pagedFacet} if present, otherwise
-     * falls back to {@code defaultPageSize}.
-     * @param pagedFacet - null-able
-     * @param defaultPageSize
-     */
-    static int pageSizeOrDefault(
-            final @Nullable PagedFacet pagedFacet,
-            final int defaultPageSize) {
-        return pagedFacet != null
-                ? pagedFacet.value()
-                : defaultPageSize;
-    }
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsActionFacetForActionAnnotationAsConfigured.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsActionFacetForActionAnnotationAsConfigured.java
index facf4fe3c5..e44bd5c9ff 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsActionFacetForActionAnnotationAsConfigured.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsActionFacetForActionAnnotationAsConfigured.java
@@ -19,14 +19,14 @@
  */
 package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.ParameterConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
 public class ParameterDependentDefaultsActionFacetForActionAnnotationAsConfigured
 extends ParameterDependentDefaultsFacetForParameterAnnotation {
 
     ParameterDependentDefaultsActionFacetForActionAnnotationAsConfigured(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+            final ParameterConfigOptions.DependentDefaultsPolicy value, final FacetHolder holder) {
         super(value, holder);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacet.java
index 399f449fec..3e22dc548a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacet.java
@@ -21,11 +21,10 @@ package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
 
 import java.util.Optional;
 
-import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.commons.internal.base._Optionals;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.ParameterConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleValueFacet;
 
@@ -38,15 +37,15 @@ import org.apache.isis.core.metamodel.facets.SingleValueFacet;
  * @since 2.0
  */
 public interface ParameterDependentDefaultsFacet
-extends SingleValueFacet<ParameterPolicies.DependentDefaultsPolicy> {
+extends SingleValueFacet<ParameterConfigOptions.DependentDefaultsPolicy> {
 
     static Optional<ParameterDependentDefaultsFacet> create(
             final Optional<Parameter> parameterIfAny,
             final IsisConfiguration configuration,
             final FacetHolder holder) {
 
-        final ParameterPolicies.DependentDefaultsPolicy defaultPolicyFromConfig =
-                ParameterPolicies.dependentDefaultsPolicy(configuration);
+        final ParameterConfigOptions.DependentDefaultsPolicy defaultPolicyFromConfig =
+                ParameterConfigOptions.dependentDefaultsPolicy(configuration);
 
         return _Optionals.orNullable(
 
@@ -56,10 +55,10 @@ extends SingleValueFacet<ParameterPolicies.DependentDefaultsPolicy> {
             switch (policy) {
             case PRESERVE_CHANGES:
                 return new ParameterDependentDefaultsFacetForParameterAnnotation(
-                        ParameterPolicies.DependentDefaultsPolicy.PRESERVE_CHANGES, holder);
+                        ParameterConfigOptions.DependentDefaultsPolicy.PRESERVE_CHANGES, holder);
             case UPDATE_DEPENDENT:
                 return new ParameterDependentDefaultsFacetForParameterAnnotation(
-                        ParameterPolicies.DependentDefaultsPolicy.UPDATE_DEPENDENT, holder);
+                        ParameterConfigOptions.DependentDefaultsPolicy.UPDATE_DEPENDENT, holder);
             case NOT_SPECIFIED:
             case AS_CONFIGURED:
                 return new ParameterDependentDefaultsFacetForParameterAnnotation(defaultPolicyFromConfig, holder);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java
index aa184e2f2f..7cbf17f60d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetAbstract.java
@@ -19,13 +19,13 @@
  */
 package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.ParameterConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
 
 abstract class ParameterDependentDefaultsFacetAbstract
-extends SingleValueFacetAbstract<ParameterPolicies.DependentDefaultsPolicy>
+extends SingleValueFacetAbstract<ParameterConfigOptions.DependentDefaultsPolicy>
 implements ParameterDependentDefaultsFacet {
 
     private static final Class<? extends Facet> type() {
@@ -33,7 +33,7 @@ implements ParameterDependentDefaultsFacet {
     }
 
     protected ParameterDependentDefaultsFacetAbstract(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+            final ParameterConfigOptions.DependentDefaultsPolicy value, final FacetHolder holder) {
         super(type(), value, holder);
     }
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetForParameterAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetForParameterAnnotation.java
index e36364da56..b4d4a5e65b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetForParameterAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetForParameterAnnotation.java
@@ -19,14 +19,14 @@
  */
 package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.ParameterConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
 public class ParameterDependentDefaultsFacetForParameterAnnotation
 extends ParameterDependentDefaultsFacetAbstract {
 
     ParameterDependentDefaultsFacetForParameterAnnotation(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+            final ParameterConfigOptions.DependentDefaultsPolicy value, final FacetHolder holder) {
         super(value, holder);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
index c0bb59a50c..de8be9cc33 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/depdef/ParameterDependentDefaultsFacetFromConfiguration.java
@@ -19,14 +19,14 @@
  */
 package org.apache.isis.core.metamodel.facets.param.parameter.depdef;
 
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.ParameterConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
 public class ParameterDependentDefaultsFacetFromConfiguration
 extends ParameterDependentDefaultsFacetAbstract {
 
     ParameterDependentDefaultsFacetFromConfiguration(
-            final ParameterPolicies.DependentDefaultsPolicy value, final FacetHolder holder) {
+            final ParameterConfigOptions.DependentDefaultsPolicy value, final FacetHolder holder) {
         super(value, holder);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
index a11dae3ce3..57ed70cb2f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Facets.java
@@ -38,7 +38,7 @@ import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.config.metamodel.facets.ParameterPolicies;
+import org.apache.isis.core.config.metamodel.facets.ParameterConfigOptions;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -172,11 +172,11 @@ public final class Facets {
         .map(DefaultViewFacet::value);
     }
 
-    public static ParameterPolicies.DependentDefaultsPolicy dependentDefaultsPolicy(
+    public static ParameterConfigOptions.DependentDefaultsPolicy dependentDefaultsPolicy(
             final ObjectActionParameter parameter) {
         return parameter.lookupFacet(ParameterDependentDefaultsFacet.class)
                 .map(ParameterDependentDefaultsFacet::value)
-                .orElseGet(ParameterPolicies.DependentDefaultsPolicy::defaultsIfNotSpecifiedOtherwise);
+                .orElseGet(ParameterConfigOptions.DependentDefaultsPolicy::defaultsIfNotSpecifiedOtherwise);
     }
 
     public boolean domainServiceIsPresent(final ObjectSpecification objectSpec) {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
index 9b05d572a9..398ba2e57f 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest.java
@@ -27,7 +27,7 @@ import org.junit.After;
 import org.junit.Before;
 
 import org.apache.isis.applib.mixins.system.HasInteractionId;
-import org.apache.isis.core.config.metamodel.facets.PublishingPolicies;
+import org.apache.isis.core.config.metamodel.facets.ActionConfigOptions;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
 import org.apache.isis.core.metamodel.facets.object.domainobject.domainevents.ActionDomainEventDefaultFacetForDomainObjectAnnotation;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -90,7 +90,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
     }
 
-    void allowingPublishingConfigurationToReturn(final PublishingPolicies.ActionPublishingPolicy value) {
+    void allowingPublishingConfigurationToReturn(final ActionConfigOptions.PublishingPolicy value) {
         val config = metaModelContext.getConfiguration();
         config.getApplib().getAnnotation().getAction().setExecutionPublishing(value);
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java
index b3609cea44..5e266fe656 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/actions/action/ActionAnnotationFacetFactoryTest_executionPublishing.java
@@ -29,7 +29,7 @@ import static org.junit.jupiter.api.Assertions.assertFalse;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.commons.internal.base._Blackhole;
-import org.apache.isis.core.config.metamodel.facets.PublishingPolicies;
+import org.apache.isis.core.config.metamodel.facets.ActionConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
 import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacetAbstract;
@@ -64,7 +64,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
     public void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andSafeSemantics_thenNone() {
 
         // given
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.IGNORE_QUERY_ONLY);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY);
         final Method actionMethod = findMethod(ActionAnnotationFacetFactoryTest.Customer.class, "someAction");
 
         facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.SAFE, facetedMethod) {});
@@ -82,7 +82,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
     public void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andNonSafeSemantics_thenAdded() {
 
         // given
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.IGNORE_QUERY_ONLY);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY);
         final Method actionMethod = findMethod(ActionAnnotationFacetFactoryTest.Customer.class, "someAction");
 
         facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.IDEMPOTENT, facetedMethod) {});
@@ -103,7 +103,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
     public void given_noAnnotation_and_configurationSetToIgnoreQueryOnly_andNoSemantics_thenException() {
 
         // given
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.IGNORE_QUERY_ONLY);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY);
         final Method actionMethod = findMethod(ActionAnnotationFacetFactoryTest.Customer.class, "someAction");
 
         // when
@@ -117,7 +117,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
     public void given_noAnnotation_and_configurationSetToNone_thenNone() {
 
         // given
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.NONE);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.NONE);
         final Method actionMethod = findMethod(ActionAnnotationFacetFactoryTest.Customer.class, "someAction");
 
         // when
@@ -138,7 +138,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
         // given
         final Method actionMethod = findMethod(ActionAnnotationFacetFactoryTest.Customer.class, "someAction");
 
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.ALL);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.ALL);
 
         // when
         processExecutionPublishing(facetFactory, ProcessMethodContext
@@ -160,7 +160,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
             }
         }
 
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.IGNORE_QUERY_ONLY);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY);
         final Method actionMethod = findMethod(Customer.class, "someAction");
 
         facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.SAFE, facetedMethod) {});
@@ -185,7 +185,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
             }
         }
 
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.IGNORE_QUERY_ONLY);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY);
         final Method actionMethod = findMethod(Customer.class, "someAction");
 
         facetedMethod.addFacet(new ActionSemanticsFacetAbstract(SemanticsOf.IDEMPOTENT, facetedMethod) {});
@@ -212,7 +212,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
             }
         }
 
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.IGNORE_QUERY_ONLY);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.IGNORE_QUERY_ONLY);
         final Method actionMethod = findMethod(Customer.class, "someAction");
 
         processExecutionPublishing(facetFactory, ProcessMethodContext
@@ -228,7 +228,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
             }
         }
 
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.NONE);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.NONE);
         final Method actionMethod = findMethod(Customer.class, "someAction");
 
         processExecutionPublishing(facetFactory, ProcessMethodContext
@@ -253,7 +253,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
         }
         final Method actionMethod = findMethod(Customer.class, "someAction");
 
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.ALL);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.ALL);
 
         // when
         processExecutionPublishing(facetFactory, ProcessMethodContext
@@ -281,7 +281,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
         final Method actionMethod = findMethod(Customer.class, "someAction");
 
         // even though configuration is disabled
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.NONE);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.NONE);
 
         // when
         processExecutionPublishing(facetFactory, ProcessMethodContext
@@ -307,7 +307,7 @@ public class ActionAnnotationFacetFactoryTest_executionPublishing extends Action
         final Method actionMethod = findMethod(Customer.class, "someAction");
 
         // even though configuration is disabled
-        allowingPublishingConfigurationToReturn(PublishingPolicies.ActionPublishingPolicy.NONE);
+        allowingPublishingConfigurationToReturn(ActionConfigOptions.PublishingPolicy.NONE);
 
         // when
         processExecutionPublishing(facetFactory, ProcessMethodContext
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
index 0459b2bed5..6a25f547f6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactoryTest.java
@@ -39,8 +39,7 @@ import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.mixins.system.HasInteractionId;
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.config.metamodel.facets.EditingObjectsConfiguration;
-import org.apache.isis.core.config.metamodel.facets.PublishingPolicies;
+import org.apache.isis.core.config.metamodel.facets.DomainObjectConfigOptions;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryJUnit4TestCase;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
@@ -92,14 +91,14 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
     }
 
-    void allowingEntityChangePublishingToReturn(final PublishingPolicies.EntityChangePublishingPolicy value) {
+    void allowingEntityChangePublishingToReturn(final DomainObjectConfigOptions.EntityChangePublishingPolicy value) {
         if(value!=null) {
             val config = super.metaModelContext.getConfiguration();
             config.getApplib().getAnnotation().getDomainObject().setEntityChangePublishing(value);
         }
     }
 
-    void allowingObjectsEditingToReturn(final EditingObjectsConfiguration value) {
+    void allowingObjectsEditingToReturn(final DomainObjectConfigOptions.EditingObjectsConfiguration value) {
         if(value!=null) {
             final IsisConfiguration config = super.metaModelContext.getConfiguration();
             config.getApplib().getAnnotation().getDomainObject().setEditing(value);
@@ -129,7 +128,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
             @Test
             public void configured_value_set_to_all() {
-                allowingEntityChangePublishingToReturn(PublishingPolicies.EntityChangePublishingPolicy.ALL);
+                allowingEntityChangePublishingToReturn(DomainObjectConfigOptions.EntityChangePublishingPolicy.ALL);
 
                 val context = ProcessClassContext
                         .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder);
@@ -145,7 +144,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
             @Test
             public void configured_value_set_to_none() {
-                allowingEntityChangePublishingToReturn(PublishingPolicies.EntityChangePublishingPolicy.NONE);
+                allowingEntityChangePublishingToReturn(DomainObjectConfigOptions.EntityChangePublishingPolicy.NONE);
 
                 facetFactory.process(ProcessClassContext
                         .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder));
@@ -163,7 +162,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
             @Test
             public void configured_value_set_to_all() {
-                allowingEntityChangePublishingToReturn(PublishingPolicies.EntityChangePublishingPolicy.ALL);
+                allowingEntityChangePublishingToReturn(DomainObjectConfigOptions.EntityChangePublishingPolicy.ALL);
 
                 facetFactory.process(ProcessClassContext
                         .forTesting(CustomerWithDomainObjectAndAuditingSetToAsConfigured.class, mockMethodRemover, facetHolder));
@@ -178,7 +177,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
             @Test
             public void configured_value_set_to_none() {
-                allowingEntityChangePublishingToReturn(PublishingPolicies.EntityChangePublishingPolicy.NONE);
+                allowingEntityChangePublishingToReturn(DomainObjectConfigOptions.EntityChangePublishingPolicy.NONE);
 
                 facetFactory.process(ProcessClassContext
                         .forTesting(CustomerWithDomainObjectAndAuditingSetToAsConfigured.class, mockMethodRemover, facetHolder));
@@ -214,7 +213,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
             @Test
             public void irrespective_of_configured_value() {
-                allowingEntityChangePublishingToReturn(PublishingPolicies.EntityChangePublishingPolicy.ALL);
+                allowingEntityChangePublishingToReturn(DomainObjectConfigOptions.EntityChangePublishingPolicy.ALL);
 
                 facetFactory.process(ProcessClassContext
                         .forTesting(CustomerWithDomainObjectAndAuditingSetToDisabled.class, mockMethodRemover, facetHolder));
@@ -421,7 +420,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
             @Test
             public void configured_value_set_to_true() {
-                allowingObjectsEditingToReturn(EditingObjectsConfiguration.TRUE);
+                allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.TRUE);
 
                 facetFactory.process(ProcessClassContext
                         .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder));
@@ -434,7 +433,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
             @Test
             public void configured_value_set_to_false() {
-                allowingObjectsEditingToReturn(EditingObjectsConfiguration.FALSE);
+                allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.FALSE);
 
                 facetFactory.process(ProcessClassContext
                         .forTesting(DomainObjectAnnotationFacetFactoryTest.Customer.class, mockMethodRemover, facetHolder));
@@ -467,7 +466,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
             @Test
             public void configured_value_set_to_true() {
-                allowingObjectsEditingToReturn(EditingObjectsConfiguration.TRUE);
+                allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.TRUE);
 
                 facetFactory.process(ProcessClassContext
                         .forTesting(CustomerWithDomainObjectAndEditingSetToAsConfigured.class, mockMethodRemover, facetHolder));
@@ -480,7 +479,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
             @Test
             public void configured_value_set_to_false() {
-                allowingObjectsEditingToReturn(EditingObjectsConfiguration.FALSE);
+                allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.FALSE);
 
                 facetFactory.process(ProcessClassContext
                         .forTesting(CustomerWithDomainObjectAndEditingSetToAsConfigured.class, mockMethodRemover, facetHolder));
@@ -511,7 +510,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
             @Test
             public void irrespective_of_configured_value() {
-                allowingObjectsEditingToReturn(EditingObjectsConfiguration.FALSE);
+                allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.FALSE);
 
                 facetFactory.process(ProcessClassContext
                         .forTesting(
@@ -529,7 +528,7 @@ extends AbstractFacetFactoryJUnit4TestCase {
 
             @Test
             public void irrespective_of_configured_value() {
-                allowingObjectsEditingToReturn(EditingObjectsConfiguration.TRUE);
+                allowingObjectsEditingToReturn(DomainObjectConfigOptions.EditingObjectsConfiguration.TRUE);
 
                 facetFactory.process(ProcessClassContext
                         .forTesting(
diff --git a/core/pom.xml b/core/pom.xml
index a31c1125d1..1093a56a50 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -1281,6 +1281,12 @@
 				<version>${togglz.version}</version>
 			</dependency>
 
+			<dependency>
+				<groupId>org.webjars</groupId>
+				<artifactId>datatables</artifactId>
+				<version>${datatables.version}</version>
+			</dependency>
+
 			<dependency>
 				<groupId>org.webjars</groupId>
 				<artifactId>jquery</artifactId>
diff --git a/viewers/wicket/ui/pom.xml b/viewers/wicket/ui/pom.xml
index e894690598..b05a838a68 100644
--- a/viewers/wicket/ui/pom.xml
+++ b/viewers/wicket/ui/pom.xml
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
-	license agreements. See the NOTICE file distributed with this work for additional 
-	information regarding copyright ownership. The ASF licenses this file to 
-	you under the Apache License, Version 2.0 (the "License"); you may not use 
-	this file except in compliance with the License. You may obtain a copy of 
-	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
-	by applicable law or agreed to in writing, software distributed under the 
-	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
-	OF ANY KIND, either express or implied. See the License for the specific 
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
+	license agreements. See the NOTICE file distributed with this work for additional
+	information regarding copyright ownership. The ASF licenses this file to
+	you under the Apache License, Version 2.0 (the "License"); you may not use
+	this file except in compliance with the License. You may obtain a copy of
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
+	by applicable law or agreed to in writing, software distributed under the
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+	OF ANY KIND, either express or implied. See the License for the specific
 	language governing permissions and limitations under the License. -->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
@@ -52,9 +52,9 @@
 				<artifactId>yuicompressor-maven-plugin</artifactId>
 			</plugin>
 			<plugin>
-				<!-- overrides defaults as configured in our core pom, 
+				<!-- overrides defaults as configured in our core pom,
         			to make javadoc failures non fatal and let the build continue;
-        			this we can set on a per module basis, to apply only to those, 
+        			this we can set on a per module basis, to apply only to those,
         			we don't know how to fix otherwise -->
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-javadoc-plugin</artifactId>
@@ -71,17 +71,17 @@
 			<groupId>org.apache.isis.viewer</groupId>
 			<artifactId>isis-viewer-wicket-model</artifactId>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>org.apache.isis.viewer</groupId>
             <artifactId>isis-viewer-commons-services</artifactId>
         </dependency>
-		
+
 		<dependency>
 			<groupId>org.apache.isis.viewer</groupId>
             <artifactId>isis-viewer-commons-prism</artifactId>
         </dependency>
-		
+
 		<dependency>
 			<groupId>org.apache.wicket</groupId>
 			<artifactId>wicket-devutils</artifactId>
@@ -137,7 +137,7 @@
 					<artifactId>slf4j-api</artifactId>
 				</exclusion>
 				<exclusion>
-					<!-- for Java7 compatibility (we don't use the proxying capability of 
+					<!-- for Java7 compatibility (we don't use the proxying capability of
 						this component) -->
 					<groupId>cglib</groupId>
 					<artifactId>cglib</artifactId>
@@ -169,6 +169,11 @@
 			<artifactId>select2</artifactId>
 		</dependency>
 
+		<dependency>
+			<groupId>org.webjars</groupId>
+			<artifactId>datatables</artifactId>
+		</dependency>
+
 		<dependency>
 			<groupId>org.webjars</groupId>
 			<artifactId>jquery</artifactId>
@@ -344,7 +349,7 @@
 			<artifactId>isis-core-internaltestsupport</artifactId>
 			<scope>test</scope>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>org.apache.isis.core</groupId>
 			<artifactId>isis-core-runtimeservices</artifactId>
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
index d329a61965..c0e45dd2d3 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/collection/EntityCollectionPanel.java
@@ -26,6 +26,8 @@ import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.metamodel.consent.Consent;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.facets.collections.layout.tabledec.CollectionLayoutTableDecorationFacet;
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.tabledec.DomainObjectLayoutTableDecorationFacet;
 import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.util.Facets;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
@@ -126,6 +128,11 @@ implements HasDynamicallyVisibleContent {
             Facets.cssClass(collectionMetaModel, objectAdapter)
             .ifPresent(cssClass->Wkt.cssAppend(div, cssClass));
 
+            val decorationFacet = collectionMetaModel.getFacet(CollectionLayoutTableDecorationFacet.class);
+            if (decorationFacet != null && decorationFacet.value().isDataTablesNet()) {
+                Wkt.cssAppend(div, "table-decoration");
+            }
+
             val collectionPanel = new CollectionPanel(ID_COLLECTION, collectionModel);
             div.addOrReplace(collectionPanel);
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
index 354759c855..754220166e 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/standalonecollection/StandaloneCollectionPanel.java
@@ -24,6 +24,7 @@ import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.model.Model;
 
+import org.apache.isis.core.metamodel.facets.object.domainobjectlayout.tabledec.DomainObjectLayoutTableDecorationFacet;
 import org.apache.isis.core.metamodel.interactions.managed.nonscalar.DataTableModel;
 import org.apache.isis.viewer.commons.model.components.ComponentType;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
@@ -73,6 +74,11 @@ implements CollectionCountProvider, CollectionPresentationSelectorProvider {
         Wkt.cssAppend(outerDiv, featureId);
         Wkt.cssAppend(outerDiv, collectionModel.getElementType().getFeatureIdentifier());
 
+        val decorationFacet = collectionModel.getMetaModel().getElementType().getFacet(DomainObjectLayoutTableDecorationFacet.class);
+        if (decorationFacet != null && decorationFacet.value().isDataTablesNet()) {
+            Wkt.cssAppend(outerDiv, "table-decoration");
+        }
+
         // selector
         final CollectionPresentationSelectorHelper selectorHelper = new CollectionPresentationSelectorHelper(collectionModel, getComponentFactoryRegistry());
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
index 137290a0cc..dc78985381 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/PageAbstract.java
@@ -71,6 +71,11 @@ import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.Breadcrum
 import org.apache.isis.viewer.wicket.ui.errors.ExceptionModel;
 import org.apache.isis.viewer.wicket.ui.errors.JGrowlBehaviour;
 import org.apache.isis.viewer.wicket.ui.pages.common.bootstrap.css.BootstrapOverridesCssResourceReference;
+import org.apache.isis.viewer.wicket.ui.pages.common.datatables.DatatablesCssBootstrap5ReferenceWkt;
+import org.apache.isis.viewer.wicket.ui.pages.common.datatables.DatatablesCssReferenceWkt;
+import org.apache.isis.viewer.wicket.ui.pages.common.datatables.DatatablesJavaScriptBootstrap5ReferenceWkt;
+import org.apache.isis.viewer.wicket.ui.pages.common.datatables.DatatablesJavaScriptReferenceWkt;
+import org.apache.isis.viewer.wicket.ui.pages.common.datatables.DatatablesJavaScriptResourceReferenceInit;
 import org.apache.isis.viewer.wicket.ui.pages.common.fontawesome.FontAwesomeCssReferenceWkt;
 import org.apache.isis.viewer.wicket.ui.pages.common.livequery.js.LiveQueryJsResourceReference;
 import org.apache.isis.viewer.wicket.ui.pages.common.sidebar.css.SidebarCssResourceReference;
@@ -239,6 +244,12 @@ implements ActionPromptProvider {
         response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(BootstrapJavaScriptReference.instance())));
         response.render(FontAwesomeCssReferenceWkt.asHeaderItem());
 
+        response.render(DatatablesJavaScriptReferenceWkt.asHeaderItem());
+        response.render(DatatablesJavaScriptBootstrap5ReferenceWkt.asHeaderItem());
+        response.render(DatatablesCssReferenceWkt.asHeaderItem());
+        response.render(DatatablesCssBootstrap5ReferenceWkt.asHeaderItem());
+        response.render(DatatablesJavaScriptResourceReferenceInit.instance(getConfiguration()));
+
         response.render(BootstrapOverridesCssResourceReference.asHeaderItem());
         BootstrapOverridesCssResourceReference
             .contributeThemeSpecificOverrides(getApplication(), response);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css
index 4154997c97..bdc03a9da9 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/bootstrap/css/bootstrap-overrides-all-v2.css
@@ -58,8 +58,8 @@ td .badge,
 .form-control-sm .badge {
 	font-size:.85rem
 }
-td .badge span, 
-.scalarPlaceholder .badge span, 
+td .badge span,
+.scalarPlaceholder .badge span,
 .form-control-sm .badge span {
   padding: 0;
 }
@@ -1262,6 +1262,20 @@ ul.navbar-wrap {
   margin-bottom: 5px;
 }
 
+/* DATATABLES.NET */
+
+div.entityCollection div.dataTables_wrapper {
+    margin-top: 15px;
+}
+
+div.dataTables_wrapper select.form-select {
+    min-width: 60px;
+}
+
+div.dataTables_wrapper ul.pagination {
+    font-size: small;
+}
+
 /* TOOLTIPS */
 
 .tooltip {
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesCssBootstrap5ReferenceWkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesCssBootstrap5ReferenceWkt.java
new file mode 100644
index 0000000000..81af0f3fd3
--- /dev/null
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesCssBootstrap5ReferenceWkt.java
@@ -0,0 +1,48 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.isis.viewer.wicket.ui.pages.common.datatables;
+
+import org.apache.wicket.markup.head.CssHeaderItem;
+
+import lombok.Getter;
+import lombok.experimental.Accessors;
+
+import de.agilecoders.wicket.webjars.request.resource.WebjarsCssResourceReference;
+
+public class DatatablesCssBootstrap5ReferenceWkt extends WebjarsCssResourceReference {
+    private static final long serialVersionUID = 1L;
+
+    @Getter(lazy = true) @Accessors(fluent = true)
+    private static final DatatablesCssBootstrap5ReferenceWkt instance =
+        new DatatablesCssBootstrap5ReferenceWkt();
+
+    public static CssHeaderItem asHeaderItem() {
+        return CssHeaderItem.forReference(DatatablesCssBootstrap5ReferenceWkt.instance());
+    }
+
+    /**
+     * Private constructor.
+     */
+    private DatatablesCssBootstrap5ReferenceWkt() {
+        super(RESOURCE);
+    }
+
+    private static final String RESOURCE = "datatables/1.12.1/css/dataTables.bootstrap5.min.css";
+}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesCssReferenceWkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesCssReferenceWkt.java
new file mode 100644
index 0000000000..f7ba0bf2fe
--- /dev/null
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesCssReferenceWkt.java
@@ -0,0 +1,48 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.isis.viewer.wicket.ui.pages.common.datatables;
+
+import org.apache.wicket.markup.head.CssHeaderItem;
+
+import lombok.Getter;
+import lombok.experimental.Accessors;
+
+import de.agilecoders.wicket.webjars.request.resource.WebjarsCssResourceReference;
+
+public class DatatablesCssReferenceWkt extends WebjarsCssResourceReference {
+    private static final long serialVersionUID = 1L;
+
+    @Getter(lazy = true) @Accessors(fluent = true)
+    private static final DatatablesCssReferenceWkt instance =
+        new DatatablesCssReferenceWkt();
+
+    public static CssHeaderItem asHeaderItem() {
+        return CssHeaderItem.forReference(DatatablesCssReferenceWkt.instance());
+    }
+
+    /**
+     * Private constructor.
+     */
+    private DatatablesCssReferenceWkt() {
+        super(RESOURCE);
+    }
+
+    private static final String RESOURCE = "datatables/1.12.1/css/jquery.dataTables.min.css";
+}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesJavaScriptBootstrap5ReferenceWkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesJavaScriptBootstrap5ReferenceWkt.java
new file mode 100644
index 0000000000..cfba077a2b
--- /dev/null
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesJavaScriptBootstrap5ReferenceWkt.java
@@ -0,0 +1,49 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.isis.viewer.wicket.ui.pages.common.datatables;
+
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
+
+import lombok.Getter;
+import lombok.experimental.Accessors;
+
+import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
+
+public class DatatablesJavaScriptBootstrap5ReferenceWkt extends WebjarsJavaScriptResourceReference {
+    private static final long serialVersionUID = 1L;
+
+    @Getter(lazy = true) @Accessors(fluent = true)
+    private static final DatatablesJavaScriptBootstrap5ReferenceWkt instance =
+        new DatatablesJavaScriptBootstrap5ReferenceWkt();
+
+    public static JavaScriptReferenceHeaderItem asHeaderItem() {
+        return JavaScriptHeaderItem.forReference(DatatablesJavaScriptBootstrap5ReferenceWkt.instance());
+    }
+
+    /**
+     * Private constructor.
+     */
+    private DatatablesJavaScriptBootstrap5ReferenceWkt() {
+        super(RESOURCE);
+    }
+
+    private static final String RESOURCE = "datatables/1.12.1/js/dataTables.bootstrap5.min.js";
+}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesJavaScriptReferenceWkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesJavaScriptReferenceWkt.java
new file mode 100644
index 0000000000..adc751a45f
--- /dev/null
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesJavaScriptReferenceWkt.java
@@ -0,0 +1,49 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ *
+ */
+package org.apache.isis.viewer.wicket.ui.pages.common.datatables;
+
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
+
+import lombok.Getter;
+import lombok.experimental.Accessors;
+
+import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
+
+public class DatatablesJavaScriptReferenceWkt extends WebjarsJavaScriptResourceReference {
+    private static final long serialVersionUID = 1L;
+
+    @Getter(lazy = true) @Accessors(fluent = true)
+    private static final DatatablesJavaScriptReferenceWkt instance =
+        new DatatablesJavaScriptReferenceWkt();
+
+    public static JavaScriptReferenceHeaderItem asHeaderItem() {
+        return JavaScriptHeaderItem.forReference(DatatablesJavaScriptReferenceWkt.instance());
+    }
+
+    /**
+     * Private constructor.
+     */
+    private DatatablesJavaScriptReferenceWkt() {
+        super(RESOURCE);
+    }
+
+    private static final String RESOURCE = "datatables/1.12.1/js/jquery.dataTables.min.js";
+}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesJavaScriptResourceReferenceInit.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesJavaScriptResourceReferenceInit.java
new file mode 100644
index 0000000000..c44b05a808
--- /dev/null
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/DatatablesJavaScriptResourceReferenceInit.java
@@ -0,0 +1,75 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.viewer.wicket.ui.pages.common.datatables;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import org.apache.wicket.markup.head.JavaScriptContentHeaderItem;
+import org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.util.FileCopyUtils;
+
+import org.apache.isis.core.config.IsisConfiguration;
+
+/**
+ * Javascript (client-side) extensions and fixes.
+ */
+public class DatatablesJavaScriptResourceReferenceInit extends JavaScriptContentHeaderItem {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final String ID = "dataTablesInit";
+
+    private static DatatablesJavaScriptResourceReferenceInit instance = null;
+
+    public static final DatatablesJavaScriptResourceReferenceInit instance(IsisConfiguration configuration) {
+        if (instance == null) {
+            String javascript = readResource(configuration);
+            instance = new DatatablesJavaScriptResourceReferenceInit(javascript, ID);
+        }
+        return instance;
+    }
+
+    private DatatablesJavaScriptResourceReferenceInit(CharSequence javaScript, String id) {
+        super(javaScript, id);
+    }
+
+    private static String readResource(IsisConfiguration configuration) {
+        String options = configuration.getViewer().getWicket().getTable().getDecoration().getDataTablesNet().getOptions().orElse("");
+        return readScript().replace("$PLACEHOLDER$", options);
+    }
+
+    private static String readScript() {
+        return asString(new ClassPathResource("dataTables.init.js", DatatablesJavaScriptResourceReferenceInit.class));
+    }
+
+    private static String asString(Resource resource) {
+        try (Reader reader = new InputStreamReader(resource.getInputStream(), UTF_8)) {
+            return FileCopyUtils.copyToString(reader);
+        } catch (IOException e) {
+            return "";
+        }
+    }
+
+}
diff --git a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/EditingObjectsConfiguration.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/dataTables.init.js
similarity index 83%
rename from core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/EditingObjectsConfiguration.java
rename to viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/dataTables.init.js
index 3e7f6cd43e..e3cf350549 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/metamodel/facets/EditingObjectsConfiguration.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/datatables/dataTables.init.js
@@ -16,9 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.config.metamodel.facets;
+(function($) {
+
+  $(document).ready( function () {
+       $('div.table-decoration table.contents').DataTable({
+            $PLACEHOLDER$
+       });
+  } );
+
+})(jQuery);
 
-public enum EditingObjectsConfiguration {
-    TRUE,
-    FALSE;
-}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/viewer/js/jquery.isis.wicket.viewer.js b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/viewer/js/jquery.isis.wicket.viewer.js
index 7c9a58cce0..ae3bdefe2d 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/viewer/js/jquery.isis.wicket.viewer.js
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/common/viewer/js/jquery.isis.wicket.viewer.js
@@ -108,9 +108,9 @@ $(function() {
             let el = $('#'+elementId).find('.inputFormTable.parameters')
             	.find('input,textarea,div.cbx,select').filter(':visible:first');
             if(el) {
-	
+
 				//console.log('Isis.Topic.FOCUS_FIRST_PARAMETER: elementId=' + elementId);
-	
+
                 let elNodeName = $(el).prop('nodeName')
                 if (elNodeName) {
                     let x = elNodeName.toLowerCase()
@@ -213,7 +213,7 @@ $(function() {
 	    });
 	}
 	$(document, '.wkt-component-with-tooltip').on('click', hidePopover);
-	
+
 	/* stop event bubbling on html links that have a container with onClick event already */
 	$('.no-click-bubbling').click(function(event){
 	    event.stopImmediatePropagation();
@@ -276,6 +276,7 @@ $(function() {
 
 });
 
+
 /**
  * enables 'maxlength' to work as an attribute on 'textarea'
  *
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/config/WicketViewerCssBundleInit.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/config/WicketViewerCssBundleInit.java
index 35495524d6..c88a40020d 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/config/WicketViewerCssBundleInit.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/wicketapp/config/WicketViewerCssBundleInit.java
@@ -32,6 +32,8 @@ import org.apache.isis.viewer.wicket.ui.components.scalars.string.MultiLineStrin
 import org.apache.isis.viewer.wicket.ui.panels.PanelUtil;
 import org.apache.isis.viewer.wicket.viewer.wicketapp.IsisWicketApplication;
 
+import de.agilecoders.wicket.webjars.request.resource.WebjarsCssResourceReference;
+
 @Configuration
 public class WicketViewerCssBundleInit implements WicketApplicationInitializer {