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

[isis] 02/02: ISIS-2086: converting to config beans: value.format + locale + money

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

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

commit dcef479071cfcf66ea478f1dc70358559dd70c96
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Oct 25 12:19:15 2019 +0200

    ISIS-2086: converting to config beans: value.format + locale + money
---
 .../org/apache/isis/config/IsisConfiguration.java  | 99 ++++++++++++++++++++++
 .../apache/isis/metamodel/MetaModelContext.java    |  9 +-
 .../apache/isis/metamodel/commons/LocaleUtil.java  |  4 +-
 .../ValueSemanticsProviderAndFacetAbstract.java    | 11 +--
 .../DateAndTimeValueSemanticsProviderAbstract.java |  8 +-
 .../ValueSemanticsProviderAbstractTemporal.java    | 16 ++--
 .../BigDecimalValueSemanticsProvider.java          |  3 +-
 .../BigIntegerValueSemanticsProvider.java          |  3 +-
 .../bytes/ByteValueSemanticsProviderAbstract.java  |  3 +-
 .../date/DateValueSemanticsProviderAbstract.java   | 10 ++-
 .../Jdk8LocalDateValueSemanticsProvider.java       | 57 +++++--------
 .../JodaLocalDateValueSemanticsProvider.java       | 24 +-----
 .../Jdk8LocalDateTimeValueSemanticsProvider.java   |  9 +-
 ...fsetDateTimeValueSemanticsProviderAbstract.java |  8 +-
 ...JodaDateTimeValueSemanticsProviderAbstract.java | 10 ++-
 .../JodaLocalDateTimeValueSemanticsProvider.java   | 23 +----
 .../DoubleValueSemanticsProviderAbstract.java      |  3 +-
 .../FloatValueSemanticsProviderAbstract.java       |  3 +-
 .../integer/IntValueSemanticsProviderAbstract.java |  3 +-
 .../longs/LongValueSemanticsProviderAbstract.java  |  3 +-
 .../value/money/MoneyValueSemanticsProvider.java   |  4 +-
 .../PercentageValueSemanticsProvider.java          |  6 +-
 .../ShortValueSemanticsProviderAbstract.java       |  3 +-
 .../time/TimeValueSemanticsProviderAbstract.java   |  7 +-
 .../TimeStampValueSemanticsProviderAbstract.java   |  9 +-
 .../specloader/SpecificationLoaderDefault.java     |  2 +-
 .../metamodel/MetaModelContext_configTest.java     |  2 +-
 .../metamodel/MetaModelContext_forTesting.java     |  2 +-
 .../system/context/session/RuntimeContext.java     |  2 -
 .../system/context/session/RuntimeContextBase.java |  3 -
 .../server/resources/DomainResourceHelper.java     |  6 --
 .../wicket/ui/components/footer/FooterPanel.java   | 74 ++--------------
 .../application/isis-non-changing.properties       |  7 +-
 .../application/isis-non-changing.properties       |  6 +-
 .../domainapp/conf/isis-non-changing.properties    |  6 +-
 .../application/isis-non-changing.properties       |  6 +-
 .../manifest/isis-non-changing.properties          |  6 +-
 .../testdomain/conf/isis-non-changing.properties   |  6 +-
 38 files changed, 231 insertions(+), 235 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
index 28a217d..9cce4ea 100644
--- a/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
@@ -21,6 +21,7 @@ package org.apache.isis.config;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.regex.Matcher;
@@ -37,6 +38,7 @@ import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.metamodel.facets.actions.action.command.CommandActionsConfiguration;
 import org.apache.isis.metamodel.facets.actions.action.publishing.PublishActionsConfiguration;
@@ -51,6 +53,7 @@ import org.apache.isis.metamodel.specloader.IntrospectionMode;
 import org.apache.isis.viewer.wicket.ui.DialogMode;
 
 import lombok.Data;
+import lombok.val;
 
 
 /**
@@ -79,6 +82,12 @@ public class IsisConfiguration {
             private boolean autoLogoutIfAlreadyAuthenticated = false;
         }
     }
+    
+    /**
+     * Optional: set to override {@link Locale#getDefault()}
+     * <p>{@code null} is allowed
+     */
+    private String locale = null; //TODO no meta data yet ... https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-configuration-metadata.html#configuration-metadata-property-attributes
 
     private final Objects objects = new Objects();
     @Data
@@ -834,6 +843,41 @@ public class IsisConfiguration {
                  */
                 private boolean showChooser = true;
             }
+            
+            
+            //TODO no meta data yet ... https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-configuration-metadata.html#configuration-metadata-property-attributes 
+            private List<Credit> credit = _Lists.newArrayList();
+            
+            //@RequiredArgsConstructor(staticName = "of") @Getter
+            
+            @Data
+            public static class Credit {
+                private int num;
+                private String url;
+                private String name;
+                private String image;
+                
+                public boolean isDefined() { return (name != null || image != null) && url != null; }
+                public String getId() { return idFor(""); }
+                public String getUrlId() { return idFor("Url"); }
+                public String getNameId() { return idFor("Name"); }
+                public String getImageId() { return idFor("Image"); }
+                
+                private String idFor(final String component) {
+                    return "credit" + getNum() + component;
+                }
+            }
+            
+            public Credit getCredit(int indexOneBased) {
+                int indexZeroBased = indexOneBased - 1;
+                int maxIndex = credit.size() - 1;
+                val credit = (indexZeroBased<0 || indexZeroBased>maxIndex)
+                        ? new Credit()
+                                : Wicket.this.credit.get(indexZeroBased);
+                credit.setNum(indexOneBased);
+                return credit;
+            }
+            
             private final DatePicker datePicker = new DatePicker();
             @Data
             public static class DatePicker {
@@ -902,6 +946,8 @@ public class IsisConfiguration {
                 private boolean enabled = true;
                 private int maxParentChainLength = 64;
             }
+            
+            
         }
     }
 
@@ -982,6 +1028,59 @@ public class IsisConfiguration {
         }
 
     }
+    
+    //TODO no meta data yet ... https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-configuration-metadata.html#configuration-metadata-property-attributes
+    private final Value value = new Value();
+    @Data
+    public static class Value {
+        
+        private Map<String, String> format = new HashMap<>();
+        
+        public enum FormatIdentifier {
+            /**
+             * Key to indicate how LocalDateTime should be parsed/rendered.
+             * <p>
+             * eg: {@code isis.value.format.datetime=iso}
+             * <p>
+             * A pre-determined list of values is available, specifically 'iso_encoding', 'iso' and 'medium' (see
+             * {@link org.apache.isis.metamodel.facets.value.datetimejdk8local.Jdk8LocalDateTimeValueSemanticsProvider.NAMED_TITLE_FORMATTERS}).  
+             * Alternatively, can also specify a mask, eg <tt>dd-MMM-yyyy</tt>.
+             */
+            DATETIME,
+            /**
+             * Key to indicate how LocalDate should be parsed/rendered.
+             * <p>
+             * eg: {@code isis.value.format.date=iso}
+             * <p>
+             * A pre-determined list of values is available, specifically 'iso_encoding', 'iso' and 'medium' (see
+             * {@link org.apache.isis.metamodel.facets.value.datejdk8local.Jdk8LocalDateValueSemanticsProvider.NAMED_TITLE_FORMATTERS}).  
+             * Alternatively,  can also specify a mask, eg <tt>dd-MMM-yyyy</tt>.
+             */
+            DATE, 
+            TIMESTAMP, 
+            TIME,
+            
+            INT, DECIMAL, BYTE, DOUBLE, FLOAT, LONG, SHORT, 
+            PERCENTAGE
+        }
+        
+        public String getFormatOrElse(FormatIdentifier formatIdentifier, String defaultFormat) {
+            return format.getOrDefault(formatIdentifier.name().toLowerCase(), defaultFormat);
+        }
+        
+        private final Money money = new Money();
+        @Data
+        public static class Money {
+            
+            private String currency = null;
+
+            public String getCurrencyOrElse(String fallback) { 
+                return _Strings.isNotEmpty(getCurrency()) ? getCurrency() : fallback;
+            }
+        }
+        
+        
+    }
 
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext.java
index 3e80bad..53fce51 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/MetaModelContext.java
@@ -29,7 +29,6 @@ import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.applib.services.xactn.TransactionState;
 import org.apache.isis.commons.internal.environment.IsisSystemEnvironment;
 import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.config.IsisConfigurationLegacy;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.metamodel.services.homepage.HomePageAction;
@@ -49,8 +48,7 @@ import org.apache.isis.security.authorization.manager.AuthorizationManager;
 public interface MetaModelContext {
 
     // -- INTERFACE
-    @Deprecated
-    IsisConfigurationLegacy getConfigurationLegacy();
+    //@Deprecated IsisConfigurationLegacy getConfigurationLegacy();
     
     IsisSystemEnvironment getSystemEnvironment();
     
@@ -111,11 +109,6 @@ public interface MetaModelContext {
         public MetaModelContext getMetaModelContext();
 
         @Override
-        public default IsisConfigurationLegacy getConfigurationLegacy() {
-            return getMetaModelContext().getConfigurationLegacy();
-        }
-        
-        @Override
         default IsisSystemEnvironment getSystemEnvironment() {
             return getMetaModelContext().getSystemEnvironment();
         }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/LocaleUtil.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/LocaleUtil.java
index 2cc359c..f879243 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/LocaleUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/LocaleUtil.java
@@ -21,10 +21,12 @@ package org.apache.isis.metamodel.commons;
 
 import java.util.Locale;
 
+import org.apache.isis.commons.internal.base._Strings;
+
 public class LocaleUtil {
 
     public static Locale findLocale(final String localeStr) {
-        if (localeStr != null) {
+        if (_Strings.isNotEmpty(localeStr)) {
             final Locale[] availableLocales = Locale.getAvailableLocales();
             for (final Locale locale : availableLocales) {
                 if (locale.toString().equals(localeStr)) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
index 94cb018..c695bd3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
@@ -31,7 +31,7 @@ import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.adapters.ValueSemanticsProvider;
 import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.commons.exceptions.UnknownTypeException;
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.commons.LocaleUtil;
 import org.apache.isis.metamodel.facetapi.Facet;
@@ -279,8 +279,10 @@ public abstract class ValueSemanticsProviderAndFacetAbstract<T> extends FacetAbs
     // Helper: Locale handling
     // ///////////////////////////////////////////////////////////////////////////
 
-    protected NumberFormat determineNumberFormat(final String suffix) {
-        final String formatRequired = getConfigurationLegacy().getString(ConfigurationConstants.ROOT + suffix);
+    protected NumberFormat determineNumberFormat(FormatIdentifier formatIdentifier) {
+        final String formatRequired = getConfiguration()
+                .getValue().getFormatOrElse(formatIdentifier, null);  
+                
         if (formatRequired != null) {
             return new DecimalFormat(formatRequired);
         } else {
@@ -289,8 +291,7 @@ public abstract class ValueSemanticsProviderAndFacetAbstract<T> extends FacetAbs
     }
 
     private Locale findLocale() {
-        final String localeStr = getConfigurationLegacy().getString(ConfigurationConstants.ROOT + "locale");
-
+        final String localeStr = getConfiguration().getLocale();
         final Locale findLocale = LocaleUtil.findLocale(localeStr);
         return findLocale != null ? findLocale : Locale.getDefault();
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/DateAndTimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/DateAndTimeValueSemanticsProviderAbstract.java
index 4f4fed3..6de808a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/DateAndTimeValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/DateAndTimeValueSemanticsProviderAbstract.java
@@ -27,7 +27,7 @@ import java.util.Map;
 import java.util.TimeZone;
 
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 
 
@@ -46,9 +46,11 @@ public abstract class DateAndTimeValueSemanticsProviderAbstract<T> extends Value
 
     @SuppressWarnings("unchecked")
     public DateAndTimeValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass, final Immutability immutability, final EqualByContent equalByContent) {
-        super("datetime", holder, adaptedClass, TYPICAL_LENGTH, immutability, equalByContent, (T) DEFAULT_VALUE);
+        super(FormatIdentifier.DATETIME, holder, adaptedClass, TYPICAL_LENGTH, immutability, equalByContent, (T) DEFAULT_VALUE);
 
-        final String formatRequired = getConfigurationLegacy().getString(ConfigurationConstants.ROOT + "value.format.datetime");
+        final String formatRequired = getConfiguration()
+                .getValue().getFormatOrElse(FormatIdentifier.DATETIME, null);
+                
         if (formatRequired == null) {
             format = formats().get(defaultFormat());
         } else {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
index 43ed8ea..6fac59a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/ValueSemanticsProviderAbstractTemporal.java
@@ -33,7 +33,7 @@ import java.util.TimeZone;
 import org.apache.isis.applib.adapters.EncodingException;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -61,7 +61,7 @@ public abstract class ValueSemanticsProviderAbstractTemporal<T> extends ValueSem
     protected static final String ISO_ENCODING_FORMAT = "iso_encoding";
     protected static final TimeZone UTC_TIME_ZONE;
 
-    public final static String FORMAT_KEY_PREFIX = ConfigurationConstants.ROOT + "value.format.";
+    //public final static String FORMAT_KEY_PREFIX = ConfigurationConstants.ROOT + "value.format.";
 
     static {
         TimeZone timeZone = TimeZone.getTimeZone("Etc/UTC");
@@ -99,20 +99,22 @@ public abstract class ValueSemanticsProviderAbstractTemporal<T> extends ValueSem
     /**
      * Uses {@link #type()} as the facet type.
      */
-    public ValueSemanticsProviderAbstractTemporal(final String propertyName, final FacetHolder holder, final Class<T> adaptedClass, final int typicalLength, final Immutability immutability, final EqualByContent equalByContent, final T defaultValue) {
-        this(propertyName, type(), holder, adaptedClass, typicalLength, immutability, equalByContent, defaultValue);
+    public ValueSemanticsProviderAbstractTemporal(final FormatIdentifier formatIdentifier, final FacetHolder holder, final Class<T> adaptedClass, final int typicalLength, final Immutability immutability, final EqualByContent equalByContent, final T defaultValue) {
+        this(formatIdentifier, type(), holder, adaptedClass, typicalLength, immutability, equalByContent, defaultValue);
     }
 
     /**
      * Allows the specific facet subclass to be specified (rather than use
      * {@link #type()}.
      */
-    public ValueSemanticsProviderAbstractTemporal(final String propertyType, final Class<? extends Facet> facetType, final FacetHolder holder, final Class<T> adaptedClass, final int typicalLength, final Immutability immutability, final EqualByContent equalByContent, final T defaultValue) {
+    public ValueSemanticsProviderAbstractTemporal(final FormatIdentifier formatIdentifier, final Class<? extends Facet> facetType, final FacetHolder holder, final Class<T> adaptedClass, final int typicalLength, final Immutability immutability, final EqualByContent equalByContent, final T defaultValue) {
         super(facetType, holder, adaptedClass, typicalLength, -1, immutability, equalByContent, defaultValue);
         configureFormats();
 
-        this.propertyType = propertyType;
-        configuredFormat = getConfigurationLegacy().getString(FORMAT_KEY_PREFIX + propertyType, defaultFormat()).toLowerCase().trim();
+        this.propertyType = formatIdentifier.name().toLowerCase();
+        configuredFormat = getConfiguration()
+                .getValue().getFormatOrElse(formatIdentifier, defaultFormat()).toLowerCase().trim();
+               
         buildFormat(configuredFormat);
 
         encodingFormat = formats().get(ISO_ENCODING_FORMAT);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
index 12710d6..e343de0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
@@ -28,6 +28,7 @@ import java.util.Map;
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.commons.exceptions.IsisException;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.object.parseable.TextEntryParseException;
@@ -57,7 +58,7 @@ public class BigDecimalValueSemanticsProvider extends ValueSemanticsProviderAndF
 
     public BigDecimalValueSemanticsProvider(final FacetHolder holder) {
         super(type(), holder, BigDecimal.class, TYPICAL_LENGTH, -1, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
-        format = determineNumberFormat("value.format.decimal");
+        format = determineNumberFormat(FormatIdentifier.DECIMAL);
     }
 
     public void setLocale(final Locale l) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
index 63abb7d..73b1f4a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/biginteger/BigIntegerValueSemanticsProvider.java
@@ -26,6 +26,7 @@ import java.util.Map;
 
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.object.parseable.TextEntryParseException;
@@ -55,7 +56,7 @@ public class BigIntegerValueSemanticsProvider extends ValueSemanticsProviderAndF
     public BigIntegerValueSemanticsProvider(final FacetHolder holder) {
 
         super(type(), holder, BigInteger.class, TYPICAL_LENGTH, -1, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
-        format = determineNumberFormat("value.format.int");
+        format = determineNumberFormat(FormatIdentifier.INT);
     }
 
     // //////////////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java
index 109dd3d..a0d71cd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java
@@ -24,6 +24,7 @@ import java.text.NumberFormat;
 import java.text.ParseException;
 import java.util.Map;
 
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -44,7 +45,7 @@ public abstract class ByteValueSemanticsProviderAbstract extends ValueSemanticsP
 
     public ByteValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Byte> adaptedClass) {
         super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
-        format = determineNumberFormat("value.format.byte");
+        format = determineNumberFormat(FormatIdentifier.BYTE);
     }
 
     // //////////////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/date/DateValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/date/DateValueSemanticsProviderAbstract.java
index 6f6e380..730b02d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/date/DateValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/date/DateValueSemanticsProviderAbstract.java
@@ -27,7 +27,7 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
 
@@ -42,13 +42,15 @@ public abstract class DateValueSemanticsProviderAbstract<T> extends ValueSemanti
     }
 
     public DateValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass, final Immutability immutability, final EqualByContent equalByContent, final T defaultValue) {
-        super("date", holder, adaptedClass, 12, immutability, equalByContent, defaultValue);
+        super(FormatIdentifier.DATE, holder, adaptedClass, 12, immutability, equalByContent, defaultValue);
 
-        final String formatRequired = getConfigurationLegacy().getString(ConfigurationConstants.ROOT + "value.format.date");
+        final String formatRequired = getConfiguration().getValue()
+                .getFormatOrElse(FormatIdentifier.DATE, null);
+        
         if (formatRequired == null) {
             format = formats().get(defaultFormat());
         } else {
-            setMask(formatRequired);
+            setMask(formatRequired); //TODO fails when using format names eg 'medium'
         }
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueSemanticsProvider.java
index 16959d1..6daf1ea 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datejdk8local/Jdk8LocalDateValueSemanticsProvider.java
@@ -28,7 +28,7 @@ import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.EncodingException;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -62,41 +62,23 @@ public class Jdk8LocalDateValueSemanticsProvider extends ValueSemanticsProviderA
      * A replacement for {@link #setFormat(String, String)}.
      */
     public static void setTitlePatternOverride(final String pattern) {
-        OVERRIDE_TITLE_PATTERN.set(pattern);
+        override_title_pattern.set(pattern);
     }
 
     /**
-     * Key to indicate how LocalDate should be parsed/rendered.
-     *
-     * <p>
-     * eg:
-     * <pre>
-     * isis.value.format.date=iso
-     * </pre>
-     *
-     * <p>
-     * A pre-determined list of values is available, specifically 'iso_encoding', 'iso' and 'medium' (see
-     * {@link #NAMED_TITLE_FORMATTERS}).  Alternatively,  can also specify a mask, eg <tt>dd-MMM-yyyy</tt>.
-     *
-     * @see #NAMED_TITLE_FORMATTERS
-     */
-    public final static String CFG_FORMAT_KEY = ConfigurationConstants.ROOT + "value.format.date";
-
-
-    /**
      * Keys represent the values which can be configured, and which are used for the rendering of dates.
      *
      */
-    private static Map<String, TimeFormatter> NAMED_TITLE_FORMATTERS = _Maps.newHashMap();
+    private static Map<String, TimeFormatter> named_title_formatters = _Maps.newHashMap();
     static {
-        NAMED_TITLE_FORMATTERS.put("iso_encoding", formatterOf(DateTimeFormatter.ofPattern("yyyyMMdd")));
-        NAMED_TITLE_FORMATTERS.put("iso", formatterOf(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-        NAMED_TITLE_FORMATTERS.put("long", formatterOfStyle("L-"));
-        NAMED_TITLE_FORMATTERS.put("medium", formatterOfStyle("M-"));
-        NAMED_TITLE_FORMATTERS.put("short", formatterOfStyle("S-"));
+        named_title_formatters.put("iso_encoding", formatterOf(DateTimeFormatter.ofPattern("yyyyMMdd")));
+        named_title_formatters.put("iso", formatterOf(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        named_title_formatters.put("long", formatterOfStyle("L-"));
+        named_title_formatters.put("medium", formatterOfStyle("M-"));
+        named_title_formatters.put("short", formatterOfStyle("S-"));
     }
 
-    private final static ThreadLocal<String> OVERRIDE_TITLE_PATTERN = new ThreadLocal<String>() {
+    private final static ThreadLocal<String> override_title_pattern = new ThreadLocal<String>() {
         @Override
         protected String initialValue() {
             return null;
@@ -104,13 +86,13 @@ public class Jdk8LocalDateValueSemanticsProvider extends ValueSemanticsProviderA
     };
 
 
-    private final static List<TimeParser> PARSE_FORMATTERS = _Lists.newArrayList();
+    private final static List<TimeParser> parse_formatters = _Lists.newArrayList();
     static {
-        PARSE_FORMATTERS.add(parserOfStyle("L-"));
-        PARSE_FORMATTERS.add(parserOfStyle("M-"));
-        PARSE_FORMATTERS.add(parserOfStyle("S-"));
-        PARSE_FORMATTERS.add(parserOf(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
-        PARSE_FORMATTERS.add(parserOf(DateTimeFormatter.ofPattern("yyyyMMdd")));
+        parse_formatters.add(parserOfStyle("L-"));
+        parse_formatters.add(parserOfStyle("M-"));
+        parse_formatters.add(parserOfStyle("S-"));
+        parse_formatters.add(parserOf(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+        parse_formatters.add(parserOf(DateTimeFormatter.ofPattern("yyyyMMdd")));
     }
 
     public static Class<? extends Facet> type() {
@@ -146,13 +128,14 @@ public class Jdk8LocalDateValueSemanticsProvider extends ValueSemanticsProviderA
     public Jdk8LocalDateValueSemanticsProvider(final FacetHolder holder) {
         super(type(), holder, LocalDate.class, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
 
-        String configuredNameOrPattern = getConfigurationLegacy().getString(CFG_FORMAT_KEY, "medium").trim();
+        String configuredNameOrPattern = getConfiguration()
+                .getValue().getFormatOrElse(FormatIdentifier.DATE, "medium");
         updateTitleStringFormatter(configuredNameOrPattern);
     }
 
 
     private void updateTitleStringFormatter(String titleStringFormatNameOrPattern) {
-        titleStringFormatter = NAMED_TITLE_FORMATTERS.get(titleStringFormatNameOrPattern);
+        titleStringFormatter = named_title_formatters.get(titleStringFormatNameOrPattern);
         if (titleStringFormatter == null) {
             titleStringFormatter = formatterOf(DateTimeFormatter.ofPattern(titleStringFormatNameOrPattern));
         }
@@ -184,7 +167,7 @@ public class Jdk8LocalDateValueSemanticsProvider extends ValueSemanticsProviderA
     }
 
     private void updateTitleStringFormatterIfOverridden() {
-        final String overridePattern = OVERRIDE_TITLE_PATTERN.get();
+        final String overridePattern = override_title_pattern.get();
         if (overridePattern == null ||
                 titleStringFormatNameOrPattern.equals(overridePattern)) {
             return;
@@ -195,7 +178,7 @@ public class Jdk8LocalDateValueSemanticsProvider extends ValueSemanticsProviderA
     }
 
     private LocalDate parseDate(final String dateStr, final Object original) {
-        return Jdk8LocalDateUtil.parseDate(dateStr, PARSE_FORMATTERS);
+        return Jdk8LocalDateUtil.parseDate(dateStr, parse_formatters);
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
index c3d4133..14bc421 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datejodalocal/JodaLocalDateValueSemanticsProvider.java
@@ -32,7 +32,7 @@ import org.apache.isis.applib.adapters.EncodingException;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -65,24 +65,6 @@ public class JodaLocalDateValueSemanticsProvider extends ValueSemanticsProviderA
     }
 
     /**
-     * Key to indicate how LocalDate should be parsed/rendered.
-     *
-     * <p>
-     * eg:
-     * <pre>
-     * isis.value.format.date=iso
-     * </pre>
-     *
-     * <p>
-     * A pre-determined list of values is available, specifically 'iso_encoding', 'iso' and 'medium' (see
-     * {@link #NAMED_TITLE_FORMATTERS}).  Alternatively,  can also specify a mask, eg <tt>dd-MMM-yyyy</tt>.
-     *
-     * @see #NAMED_TITLE_FORMATTERS
-     */
-    public final static String CFG_FORMAT_KEY = ConfigurationConstants.ROOT + "value.format.date";
-
-
-    /**
      * Keys represent the values which can be configured, and which are used for the rendering of dates.
      *
      */
@@ -147,7 +129,9 @@ public class JodaLocalDateValueSemanticsProvider extends ValueSemanticsProviderA
     public JodaLocalDateValueSemanticsProvider(final FacetHolder holder) {
         super(type(), holder, LocalDate.class, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
 
-        String configuredNameOrPattern = getConfigurationLegacy().getString(CFG_FORMAT_KEY, "medium").trim();
+        String configuredNameOrPattern = getConfiguration()
+                .getValue().getFormatOrElse(FormatIdentifier.DATE, "medium");
+        
         updateTitleStringFormatter(configuredNameOrPattern);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueSemanticsProvider.java
index be5c039..e6f8d2a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejdk8local/Jdk8LocalDateTimeValueSemanticsProvider.java
@@ -31,7 +31,7 @@ import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.EncodingException;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -66,7 +66,7 @@ public class Jdk8LocalDateTimeValueSemanticsProvider extends ValueSemanticsProvi
         OVERRIDE_TITLE_PATTERN.set(pattern);
     }
 
-    /**
+    /*
      * Key to indicate how LocalDateTime should be parsed/rendered.
      *
      * <p>
@@ -81,7 +81,7 @@ public class Jdk8LocalDateTimeValueSemanticsProvider extends ValueSemanticsProvi
      *
      * @see #NAMED_TITLE_FORMATTERS
      */
-    public final static String CFG_FORMAT_KEY = ConfigurationConstants.ROOT + "value.format.datetime";
+   //public final static String CFG_FORMAT_KEY = ConfigurationConstants.ROOT + "value.format.datetime";
 
 
     /**
@@ -146,7 +146,8 @@ public class Jdk8LocalDateTimeValueSemanticsProvider extends ValueSemanticsProvi
     public Jdk8LocalDateTimeValueSemanticsProvider(final FacetHolder holder) {
         super(type(), holder, LocalDateTime.class, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
 
-        String configuredNameOrPattern = getConfigurationLegacy().getString(CFG_FORMAT_KEY, "medium").toLowerCase().trim();
+        String configuredNameOrPattern = getConfiguration()
+                .getValue().getFormatOrElse(FormatIdentifier.DATETIME, "medium");
         updateTitleStringFormatter(configuredNameOrPattern);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProviderAbstract.java
index 05dc778..52185cf 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejdk8offset/Jdk8OffsetDateTimeValueSemanticsProviderAbstract.java
@@ -27,7 +27,7 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
 
@@ -42,9 +42,11 @@ public abstract class Jdk8OffsetDateTimeValueSemanticsProviderAbstract<T> extend
     }
 
     public Jdk8OffsetDateTimeValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass, final T defaultValue) {
-        super("date", holder, adaptedClass, 12, Immutability.IMMUTABLE, EqualByContent.HONOURED, defaultValue);
+        super(FormatIdentifier.DATE, holder, adaptedClass, 12, Immutability.IMMUTABLE, EqualByContent.HONOURED, defaultValue);
 
-        final String formatRequired = getConfigurationLegacy().getString(ConfigurationConstants.ROOT + "value.format.date");
+        String formatRequired = getConfiguration()
+                .getValue().getFormatOrElse(FormatIdentifier.DATE, "medium");
+        
         if (formatRequired == null) {
             format = formats().get(defaultFormat());
         } else {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProviderAbstract.java
index 29d286d..308d500 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejoda/JodaDateTimeValueSemanticsProviderAbstract.java
@@ -27,7 +27,7 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
 
@@ -42,13 +42,15 @@ public abstract class JodaDateTimeValueSemanticsProviderAbstract<T> extends Valu
     }
 
     public JodaDateTimeValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass, final T defaultValue) {
-        super("date", holder, adaptedClass, 12, Immutability.IMMUTABLE, EqualByContent.HONOURED, defaultValue);
+        super(FormatIdentifier.DATE, holder, adaptedClass, 12, Immutability.IMMUTABLE, EqualByContent.HONOURED, defaultValue);
 
-        final String formatRequired = getConfigurationLegacy().getString(ConfigurationConstants.ROOT + "value.format.date");
+        String formatRequired = getConfiguration()
+                .getValue().getFormatOrElse(FormatIdentifier.DATE, null);
+        
         if (formatRequired == null) {
             format = formats().get(defaultFormat());
         } else {
-            setMask(formatRequired);
+            setMask(formatRequired); //TODO fails when using format names eg 'medium'
         }
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
index d4cbae1..df45563 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/datetimejodalocal/JodaLocalDateTimeValueSemanticsProvider.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.adapters.EncodingException;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -66,24 +66,6 @@ public class JodaLocalDateTimeValueSemanticsProvider extends ValueSemanticsProvi
     }
 
     /**
-     * Key to indicate how LocalDateTime should be parsed/rendered.
-     *
-     * <p>
-     * eg:
-     * <pre>
-     * isis.value.format.datetime=iso
-     * </pre>
-     *
-     * <p>
-     * A pre-determined list of values is available, specifically 'iso_encoding', 'iso' and 'medium' (see
-     * {@link #NAMED_TITLE_FORMATTERS}).  Alternatively,  can also specify a mask, eg <tt>dd-MMM-yyyy</tt>.
-     *
-     * @see #NAMED_TITLE_FORMATTERS
-     */
-    public final static String CFG_FORMAT_KEY = ConfigurationConstants.ROOT + "value.format.datetime";
-
-
-    /**
      * Keys represent the values which can be configured, and which are used for the rendering of dates.
      *
      */
@@ -148,7 +130,8 @@ public class JodaLocalDateTimeValueSemanticsProvider extends ValueSemanticsProvi
     public JodaLocalDateTimeValueSemanticsProvider(final FacetHolder holder) {
         super(type(), holder, LocalDateTime.class, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
 
-        String configuredNameOrPattern = getConfigurationLegacy().getString(CFG_FORMAT_KEY, "medium").toLowerCase().trim();
+        String configuredNameOrPattern = getConfiguration()
+                .getValue().getFormatOrElse(FormatIdentifier.DATETIME, "medium");
         updateTitleStringFormatter(configuredNameOrPattern);
     }
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java
index 7817999..e7e3620 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/doubles/DoubleValueSemanticsProviderAbstract.java
@@ -24,6 +24,7 @@ import java.text.NumberFormat;
 import java.text.ParseException;
 import java.util.Map;
 
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -45,7 +46,7 @@ public abstract class DoubleValueSemanticsProviderAbstract extends ValueSemantic
 
     public DoubleValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Double> adaptedClass) {
         super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
-        format = determineNumberFormat("value.format.double");
+        format = determineNumberFormat(FormatIdentifier.DOUBLE);
     }
 
     // //////////////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java
index 38cc98f..2bf6349 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java
@@ -24,6 +24,7 @@ import java.text.NumberFormat;
 import java.text.ParseException;
 import java.util.Map;
 
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -45,7 +46,7 @@ public class FloatValueSemanticsProviderAbstract extends ValueSemanticsProviderA
 
     public FloatValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Float> adaptedClass) {
         super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
-        format = determineNumberFormat("value.format.float");
+        format = determineNumberFormat(FormatIdentifier.FLOAT);
     }
 
     // //////////////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java
index 3b41217..7cb1765 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/integer/IntValueSemanticsProviderAbstract.java
@@ -24,6 +24,7 @@ import java.text.NumberFormat;
 import java.text.ParseException;
 import java.util.Map;
 
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -45,7 +46,7 @@ public abstract class IntValueSemanticsProviderAbstract extends ValueSemanticsPr
 
     public IntValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Integer> adaptedClass) {
         super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
-        format = determineNumberFormat("value.format.int");
+        format = determineNumberFormat(FormatIdentifier.INT);
     }
 
     // //////////////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java
index 667cdba..4c6480a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/longs/LongValueSemanticsProviderAbstract.java
@@ -24,6 +24,7 @@ import java.text.NumberFormat;
 import java.text.ParseException;
 import java.util.Map;
 
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -45,7 +46,7 @@ public abstract class LongValueSemanticsProviderAbstract extends ValueSemanticsP
 
     public LongValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Long> adaptedClass) {
         super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
-        format = determineNumberFormat("value.format.long");
+        format = determineNumberFormat(FormatIdentifier.LONG);
     }
 
     // //////////////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/money/MoneyValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/money/MoneyValueSemanticsProvider.java
index f2c6b22..5d23be2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/money/MoneyValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/money/MoneyValueSemanticsProvider.java
@@ -28,7 +28,6 @@ import java.util.Map;
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.value.Money;
-import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -81,8 +80,7 @@ public class MoneyValueSemanticsProvider extends ValueSemanticsProviderAndFacetA
     public MoneyValueSemanticsProvider(final FacetHolder holder) {
         super(type(), holder, Money.class, TYPICAL_LENGTH, -1, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
 
-        final String property = ConfigurationConstants.ROOT + "value.money.currency";
-        defaultCurrencyCode = getConfigurationLegacy().getString(property, LOCAL_CURRENCY_CODE);
+        defaultCurrencyCode = getConfiguration().getValue().getMoney().getCurrencyOrElse(LOCAL_CURRENCY_CODE);        
     }
 
     // //////////////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java
index 5b278a3..cd399c0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/percentage/PercentageValueSemanticsProvider.java
@@ -26,7 +26,7 @@ import java.text.ParseException;
 import org.apache.isis.applib.adapters.EncoderDecoder;
 import org.apache.isis.applib.adapters.Parser;
 import org.apache.isis.applib.value.Percentage;
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -59,7 +59,9 @@ public class PercentageValueSemanticsProvider extends ValueSemanticsProviderAndF
     public PercentageValueSemanticsProvider(final FacetHolder holder) {
         super(type(), holder, Percentage.class, TYPICAL_LENGTH, -1, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
 
-        final String formatRequired = getConfigurationLegacy().getString(ConfigurationConstants.ROOT + "value.format.percentage");
+        final String formatRequired = getConfiguration()
+                .getValue().getFormatOrElse(FormatIdentifier.PERCENTAGE, null);
+                
         if (formatRequired == null) {
             format = PERCENTAGE_FORMAT;
         } else {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java
index a9e430a..5c0a955 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/shortint/ShortValueSemanticsProviderAbstract.java
@@ -24,6 +24,7 @@ import java.text.NumberFormat;
 import java.text.ParseException;
 import java.util.Map;
 
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.facetapi.Facet;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -45,7 +46,7 @@ public class ShortValueSemanticsProviderAbstract extends ValueSemanticsProviderA
 
     public ShortValueSemanticsProviderAbstract(final FacetHolder holder, final Class<Short> adaptedClass) {
         super(type(), holder, adaptedClass, TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE);
-        format = determineNumberFormat("value.format.short");
+        format = determineNumberFormat(FormatIdentifier.SHORT);
     }
 
     // //////////////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
index b8f43c0..fbbd4e7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/time/TimeValueSemanticsProviderAbstract.java
@@ -26,7 +26,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
 
@@ -42,9 +42,10 @@ public abstract class TimeValueSemanticsProviderAbstract<T> extends ValueSemanti
 
     @SuppressWarnings("unchecked")
     public TimeValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass) {
-        super("time", holder, adaptedClass, TYPICAL_LENGTH, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, (T) DEFAULT_VALUE);
+        super(FormatIdentifier.TIME, holder, adaptedClass, TYPICAL_LENGTH, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, (T) DEFAULT_VALUE);
 
-        final String formatRequired = getConfigurationLegacy().getString(ConfigurationConstants.ROOT + "value.format.time");
+        final String formatRequired = getConfiguration()
+                .getValue().getFormatOrElse(FormatIdentifier.TIME, null); 
         if (formatRequired == null) {
             format = formats().get(defaultFormat());
         } else {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/timestampsql/TimeStampValueSemanticsProviderAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/timestampsql/TimeStampValueSemanticsProviderAbstract.java
index b4d399f..6684242 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/timestampsql/TimeStampValueSemanticsProviderAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/value/timestampsql/TimeStampValueSemanticsProviderAbstract.java
@@ -26,7 +26,7 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.TimeZone;
 
-import org.apache.isis.config.ConfigurationConstants;
+import org.apache.isis.config.IsisConfiguration.Value.FormatIdentifier;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
 import org.apache.isis.metamodel.facets.value.ValueSemanticsProviderAbstractTemporal;
 
@@ -42,8 +42,11 @@ abstract class TimeStampValueSemanticsProviderAbstract<T> extends ValueSemantics
 
     @SuppressWarnings("unchecked")
     public TimeStampValueSemanticsProviderAbstract(final FacetHolder holder, final Class<T> adaptedClass) {
-        super("timestamp", holder, adaptedClass, TYPICAL_LENGTH, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, (T) DEFAULT_VALUE);
-        final String formatRequired = getConfigurationLegacy().getString(ConfigurationConstants.ROOT + "value.format.timestamp");
+        super(FormatIdentifier.TIMESTAMP, holder, adaptedClass, TYPICAL_LENGTH, Immutability.NOT_IMMUTABLE, EqualByContent.NOT_HONOURED, (T) DEFAULT_VALUE);
+        
+        final String formatRequired = getConfiguration()
+                .getValue().getFormatOrElse(FormatIdentifier.TIMESTAMP, null);
+        
         if (formatRequired == null) {
             format = formats().get(defaultFormat());
         } else {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
index 55fa8b2..535cfe0 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
@@ -376,7 +376,7 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
         }
         
         specs.parallelStream()
-        .forEach(spec -> spec.introspectUpTo(upTo));
+        .forEach(spec -> spec.introspectUpTo(upTo)); // TODO swallows exceptions that happen inside (makes debugging hard)
         
     }
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_configTest.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_configTest.java
index 2b97fc4..968f2b2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_configTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_configTest.java
@@ -70,7 +70,7 @@ class MetaModelContext_configTest {
     // -- HELPER
 
     private IsisConfigurationLegacy config() {
-        return mmc.getConfigurationLegacy();
+        return ((MetaModelContext_forTesting) mmc).getConfigurationLegacy();
     }
 
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java
index d2a9da3..165b0e4 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java
@@ -124,7 +124,7 @@ public final class MetaModelContext_forTesting implements MetaModelContext {
         return specificationLoader.loadSpecification(type);
     }
 
-    @Override
+    //@Override
     public IsisConfigurationLegacy getConfigurationLegacy() {
         return _Config.getConfiguration();
     }
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeContext.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeContext.java
index 3fcc33d..3254857 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeContext.java
@@ -21,7 +21,6 @@ package org.apache.isis.runtime.system.context.session;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.config.IsisConfigurationLegacy;
 import org.apache.isis.metamodel.MetaModelContext;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.Oid;
@@ -46,7 +45,6 @@ public interface RuntimeContext {
     
     AuthenticationSession getAuthenticationSession();
     IsisConfiguration getConfiguration();
-    IsisConfigurationLegacy getConfigurationLegacy();
     SpecificationLoader getSpecificationLoader();
     ServiceInjector getServiceInjector();
     ServiceRegistry getServiceRegistry();
diff --git a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeContextBase.java b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeContextBase.java
index c05df1a..b56ea91 100644
--- a/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeContextBase.java
+++ b/core/runtime/src/main/java/org/apache/isis/runtime/system/context/session/RuntimeContextBase.java
@@ -25,7 +25,6 @@ import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.config.IsisConfigurationLegacy;
 import org.apache.isis.metamodel.MetaModelContext;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.ObjectAdapterProvider;
@@ -57,7 +56,6 @@ public abstract class RuntimeContextBase implements RuntimeContext {
 
     @Getter(onMethod = @__(@Override)) protected final MetaModelContext metaModelContext;
     @Getter(onMethod = @__(@Override)) protected final IsisConfiguration configuration;
-    @Getter(onMethod = @__(@Override)) protected final IsisConfigurationLegacy configurationLegacy;
     @Getter(onMethod = @__(@Override)) protected final ServiceInjector serviceInjector;
     @Getter(onMethod = @__(@Override)) protected final ServiceRegistry serviceRegistry;
     @Getter(onMethod = @__(@Override)) protected final SpecificationLoader specificationLoader;
@@ -71,7 +69,6 @@ public abstract class RuntimeContextBase implements RuntimeContext {
     protected RuntimeContextBase(MetaModelContext mmc) {
         this.metaModelContext= mmc;
         this.configuration = mmc.getConfiguration();
-        this.configurationLegacy = mmc.getConfigurationLegacy();
         this.serviceInjector = mmc.getServiceInjector();
         this.serviceRegistry = mmc.getServiceRegistry();
         this.specificationLoader = mmc.getSpecificationLoader();
diff --git a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
index f02327f..3f621ed 100644
--- a/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
+++ b/core/viewer-restfulobjects/server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/DomainResourceHelper.java
@@ -29,7 +29,6 @@ import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.config.IsisConfigurationLegacy;
 import org.apache.isis.metamodel.MetaModelContext;
 import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.adapter.oid.Oid;
@@ -90,11 +89,6 @@ class DomainResourceHelper {
         }
 
         @Override
-        public IsisConfigurationLegacy getConfigurationLegacy() {
-            return rendererContext.getConfigurationLegacy();
-        }
-        
-        @Override
         public IsisConfiguration getConfiguration() {
             return rendererContext.getConfiguration();
         }
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
index c258cba..e9ede78 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/footer/FooterPanel.java
@@ -31,7 +31,7 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
-import org.apache.isis.config.IsisConfigurationLegacy;
+import org.apache.isis.config.IsisConfiguration.Viewer.Wicket.Credit;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
 import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbPanel;
 import org.apache.isis.viewer.wicket.ui.components.widgets.themepicker.ThemeChooser;
@@ -61,66 +61,6 @@ public class FooterPanel extends PanelAbstract<Model<String>> {
         super(id);
     }
 
-    static class Credit {
-        private final int num;
-        private final String url;
-        private final String name;
-        private final String image;
-
-        final boolean defined;
-        private Credit(final int num, final String url, final String name, final String image) {
-            this.num = num;
-            this.url = url;
-            this.name = name;
-            this.image = image;
-            this.defined = (name != null || image != null) && url != null;
-        }
-
-        int getNum() {
-            return num;
-        }
-
-        boolean isDefined() {
-            return defined;
-        }
-
-        String getId() {
-            return idFor("");
-        }
-
-        String getUrl() {
-            return url;
-        }
-        String getUrlId() {
-            return idFor("Url");
-        }
-
-        String getName() {
-            return name;
-        }
-        String getNameId() {
-            return idFor("Name");
-        }
-
-        String getImage() {
-            return image;
-        }
-        String getImageId() {
-            return idFor("Image");
-        }
-
-        private String idFor(final String component) {
-            return "credit" + num + component;
-        }
-
-        public static Credit create(final IsisConfigurationLegacy configurationLegacy, final int num) {
-            String base = "isis.viewer.wicket.credit." + num + ".";
-            String url = configurationLegacy.getString(base + "url");
-            String name = configurationLegacy.getString(base + "name");
-            String image = configurationLegacy.getString(base + "image");
-            return new Credit(num, url, name, image);
-        }
-    }
 
     @Override
     protected void onInitialize() {
@@ -133,17 +73,17 @@ public class FooterPanel extends PanelAbstract<Model<String>> {
     }
 
     private void addCredits() {
-        boolean credits = false;
-        credits = addCredit(1) || credits;
-        credits = addCredit(2) || credits;
-        credits = addCredit(3) || credits;
+        boolean hasAnyCredits = false;
+        hasAnyCredits = addCredit(1) || hasAnyCredits;
+        hasAnyCredits = addCredit(2) || hasAnyCredits;
+        hasAnyCredits = addCredit(3) || hasAnyCredits;
         final Label creditsLabel = new Label("creditsLabel", "Credits: ");
         add(creditsLabel);
-        creditsLabel.setVisibilityAllowed(credits);
+        creditsLabel.setVisibilityAllowed(hasAnyCredits);
     }
 
     private boolean addCredit(final int num) {
-        final Credit credit = Credit.create(super.getCommonContext().getConfigurationLegacy(), num);
+        final Credit credit = super.getConfiguration().getViewer().getWicket().getCredit(num); 
         final WebMarkupContainer creditLink = newLink(credit);
         if(credit.isDefined()) {
             creditLink.add(new CreditImage(credit.getImageId(), credit.getImage()));
diff --git a/examples/apps/demo/src/main/java/domainapp/application/isis-non-changing.properties b/examples/apps/demo/src/main/java/domainapp/application/isis-non-changing.properties
index fc49dd5..d40228c 100644
--- a/examples/apps/demo/src/main/java/domainapp/application/isis-non-changing.properties
+++ b/examples/apps/demo/src/main/java/domainapp/application/isis-non-changing.properties
@@ -48,10 +48,9 @@ isis.viewer.wicket.application.js=/scripts/application.js
 isis.viewer.wicket.application.about=Isis Demo App
 isis.viewer.wicket.welcome.file=welcome.html
 
-isis.viewer.wicket.credit.1.image=/images/apache-isis/logo-48x48.png
-isis.viewer.wicket.credit.1.name=Apache Isis
-isis.viewer.wicket.credit.1.url=http://isis.apache.org
-
+isis.viewer.wicket.credit[0].image=/images/apache-isis/logo-48x48.png
+isis.viewer.wicket.credit[0].name=Apache Isis
+isis.viewer.wicket.credit[0].url=http://isis.apache.org
 
 isis.viewer.wicket.themes.initial=bootstrap-theme
 isis.viewer.wicket.themes.showChooser=yes
diff --git a/examples/apps/helloworld/src/main/java/domainapp/application/isis-non-changing.properties b/examples/apps/helloworld/src/main/java/domainapp/application/isis-non-changing.properties
index 09dcb88..9b53670 100644
--- a/examples/apps/helloworld/src/main/java/domainapp/application/isis-non-changing.properties
+++ b/examples/apps/helloworld/src/main/java/domainapp/application/isis-non-changing.properties
@@ -42,9 +42,9 @@ isis.viewer.wicket.application.js=scripts/application.js
 isis.viewer.wicket.application.about=Hello World
 isis.viewer.wicket.welcome.file=welcome.html
 
-isis.viewer.wicket.credit.1.image=/images/apache-isis/logo-48x48.png
-isis.viewer.wicket.credit.1.name=Apache Isis
-isis.viewer.wicket.credit.1.url=http://isis.apache.org
+isis.viewer.wicket.credit[0].image=/images/apache-isis/logo-48x48.png
+isis.viewer.wicket.credit[0].name=Apache Isis
+isis.viewer.wicket.credit[0].url=http://isis.apache.org
 
 isis.viewer.wicket.themes.initial=Flatly
 isis.viewer.wicket.themes.showChooser=yes
diff --git a/examples/apps/simpleapp/application/src/main/java/domainapp/conf/isis-non-changing.properties b/examples/apps/simpleapp/application/src/main/java/domainapp/conf/isis-non-changing.properties
index 1ba7209..bdcbc36 100644
--- a/examples/apps/simpleapp/application/src/main/java/domainapp/conf/isis-non-changing.properties
+++ b/examples/apps/simpleapp/application/src/main/java/domainapp/conf/isis-non-changing.properties
@@ -555,9 +555,9 @@ isis.viewer.wicket.application.css=css/application.css
 isis.viewer.wicket.application.js=scripts/application.js
 isis.viewer.wicket.application.about=Simple App
 
-isis.viewer.wicket.credit.1.image=/images/apache-isis/logo-48x48.png
-isis.viewer.wicket.credit.1.name=Apache Isis
-isis.viewer.wicket.credit.1.url=http://isis.apache.org
+isis.viewer.wicket.credit[0].image=/images/apache-isis/logo-48x48.png
+isis.viewer.wicket.credit[0].name=Apache Isis
+isis.viewer.wicket.credit[0].url=http://isis.apache.org
 
 #
 # The maximum length of titles to display in standalone or parented tables.
diff --git a/examples/archetype/helloworld/src/main/resources/archetype-resources/src/main/java/domainapp/application/isis-non-changing.properties b/examples/archetype/helloworld/src/main/resources/archetype-resources/src/main/java/domainapp/application/isis-non-changing.properties
index d1f5123..937916c 100644
--- a/examples/archetype/helloworld/src/main/resources/archetype-resources/src/main/java/domainapp/application/isis-non-changing.properties
+++ b/examples/archetype/helloworld/src/main/resources/archetype-resources/src/main/java/domainapp/application/isis-non-changing.properties
@@ -51,9 +51,9 @@ isis.viewer.wicket.application.js=scripts/application.js
 isis.viewer.wicket.application.about=Hello World
 isis.viewer.wicket.welcome.file=welcome.html
 
-isis.viewer.wicket.credit.1.image=/images/apache-isis/logo-48x48.png
-isis.viewer.wicket.credit.1.name=Apache Isis
-isis.viewer.wicket.credit.1.url=http://isis.apache.org
+isis.viewer.wicket.credit[0].image=/images/apache-isis/logo-48x48.png
+isis.viewer.wicket.credit[0].name=Apache Isis
+isis.viewer.wicket.credit[0].url=http://isis.apache.org
 
 isis.viewer.wicket.themes.initial=Flatly
 isis.viewer.wicket.themes.showChooser=yes
diff --git a/examples/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/isis-non-changing.properties b/examples/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/isis-non-changing.properties
index 421517a..95fe0e1 100644
--- a/examples/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/isis-non-changing.properties
+++ b/examples/archetype/simpleapp/src/main/resources/archetype-resources/application/src/main/java/domainapp/application/manifest/isis-non-changing.properties
@@ -558,9 +558,9 @@ isis.viewer.wicket.application.css=css/application.css
 isis.viewer.wicket.application.js=scripts/application.js
 isis.viewer.wicket.application.about=Simple App
 
-isis.viewer.wicket.credit.1.image=/images/apache-isis/logo-48x48.png
-isis.viewer.wicket.credit.1.name=Apache Isis
-isis.viewer.wicket.credit.1.url=http://isis.apache.org
+isis.viewer.wicket.credit[0].image=/images/apache-isis/logo-48x48.png
+isis.viewer.wicket.credit[0].name=Apache Isis
+isis.viewer.wicket.credit[0].url=http://isis.apache.org
 
 ${symbol_pound}
 ${symbol_pound} The maximum length of titles to display in standalone or parented tables.
diff --git a/examples/smoketests/src/main/java/org/apache/isis/testdomain/conf/isis-non-changing.properties b/examples/smoketests/src/main/java/org/apache/isis/testdomain/conf/isis-non-changing.properties
index 434fc3b..1936d18 100644
--- a/examples/smoketests/src/main/java/org/apache/isis/testdomain/conf/isis-non-changing.properties
+++ b/examples/smoketests/src/main/java/org/apache/isis/testdomain/conf/isis-non-changing.properties
@@ -43,9 +43,9 @@ isis.viewer.wicket.application.js=scripts/application.js
 isis.viewer.wicket.application.about=Hello World
 isis.viewer.wicket.welcome.file=welcome.html
 
-isis.viewer.wicket.credit.1.image=/images/apache-isis/logo-48x48.png
-isis.viewer.wicket.credit.1.name=Apache Isis
-isis.viewer.wicket.credit.1.url=http://isis.apache.org
+isis.viewer.wicket.credit[0].image=/images/apache-isis/logo-48x48.png
+isis.viewer.wicket.credit[0].name=Apache Isis
+isis.viewer.wicket.credit[0].url=http://isis.apache.org
 
 isis.viewer.wicket.themes.initial=Flatly
 isis.viewer.wicket.themes.showChooser=yes