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 2018/02/27 21:03:33 UTC

[isis] branch master updated: ISIS-1827 applib: remove uses of guava with Internal API

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 58f8ad8  ISIS-1827 applib: remove uses of guava with Internal API
58f8ad8 is described below

commit 58f8ad8b7466edcc07eedea77d467847c4e74a18
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Feb 27 22:03:05 2018 +0100

    ISIS-1827 applib: remove uses of guava with Internal API
---
 .../apache/isis/applib/AppManifestAbstract.java    |  15 +-
 .../apache/isis/applib/DomainObjectContainer.java  |   3 +-
 .../java/org/apache/isis/applib/Identifier.java    |  13 +-
 .../main/java/org/apache/isis/applib/Module.java   |  29 +-
 .../org/apache/isis/applib/ModuleAbstract.java     |   5 +-
 .../isis/applib/ModuleOrBuilderAbstract.java       |  14 +-
 .../isis/applib/NonRecoverableException.java       |   4 +-
 .../apache/isis/applib/RecoverableException.java   |  24 +-
 .../fixturescripts/BuilderScriptAbstract.java      |   5 +-
 .../applib/fixturescripts/ExecutionParameters.java |  40 +-
 .../applib/fixturescripts/FixtureResultList.java   |  13 +-
 .../isis/applib/fixturescripts/FixtureScript.java  |  16 +-
 .../isis/applib/fixturescripts/FixtureScripts.java |  79 +-
 .../setup/PersonaEnumPersistAll.java               |   5 +-
 .../teardown/TeardownFixtureAbstract.java          |   7 +-
 .../teardown/TeardownFixtureAbstract2.java         |   7 +-
 .../layout/component/CollectionLayoutData.java     |  20 +-
 .../isis/applib/layout/component/FieldSet.java     |  26 +-
 .../layout/component/PropertyLayoutData.java       |   5 +-
 .../isis/applib/layout/grid/GridAbstract.java      |  21 +-
 .../isis/applib/layout/grid/bootstrap3/BS3Col.java |  15 +-
 .../applib/layout/grid/bootstrap3/BS3Grid.java     |  25 +-
 .../isis/applib/layout/grid/bootstrap3/BS3Row.java |   5 +-
 .../isis/applib/layout/grid/bootstrap3/BS3Tab.java |   5 +-
 .../applib/layout/grid/bootstrap3/BS3TabGroup.java |   5 +-
 .../applib/layout/menubars/MenuBarsAbstract.java   |   5 +-
 .../applib/layout/menubars/bootstrap3/BS3Menu.java |   5 +-
 .../layout/menubars/bootstrap3/BS3MenuBar.java     |   5 +-
 .../layout/menubars/bootstrap3/BS3MenuSection.java |   5 +-
 .../isis/applib/services/bookmark/Bookmark.java    |   7 +-
 .../applib/services/command/CommandDefault.java    |  11 +-
 .../services/config/ConfigurationProperty.java     |  17 +-
 .../services/conmap/ContentMappingService.java     |  10 +-
 .../services/eventbus/AbstractDomainEvent.java     |   7 +-
 .../applib/services/eventbus/AbstractUiEvent.java  |   5 +-
 .../applib/services/eventbus/EventBusService.java  |   7 +-
 .../exceprecog/ExceptionRecognizerAbstract.java    |  45 +-
 .../exceprecog/ExceptionRecognizerComposite.java   |   5 +-
 .../exceprecog/ExceptionRecognizerForType.java     |   7 +-
 ...eptionRecognizerCompositeForJdoObjectStore.java |   5 +-
 .../applib/services/hsqldb/HsqlDbManagerMenu.java  |   8 +-
 .../applib/services/i18n/TranslatableString.java   |   5 +-
 .../isis/applib/services/iactn/Interaction.java    |  11 +-
 .../jaxb/CatalogingSchemaOutputResolver.java       |  11 +-
 .../isis/applib/services/jaxb/JaxbService.java     |  10 +-
 .../services/metamodel/MetaModelServicesMenu.java  |  13 +-
 .../queryresultscache/QueryResultsCache.java       |  10 +-
 .../applib/services/scratchpad/Scratchpad.java     |   6 +-
 .../isis/applib/services/sudo/SudoService.java     |   5 +-
 .../java/org/apache/isis/applib/util/Clause.java   |  17 +-
 .../java/org/apache/isis/applib/util/JaxbUtil.java |  37 +-
 .../apache/isis/applib/util/ObjectContracts.java   |  19 +-
 .../java/org/apache/isis/applib/value/Blob.java    |  16 +-
 .../java/org/apache/isis/applib/value/Clob.java    |   6 +-
 .../apache/isis/schema/utils/ChangesDtoUtils.java  |   8 +-
 .../apache/isis/schema/utils/CommandDtoUtils.java  |   8 +-
 .../apache/isis/schema/utils/CommonDtoUtils.java   | 108 ++-
 .../isis/schema/utils/InteractionDtoUtils.java     | 803 +++++++++++----------
 .../Module_Util_transitiveDependenciesOf_Test.java |  35 +-
 .../applib/internal/compare/ComparatorsTest.java   |   8 +-
 .../QueryDefaultTest_withStart_or_withCount.java   |   4 +-
 ...onRecognizerCompositeForJdoObjectStoreTest.java |  15 +-
 .../XmlSnapshotServiceAbstractTest.java            |  12 +-
 .../ObjectContractsTest_equals_and_hashCode.java   |  10 +-
 64 files changed, 814 insertions(+), 923 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/AppManifestAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/AppManifestAbstract.java
index aa49dbc..86bf441 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AppManifestAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AppManifestAbstract.java
@@ -23,10 +23,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
 import org.apache.isis.applib.fixturescripts.FixtureScript;
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.collections._Maps;
 
 /**
  * Convenience adapter, configured using an {@link Builder}.
@@ -45,7 +44,7 @@ public abstract class AppManifestAbstract implements AppManifest {
         overrideModules(builderModules);
         this.modules = builderModules;
 
-        final List<Class<?>> builderAdditionalServices = Lists.newArrayList(builder.getAllAdditionalServices());
+        final List<Class<?>> builderAdditionalServices = _Lists.newArrayList(builder.getAllAdditionalServices());
         overrideAdditionalServices(builderAdditionalServices);
 
         this.additionalServices = builderAdditionalServices;
@@ -91,14 +90,14 @@ public abstract class AppManifestAbstract implements AppManifest {
         if(builder instanceof AppManifestAbstract2.Builder) {
             return ((AppManifestAbstract2.Builder) builder).fixtures;
         }
-        return Lists.newArrayList();
+        return _Lists.newArrayList();
     }
 
     private Map<String, String> createConfigurationProperties(
             final List<PropertyResource> propertyResources,
             final Map<String,String> individualConfigProps,
             final List<Class<? extends FixtureScript>> fixtures) {
-        final Map<String, String> props = Maps.newHashMap();
+        final Map<String, String> props = _Maps.newHashMap();
         for (PropertyResource propertyResource : propertyResources) {
             propertyResource.loadPropsInto(props);
         }
@@ -215,7 +214,7 @@ public abstract class AppManifestAbstract implements AppManifest {
     public static abstract class BuilderAbstract<B extends BuilderAbstract<B>> extends ModuleOrBuilderAbstract<B> {
 
         String authMechanism = "shiro";
-        List<Class<? extends FixtureScript>> fixtures = Lists.newArrayList();
+        List<Class<? extends FixtureScript>> fixtures = _Lists.newArrayList();
 
         public B withAuthMechanism(final String authMechanism) {
             this.authMechanism = authMechanism;
@@ -236,7 +235,7 @@ public abstract class AppManifestAbstract implements AppManifest {
         }
 
         List<Class<?>> getAllAdditionalModules() {
-            return Lists.newArrayList(additionalModules);
+            return _Lists.newArrayList(additionalModules);
         }
 
         Set<Class<?>> getAllAdditionalServices() {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java b/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
index 2850c9f..cb37aae 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/DomainObjectContainer.java
@@ -33,7 +33,8 @@ import org.apache.isis.applib.services.xactn.TransactionService;
  * domain objects, and which provides functionality to those domain objects
  * in order that they might interact or have knowledge of with the "outside world".
  *
- * @deprecated - use {@link MessageService}, {@link TitleService}, {@link RepositoryService}, {@link FactoryService}, {@link UserService}, {@link TransactionService}.
+ * @deprecated - use {@link MessageService}, {@link TitleService}, {@link RepositoryService}, 
+ * {@link FactoryService}, {@link UserService}, {@link TransactionService}.
  */
 @Deprecated
 public interface DomainObjectContainer {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/Identifier.java b/core/applib/src/main/java/org/apache/isis/applib/Identifier.java
index 258de6f..3d2b989 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/Identifier.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/Identifier.java
@@ -23,9 +23,10 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.StringTokenizer;
+import java.util.stream.Collectors;
 
-import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
+import org.apache.isis.applib.internal.base._NullSafe;
+import org.apache.isis.applib.internal.collections._Lists;
 
 public class Identifier implements Comparable<Identifier> {
 
@@ -117,7 +118,7 @@ public class Identifier implements Comparable<Identifier> {
         if (parameterClasses == null) {
             return EMPTY_LIST_OF_STRINGS;
         }
-        final List<String> parameterClassNames = Lists.newArrayList();
+        final List<String> parameterClassNames = _Lists.newArrayList();
         for (final Class<?> parameterClass : parameterClasses) {
             parameterClassNames.add(parameterClass.getName());
         }
@@ -238,7 +239,9 @@ public class Identifier implements Comparable<Identifier> {
 
     private void appendParameterNamesTo(final StringBuilder buf) {
         buf.append('(');
-        Joiner.on(',').appendTo(buf, parameterNames);
+        buf.append(
+        		_NullSafe.stream(parameterNames)
+        		.collect(Collectors.joining(","))	);
         buf.append(')');
     }
 
@@ -431,7 +434,7 @@ class NameUtils {
     }
 
     public static List<String> naturalNames(final List<String> names) {
-        final List<String> naturalNames = Lists.newArrayList();
+        final List<String> naturalNames = _Lists.newArrayList();
         for (final String name : names) {
             naturalNames.add(NameUtils.naturalName(name));
         }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/Module.java b/core/applib/src/main/java/org/apache/isis/applib/Module.java
index 3e567b7..01c2fc9 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/Module.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/Module.java
@@ -23,12 +23,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.collections._Maps;
+import org.apache.isis.applib.internal.collections._Sets;
 
 /**
  * Represents a collection of entities and domain services that provide a set of coherent functionality under a
@@ -58,7 +57,7 @@ import org.apache.isis.applib.fixturescripts.FixtureScript;
  *     <b>IMPORTANT</b>: implementations are expected to have value-semantics. This allows each {@link Module} to define
  *     its respective {@link #getDependencies() dependencies} simply by instantiating the {@link Module}s on which
  *     it depends.  The framework relies on value semantics to remove any duplicates from the computed graph of
- *     all depenencies for the entire running application.  The easiest way to simply inherit from
+ *     all dependencies for the entire running application.  The easiest way to simply inherit from
  *     {@link ModuleAbstract}.
  * </p>
  */
@@ -124,11 +123,11 @@ public interface Module {
          * </p>
          */
         static List<Module> transitiveDependenciesOf(Module module) {
-            final List<Module> ordered = Lists.newArrayList();
-            final List<Module> visited = Lists.newArrayList();
+            final List<Module> ordered = _Lists.newArrayList();
+            final List<Module> visited = _Lists.newArrayList();
             appendDependenciesTo(ordered, module, visited);
-            final LinkedHashSet<Module> sequencedSet = Sets.newLinkedHashSet(ordered);
-            return Lists.newArrayList(sequencedSet);
+            final LinkedHashSet<Module> sequencedSet = _Sets.newLinkedHashSet(ordered);
+            return _Lists.newArrayList(sequencedSet);
         }
 
         /**
@@ -140,7 +139,7 @@ public interface Module {
          * </p>
          */
         static List<Class<?>> transitiveAdditionalModulesOf(Module module) {
-            final Set<Class<?>> modules = Sets.newHashSet();
+            final Set<Class<?>> modules = _Sets.newHashSet();
             final List<Module> transitiveDependencies = transitiveDependenciesOf(module);
             for (Module transitiveDependency : transitiveDependencies) {
                 final Set<Class<?>> additionalModules = transitiveDependency.getAdditionalModules();
@@ -153,7 +152,7 @@ public interface Module {
                     modules.addAll(additionalModules);
                 }
             }
-            return Lists.newArrayList(modules);
+            return _Lists.newArrayList(modules);
         }
 
         /**
@@ -165,7 +164,7 @@ public interface Module {
          * </p>
          */
         static List<Class<?>> transitiveAdditionalServicesOf(Module module) {
-            final Set<Class<?>> services = Sets.newHashSet();
+            final Set<Class<?>> services = _Sets.newHashSet();
             final List<Module> transitiveDependencies = Util.transitiveDependenciesOf(module);
             for (Module transitiveDependency : transitiveDependencies) {
                 final Set<Class<?>> additionalServices = transitiveDependency.getAdditionalServices();
@@ -173,7 +172,7 @@ public interface Module {
                     services.addAll(additionalServices);
                 }
             }
-            return Lists.newArrayList(services);
+            return _Lists.newArrayList(services);
         }
 
         private static void appendDependenciesTo(
@@ -203,7 +202,7 @@ public interface Module {
         }
 
         static Map<String, String> transitiveIndividualConfigPropsOf(final Module module) {
-            final Map<String,String> transitiveIndividualConfigProps = Maps.newLinkedHashMap();
+            final Map<String,String> transitiveIndividualConfigProps = _Maps.newLinkedHashMap();
 
             final List<Module> transitiveDependencies = transitiveDependenciesOf(module);
             for (Module transitiveDependency : transitiveDependencies) {
@@ -213,7 +212,7 @@ public interface Module {
         }
 
         static List<PropertyResource> transitivePropertyResourcesOf(final Module module) {
-            final List<PropertyResource> transitivePropertyResources = Lists.newArrayList();
+            final List<PropertyResource> transitivePropertyResources = _Lists.newArrayList();
 
             final List<Module> transitiveDependencies = transitiveDependenciesOf(module);
             for (Module transitiveDependency : transitiveDependencies) {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/ModuleAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/ModuleAbstract.java
index 8366f34..d5d63b6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/ModuleAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/ModuleAbstract.java
@@ -28,8 +28,7 @@ import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.applib.internal.base._NullSafe;
-
-import com.google.common.collect.Sets;
+import org.apache.isis.applib.internal.collections._Sets;
 
 /**
  * Adapter for {@link Module} which has a default no-op implementation.
@@ -46,7 +45,7 @@ public abstract class ModuleAbstract
     @Override
     @XmlTransient
     public Set<Module> getDependencies() {
-        return Sets.newLinkedHashSet();
+        return _Sets.newLinkedHashSet();
     }
 
     @XmlElement(name = "module", required = true)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
index ab4b31d..07e2841 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
@@ -25,9 +25,9 @@ import java.util.Set;
 
 import javax.xml.bind.annotation.XmlTransient;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.collections._Maps;
+import org.apache.isis.applib.internal.collections._Sets;
 
 /**
  * Factors out the commonality between {@link AppManifestAbstract.Builder} and {@link ModuleAbstract}.
@@ -36,11 +36,11 @@ import com.google.common.collect.Sets;
  */
 abstract class ModuleOrBuilderAbstract<B extends ModuleOrBuilderAbstract<B>> {
 
-    final Set<Class<?>> additionalModules = Sets.newLinkedHashSet();
-    final Set<Class<?>> additionalServices  = Sets.newLinkedHashSet();
+    final Set<Class<?>> additionalModules = _Sets.newLinkedHashSet();
+    final Set<Class<?>> additionalServices  = _Sets.newLinkedHashSet();
 
-    final Map<String,String> individualConfigProps = Maps.newLinkedHashMap();
-    final List<PropertyResource> propertyResources = Lists.newArrayList();
+    final Map<String,String> individualConfigProps = _Maps.newLinkedHashMap();
+    final List<PropertyResource> propertyResources = _Lists.newArrayList();
 
     ModuleOrBuilderAbstract() {}
     
diff --git a/core/applib/src/main/java/org/apache/isis/applib/NonRecoverableException.java b/core/applib/src/main/java/org/apache/isis/applib/NonRecoverableException.java
index 58236cc..f59b1fb7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/NonRecoverableException.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/NonRecoverableException.java
@@ -19,7 +19,7 @@
 
 package org.apache.isis.applib;
 
-import com.google.common.base.Strings;
+import org.apache.isis.applib.internal.base._Strings;
 import org.apache.isis.applib.services.exceprecog.TranslatableException;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 
@@ -83,7 +83,7 @@ public class NonRecoverableException extends RuntimeException implements Transla
         this.translationContext =
                 translationContextClass != null
                         ? (translationContextClass.getName() +
-                            (!Strings.isNullOrEmpty(translationContextMethod)
+                            (!_Strings.isNullOrEmpty(translationContextMethod)
                                 ? "#" + translationContextMethod
                                 : "")
                         )
diff --git a/core/applib/src/main/java/org/apache/isis/applib/RecoverableException.java b/core/applib/src/main/java/org/apache/isis/applib/RecoverableException.java
index 34b0ee6..da962e1 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/RecoverableException.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/RecoverableException.java
@@ -19,13 +19,8 @@
 
 package org.apache.isis.applib;
 
-import java.util.Iterator;
-import java.util.List;
-
-import com.google.common.base.Strings;
-import com.google.common.base.Throwables;
-import com.google.common.collect.Iterables;
-
+import org.apache.isis.applib.internal.base._Strings;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
 import org.apache.isis.applib.services.exceprecog.TranslatableException;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 
@@ -98,7 +93,7 @@ public class RecoverableException extends RuntimeException implements Translatab
         this.translationContext =
                 translationContextClass != null
                         ? (translationContextClass.getName() +
-                          (!Strings.isNullOrEmpty(translationContextMethod)
+                          (!_Strings.isNullOrEmpty(translationContextMethod)
                                 ? "#" + translationContextMethod
                                 : "")
                 )
@@ -127,11 +122,14 @@ public class RecoverableException extends RuntimeException implements Translatab
         private Util() {}
 
         public static RecoverableException getRecoverableExceptionIfAny(final Exception ex) {
-            final List<Throwable> causalChain = Throwables.getCausalChain(ex);
-            final Iterable<RecoverableException> appEx =
-                    Iterables.filter(causalChain, RecoverableException.class);
-            final Iterator<RecoverableException> iterator = appEx.iterator();
-            return iterator.hasNext() ? iterator.next() : null;
+        	
+        	return _Exceptions.streamCausalChain(ex)
+        			.filter(t->t instanceof RecoverableException)
+        			.map(t->(RecoverableException)t)
+		        	.findFirst()
+		        	.orElse(null)
+		        	;
+
         }
     }
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/BuilderScriptAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/BuilderScriptAbstract.java
index e185cf2..2dd8260 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/BuilderScriptAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/BuilderScriptAbstract.java
@@ -20,9 +20,8 @@ package org.apache.isis.applib.fixturescripts;
 
 import java.util.List;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Lists;
 
 public abstract class BuilderScriptAbstract<T,F extends BuilderScriptAbstract<T,F>>
         extends FixtureScript implements WithPrereqs<T,F>, FixtureScriptWithExecutionStrategy {
@@ -90,7 +89,7 @@ public abstract class BuilderScriptAbstract<T,F extends BuilderScriptAbstract<T,
         return persona.findUsing(serviceRegistry);
     }
 
-    private final List<WithPrereqs.Block<T,F>> prereqs = Lists.newArrayList();
+    private final List<WithPrereqs.Block<T,F>> prereqs = _Lists.newArrayList();
 
     @Override
     public F setPrereq(WithPrereqs.Block<T,F> prereq) {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParameters.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParameters.java
index b7f8f8d..ae0d08a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParameters.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/ExecutionParameters.java
@@ -18,19 +18,16 @@
  */
 package org.apache.isis.applib.fixturescripts;
 
-import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Collections;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Maps;
-import com.google.common.io.CharSource;
 
 import org.apache.isis.applib.internal.base._Casts;
+import org.apache.isis.applib.internal.base._Strings;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
@@ -49,20 +46,17 @@ public class ExecutionParameters {
     }
 
     static Map<String, String> asKeyValueMap(final String parameters) {
-        final Map<String, String> keyValues = Maps.newLinkedHashMap();
+        final Map<String, String> keyValues = _Maps.newLinkedHashMap();
         if (parameters != null) {
             try {
-                final ImmutableList<String> lines = CharSource.wrap(parameters).readLines();
-                for (final String line : lines) {
-                    if (line == null) {
-                        continue;
-                    }
+            	_Strings.splitThenStream(parameters, "\n")
+            	.forEach(line->{
                     final Matcher matcher = keyEqualsValuePattern.matcher(line);
                     if (matcher.matches()) {
                         keyValues.put(matcher.group(1).trim(), matcher.group(2).trim());
                     }
-                }
-            } catch (final IOException e) {
+            	});
+            } catch (final Exception e) {
                 // ignore, shouldn't happen
             }
         }
@@ -120,7 +114,7 @@ public class ExecutionParameters {
 
     public Boolean getParameterAsBoolean(final String parameterName) {
         final String value = getParameter(parameterName);
-        if (Strings.isNullOrEmpty(value)) {
+        if (_Strings.isNullOrEmpty(value)) {
             return null;
         }
         return Boolean.valueOf(value);
@@ -128,7 +122,7 @@ public class ExecutionParameters {
 
     public Byte getParameterAsByte(final String parameterName) {
         final String value = getParameter(parameterName);
-        if (Strings.isNullOrEmpty(value)) {
+        if (_Strings.isNullOrEmpty(value)) {
             return null;
         }
         return Byte.valueOf(value);
@@ -136,7 +130,7 @@ public class ExecutionParameters {
 
     public Short getParameterAsShort(final String parameterName) {
         final String value = getParameter(parameterName);
-        if (Strings.isNullOrEmpty(value)) {
+        if (_Strings.isNullOrEmpty(value)) {
             return null;
         }
         return Short.valueOf(value);
@@ -144,7 +138,7 @@ public class ExecutionParameters {
 
     public Integer getParameterAsInteger(final String parameterName) {
         final String value = getParameter(parameterName);
-        if (Strings.isNullOrEmpty(value)) {
+        if (_Strings.isNullOrEmpty(value)) {
             return null;
         }
         return Integer.valueOf(value);
@@ -152,7 +146,7 @@ public class ExecutionParameters {
 
     public Long getParameterAsLong(final String parameterName) {
         final String value = getParameter(parameterName);
-        if (Strings.isNullOrEmpty(value)) {
+        if (_Strings.isNullOrEmpty(value)) {
             return null;
         }
         return Long.valueOf(value);
@@ -160,7 +154,7 @@ public class ExecutionParameters {
 
     public Float getParameterAsFloat(final String parameterName) {
         final String value = getParameter(parameterName);
-        if (Strings.isNullOrEmpty(value)) {
+        if (_Strings.isNullOrEmpty(value)) {
             return null;
         }
         return Float.valueOf(value);
@@ -168,7 +162,7 @@ public class ExecutionParameters {
 
     public Double getParameterAsDouble(final String parameterName) {
         final String value = getParameter(parameterName);
-        if (Strings.isNullOrEmpty(value)) {
+        if (_Strings.isNullOrEmpty(value)) {
             return null;
         }
         return Double.valueOf(value);
@@ -176,7 +170,7 @@ public class ExecutionParameters {
 
     public Character getParameterAsCharacter(final String parameterName) {
         final String value = getParameter(parameterName);
-        if (Strings.isNullOrEmpty(value)) {
+        if (_Strings.isNullOrEmpty(value)) {
             return null;
         }
         return Character.valueOf(value.charAt(0));
@@ -184,7 +178,7 @@ public class ExecutionParameters {
 
     public BigInteger getParameterAsBigInteger(final String parameterName) {
         final String value = getParameter(parameterName);
-        if (Strings.isNullOrEmpty(value)) {
+        if (_Strings.isNullOrEmpty(value)) {
             return null;
         }
         return new BigInteger(value);
@@ -192,7 +186,7 @@ public class ExecutionParameters {
 
     public BigDecimal getParameterAsBigDecimal(final String parameterName) {
         final String value = getParameter(parameterName);
-        if (Strings.isNullOrEmpty(value)) {
+        if (_Strings.isNullOrEmpty(value)) {
             return null;
         }
         return new BigDecimal(value);
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResultList.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResultList.java
index 0ffd878..1e25b43 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResultList.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureResultList.java
@@ -24,9 +24,8 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.isis.applib.internal.base._Casts;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.collections._Maps;
 
 /**
  * Collecting parameter.
@@ -50,7 +49,7 @@ public class FixtureResultList {
 
     //region > list of FixtureResults
 
-    private final List<FixtureResult> list = Lists.newArrayList();
+    private final List<FixtureResult> list = _Lists.newArrayList();
 
     /**
      * Irrespective of the setting for {@link FixtureScripts#getMultipleExecutionStrategy()}, this list ensures
@@ -69,9 +68,9 @@ public class FixtureResultList {
      * </p>
      * {@link org.apache.isis.applib.fixturescripts.FixtureScript}s used to generate this result list.
      */
-    private final List<FixtureScript> fixtureScriptList = Lists.newArrayList();
+    private final List<FixtureScript> fixtureScriptList = _Lists.newArrayList();
 
-    private final Map<String, FixtureResult> fixtureResultByKey = Maps.newHashMap();
+    private final Map<String, FixtureResult> fixtureResultByKey = _Maps.newHashMap();
 
     public <T> T add(final FixtureScript script, final T object) {
         return add(script, nextItemFor(script), object);
@@ -108,7 +107,7 @@ public class FixtureResultList {
 
     //region > nextItemFor
 
-    private final Map<FixtureScript, AtomicInteger> itemNumberByScript = Maps.newHashMap();
+    private final Map<FixtureScript, AtomicInteger> itemNumberByScript = _Maps.newHashMap();
 
     String nextItemFor(final FixtureScript script) {
         AtomicInteger atomicInteger = itemNumberByScript.get(script);
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
index 7167a07..139e86c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
@@ -37,6 +37,8 @@ import org.apache.isis.applib.fixtures.FixtureType;
 import org.apache.isis.applib.fixtures.InstallableFixture;
 import org.apache.isis.applib.internal.base._Casts;
 import org.apache.isis.applib.internal.base._Strings;
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.applib.internal.exceptions._Exceptions;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
@@ -48,10 +50,6 @@ import org.apache.isis.applib.services.xactn.TransactionService;
 import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
 
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
 @ViewModelLayout(named="Script")
 public abstract class FixtureScript 
         extends AbstractViewModel 
@@ -689,7 +687,7 @@ public abstract class FixtureScript
          * but used only by {@link FixtureScripts.MultipleExecutionStrategy#EXECUTE_ONCE_BY_VALUE} to determine whether
          * should execute or not.
          */
-        private final List<FixtureScript> previouslyExecuted = Lists.newArrayList();
+        private final List<FixtureScript> previouslyExecuted = _Lists.newArrayList();
 
         /**
          * Returns a list of the {@link FixtureScript} instances that have already been executed.
@@ -711,13 +709,13 @@ public abstract class FixtureScript
          * used and populated only if the {@link FixtureScripts.MultipleExecutionStrategy#EXECUTE_ONCE_BY_CLASS}
          * strategy is in use.
          */
-        private final Map<Class<? extends FixtureScript>, FixtureScript> fixtureScriptByClass = Maps.newLinkedHashMap();
+        private final Map<Class<? extends FixtureScript>, FixtureScript> fixtureScriptByClass = _Maps.newLinkedHashMap();
 
         /**
          * used and populated only if the {@link FixtureScripts.MultipleExecutionStrategy#EXECUTE_ONCE_BY_VALUE}
          * strategy is in use.
          */
-        private final Map<FixtureScript, FixtureScript> fixtureScriptByValue = Maps.newLinkedHashMap();
+        private final Map<FixtureScript, FixtureScript> fixtureScriptByValue = _Maps.newLinkedHashMap();
 
         //endregion
 
@@ -759,7 +757,7 @@ public abstract class FixtureScript
         //endregion
 
         private static String pad(final String str, final int padTo) {
-            return Strings.padEnd(str, padTo, ' ');
+            return _Strings.padEnd(str, padTo, ' ');
         }
 
         static int roundup(final int n, final int roundTo) {
@@ -767,7 +765,7 @@ public abstract class FixtureScript
         }
 
 
-        private Map<Class<?>, Object> userData = Maps.newHashMap();
+        private Map<Class<?>, Object> userData = _Maps.newHashMap();
         @Programmatic
         public void setUserData(final Object object) {
             userData.put(object.getClass(), object);
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
index 2a6d52c..ae8d024 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
@@ -24,13 +24,11 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
 
 import javax.annotation.PostConstruct;
 
-import com.google.common.base.Predicate;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.AbstractService;
 import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.ViewModel;
@@ -42,6 +40,8 @@ import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.RestrictTo;
+import org.apache.isis.applib.internal.base._NullSafe;
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.internal.exceptions._Exceptions;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryService;
@@ -63,7 +63,7 @@ import org.apache.isis.applib.util.ObjectContracts;
  */
 public abstract class FixtureScripts extends AbstractService {
 
-    //region > Specification, nonPersistedObjectsStrategy, multipleExecutionStrategy enums
+    // -- Specification, nonPersistedObjectsStrategy, multipleExecutionStrategy enums
 
     /**
      * How to handle objects that are to be
@@ -156,9 +156,7 @@ public abstract class FixtureScripts extends AbstractService {
         }
     }
 
-    //endregion
-
-    //region > constructors
+    // -- constructors
 
     /**
      * @param specification - specifies how the service will find instances and execute them.
@@ -167,9 +165,7 @@ public abstract class FixtureScripts extends AbstractService {
         this.specification = specification;
     }
 
-    //endregion
-
-    //region > packagePrefix, nonPersistedObjectsStrategy, multipleExecutionStrategy
+    // -- packagePrefix, nonPersistedObjectsStrategy, multipleExecutionStrategy
 
     private FixtureScriptsSpecification specification;
 
@@ -209,17 +205,14 @@ public abstract class FixtureScripts extends AbstractService {
         return specification.getMultipleExecutionStrategy();
     }
 
-    //endregion
-
-    //region > init
+    // -- init
+    
     @Programmatic
     @PostConstruct
     public void init() {
     }
 
-    //endregion
-
-    //region > fixtureScriptList (lazily built)
+    // -- fixtureScriptList (lazily built)
 
     private List<FixtureScript> fixtureScriptList;
     @Programmatic
@@ -231,7 +224,7 @@ public abstract class FixtureScripts extends AbstractService {
     }
 
     private List<FixtureScript> findAndInstantiateFixtureScripts() {
-        final List<FixtureScript> fixtureScripts = Lists.newArrayList();
+        final List<FixtureScript> fixtureScripts = _Lists.newArrayList();
         final Set<Class<? extends FixtureScript>> fixtureScriptSubtypes =
                 findFixtureScriptSubTypesInPackage();
         for (final Class<? extends FixtureScript> fixtureScriptCls : fixtureScriptSubtypes) {
@@ -277,9 +270,7 @@ public abstract class FixtureScripts extends AbstractService {
     }
 
 
-    //endregion
-
-    //region > fixtureTracing (thread-local)
+    // -- fixtureTracing (thread-local)
 
     private final ThreadLocal<PrintStream> fixtureTracing = new ThreadLocal<PrintStream>(){{
         set(System.out);
@@ -295,9 +286,7 @@ public abstract class FixtureScripts extends AbstractService {
         this.fixtureTracing.set(fixtureTracing);
     }
 
-    //endregion
-
-    //region > runFixtureScript (prototype action)
+    // -- runFixtureScript (prototype action)
 
     /**
      * To make this action usable in the UI, override either {@link #choices0RunFixtureScript()} or 
@@ -331,17 +320,14 @@ public abstract class FixtureScripts extends AbstractService {
         return getFixtureScriptList();
     }
     protected List<FixtureScript> autoComplete0RunFixtureScript(final @MinLength(1) String arg) {
-        return Lists.newArrayList(
-                Collections2.filter(getFixtureScriptList(), new Predicate<FixtureScript>() {
-                    @Override
-                    public boolean apply(final FixtureScript input) {
-                        return contains(input.getFriendlyName()) || contains(input.getLocalName());
-                    }
-
-                    private boolean contains(final String str) {
-                        return str != null && str.contains(arg);
-                    }
-                }));
+    	
+    	final Predicate<String> contains = str -> str != null && str.contains(arg);
+    	
+    	return _NullSafe.stream(getFixtureScriptList())
+	    	.filter(script->{
+	    		return contains.test(script.getFriendlyName()) || contains.test(script.getLocalName());
+	    	})
+	    	.collect(Collectors.toList());
     }
     public String disableRunFixtureScript() {
         return getFixtureScriptList().isEmpty()? "No fixture scripts found under package '" + getPackagePrefix() + "'": null;
@@ -354,10 +340,7 @@ public abstract class FixtureScripts extends AbstractService {
         return fixtureScript.run(parameters);
     }
 
-
-    //endregion
-
-    //region > programmatic API
+    // -- programmatic API
 
     @Programmatic
     public void runFixtureScript(final FixtureScript... fixtureScriptList) {
@@ -410,9 +393,7 @@ public abstract class FixtureScripts extends AbstractService {
         return FixtureScript.ExecutionContext.create(executionParameters, this);
     }
 
-    //endregion
-
-    //region > hooks
+    // -- hooks
 
     /**
      * Optional hook.
@@ -428,10 +409,7 @@ public abstract class FixtureScripts extends AbstractService {
     }
 
 
-
-    //endregion
-
-    //region > memento support for FixtureScript
+    // -- memento support for FixtureScript
 
 
     String mementoFor(final FixtureScript fs) {
@@ -444,9 +422,7 @@ public abstract class FixtureScripts extends AbstractService {
         fs.setParentPath(memento.get("path", String.class));
     }
 
-    //endregion
-
-    //region > helpers (package level)
+    // -- helpers (package level)
 
     @Programmatic
     FixtureResult newFixtureResult(final FixtureScript script, final String subkey, final Object object, final boolean firstTime) {
@@ -480,9 +456,7 @@ public abstract class FixtureScripts extends AbstractService {
         return object != null? titleService.titleOf(object): "(null)";
     }
 
-    //endregion
-
-    //region > injected services
+    // -- injected services
 
     @javax.inject.Inject
     DomainObjectContainer container;
@@ -510,6 +484,5 @@ public abstract class FixtureScripts extends AbstractService {
 
     @javax.inject.Inject
     ExecutionParametersService executionParametersService;
-    //endregion
 
 }
\ No newline at end of file
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/setup/PersonaEnumPersistAll.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/setup/PersonaEnumPersistAll.java
index e729ad8..f4fbe03 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/setup/PersonaEnumPersistAll.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/setup/PersonaEnumPersistAll.java
@@ -20,13 +20,12 @@ package org.apache.isis.applib.fixturescripts.setup;
 
 import java.util.List;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.fixturescripts.BuilderScriptAbstract;
 import org.apache.isis.applib.fixturescripts.FixtureScript;
 import org.apache.isis.applib.fixturescripts.FixtureScriptWithExecutionStrategy;
 import org.apache.isis.applib.fixturescripts.FixtureScripts;
 import org.apache.isis.applib.fixturescripts.PersonaWithBuilderScript;
+import org.apache.isis.applib.internal.collections._Lists;
 
 public class PersonaEnumPersistAll<E extends Enum<E> & PersonaWithBuilderScript<T,F>, T, F extends BuilderScriptAbstract<T,F>>
         extends FixtureScript
@@ -53,7 +52,7 @@ public class PersonaEnumPersistAll<E extends Enum<E> & PersonaWithBuilderScript<
     /**
      * The objects created by this fixture (output).
      */
-    private final List<T> objects = Lists.newArrayList();
+    private final List<T> objects = _Lists.newArrayList();
     public List<T> getObjects() {
         return objects;
     }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/teardown/TeardownFixtureAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/teardown/TeardownFixtureAbstract.java
index 8483b9d..8c16f2d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/teardown/TeardownFixtureAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/teardown/TeardownFixtureAbstract.java
@@ -21,9 +21,8 @@ package org.apache.isis.applib.fixturescripts.teardown;
 import javax.inject.Inject;
 import javax.jdo.metadata.TypeMetadata;
 
-import com.google.common.base.Strings;
-
 import org.apache.isis.applib.fixturescripts.FixtureScript;
+import org.apache.isis.applib.internal.base._Strings;
 import org.apache.isis.applib.services.jdosupport.IsisJdoSupport;
 
 public abstract class TeardownFixtureAbstract extends FixtureScript {
@@ -38,10 +37,10 @@ public abstract class TeardownFixtureAbstract extends FixtureScript {
         } else {
             final String schema = metadata.getSchema();
             String table = metadata.getTable();
-            if(Strings.isNullOrEmpty(table)) {
+            if(_Strings.isNullOrEmpty(table)) {
                 table = cls.getSimpleName();
             }
-            if(Strings.isNullOrEmpty(schema)) {
+            if(_Strings.isNullOrEmpty(schema)) {
                 deleteFrom(table);
             } else {
                 deleteFrom(schema, table);
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/teardown/TeardownFixtureAbstract2.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/teardown/TeardownFixtureAbstract2.java
index 3b403f2..13d5c74 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/teardown/TeardownFixtureAbstract2.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/teardown/TeardownFixtureAbstract2.java
@@ -26,8 +26,7 @@ import javax.jdo.metadata.DiscriminatorMetadata;
 import javax.jdo.metadata.InheritanceMetadata;
 import javax.jdo.metadata.TypeMetadata;
 
-import com.google.common.base.Strings;
-
+import org.apache.isis.applib.internal.base._Strings;
 import org.apache.isis.applib.services.jdosupport.IsisJdoSupport;
 
 public abstract class TeardownFixtureAbstract2 extends TeardownFixtureAbstract {
@@ -45,7 +44,7 @@ public abstract class TeardownFixtureAbstract2 extends TeardownFixtureAbstract {
         final String table = tableOf(cls);
 
         this.preDeleteFrom(cls);
-        if (Strings.isNullOrEmpty(schema)) {
+        if (_Strings.isNullOrEmpty(schema)) {
             this.deleteFromWhere(table, column, value);
         } else {
             this.deleteFromWhere(schema, table, column, value);
@@ -75,7 +74,7 @@ public abstract class TeardownFixtureAbstract2 extends TeardownFixtureAbstract {
             return tableOf(cls.getSuperclass());
         }
         final String table = metadata.getTable();
-        return !Strings.isNullOrEmpty(table) ? table : cls.getSimpleName();
+        return !_Strings.isNullOrEmpty(table) ? table : cls.getSimpleName();
     }
 
     protected String discriminatorValueOf(final Class<?> cls) {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java
index 730d0a6..086e2e2 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/component/CollectionLayoutData.java
@@ -27,10 +27,8 @@ import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.base.Function;
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.layout.links.Link;
 
 /**
@@ -200,7 +198,7 @@ public class CollectionLayoutData
 
 
 
-    private List<ActionLayoutData> actions = Lists.newArrayList();
+    private List<ActionLayoutData> actions = _Lists.newArrayList();
 
     // no wrapper
     @XmlElement(name = "action", required = false)
@@ -266,20 +264,6 @@ public class CollectionLayoutData
         this.link = link;
     }
 
-    @Deprecated //[ahuber] not used, or otherwise replace with java 8+ function variant
-    public static class Functions {
-        private Functions(){}
-
-        public static Function<CollectionLayoutData, String> id() {
-            return new Function<CollectionLayoutData, String>() {
-                @Override
-                public String apply(final CollectionLayoutData metadata) {
-                    return metadata.getId();
-                }
-            };
-        }
-    }
-
     @Override public String toString() {
         return "CollectionLayoutData{" +
                 "id='" + id + '\'' +
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java b/core/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java
index 0f04033..5045604 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/component/FieldSet.java
@@ -21,17 +21,14 @@ package org.apache.isis.applib.layout.component;
 import java.io.Serializable;
 import java.util.List;
 
-import javax.annotation.Nullable;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.base.Function;
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3Col;
 
 /**
@@ -138,7 +135,7 @@ public class FieldSet
 
 
 
-    private List<ActionLayoutData> actions = Lists.newArrayList();
+    private List<ActionLayoutData> actions = _Lists.newArrayList();
 
     // no wrapper
     @XmlElement(name = "action", required = false)
@@ -152,7 +149,7 @@ public class FieldSet
 
 
 
-    private List<PropertyLayoutData> properties = Lists.newArrayList();
+    private List<PropertyLayoutData> properties = _Lists.newArrayList();
 
     // no wrapper; required=false because may be auto-generated
     @XmlElement(name = "property", required = false)
@@ -183,9 +180,6 @@ public class FieldSet
     }
 
 
-
-
-
     private String metadataError;
 
     /**
@@ -200,20 +194,6 @@ public class FieldSet
         this.metadataError = metadataError;
     }
 
-
-    @Deprecated //[ahuber] not used, or otherwise replace with java 8+ function variant
-    public static class Util {
-        private Util(){}
-        public static Function<? super FieldSet, String> nameOf() {
-            return new Function<FieldSet, String>() {
-                @Nullable @Override
-                public String apply(@Nullable final FieldSet fieldSet) {
-                    return fieldSet.getName();
-                }
-            };
-        }
-    }
-
     @Override public String toString() {
         return "FieldSet{" +
                 "id='" + id + '\'' +
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java b/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
index 97925a4..1c28eda 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/component/PropertyLayoutData.java
@@ -27,13 +27,12 @@ import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.RenderDay;
 import org.apache.isis.applib.annotation.Repainting;
 import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.layout.links.Link;
 
 /**
@@ -253,7 +252,7 @@ public class PropertyLayoutData
         this.repainting = repainting;
     }
 
-    private List<ActionLayoutData> actions = Lists.newArrayList();
+    private List<ActionLayoutData> actions = _Lists.newArrayList();
 
     // no wrapper
     @XmlElement(name = "action", required = false)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/GridAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/GridAbstract.java
index d66c8f1..77f529c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/GridAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/GridAbstract.java
@@ -23,10 +23,9 @@ import java.util.List;
 
 import javax.xml.bind.annotation.XmlTransient;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.applib.layout.component.ActionLayoutData;
 import org.apache.isis.applib.layout.component.ActionLayoutDataOwner;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
@@ -102,7 +101,7 @@ public abstract class GridAbstract implements Grid {
         if(actionLayoutDatas == null) {
             return;
         }
-        for (final ActionLayoutData actionLayoutData : Lists.newArrayList(actionLayoutDatas)) {
+        for (final ActionLayoutData actionLayoutData : _Lists.newArrayList(actionLayoutDatas)) {
             actionLayoutData.setOwner(actionLayoutDataOwner);
             visitor.visit(actionLayoutData);
         }
@@ -114,12 +113,12 @@ public abstract class GridAbstract implements Grid {
      */
     protected void traverseFieldSets(final FieldSetOwner fieldSetOwner, final GridAbstract.Visitor visitor) {
         final List<FieldSet> fieldSets = fieldSetOwner.getFieldSets();
-        for (FieldSet fieldSet : Lists.newArrayList(fieldSets)) {
+        for (FieldSet fieldSet : _Lists.newArrayList(fieldSets)) {
             fieldSet.setOwner(fieldSetOwner);
             visitor.visit(fieldSet);
             traverseActions(fieldSet, visitor);
             final List<PropertyLayoutData> properties = fieldSet.getProperties();
-            for (final PropertyLayoutData property : Lists.newArrayList(properties)) {
+            for (final PropertyLayoutData property : _Lists.newArrayList(properties)) {
                 property.setOwner(fieldSet);
                 visitor.visit(property);
                 traverseActions(property, visitor);
@@ -134,7 +133,7 @@ public abstract class GridAbstract implements Grid {
     protected void traverseCollections(
             final CollectionLayoutDataOwner owner, final GridAbstract.Visitor visitor) {
         final List<CollectionLayoutData> collections = owner.getCollections();
-        for (CollectionLayoutData collection : Lists.newArrayList(collections)) {
+        for (CollectionLayoutData collection : _Lists.newArrayList(collections)) {
             collection.setOwner(owner);
             visitor.visit(collection);
             traverseActions(collection, visitor);
@@ -145,7 +144,7 @@ public abstract class GridAbstract implements Grid {
     @Programmatic
     @XmlTransient
     public LinkedHashMap<String, PropertyLayoutData> getAllPropertiesById() {
-        final LinkedHashMap<String, PropertyLayoutData> propertiesById = Maps.newLinkedHashMap();
+        final LinkedHashMap<String, PropertyLayoutData> propertiesById = _Maps.newLinkedHashMap();
         visit(new BS3Grid.VisitorAdapter() {
             public void visit(final PropertyLayoutData propertyLayoutData) {
                 propertiesById.put(propertyLayoutData.getId(), propertyLayoutData);
@@ -158,7 +157,7 @@ public abstract class GridAbstract implements Grid {
     @Programmatic
     @XmlTransient
     public LinkedHashMap<String, CollectionLayoutData> getAllCollectionsById() {
-        final LinkedHashMap<String, CollectionLayoutData> collectionsById = Maps.newLinkedHashMap();
+        final LinkedHashMap<String, CollectionLayoutData> collectionsById = _Maps.newLinkedHashMap();
 
         visit(new BS3Grid.VisitorAdapter() {
             @Override
@@ -173,7 +172,7 @@ public abstract class GridAbstract implements Grid {
     @Programmatic
     @XmlTransient
     public LinkedHashMap<String, ActionLayoutData> getAllActionsById() {
-        final LinkedHashMap<String, ActionLayoutData> actionsById = Maps.newLinkedHashMap();
+        final LinkedHashMap<String, ActionLayoutData> actionsById = _Maps.newLinkedHashMap();
 
         visit(new BS3Grid.VisitorAdapter() {
             @Override
@@ -188,7 +187,7 @@ public abstract class GridAbstract implements Grid {
     @Programmatic
     @XmlTransient
     public LinkedHashMap<String, FieldSet> getAllFieldSetsByName() {
-        final LinkedHashMap<String, FieldSet> fieldSetsByName = Maps.newLinkedHashMap();
+        final LinkedHashMap<String, FieldSet> fieldSetsByName = _Maps.newLinkedHashMap();
 
         visit(new BS3Grid.VisitorAdapter() {
             @Override
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java
index 12d9fa0..5531dc7 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Col.java
@@ -26,8 +26,7 @@ import javax.xml.bind.annotation.XmlElementRef;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.collect.Lists;
-
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.layout.component.ActionLayoutData;
 import org.apache.isis.applib.layout.component.ActionLayoutDataOwner;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
@@ -156,7 +155,7 @@ public class BS3Col extends BS3RowContent
     }
 
 
-    private List<SizeSpan> sizeSpans = Lists.newArrayList();
+    private List<SizeSpan> sizeSpans = _Lists.newArrayList();
 
     // no wrapper
     @XmlElement(name = "sizeSpan", required = false)
@@ -170,7 +169,7 @@ public class BS3Col extends BS3RowContent
 
 
 
-    private List<ActionLayoutData> actions = Lists.newArrayList();
+    private List<ActionLayoutData> actions = _Lists.newArrayList();
 
     // no wrapper
     @XmlElementRef(type = ActionLayoutData.class, name = "action", required = false)
@@ -184,7 +183,7 @@ public class BS3Col extends BS3RowContent
 
 
 
-    private List<BS3Row> rows = Lists.newArrayList();
+    private List<BS3Row> rows = _Lists.newArrayList();
 
     // no wrapper
     @XmlElement(name = "row", required = false)
@@ -198,7 +197,7 @@ public class BS3Col extends BS3RowContent
 
 
 
-    private List<BS3TabGroup> tabGroups = Lists.newArrayList();
+    private List<BS3TabGroup> tabGroups = _Lists.newArrayList();
 
     // no wrapper
     @XmlElement(name = "tabGroup", required = false)
@@ -212,7 +211,7 @@ public class BS3Col extends BS3RowContent
 
 
 
-    private List<FieldSet> fieldSets = Lists.newArrayList();
+    private List<FieldSet> fieldSets = _Lists.newArrayList();
 
     // no wrapper
     @XmlElementRef(type=FieldSet.class, name = "fieldSet", required = false)
@@ -226,7 +225,7 @@ public class BS3Col extends BS3RowContent
 
 
 
-    private List<CollectionLayoutData> collections = Lists.newArrayList();
+    private List<CollectionLayoutData> collections = _Lists.newArrayList();
 
     // no wrapper
     @XmlElementRef(type=CollectionLayoutData.class, name = "collection", required = false)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Grid.java b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Grid.java
index 785beab..897ef29 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Grid.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Grid.java
@@ -27,10 +27,9 @@ import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.applib.layout.component.ActionLayoutData;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
 import org.apache.isis.applib.layout.component.DomainObjectLayoutData;
@@ -78,7 +77,7 @@ public class BS3Grid extends GridAbstract implements BS3Element, Dto, BS3RowOwne
 
 
 
-    private List<BS3Row> rows = Lists.newArrayList();
+    private List<BS3Row> rows = _Lists.newArrayList();
 
     // no wrapper
     @XmlElement(name = "row", required = true)
@@ -92,7 +91,7 @@ public class BS3Grid extends GridAbstract implements BS3Element, Dto, BS3RowOwne
 
 
 
-    private List<String> metadataErrors = Lists.newArrayList();
+    private List<String> metadataErrors = _Lists.newArrayList();
 
     /**
      * For diagnostics; populated by the framework if and only if a metadata error.
@@ -108,8 +107,8 @@ public class BS3Grid extends GridAbstract implements BS3Element, Dto, BS3RowOwne
 
 
 
-    //TODO [ahuber] unused
-    private BS3RowOwner owner;
+    @SuppressWarnings("unused")
+	private BS3RowOwner owner;
 
 
 
@@ -167,7 +166,7 @@ public class BS3Grid extends GridAbstract implements BS3Element, Dto, BS3RowOwne
     protected void traverseRows(final BS3RowOwner rowOwner, final Grid.Visitor visitor) {
         final BS3Grid.Visitor bs3Visitor = asBs3Visitor(visitor);
         final List<BS3Row> rows = rowOwner.getRows();
-        for (BS3Row bs3Row : Lists.newArrayList(rows)) {
+        for (BS3Row bs3Row : _Lists.newArrayList(rows)) {
             bs3Row.setOwner(this);
             bs3Visitor.preVisit(bs3Row);
             bs3Visitor.visit(bs3Row);
@@ -179,7 +178,7 @@ public class BS3Grid extends GridAbstract implements BS3Element, Dto, BS3RowOwne
     private void traverseCols(final Grid.Visitor visitor, final BS3Row bs3Row) {
         final BS3Grid.Visitor bs3Visitor = asBs3Visitor(visitor);
         final List<BS3RowContent> cols = bs3Row.getCols();
-        for (BS3RowContent rowContent : Lists.newArrayList(cols)) {
+        for (BS3RowContent rowContent : _Lists.newArrayList(cols)) {
             rowContent.setOwner(bs3Row);
             if(rowContent instanceof BS3Col) {
                 final BS3Col bs3Col = (BS3Col) rowContent;
@@ -216,7 +215,7 @@ public class BS3Grid extends GridAbstract implements BS3Element, Dto, BS3RowOwne
             final Grid.Visitor visitor) {
         final BS3Grid.Visitor bs3Visitor = asBs3Visitor(visitor);
         final List<BS3TabGroup> tabGroups = bs3TabGroupOwner.getTabGroups();
-        for (BS3TabGroup bs3TabGroup : Lists.newArrayList(tabGroups)) {
+        for (BS3TabGroup bs3TabGroup : _Lists.newArrayList(tabGroups)) {
             bs3TabGroup.setOwner(bs3TabGroupOwner);
             bs3Visitor.preVisit(bs3TabGroup);
             bs3Visitor.visit(bs3TabGroup);
@@ -230,7 +229,7 @@ public class BS3Grid extends GridAbstract implements BS3Element, Dto, BS3RowOwne
             final Grid.Visitor visitor) {
         final BS3Grid.Visitor bs3Visitor = asBs3Visitor(visitor);
         final List<BS3Tab> tabs = bs3TabOwner.getTabs();
-        for (BS3Tab tab : Lists.newArrayList(tabs)) {
+        for (BS3Tab tab : _Lists.newArrayList(tabs)) {
             tab.setOwner(bs3TabOwner);
             bs3Visitor.preVisit(tab);
             bs3Visitor.visit(tab);
@@ -267,7 +266,7 @@ public class BS3Grid extends GridAbstract implements BS3Element, Dto, BS3RowOwne
     @Programmatic
     @XmlTransient
     public LinkedHashMap<String, BS3Tab> getAllTabsByName() {
-        final LinkedHashMap<String, BS3Tab> tabsByName = Maps.newLinkedHashMap();
+        final LinkedHashMap<String, BS3Tab> tabsByName = _Maps.newLinkedHashMap();
 
         visit(new BS3Grid.VisitorAdapter() {
             @Override
@@ -282,7 +281,7 @@ public class BS3Grid extends GridAbstract implements BS3Element, Dto, BS3RowOwne
     @Programmatic
     @XmlTransient
     public LinkedHashMap<String, HasCssId> getAllCssId() {
-        final LinkedHashMap<String, HasCssId> divsByCssId = Maps.newLinkedHashMap();
+        final LinkedHashMap<String, HasCssId> divsByCssId = _Maps.newLinkedHashMap();
 
         visit(new BS3Grid.VisitorAdapter() {
             @Override
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Row.java b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Row.java
index 5fd3b56..ca61432 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Row.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Row.java
@@ -27,9 +27,8 @@ import javax.xml.bind.annotation.XmlElementRefs;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Lists;
 
 /**
  * Contains a row of content, either on the top-level {@link BS3Grid page} or at any other lower-level element that can
@@ -67,7 +66,7 @@ public class BS3Row extends BS3ElementAbstract implements HasCssId, BS3RowConten
 
 
 
-    private List<BS3RowContent> cols = Lists.newArrayList();
+    private List<BS3RowContent> cols = _Lists.newArrayList();
 
     // no wrapper
     @XmlElementRefs({
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java
index a724a2d..827726b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3Tab.java
@@ -27,9 +27,8 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.layout.component.ActionLayoutData;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
 import org.apache.isis.applib.layout.component.DomainObjectLayoutData;
@@ -64,7 +63,7 @@ public class BS3Tab extends BS3ElementAbstract implements BS3RowOwner {
     }
 
 
-    private List<BS3Row> rows = Lists.newArrayList();
+    private List<BS3Row> rows = _Lists.newArrayList();
 
     // no wrapper
     @XmlElement(name = "row", required = true)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroup.java b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroup.java
index 4ad42af..e85332b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroup.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/grid/bootstrap3/BS3TabGroup.java
@@ -25,9 +25,8 @@ import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Lists;
 
 /**
  * Represents a tab group containing one or more {@link BS3Tab tab}s.
@@ -80,7 +79,7 @@ public class BS3TabGroup extends BS3ElementAbstract implements BS3TabOwner {
 
 
 
-    private List<BS3Tab> tabs = Lists.newArrayList();
+    private List<BS3Tab> tabs = _Lists.newArrayList();
 
     // no wrapper; required=false because may be auto-generated
     @XmlElement(name = "tab", required = false)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java
index a2ff209..5c45fbe 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/MenuBarsAbstract.java
@@ -23,9 +23,8 @@ import java.util.LinkedHashMap;
 
 import javax.xml.bind.annotation.XmlTransient;
 
-import com.google.common.collect.Maps;
-
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.applib.layout.component.ServiceActionLayoutData;
 
 @SuppressWarnings("serial") // serial versionId to be provided by concrete class
@@ -48,7 +47,7 @@ public abstract class MenuBarsAbstract implements MenuBars, Serializable {
     @Programmatic
     @XmlTransient
     public LinkedHashMap<String, ServiceActionLayoutData> getAllServiceActionsByObjectTypeAndId() {
-        final LinkedHashMap<String, ServiceActionLayoutData> serviceActionsByObjectTypeAndId = Maps.newLinkedHashMap();
+        final LinkedHashMap<String, ServiceActionLayoutData> serviceActionsByObjectTypeAndId = _Maps.newLinkedHashMap();
         visit(new MenuBars.Visitor() {
             public void visit(final ServiceActionLayoutData serviceActionLayoutData) {
                 serviceActionsByObjectTypeAndId.put(serviceActionLayoutData.getObjectTypeAndId(), serviceActionLayoutData);
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3Menu.java b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3Menu.java
index bb32527..32ce084 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3Menu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3Menu.java
@@ -25,9 +25,8 @@ import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.layout.menubars.Menu;
 
 /**
@@ -79,7 +78,7 @@ public class BS3Menu implements Menu, Serializable {
 
 
 
-    private List<BS3MenuSection> sections = Lists.newArrayList();
+    private List<BS3MenuSection> sections = _Lists.newArrayList();
 
     // no wrapper
     @XmlElement(name = "section", required = true)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBar.java b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBar.java
index 927f7a8..229946b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBar.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBar.java
@@ -24,9 +24,8 @@ import java.util.List;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.layout.menubars.MenuBar;
 
 /**
@@ -46,7 +45,7 @@ public class BS3MenuBar implements MenuBar, Serializable {
     }
 
 
-    private List<BS3Menu> menus = Lists.newArrayList();
+    private List<BS3Menu> menus = _Lists.newArrayList();
 
     // no wrapper
     @XmlElement(name = "menu", required = true)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuSection.java b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuSection.java
index 399da0b..5fe83e5 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuSection.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuSection.java
@@ -24,8 +24,7 @@ import java.util.List;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.collect.Lists;
-
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.layout.component.ServiceActionLayoutData;
 import org.apache.isis.applib.layout.component.ServiceActionLayoutDataOwner;
 import org.apache.isis.applib.layout.menubars.MenuSection;
@@ -47,7 +46,7 @@ public class BS3MenuSection implements MenuSection, Serializable, ServiceActionL
     }
 
 
-    private List<ServiceActionLayoutData> serviceActions = Lists.newArrayList();
+    private List<ServiceActionLayoutData> serviceActions = _Lists.newArrayList();
 
     // no wrapper
     @Override
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
index 0afa0b8..b8ed3d3 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
@@ -21,9 +21,8 @@ package org.apache.isis.applib.services.bookmark;
 import java.io.Serializable;
 import java.util.Iterator;
 
-import com.google.common.base.Splitter;
-
 import org.apache.isis.applib.annotation.Value;
+import org.apache.isis.applib.internal.base._Strings;
 import org.apache.isis.applib.internal.exceptions._Exceptions;
 import org.apache.isis.schema.common.v1.BookmarkObjectState;
 import org.apache.isis.schema.common.v1.OidDto;
@@ -39,7 +38,7 @@ public class Bookmark implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    protected static final char SEPARATOR = ':';
+    protected static final String SEPARATOR = ":";
 
     public static Bookmark create(final String str) {
         return str != null? new Bookmark(str): null;
@@ -138,7 +137,7 @@ public class Bookmark implements Serializable {
      * Round-trip with {@link #toString()} representation.
      */
     public Bookmark(final String toString) {
-        this(Splitter.on(SEPARATOR).split(toString).iterator());
+        this(_Strings.splitThenStream(toString, SEPARATOR).iterator());
     }
 
     private Bookmark(final Iterator<String> split) {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java b/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java
index 33f104f..9404f02 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/command/CommandDefault.java
@@ -24,12 +24,11 @@ import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
 import org.apache.isis.applib.annotation.CommandExecuteIn;
 import org.apache.isis.applib.annotation.CommandPersistence;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
 import org.apache.isis.applib.util.ObjectContracts;
@@ -188,7 +187,7 @@ public class CommandDefault implements Command {
 
     //region > actionDomainEvent (peek/pop/flush)
 
-    private final LinkedList<ActionDomainEvent<?>> actionDomainEvents = Lists.newLinkedList();
+    private final LinkedList<ActionDomainEvent<?>> actionDomainEvents = _Lists.newLinkedList();
 
     @Override
     public ActionDomainEvent<?> peekActionDomainEvent() {
@@ -211,7 +210,7 @@ public class CommandDefault implements Command {
     @Programmatic
     public List<ActionDomainEvent<?>> flushActionDomainEvents() {
         final List<ActionDomainEvent<?>> events =
-                Collections.unmodifiableList(Lists.newArrayList(actionDomainEvents));
+                Collections.unmodifiableList(_Lists.newArrayList(actionDomainEvents));
         actionDomainEvents.clear();
         return events;
     }
@@ -353,7 +352,7 @@ public class CommandDefault implements Command {
 
     //region > next
 
-    private final Map<String, AtomicInteger> sequenceByName = Maps.newHashMap();
+    private final Map<String, AtomicInteger> sequenceByName = _Maps.newHashMap();
 
     @Deprecated
     @Override
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationProperty.java b/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationProperty.java
index 4248cc3..20ccb19 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationProperty.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/config/ConfigurationProperty.java
@@ -19,21 +19,19 @@
 
 package org.apache.isis.applib.services.config;
 
-import java.util.Collections;
 import java.util.List;
 
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlType;
 
-import com.google.common.base.Strings;
-import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Editing;
 import org.apache.isis.applib.annotation.Title;
+import org.apache.isis.applib.internal.base._NullSafe;
+import org.apache.isis.applib.internal.base._Strings;
+import org.apache.isis.applib.internal.collections._Lists;
 
 @XmlRootElement(name = "configurationProperty")
 @XmlType(
@@ -84,20 +82,19 @@ public class ConfigurationProperty implements Comparable<ConfigurationProperty>
 
     @Override
     public int compareTo(final ConfigurationProperty other) {
-        return ComparisonChain.start()
-                .compare(getKey(), other.getKey())
-                .result();
+        return _NullSafe.compareNullsLast(getKey(), other.getKey());
     }
 
     public static class Util {
 
         private static final List<String> PROTECTED_KEYS =
-                Collections.unmodifiableList(Lists.newArrayList("password", "apiKey", "authToken"));
+        		_Lists.unmodifiable("password", "apiKey", "authToken");
+                
 
         private Util(){}
 
         static boolean isProtected(final String key) {
-            if(Strings.isNullOrEmpty(key)) {
+            if(_Strings.isNullOrEmpty(key)) {
                 return false;
             }
             final String toLowerCase = key.toLowerCase();
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/conmap/ContentMappingService.java b/core/applib/src/main/java/org/apache/isis/applib/services/conmap/ContentMappingService.java
index 8de4d66..19c960c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/conmap/ContentMappingService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/conmap/ContentMappingService.java
@@ -20,12 +20,12 @@ package org.apache.isis.applib.services.conmap;
 
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.ws.rs.core.MediaType;
 
-import com.google.common.base.Joiner;
-
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.base._NullSafe;
 
 public interface ContentMappingService {
 
@@ -49,7 +49,11 @@ public interface ContentMappingService {
                 }
             }
             throw new IllegalArgumentException(
-                    "Could not locate x-ro-domain-type parameter in any of the provided media types; got: " + Joiner.on(", ").join(acceptableMediaTypes));
+                    "Could not locate x-ro-domain-type parameter in any of the provided media types; got: " +
+                    		_NullSafe.stream(acceptableMediaTypes)
+                    		.filter(_NullSafe::isPresent)
+                    		.map(Object::toString)
+                    		.collect(Collectors.joining(", ")) );
         }
 
         public static boolean isSupported(
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
index 024721a..8632376 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
@@ -21,12 +21,9 @@ package org.apache.isis.applib.services.eventbus;
 import java.util.EventObject;
 import java.util.Map;
 
-import javax.ws.rs.HEAD;
-
-import com.google.common.collect.Maps;
-
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.applib.internal.exceptions._Exceptions;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.util.ObjectContracts;
@@ -307,7 +304,7 @@ public abstract class AbstractDomainEvent<S> extends java.util.EventObject {
     /**
      * Provides a mechanism to pass data to the next {@link #getEventPhase() phase}.
      */
-    private final Map<Object, Object> userData = Maps.newHashMap();
+    private final Map<Object, Object> userData = _Maps.newHashMap();
 
     /**
      * Obtain user-data, as set by a previous {@link #getEventPhase() phase}.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractUiEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractUiEvent.java
index c0f74af..9528be8 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractUiEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractUiEvent.java
@@ -21,8 +21,7 @@ package org.apache.isis.applib.services.eventbus;
 import java.util.EventObject;
 import java.util.Map;
 
-import com.google.common.collect.Maps;
-
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.applib.util.ObjectContracts;
 
 public abstract class AbstractUiEvent<S> extends EventObject {
@@ -71,7 +70,7 @@ public abstract class AbstractUiEvent<S> extends EventObject {
     /**
      * Provides a mechanism to pass data around.
      */
-    private final Map<Object, Object> userData = Maps.newHashMap();
+    private final Map<Object, Object> userData = _Maps.newHashMap();
 
     /**
      * Obtain user-data, as set by any other subscribers.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
index 3b83cbb..21d350d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/EventBusService.java
@@ -23,9 +23,8 @@ import java.util.Set;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
-import com.google.common.collect.Sets;
-
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Sets;
 
 /**
  * A service implementing an Event Bus, allowing arbitrary events to be posted and
@@ -184,14 +183,14 @@ public abstract class EventBusService {
 
     //region > subscribers
 
-    private final Set<Object> subscribers = Sets.newConcurrentHashSet();
+    private final Set<Object> subscribers = _Sets.newConcurrentHashSet();
 
     /**
      * Returns an immutable snapshot of the current subscribers.
      */
     @Programmatic
     public Set<Object> getSubscribers() {
-        return Collections.unmodifiableSet(Sets.newLinkedHashSet(subscribers));
+        return Collections.unmodifiableSet(_Sets.newLinkedHashSet(subscribers));
     }
     //endregion
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
index 4965b49..0962c7f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerAbstract.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.applib.services.exceprecog;
 
-import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.function.Function;
@@ -28,13 +27,13 @@ import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.applib.services.i18n.TranslationService;
+import org.junit.internal.Throwables;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Throwables;
-
 /**
  * Abstract implementation of {@link ExceptionRecognizer} that looks 
  * exceptions meeting the {@link Predicate} supplied in the constructor
@@ -131,27 +130,29 @@ public abstract class ExceptionRecognizerAbstract implements ExceptionRecognizer
 
     @Programmatic
     public String recognize(Throwable ex) {
-        List<Throwable> causalChain = Throwables.getCausalChain(ex);
-        for (Throwable throwable : causalChain) {
-            if(predicate.test(throwable)) {
-                if(logRecognizedExceptions) {
-                    LOG.info("Recognized exception, stacktrace : ", throwable);
-                }
-                if(ex instanceof TranslatableException) {
-                    final TranslatableException translatableException = (TranslatableException) ex;
-                    final TranslatableString translatableMessage = translatableException.getTranslatableMessage();
-                    final String translationContext = translatableException.getTranslationContext();
-                    if(translatableMessage != null && translationContext != null) {
-                        return translatableMessage.translate(translationService, translationContext);
-                    }
+        
+        return _Exceptions.streamCausalChain(ex)
+        .filter(predicate)
+        .map(throwable->{
+            if(logRecognizedExceptions) {
+                LOG.info("Recognized exception, stacktrace : ", throwable);
+            }
+            if(ex instanceof TranslatableException) {
+                final TranslatableException translatableException = (TranslatableException) ex;
+                final TranslatableString translatableMessage = translatableException.getTranslatableMessage();
+                final String translationContext = translatableException.getTranslationContext();
+                if(translatableMessage != null && translationContext != null) {
+                    return translatableMessage.translate(translationService, translationContext);
                 }
-                final Throwable rootCause = Throwables.getRootCause(throwable);
-                final String rootCauseMessage = rootCause.getMessage();
-                final String parsedMessage = messageParser.apply(rootCauseMessage);
-                return parsedMessage;
             }
-        }
-        return null;
+            final Throwable rootCause = _Exceptions.getRootCause(throwable);
+            final String rootCauseMessage = rootCause.getMessage();
+            final String parsedMessage = messageParser.apply(rootCauseMessage);
+            return parsedMessage;
+        })
+        .findFirst()
+        .orElse(null);
+        
     }
 
     @Programmatic
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
index 3d4b4db..af8469c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerComposite.java
@@ -25,9 +25,8 @@ import java.util.Map;
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.services.i18n.TranslationService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 
@@ -46,7 +45,7 @@ import org.apache.isis.applib.services.registry.ServiceRegistry;
  */
 public class ExceptionRecognizerComposite implements ExceptionRecognizer {
 
-    private final List<ExceptionRecognizer> exceptionRecognizers = Lists.newArrayList();
+    private final List<ExceptionRecognizer> exceptionRecognizers = _Lists.newArrayList();
 
     public ExceptionRecognizerComposite(final ExceptionRecognizer... exceptionRecognizers) {
         this(Arrays.asList(exceptionRecognizers));
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
index 2537a55..86c2360 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/ExceptionRecognizerForType.java
@@ -24,7 +24,8 @@ import java.util.function.Predicate;
 
 import javax.jdo.JDODataStoreException;
 
-import com.google.common.base.Throwables;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
+import org.junit.internal.Throwables;
 
 /**
  * An specific implementation of {@link ExceptionRecognizer} that looks for an
@@ -60,7 +61,7 @@ public class ExceptionRecognizerForType extends ExceptionRecognizerAbstract {
      */
     protected final static Predicate<Throwable> excluding(final String... messages) {
         return input->{
-                final List<Throwable> causalChain = Throwables.getCausalChain(input);
+                final List<Throwable> causalChain = _Exceptions.getCausalChain(input);
                 for (String message : messages) {
                     for (Throwable throwable : causalChain) {
                         final String throwableMessage = throwable.getMessage();
@@ -94,7 +95,7 @@ public class ExceptionRecognizerForType extends ExceptionRecognizerAbstract {
      */
     protected final static Predicate<Throwable> including(final String... messages) {
         return input->{
-                final List<Throwable> causalChain = Throwables.getCausalChain(input);
+                final List<Throwable> causalChain = _Exceptions.getCausalChain(input);
                 for (String message : messages) {
                     for (Throwable throwable : causalChain) {
                         final String throwableMessage = throwable.getMessage();
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/jdo/ExceptionRecognizerCompositeForJdoObjectStore.java b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/jdo/ExceptionRecognizerCompositeForJdoObjectStore.java
index 7536de5..46612ce 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/jdo/ExceptionRecognizerCompositeForJdoObjectStore.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/exceprecog/jdo/ExceptionRecognizerCompositeForJdoObjectStore.java
@@ -22,11 +22,10 @@ import java.util.Map;
 
 import javax.annotation.PostConstruct;
 
-import com.google.common.base.Strings;
-
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.base._Strings;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerComposite;
 
@@ -64,7 +63,7 @@ public class ExceptionRecognizerCompositeForJdoObjectStore extends ExceptionReco
 
     private static boolean getElseFalse(final Map<String, String> properties, final String key) {
         final String value = properties.get(key);
-        return !Strings.isNullOrEmpty(value) && Boolean.parseBoolean(value);
+        return !_Strings.isNullOrEmpty(value) && Boolean.parseBoolean(value);
     }
 
     protected void addChildren() {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java
index bc0586f..a7f5fc3 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/hsqldb/HsqlDbManagerMenu.java
@@ -22,10 +22,6 @@ import java.util.Map;
 
 import javax.annotation.PostConstruct;
 
-import com.google.common.base.Strings;
-
-import org.hsqldb.util.DatabaseManagerSwing;
-
 import org.apache.isis.applib.IsisApplibModule;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
@@ -34,7 +30,9 @@ import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.internal.base._Strings;
 import org.apache.isis.applib.internal.context._Context;
+import org.hsqldb.util.DatabaseManagerSwing;
 
 @DomainService(
         nature = NatureOfService.VIEW_MENU_ONLY,
@@ -78,7 +76,7 @@ public class HsqlDbManagerMenu {
         } catch (ClassNotFoundException e) {
             return true;
         }
-        return Strings.isNullOrEmpty(url) || !url.contains("hsqldb:mem");
+        return _Strings.isNullOrEmpty(url) || !url.contains("hsqldb:mem");
     }
 
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java b/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java
index 8cf6762..f659b7f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/i18n/TranslatableString.java
@@ -23,9 +23,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import com.google.common.collect.Lists;
+
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.Value;
+import org.apache.isis.applib.internal.collections._Lists;
 
 @Value
 public final class TranslatableString {
@@ -214,7 +215,7 @@ public final class TranslatableString {
     static String format(String format, Map<String, Object> values)
     {
         StringBuilder formatter = new StringBuilder(format);
-        List<Object> valueList = Lists.newArrayList();
+        List<Object> valueList = _Lists.newArrayList();
 
         Matcher matcher = Pattern.compile("\\{(\\w+)}").matcher(format);
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java b/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
index f5c082c..32ae4fb 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/iactn/Interaction.java
@@ -27,11 +27,10 @@ import java.util.UUID;
 import java.util.concurrent.Callable;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.annotation.Value;
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.applib.services.HasTransactionId;
 import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.services.command.Command;
@@ -100,7 +99,7 @@ public class Interaction implements HasTransactionId {
 
     //region > push/pop/current/get/clear Execution(s)
 
-    private final List<Execution<?,?>> executionGraphs = Lists.newArrayList();
+    private final List<Execution<?,?>> executionGraphs = _Lists.newArrayList();
     private Execution<?,?> currentExecution;
     private Execution<?,?> priorExecution;
 
@@ -307,7 +306,7 @@ public class Interaction implements HasTransactionId {
     }
 
 
-    private final Map<String, AtomicInteger> maxBySequence = Maps.newHashMap();
+    private final Map<String, AtomicInteger> maxBySequence = _Maps.newHashMap();
 
     /**
      * Generates numbers in a named sequence.  The name of the sequence can be arbitrary, though note that the
@@ -405,7 +404,7 @@ public class Interaction implements HasTransactionId {
 
         //region > parent, children
 
-        private final List<Execution<?,?>> children = Lists.newArrayList();
+        private final List<Execution<?,?>> children = _Lists.newArrayList();
         private Execution<?,?> parent;
 
         /**
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/CatalogingSchemaOutputResolver.java b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/CatalogingSchemaOutputResolver.java
index 0408bab..3616b7e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/CatalogingSchemaOutputResolver.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/CatalogingSchemaOutputResolver.java
@@ -32,9 +32,8 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -52,7 +51,7 @@ class CatalogingSchemaOutputResolver extends SchemaOutputResolver {
     private static final String SCHEMA_LOCATION_CORRECT = "http://isis.apache.org/schema/common/common.xsd";
 
     private final JaxbService.IsisSchemas isisSchemas;
-    private final List<String> namespaceUris = Lists.newArrayList();
+    private final List<String> namespaceUris = _Lists.newArrayList();
 
     public CatalogingSchemaOutputResolver(final JaxbService.IsisSchemas isisSchemas) {
         this.isisSchemas = isisSchemas;
@@ -62,7 +61,7 @@ class CatalogingSchemaOutputResolver extends SchemaOutputResolver {
         return namespaceUris;
     }
 
-    private Map<String, StreamResultWithWriter> schemaResultByNamespaceUri = Maps.newLinkedHashMap();
+    private Map<String, StreamResultWithWriter> schemaResultByNamespaceUri = _Maps.newLinkedHashMap();
 
     public String getSchemaTextFor(final String namespaceUri) {
         final StreamResultWithWriter streamResult = schemaResultByNamespaceUri.get(namespaceUri);
@@ -140,7 +139,7 @@ class CatalogingSchemaOutputResolver extends SchemaOutputResolver {
     }
 
     public Map<String, String> asMap() {
-        final Map<String,String> map = Maps.newLinkedHashMap();
+        final Map<String,String> map = _Maps.newLinkedHashMap();
         final List<String> namespaceUris = getNamespaceUris();
 
         for (String namespaceUri : namespaceUris) {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
index 18fe039..5fb3432 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
@@ -29,14 +29,12 @@ import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
-import com.google.common.collect.MapMaker;
-import com.google.common.collect.Maps;
-
 import org.apache.isis.applib.ApplicationException;
 import org.apache.isis.applib.NonRecoverableException;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.internal.base._Casts;
 import org.apache.isis.applib.internal.base._NullSafe;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.applib.services.dto.Dto_downloadXsd;
 import org.apache.isis.applib.util.JaxbUtil;
 
@@ -104,7 +102,7 @@ public interface JaxbService {
 
         @Override
         public Object fromXml(final JAXBContext jaxbContext, final String xml) {
-            return fromXml(jaxbContext, xml, Maps.newHashMap());
+            return fromXml(jaxbContext, xml, _Maps.newHashMap());
         }
         @Override
         public Object fromXml(final JAXBContext jaxbContext, final String xml, final Map<String, Object> unmarshallerProperties) {
@@ -128,7 +126,7 @@ public interface JaxbService {
 
         @Override
         public <T> T fromXml(final Class<T> domainClass, final String xml) {
-            return fromXml(domainClass, xml, Maps.newHashMap());
+            return fromXml(domainClass, xml, _Maps.newHashMap());
         }
         @Override
         public <T> T fromXml(final Class<T> domainClass, final String xml, final Map<String, Object> unmarshallerProperties) {
@@ -146,7 +144,7 @@ public interface JaxbService {
 
         @Override
         public String toXml(final Object domainObject) {
-            return toXml(domainObject, Maps.newHashMap());
+            return toXml(domainObject, _Maps.newHashMap());
         }
 
         @Override
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
index 3a0e242..cfa8604 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/metamodel/MetaModelServicesMenu.java
@@ -19,13 +19,12 @@
 package org.apache.isis.applib.services.metamodel;
 
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import javax.activation.MimeType;
 import javax.activation.MimeTypeParseException;
 
-import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
-
 import org.apache.isis.applib.IsisApplibModule;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
@@ -36,6 +35,7 @@ import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.applib.value.Clob;
 
 @DomainService(
@@ -105,7 +105,7 @@ public class MetaModelServicesMenu {
     }
 
     private static List<String> asList(final List<DomainMember> rows) {
-        final List<String> list = Lists.newArrayList();
+        final List<String> list = _Lists.newArrayList();
         list.add(header());
         for (final DomainMember row : rows) {
             list.add(asTextCsv(row));
@@ -120,7 +120,7 @@ public class MetaModelServicesMenu {
     }
 
     private static String asTextCsv(final DomainMember row) {
-        return Joiner.on(",").join(
+        return Stream.of(
                 row.getClassType(),
                 row.getPackageName(),
                 row.getClassName(),
@@ -136,7 +136,8 @@ public class MetaModelServicesMenu {
                 row.getChoices(),
                 row.getAutoComplete(),
                 row.getDefault(),
-                row.getValidate());
+                row.getValidate())
+        	.collect(Collectors.joining(","));
     }
 
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java b/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
index 3191db6..134555e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
@@ -23,11 +23,6 @@ import java.util.concurrent.Callable;
 import javax.enterprise.context.RequestScoped;
 import javax.inject.Inject;
 
-import com.google.common.collect.Maps;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.isis.applib.AbstractSubscriber;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
@@ -35,7 +30,10 @@ import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.fixturescripts.events.FixturesInstalledEvent;
 import org.apache.isis.applib.fixturescripts.events.FixturesInstallingEvent;
 import org.apache.isis.applib.internal.base._Casts;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.applib.services.WithTransactionScope;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This service (API and implementation) provides a mechanism by which idempotent query results can be cached for the duration of an interaction.
@@ -139,7 +137,7 @@ public class QueryResultsCache implements WithTransactionScope {
     // //////////////////////////////////////
 
     
-    private final Map<Key, Value<?>> cache = Maps.newHashMap();
+    private final Map<Key, Value<?>> cache = _Maps.newHashMap();
 
     @Programmatic
     public <T> T execute(final Callable<T> callable, final Class<?> callingClass, final String methodName, final Object... keys) {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/scratchpad/Scratchpad.java b/core/applib/src/main/java/org/apache/isis/applib/services/scratchpad/Scratchpad.java
index e030934..9f45dbe 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/scratchpad/Scratchpad.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/scratchpad/Scratchpad.java
@@ -19,11 +19,13 @@
 package org.apache.isis.applib.services.scratchpad;
 
 import java.util.Map;
+
 import javax.enterprise.context.RequestScoped;
-import com.google.common.collect.Maps;
+
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.collections._Maps;
 
 /**
  * This service (API and implementation) provides a mechanism to interchange information between multiple objects invoked in the same
@@ -46,7 +48,7 @@ public class Scratchpad {
      * Provides a mechanism for each object being acted upon to pass
      * data to the next object.
      */
-    private final Map<Object, Object> userData = Maps.newHashMap();
+    private final Map<Object, Object> userData = _Maps.newHashMap();
     
     /**
      * Obtain user-data, as set by a previous object being acted upon.
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java b/core/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java
index 1c42f4b..3047270 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/sudo/SudoService.java
@@ -21,13 +21,14 @@ package org.apache.isis.applib.services.sudo;
 
 import java.util.List;
 import java.util.concurrent.Callable;
-import org.apache.isis.applib.DomainObjectContainer;
+
+import org.apache.isis.applib.services.user.UserService;
 import org.apache.isis.applib.annotation.Programmatic;
 
 /**
  * Intended only for use by fixture scripts and integration tests, allows a block of code to execute
  * while the {@link org.apache.isis.applib.DomainObjectContainer container}'s
- * {@link DomainObjectContainer#getUser() getUser()} method returns the specified user/role as the effective user.
+ * {@link UserService#getUser() getUser()} method returns the specified user/role as the effective user.
  */
 public interface SudoService {
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/Clause.java b/core/applib/src/main/java/org/apache/isis/applib/util/Clause.java
index 3bc87af..cd74311 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/Clause.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/Clause.java
@@ -23,8 +23,7 @@ import java.util.Comparator;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import com.google.common.base.Strings;
-import com.google.common.collect.Ordering;
+import org.apache.isis.applib.internal.base._Strings;
 
 class Clause {
     private static Pattern pattern = Pattern.compile("\\W*(\\w+)\\W*(asc|asc nullsFirst|asc nullsLast|desc|desc nullsFirst|desc nullsLast)?\\W*");
@@ -32,25 +31,29 @@ class Clause {
         ASC {
             @Override
             public Comparator<Comparable<?>> getOrdering() {
-                return Ordering.natural().nullsFirst();
+            	// legacy of Ordering.natural().nullsFirst();
+            	return Comparator.nullsFirst(Comparator.<Comparable>naturalOrder());
             }
         },
         ASC_NULLS_LAST {
             @Override
             public Comparator<Comparable<?>> getOrdering() {
-                return Ordering.natural().nullsLast();
+                // legacy of Ordering.natural().nullsLast();
+            	return Comparator.nullsLast(Comparator.<Comparable>naturalOrder());
             }
         },
         DESC {
             @Override
             public Comparator<Comparable<?>> getOrdering() {
-                return Ordering.natural().nullsLast().reverse();
+                // legacy of Ordering.natural().nullsLast().reverse();
+            	return ASC_NULLS_LAST.getOrdering().reversed();
             }
         },
         DESC_NULLS_LAST {
             @Override
             public Comparator<Comparable<?>> getOrdering() {
-                return Ordering.natural().nullsFirst().reverse();
+                // legacy of Ordering.natural().nullsFirst().reverse();
+            	return ASC.getOrdering().reversed();
             }
         };
 
@@ -111,7 +114,7 @@ class Clause {
         }
     }
     private static String upperFirst(final String str) {
-        if (Strings.isNullOrEmpty(str)) {
+        if (_Strings.isNullOrEmpty(str)) {
             return str;
         }
         if (str.length() == 1) {
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java b/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
index f71ccdf..85e2341 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
@@ -21,7 +21,6 @@ import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.Writer;
-import java.net.URL;
 import java.nio.charset.Charset;
 import java.util.Map;
 
@@ -30,17 +29,17 @@ import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
-import com.google.common.collect.MapMaker;
-import com.google.common.io.Resources;
-
 import org.apache.isis.applib.internal.base._Casts;
+import org.apache.isis.applib.internal.collections._Maps;
+import org.apache.isis.applib.internal.resources._Resource;
 
 /**
- * Helper methods for converting {@link javax.xml.bind.annotation.XmlRootElement}-annotated class to-and-from XML.  Intended primarily for
- * test use only (the {@link JAXBContext} is not cached).
+ * Helper methods for converting {@link javax.xml.bind.annotation.XmlRootElement}-annotated class to-and-from XML.  
+ * Intended primarily for test use only (the {@link JAXBContext} is not cached).
  *
  * <p>
- * For example usage, see <a href="https://github.com/isisaddons/isis-module-publishmq">Isis addons' publishmq module</a> (non-ASF)
+ * For example usage, see <a href="https://github.com/isisaddons/isis-module-publishmq">Isis addons' publishmq module</a> 
+ * (non-ASF)
  * </p>
  */
 public class JaxbUtil {
@@ -64,8 +63,8 @@ public class JaxbUtil {
             final String resourceName,
             final Charset charset,
             final Class<T> dtoClass) throws IOException {
-        final URL url = Resources.getResource(contextClass, resourceName);
-        final String s = Resources.toString(url, charset);
+    	
+    	final String s = _Resource.loadAsString(contextClass, resourceName, charset);
         return fromXml(new StringReader(s), dtoClass);
     }
 
@@ -87,18 +86,18 @@ public class JaxbUtil {
         }
     }
 
-    private static Map<Class<?>, JAXBContext> jaxbContextByClass = new MapMaker().concurrencyLevel(10).makeMap();
+    private static Map<Class<?>, JAXBContext> jaxbContextByClass = _Maps.newConcurrentHashMap(); 
 
     public static <T> JAXBContext jaxbContextFor(final Class<T> dtoClass)  {
-        JAXBContext jaxbContext = jaxbContextByClass.get(dtoClass);
-        if(jaxbContext == null) {
-            try {
-                jaxbContext = JAXBContext.newInstance(dtoClass);
-            } catch (JAXBException e) {
-                throw new RuntimeException(e);
-            }
-            jaxbContextByClass.put(dtoClass, jaxbContext);
+    	return jaxbContextByClass.computeIfAbsent(dtoClass, JaxbUtil::contextOf );
+    }
+    
+    private static <T> JAXBContext contextOf(final Class<T> dtoClass) {
+    	try {
+            return JAXBContext.newInstance(dtoClass);
+        } catch (JAXBException e) {
+            throw new RuntimeException(e);
         }
-        return jaxbContext;
     }
+    
 }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java b/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
index a9c8328..b7ecb23 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
@@ -19,19 +19,19 @@ package org.apache.isis.applib.util;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import org.apache.isis.applib.internal.base._Casts;
+import org.apache.isis.applib.internal.base._NullSafe;
+import org.apache.isis.applib.internal.base._Strings;
+import org.apache.isis.applib.internal.collections._Lists;
 
 import com.google.common.base.Function;
 import com.google.common.base.Objects;
 import com.google.common.base.Objects.ToStringHelper;
-import com.google.common.base.Splitter;
 import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Ordering;
 
-
 public class ObjectContracts {
 
     //region > compare
@@ -142,7 +142,7 @@ public class ObjectContracts {
     }
 
     private static int hashCode(final Object obj, final Iterable<String> propertyNamesIter) {
-        final List<Object> propertyValues = Lists.newArrayList();
+        final List<Object> propertyValues = _Lists.newArrayList();
         for (final Clause clause : clausesFor(propertyNamesIter)) {
             final Object propertyValue = clause.getValueOf(obj);
             if(propertyValue != null) {
@@ -209,11 +209,14 @@ public class ObjectContracts {
 
     //region > helpers
     private static Iterable<Clause> clausesFor(final Iterable<String> iterable) {
-        return Iterables.transform(iterable, Clause::parse);
+        return _NullSafe.stream(iterable)
+        		.map(Clause::parse)
+        		.collect(Collectors.toList());
     }
 
     private static Iterable<String> csvToIterable(final String propertyNames) {
-        return Splitter.on(',').split(propertyNames);
+        return _Strings.splitThenStream(propertyNames, ",")
+        		.collect(Collectors.toList());
     }
 
     private static List<String> varargsToIterable(final String[] iterable) {
@@ -228,7 +231,7 @@ public class ObjectContracts {
         String evaluate(Object o);
     }
     
-    private final List<ToStringEvaluator> evaluators = Lists.newArrayList();
+    private final List<ToStringEvaluator> evaluators = _Lists.newArrayList();
 
     public ObjectContracts with(ToStringEvaluator evaluator) {
         evaluators.add(evaluator);
diff --git a/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java b/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java
index 7403c4d..71580df 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java
@@ -26,8 +26,6 @@ import java.io.Serializable;
 import javax.activation.MimeType;
 import javax.activation.MimeTypeParseException;
 
-import com.google.common.io.ByteSource;
-
 public final class Blob implements NamedWithMimeType, Serializable {
 
     /**
@@ -88,9 +86,19 @@ public final class Blob implements NamedWithMimeType, Serializable {
     public byte[] getBytes() {
         return bytes;
     }
-    
+
+    /**
+     * Does not close the OutputStream.
+     * @param os
+     * @throws IOException
+     */
     public void writeBytesTo(final OutputStream os) throws IOException {
-        ByteSource.wrap(bytes).copyTo(os);
+    	if(os==null) {
+    		return;
+    	}
+    	if(bytes!=null) {
+    		os.write(bytes);
+    	}
     }
 
     @Override
diff --git a/core/applib/src/main/java/org/apache/isis/applib/value/Clob.java b/core/applib/src/main/java/org/apache/isis/applib/value/Clob.java
index 41b7b7e..b846671 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/value/Clob.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/value/Clob.java
@@ -26,8 +26,6 @@ import java.io.Writer;
 import javax.activation.MimeType;
 import javax.activation.MimeTypeParseException;
 
-import com.google.common.io.CharSource;
-
 public final class Clob implements NamedWithMimeType, Serializable {
 
     private final String name;
@@ -92,7 +90,9 @@ public final class Clob implements NamedWithMimeType, Serializable {
     }
     
     public void writeCharsTo(final Writer wr) throws IOException {
-        CharSource.wrap(chars).copyTo(wr);
+    	if(wr!=null && chars!=null){
+    		wr.append(chars);
+    	}
     }
 
     @Override
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/ChangesDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/ChangesDtoUtils.java
index 575ca9d..5aee28f 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/ChangesDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/ChangesDtoUtils.java
@@ -24,7 +24,6 @@ import java.io.PrintStream;
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.Writer;
-import java.net.URL;
 import java.nio.charset.Charset;
 
 import javax.xml.bind.JAXBContext;
@@ -32,8 +31,7 @@ import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
-import com.google.common.io.Resources;
-
+import org.apache.isis.applib.internal.resources._Resource;
 import org.apache.isis.applib.util.JaxbUtil;
 import org.apache.isis.schema.chg.v1.ChangesDto;
 
@@ -69,8 +67,8 @@ public final class ChangesDtoUtils {
             final Class<?> contextClass,
             final String resourceName,
             final Charset charset) throws IOException {
-        final URL url = Resources.getResource(contextClass, resourceName);
-        final String s = Resources.toString(url, charset);
+    	
+    	final String s = _Resource.loadAsString(contextClass, resourceName, charset);
         return fromXml(new StringReader(s));
     }
 
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
index dddebc6..d3f8347 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/CommandDtoUtils.java
@@ -23,7 +23,6 @@ import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.Writer;
-import java.net.URL;
 import java.nio.charset.Charset;
 
 import javax.xml.bind.JAXBContext;
@@ -31,8 +30,7 @@ import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
-import com.google.common.io.Resources;
-
+import org.apache.isis.applib.internal.resources._Resource;
 import org.apache.isis.applib.util.JaxbUtil;
 import org.apache.isis.schema.cmd.v1.ActionDto;
 import org.apache.isis.schema.cmd.v1.CommandDto;
@@ -73,8 +71,8 @@ public final class CommandDtoUtils {
             final Class<?> contextClass,
             final String resourceName,
             final Charset charset) throws IOException {
-        final URL url = Resources.getResource(contextClass, resourceName);
-        final String s = Resources.toString(url, charset);
+        
+        final String s = _Resource.loadAsString(contextClass, resourceName, charset);
         return fromXml(new StringReader(s));
     }
 
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
index 1ba83ab..f6670b7 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
@@ -18,11 +18,19 @@
  */
 package org.apache.isis.schema.utils;
 
+import static org.apache.isis.applib.internal.collections._Maps.entry;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Collection;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Function;
 
 import org.apache.isis.applib.internal.base._Casts;
+import org.apache.isis.applib.internal.base._Strings;
+import org.apache.isis.applib.internal.collections._Maps;
 import org.apache.isis.applib.internal.context._Context;
 import org.apache.isis.applib.internal.exceptions._Exceptions;
 import org.apache.isis.applib.services.bookmark.Bookmark;
@@ -49,60 +57,44 @@ import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
 import org.joda.time.LocalTime;
 
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.base.Strings;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableMap;
-
 public final class CommonDtoUtils {
 
-    //region > PARAM_DTO_TO_NAME, PARAM_DTO_TO_TYPE
-
-    public static final Function<ParamDto, String> PARAM_DTO_TO_NAME = new Function<ParamDto, String>() {
-        @Override public String apply(final ParamDto paramDto) {
-            return paramDto.getName();
-        }
-    };
-    public static final Function<ParamDto, ValueType> PARAM_DTO_TO_TYPE = new Function<ParamDto, ValueType>() {
-        @Override public ValueType apply(final ParamDto paramDto) {
-            return paramDto.getType();
-        }
-    };
-    //endregion
-
-    //region > asValueType
-    private final static ImmutableMap<Class<?>, ValueType> valueTypeByClass =
-            new ImmutableMap.Builder<Class<?>, ValueType>()
-                    .put(String.class, ValueType.STRING)
-                    .put(byte.class, ValueType.BYTE)
-                    .put(Byte.class, ValueType.BYTE)
-                    .put(short.class, ValueType.SHORT)
-                    .put(Short.class, ValueType.SHORT)
-                    .put(int.class, ValueType.INT)
-                    .put(Integer.class, ValueType.INT)
-                    .put(long.class, ValueType.LONG)
-                    .put(Long.class, ValueType.LONG)
-                    .put(char.class, ValueType.CHAR)
-                    .put(Character.class, ValueType.CHAR)
-                    .put(boolean.class, ValueType.BOOLEAN)
-                    .put(Boolean.class, ValueType.BOOLEAN)
-                    .put(float.class, ValueType.FLOAT)
-                    .put(Float.class, ValueType.FLOAT)
-                    .put(double.class, ValueType.DOUBLE)
-                    .put(Double.class, ValueType.DOUBLE)
-                    .put(BigInteger.class, ValueType.BIG_INTEGER)
-                    .put(BigDecimal.class, ValueType.BIG_DECIMAL)
-                    .put(DateTime.class, ValueType.JODA_DATE_TIME)
-                    .put(LocalDateTime.class, ValueType.JODA_LOCAL_DATE_TIME)
-                    .put(LocalDate.class, ValueType.JODA_LOCAL_DATE)
-                    .put(LocalTime.class, ValueType.JODA_LOCAL_TIME)
-                    .put(java.sql.Timestamp.class, ValueType.JAVA_SQL_TIMESTAMP)
-                    .put(Blob.class, ValueType.BLOB)
-                    .put(Clob.class, ValueType.CLOB)
-                    .build();
+    // -- PARAM_DTO_TO_NAME, PARAM_DTO_TO_TYPE
+
+    public static final Function<ParamDto, String> PARAM_DTO_TO_NAME = ParamDto::getName;
+    public static final Function<ParamDto, ValueType> PARAM_DTO_TO_TYPE = ParamDto::getType; 
+
+    // -- asValueType
+    private final static Map<Class<?>, ValueType> valueTypeByClass =
+    		_Maps.unmodifiableEntries(
+    				entry(String.class, ValueType.STRING),
+    				entry(String.class, ValueType.STRING),
+                    entry(byte.class, ValueType.BYTE),
+                    entry(Byte.class, ValueType.BYTE),
+                    entry(short.class, ValueType.SHORT),
+                    entry(Short.class, ValueType.SHORT),
+                    entry(int.class, ValueType.INT),
+                    entry(Integer.class, ValueType.INT),
+                    entry(long.class, ValueType.LONG),
+                    entry(Long.class, ValueType.LONG),
+                    entry(char.class, ValueType.CHAR),
+                    entry(Character.class, ValueType.CHAR),
+                    entry(boolean.class, ValueType.BOOLEAN),
+                    entry(Boolean.class, ValueType.BOOLEAN),
+                    entry(float.class, ValueType.FLOAT),
+                    entry(Float.class, ValueType.FLOAT),
+                    entry(double.class, ValueType.DOUBLE),
+                    entry(Double.class, ValueType.DOUBLE),
+                    entry(BigInteger.class, ValueType.BIG_INTEGER),
+                    entry(BigDecimal.class, ValueType.BIG_DECIMAL),
+                    entry(DateTime.class, ValueType.JODA_DATE_TIME),
+                    entry(LocalDateTime.class, ValueType.JODA_LOCAL_DATE_TIME),
+                    entry(LocalDate.class, ValueType.JODA_LOCAL_DATE),
+                    entry(LocalTime.class, ValueType.JODA_LOCAL_TIME),
+                    entry(java.sql.Timestamp.class, ValueType.JAVA_SQL_TIMESTAMP),
+                    entry(Blob.class, ValueType.BLOB),
+                    entry(Clob.class, ValueType.CLOB)
+                    );
 
     public static ValueType asValueType(final Class<?> type) {
         final ValueType valueType = valueTypeByClass.get(type);
@@ -334,7 +326,7 @@ public final class CommonDtoUtils {
             return valueDto.isBoolean();
         case CHAR:
             final String aChar = valueDto.getChar();
-            if(Strings.isNullOrEmpty(aChar)) { return null; }
+            if(_Strings.isNullOrEmpty(aChar)) { return null; }
             return (Object)aChar.charAt(0);
         case BIG_DECIMAL:
             return valueDto.getBigDecimal();
@@ -484,13 +476,9 @@ public final class CommonDtoUtils {
     }
 
     private static Optional<MapDto.Entry> entryIfAnyFor(final MapDto mapDto, final String key) {
-        return FluentIterable.from(mapDto.getEntry())
-                    .firstMatch(new Predicate<MapDto.Entry>() {
-                        @Override
-                        public boolean apply(final MapDto.Entry entry) {
-                            return Objects.equal(entry.getKey(), key);
-                        }
-                    });
+    	return mapDto.getEntry().stream()
+    	.filter(entry->Objects.equals(entry.getKey(), key))
+    	.findFirst();
     }
 
 }
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
index 650d29a..625060f 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/InteractionDtoUtils.java
@@ -24,20 +24,19 @@ import java.io.PrintStream;
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.Writer;
-import java.net.URL;
 import java.nio.charset.Charset;
 import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.io.Resources;
-
+import org.apache.isis.applib.internal.base._NullSafe;
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.resources._Resource;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.iactn.Interaction;
@@ -57,400 +56,404 @@ import org.apache.isis.schema.ixn.v1.PropertyEditDto;
 public final class InteractionDtoUtils {
 
 
-    public static void init() {
-        getJaxbContext();
-    }
-
-
-    //region > marshalling
-    static JAXBContext jaxbContext;
-    static JAXBContext getJaxbContext() {
-        if(jaxbContext == null) {
-            jaxbContext = JaxbUtil.jaxbContextFor(InteractionDto.class);
-        }
-        return jaxbContext;
-    }
-
-    public static InteractionDto fromXml(final Reader reader) {
-        try {
-            final Unmarshaller un = getJaxbContext().createUnmarshaller();
-            return (InteractionDto) un.unmarshal(reader);
-        } catch (JAXBException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    public static InteractionDto fromXml(final String xml) {
-        return fromXml(new StringReader(xml));
-    }
-
-    public static InteractionDto fromXml(
-            final Class<?> contextClass,
-            final String resourceName,
-            final Charset charset) throws IOException {
-        final URL url = Resources.getResource(contextClass, resourceName);
-        final String s = Resources.toString(url, charset);
-        return fromXml(new StringReader(s));
-    }
-
-    public static String toXml(final InteractionDto interactionDto) {
-        final CharArrayWriter caw = new CharArrayWriter();
-        toXml(interactionDto, caw);
-        return caw.toString();
-    }
-
-    public static void toXml(final InteractionDto interactionDto, final Writer writer) {
-        try {
-            final Marshaller m = getJaxbContext().createMarshaller();
-            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
-            m.marshal(interactionDto, writer);
-        } catch (JAXBException e) {
-            throw new RuntimeException(e);
-        }
-    }
-    //endregion
-
-    //region > newInteractionDto
-
-    /**
-     * Encapsulates the mechanism for obtaining a {@link MemberExecutionDto} DTO (XML memento) of the provided
-     * in-memory {@link Interaction.Execution}.
-     */
-    public enum Strategy {
-        FLAT {
-
-            @Override
-            public MemberExecutionDto dtoFor(final Interaction.Execution<?, ?> execution) {
-                return execution.getDto();
-            }
-        },
-        DEEP {
-            @Override
-            public MemberExecutionDto dtoFor(final Interaction.Execution<?, ?> execution) {
-                return traverse(execution);
-            }
-
-            private MemberExecutionDto traverse(final Interaction.Execution<?, ?> parentExecution) {
-
-                final MemberExecutionDto parentDto = clone(parentExecution.getDto());
-
-                final List<Interaction.Execution<?, ?>> children = parentExecution.getChildren();
-                for (Interaction.Execution<?, ?> childExecution : children) {
-                    final MemberExecutionDto childDto = clone(childExecution.getDto());
-                    final MemberExecutionDto.ChildExecutions childExecutions =
-                            InteractionDtoUtils.childExecutionsOf(parentDto);
-                    childExecutions.getExecution().add(childDto);
-                    traverse(childExecution);
-                }
-
-                return parentDto;
-            }
-
-            private MemberExecutionDto clone(final MemberExecutionDto memberExecutionDto) {
-                return MemberExecutionDtoUtils.clone(memberExecutionDto);
-            }
-
-            //endregion
-
-        };
-
-
-        public abstract MemberExecutionDto dtoFor(final Interaction.Execution<?, ?> execution);
-
-    }
-
-    private static MemberExecutionDto.ChildExecutions childExecutionsOf(final MemberExecutionDto dto) {
-        MemberExecutionDto.ChildExecutions childExecutions = dto.getChildExecutions();
-        if(childExecutions == null) {
-            childExecutions = new MemberExecutionDto.ChildExecutions();
-            dto.setChildExecutions(childExecutions);
-        }
-        return childExecutions;
-    }
-
-    /**
-     * Creates a {@link InteractionDto} (serializable  to XML) for the provided
-     * {@link Interaction.Execution} (the applib object).
-     */
-    public static InteractionDto newInteractionDto(final Interaction.Execution<?, ?> execution) {
-        return newInteractionDto(execution, Strategy.FLAT);
-    }
-
-    /**
-     * Creates a {@link InteractionDto} (serializable  to XML) for the provided
-     * {@link Interaction.Execution} (the applib object).
-     */
-    public static InteractionDto newInteractionDto(
-            final Interaction.Execution<?, ?> execution,
-            final Strategy strategy) {
-
-        final MemberExecutionDto memberExecutionDto = strategy.dtoFor(execution);
-        return newInteractionDto(execution, memberExecutionDto);
-    }
-
-    private static InteractionDto newInteractionDto(
-            final Interaction.Execution<?, ?> execution,
-            final MemberExecutionDto executionDto) {
-        final Interaction interaction = execution.getInteraction();
-        final String transactionId = interaction.getTransactionId().toString();
-
-        return InteractionDtoUtils.newInteractionDto(transactionId, executionDto);
-    }
-
-    private static InteractionDto newInteractionDto(
-            final String transactionId,
-            final MemberExecutionDto executionDto) {
-        final InteractionDto interactionDto = new InteractionDto();
-
-        interactionDto.setMajorVersion("1");
-        interactionDto.setMinorVersion("0");
-
-        interactionDto.setTransactionId(transactionId);
-        interactionDto.setExecution(executionDto);
-
-        executionDto.setInteractionType(
-                executionDto instanceof ActionInvocationDto
-                        ? InteractionType.ACTION_INVOCATION
-                        : InteractionType.PROPERTY_EDIT);
-
-        return interactionDto;
-    }
-
-
-
-    //endregion
-
-    //region > newActionInvocation, newPropertyModification
-
-    public static ActionInvocationDto newActionInvocation(
-            final int sequence,
-            final Bookmark targetBookmark,
-            final String targetTitle,
-            final String actionIdentifier,
-            final List<ParamDto> parameterDtos,
-            final String user) {
-
-        return (ActionInvocationDto) newMemberExecutionDto(
-                InteractionType.ACTION_INVOCATION, sequence,
-                targetBookmark, targetTitle, actionIdentifier,
-                parameterDtos, null,
-                user);
-    }
-
-    public static PropertyEditDto newPropertyEdit(
-            final int sequence,
-            final Bookmark targetBookmark,
-            final String targetTitle,
-            final String propertyIdentifier,
-            final ValueWithTypeDto newValueDto,
-            final String user) {
-        return (PropertyEditDto) newMemberExecutionDto(
-                InteractionType.PROPERTY_EDIT, sequence,
-                targetBookmark, targetTitle, propertyIdentifier,
-                null, newValueDto,
-                user);
-    }
-
-    private static MemberExecutionDto newMemberExecutionDto(
-            final InteractionType type,
-            final int sequence,
-            final Bookmark targetBookmark,
-            final String targetTitle,
-            final String memberId,
-            final List<ParamDto> parameterDtos,
-            final ValueWithTypeDto newValueDto,
-            final String user) {
-
-        final MemberExecutionDto executionDto;
-        if(type == InteractionType.ACTION_INVOCATION) {
-
-            final ActionInvocationDto invocation = new ActionInvocationDto();
-            final ParamsDto invocationParameters = parametersFor(invocation);
-            invocation.setParameters(invocationParameters);
-            invocationParameters.getParameter().addAll(parameterDtos);
-
-            executionDto = invocation;
-        } else {
-            final PropertyEditDto edit = new PropertyEditDto();
-            edit.setNewValue(newValueDto);
-
-            executionDto = edit;
-        }
-
-        executionDto.setSequence(sequence);
-
-        final OidDto target = targetBookmark.toOidDto();
-        executionDto.setTarget(target);
-
-        executionDto.setTitle(targetTitle);
-        executionDto.setUser(user);
-
-        final String logicalMemberId = deriveLogicalMemberId(targetBookmark, memberId);
-        executionDto.setLogicalMemberIdentifier(logicalMemberId);
-        executionDto.setMemberIdentifier(memberId);
-        return executionDto;
-    }
-
-    static String deriveLogicalMemberId(final Bookmark bookmark, final String memberId) {
-        String objectType = bookmark.getObjectType();
-        int hashAt = memberId.lastIndexOf("#");
-        String localMemberId = hashAt >= 0 && hashAt < memberId.length() ? memberId.substring(hashAt + 1) : memberId;
-        return objectType + "#" + localMemberId;
-    }
-
-    //endregion
-
-    //region > invocationFor, actionFor, timingsFor
-
-    private static ActionInvocationDto actionInvocationFor(final InteractionDto interactionDto) {
-        ActionInvocationDto invocation = (ActionInvocationDto) interactionDto.getExecution();
-        if(invocation == null) {
-            invocation = new ActionInvocationDto();
-            interactionDto.setExecution(invocation);
-            invocation.setInteractionType(InteractionType.ACTION_INVOCATION);
-        }
-        return invocation;
-    }
-
-// TODO not used
-//    private static PropertyEditDto propertyEditFor(final InteractionDto interactionDto) {
-//        PropertyEditDto edit = (PropertyEditDto) interactionDto.getExecution();
-//        if(edit == null) {
-//            edit = new PropertyEditDto();
-//            interactionDto.setExecution(edit);
-//            edit.setInteractionType(InteractionType.PROPERTY_EDIT);
-//        }
-//        return edit;
-//    }
-
-    private static List<ParamDto> parameterListFor(final InteractionDto ixnDto) {
-        return parameterListFor(actionInvocationFor(ixnDto));
-    }
-
-    private static ParamsDto parametersFor(final ActionInvocationDto invocationDto) {
-        ParamsDto parameters = invocationDto.getParameters();
-        if(parameters == null) {
-            parameters = new ParamsDto();
-            invocationDto.setParameters(parameters);
-        }
-        return parameters;
-    }
-
-    private static List<ParamDto> parameterListFor(final ActionInvocationDto invocationDto) {
-        return parametersFor(invocationDto).getParameter();
-    }
-
-    //endregion
-
-    //region > addParamArg
-
-    public static void addParamArg(
-            final InteractionDto interactionDto,
-            final String parameterName,
-            final Class<?> parameterType,
-            final Object arg,
-            final BookmarkService bookmarkService) {
-
-        final List<ParamDto> params = parameterListFor(interactionDto);
-        ParamDto paramDto = CommonDtoUtils.newParamDto(parameterName, parameterType, arg, bookmarkService);
-        params.add(paramDto);
-    }
-    //endregion
-
-    //region > addReturn
-
-    /**
-     *
-     * @param returnType - to determine the value type (if any)
-     * @param result - either a value type (possibly boxed primitive), or a reference type
-     * @param bookmarkService - used if not a value type
-     */
-    public static void addReturn(
-            final ActionInvocationDto invocationDto,
-            final Class<?> returnType,
-            final Object result, final BookmarkService bookmarkService) {
-        final ValueWithTypeDto returned = CommonDtoUtils
-                .newValueWithTypeDto(returnType, result, bookmarkService);
-        invocationDto.setReturned(returned);
-    }
-    //endregion
-
-    //region > getParameters, getParameterNames, getParameterTypes
-    public static List<ParamDto> getParameters(final ActionInvocationDto ai) {
-        final List<ParamDto> params = parameterListFor(ai);
-        final int parameterNumber = getNumberOfParameters(ai);
-        final List<ParamDto> paramDtos = Lists.newArrayList();
-        for (int i = 0; i < parameterNumber; i++) {
-            final ParamDto paramDto = params.get(i);
-            paramDtos.add(paramDto);
-        }
-        return Collections.unmodifiableList(paramDtos);
-    }
-
-    private static int getNumberOfParameters(final ActionInvocationDto ai) {
-        final List<ParamDto> params = parameterListFor(ai);
-        return params != null ? params.size() : 0;
-    }
-
-    public static List<String> getParameterNames(final ActionInvocationDto ai) {
-        return immutableList(Iterables.transform(getParameters(ai), CommonDtoUtils.PARAM_DTO_TO_NAME));
-    }
-    public static List<ValueType> getParameterTypes(final ActionInvocationDto ai) {
-        return immutableList(Iterables.transform(getParameters(ai), CommonDtoUtils.PARAM_DTO_TO_TYPE));
-    }
-
-    private static <T> List<T> immutableList(final Iterable<T> iterable) {
-        return Collections.unmodifiableList(Lists.newArrayList(iterable));
-    }
-
-    //endregion
-
-    //region > getParameter, getParameterName, getParameterType, getParameterArgument
-    public static ParamDto getParameter(final ActionInvocationDto ai, final int paramNum) {
-        final int parameterNumber = getNumberOfParameters(ai);
-        if(paramNum > parameterNumber) {
-            throw new IllegalArgumentException(String.format("No such parameter %d (the memento has %d parameters)", paramNum, parameterNumber));
-        }
-        final List<ParamDto> parameters = getParameters(ai);
-        return parameters.get(paramNum);
-    }
-
-    public static ValueDto getParameterArgument(final ActionInvocationDto ai, final int paramNum) {
-        return getParameter(ai, paramNum);
-    }
-
-    public static String getParameterName(final ActionInvocationDto ai, final int paramNum) {
-        final ParamDto paramDto = getParameter(ai, paramNum);
-        return paramDto.getName();
-    }
-
-    public static ValueType getParameterType(final ActionInvocationDto ai, final int paramNum) {
-        final ParamDto paramDto = getParameter(ai, paramNum);
-        return paramDto.getType();
-    }
-    public static boolean isNull(final ActionInvocationDto ai, int paramNum) {
-        final ParamDto paramDto = getParameter(ai, paramNum);
-        return paramDto.isNull();
-    }
-    //endregion
-
-    //region > getParameterArgValue
-    public static <T> T getParameterArgValue(final ActionInvocationDto ai, int paramNum, Class<T> inferClass) {
-        final ParamDto paramDto = getParameter(ai, paramNum);
-        return CommonDtoUtils.getValue(paramDto);
-    }
-    public static <T> T getParameterArgValue(final ActionInvocationDto ai, int paramNum) {
-        final ParamDto paramDto = getParameter(ai, paramNum);
-        return CommonDtoUtils.getValue(paramDto);
-    }
-    //endregion
-
-
-    //region > debugging (dump)
-    public static void dump(final InteractionDto ixnDto, final PrintStream out) throws JAXBException {
-        out.println(toXml(ixnDto));
-    }
-
-    //endregion
+	public static void init() {
+		getJaxbContext();
+	}
+
+
+	//region > marshalling
+	static JAXBContext jaxbContext;
+	static JAXBContext getJaxbContext() {
+		if(jaxbContext == null) {
+			jaxbContext = JaxbUtil.jaxbContextFor(InteractionDto.class);
+		}
+		return jaxbContext;
+	}
+
+	public static InteractionDto fromXml(final Reader reader) {
+		try {
+			final Unmarshaller un = getJaxbContext().createUnmarshaller();
+			return (InteractionDto) un.unmarshal(reader);
+		} catch (JAXBException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	public static InteractionDto fromXml(final String xml) {
+		return fromXml(new StringReader(xml));
+	}
+
+	public static InteractionDto fromXml(
+			final Class<?> contextClass,
+			final String resourceName,
+			final Charset charset) throws IOException {
+
+		final String s = _Resource.loadAsString(contextClass, resourceName, charset);
+		return fromXml(new StringReader(s));
+	}
+
+	public static String toXml(final InteractionDto interactionDto) {
+		final CharArrayWriter caw = new CharArrayWriter();
+		toXml(interactionDto, caw);
+		return caw.toString();
+	}
+
+	public static void toXml(final InteractionDto interactionDto, final Writer writer) {
+		try {
+			final Marshaller m = getJaxbContext().createMarshaller();
+			m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+			m.marshal(interactionDto, writer);
+		} catch (JAXBException e) {
+			throw new RuntimeException(e);
+		}
+	}
+	//endregion
+
+	//region > newInteractionDto
+
+	/**
+	 * Encapsulates the mechanism for obtaining a {@link MemberExecutionDto} DTO (XML memento) of the provided
+	 * in-memory {@link Interaction.Execution}.
+	 */
+	public enum Strategy {
+		FLAT {
+
+			@Override
+			public MemberExecutionDto dtoFor(final Interaction.Execution<?, ?> execution) {
+				return execution.getDto();
+			}
+		},
+		DEEP {
+			@Override
+			public MemberExecutionDto dtoFor(final Interaction.Execution<?, ?> execution) {
+				return traverse(execution);
+			}
+
+			private MemberExecutionDto traverse(final Interaction.Execution<?, ?> parentExecution) {
+
+				final MemberExecutionDto parentDto = clone(parentExecution.getDto());
+
+				final List<Interaction.Execution<?, ?>> children = parentExecution.getChildren();
+				for (Interaction.Execution<?, ?> childExecution : children) {
+					final MemberExecutionDto childDto = clone(childExecution.getDto());
+					final MemberExecutionDto.ChildExecutions childExecutions =
+							InteractionDtoUtils.childExecutionsOf(parentDto);
+					childExecutions.getExecution().add(childDto);
+					traverse(childExecution);
+				}
+
+				return parentDto;
+			}
+
+			private MemberExecutionDto clone(final MemberExecutionDto memberExecutionDto) {
+				return MemberExecutionDtoUtils.clone(memberExecutionDto);
+			}
+
+			//endregion
+
+		};
+
+
+		public abstract MemberExecutionDto dtoFor(final Interaction.Execution<?, ?> execution);
+
+	}
+
+	private static MemberExecutionDto.ChildExecutions childExecutionsOf(final MemberExecutionDto dto) {
+		MemberExecutionDto.ChildExecutions childExecutions = dto.getChildExecutions();
+		if(childExecutions == null) {
+			childExecutions = new MemberExecutionDto.ChildExecutions();
+			dto.setChildExecutions(childExecutions);
+		}
+		return childExecutions;
+	}
+
+	/**
+	 * Creates a {@link InteractionDto} (serializable  to XML) for the provided
+	 * {@link Interaction.Execution} (the applib object).
+	 */
+	public static InteractionDto newInteractionDto(final Interaction.Execution<?, ?> execution) {
+		return newInteractionDto(execution, Strategy.FLAT);
+	}
+
+	/**
+	 * Creates a {@link InteractionDto} (serializable  to XML) for the provided
+	 * {@link Interaction.Execution} (the applib object).
+	 */
+	public static InteractionDto newInteractionDto(
+			final Interaction.Execution<?, ?> execution,
+			final Strategy strategy) {
+
+		final MemberExecutionDto memberExecutionDto = strategy.dtoFor(execution);
+		return newInteractionDto(execution, memberExecutionDto);
+	}
+
+	private static InteractionDto newInteractionDto(
+			final Interaction.Execution<?, ?> execution,
+			final MemberExecutionDto executionDto) {
+		final Interaction interaction = execution.getInteraction();
+		final String transactionId = interaction.getTransactionId().toString();
+
+		return InteractionDtoUtils.newInteractionDto(transactionId, executionDto);
+	}
+
+	private static InteractionDto newInteractionDto(
+			final String transactionId,
+			final MemberExecutionDto executionDto) {
+		final InteractionDto interactionDto = new InteractionDto();
+
+		interactionDto.setMajorVersion("1");
+		interactionDto.setMinorVersion("0");
+
+		interactionDto.setTransactionId(transactionId);
+		interactionDto.setExecution(executionDto);
+
+		executionDto.setInteractionType(
+				executionDto instanceof ActionInvocationDto
+				? InteractionType.ACTION_INVOCATION
+						: InteractionType.PROPERTY_EDIT);
+
+		return interactionDto;
+	}
+
+
+
+	//endregion
+
+	//region > newActionInvocation, newPropertyModification
+
+	public static ActionInvocationDto newActionInvocation(
+			final int sequence,
+			final Bookmark targetBookmark,
+			final String targetTitle,
+			final String actionIdentifier,
+			final List<ParamDto> parameterDtos,
+			final String user) {
+
+		return (ActionInvocationDto) newMemberExecutionDto(
+				InteractionType.ACTION_INVOCATION, sequence,
+				targetBookmark, targetTitle, actionIdentifier,
+				parameterDtos, null,
+				user);
+	}
+
+	public static PropertyEditDto newPropertyEdit(
+			final int sequence,
+			final Bookmark targetBookmark,
+			final String targetTitle,
+			final String propertyIdentifier,
+			final ValueWithTypeDto newValueDto,
+			final String user) {
+		return (PropertyEditDto) newMemberExecutionDto(
+				InteractionType.PROPERTY_EDIT, sequence,
+				targetBookmark, targetTitle, propertyIdentifier,
+				null, newValueDto,
+				user);
+	}
+
+	private static MemberExecutionDto newMemberExecutionDto(
+			final InteractionType type,
+			final int sequence,
+			final Bookmark targetBookmark,
+			final String targetTitle,
+			final String memberId,
+			final List<ParamDto> parameterDtos,
+			final ValueWithTypeDto newValueDto,
+			final String user) {
+
+		final MemberExecutionDto executionDto;
+		if(type == InteractionType.ACTION_INVOCATION) {
+
+			final ActionInvocationDto invocation = new ActionInvocationDto();
+			final ParamsDto invocationParameters = parametersFor(invocation);
+			invocation.setParameters(invocationParameters);
+			invocationParameters.getParameter().addAll(parameterDtos);
+
+			executionDto = invocation;
+		} else {
+			final PropertyEditDto edit = new PropertyEditDto();
+			edit.setNewValue(newValueDto);
+
+			executionDto = edit;
+		}
+
+		executionDto.setSequence(sequence);
+
+		final OidDto target = targetBookmark.toOidDto();
+		executionDto.setTarget(target);
+
+		executionDto.setTitle(targetTitle);
+		executionDto.setUser(user);
+
+		final String logicalMemberId = deriveLogicalMemberId(targetBookmark, memberId);
+		executionDto.setLogicalMemberIdentifier(logicalMemberId);
+		executionDto.setMemberIdentifier(memberId);
+		return executionDto;
+	}
+
+	static String deriveLogicalMemberId(final Bookmark bookmark, final String memberId) {
+		String objectType = bookmark.getObjectType();
+		int hashAt = memberId.lastIndexOf("#");
+		String localMemberId = hashAt >= 0 && hashAt < memberId.length() ? memberId.substring(hashAt + 1) : memberId;
+		return objectType + "#" + localMemberId;
+	}
+
+	//endregion
+
+	//region > invocationFor, actionFor, timingsFor
+
+	private static ActionInvocationDto actionInvocationFor(final InteractionDto interactionDto) {
+		ActionInvocationDto invocation = (ActionInvocationDto) interactionDto.getExecution();
+		if(invocation == null) {
+			invocation = new ActionInvocationDto();
+			interactionDto.setExecution(invocation);
+			invocation.setInteractionType(InteractionType.ACTION_INVOCATION);
+		}
+		return invocation;
+	}
+
+	// TODO not used
+	//    private static PropertyEditDto propertyEditFor(final InteractionDto interactionDto) {
+	//        PropertyEditDto edit = (PropertyEditDto) interactionDto.getExecution();
+	//        if(edit == null) {
+	//            edit = new PropertyEditDto();
+	//            interactionDto.setExecution(edit);
+	//            edit.setInteractionType(InteractionType.PROPERTY_EDIT);
+	//        }
+	//        return edit;
+	//    }
+
+	private static List<ParamDto> parameterListFor(final InteractionDto ixnDto) {
+		return parameterListFor(actionInvocationFor(ixnDto));
+	}
+
+	private static ParamsDto parametersFor(final ActionInvocationDto invocationDto) {
+		ParamsDto parameters = invocationDto.getParameters();
+		if(parameters == null) {
+			parameters = new ParamsDto();
+			invocationDto.setParameters(parameters);
+		}
+		return parameters;
+	}
+
+	private static List<ParamDto> parameterListFor(final ActionInvocationDto invocationDto) {
+		return parametersFor(invocationDto).getParameter();
+	}
+
+	//endregion
+
+	//region > addParamArg
+
+	public static void addParamArg(
+			final InteractionDto interactionDto,
+			final String parameterName,
+			final Class<?> parameterType,
+			final Object arg,
+			final BookmarkService bookmarkService) {
+
+		final List<ParamDto> params = parameterListFor(interactionDto);
+		ParamDto paramDto = CommonDtoUtils.newParamDto(parameterName, parameterType, arg, bookmarkService);
+		params.add(paramDto);
+	}
+	//endregion
+
+	//region > addReturn
+
+	/**
+	 *
+	 * @param returnType - to determine the value type (if any)
+	 * @param result - either a value type (possibly boxed primitive), or a reference type
+	 * @param bookmarkService - used if not a value type
+	 */
+	public static void addReturn(
+			final ActionInvocationDto invocationDto,
+			final Class<?> returnType,
+			final Object result, final BookmarkService bookmarkService) {
+		final ValueWithTypeDto returned = CommonDtoUtils
+				.newValueWithTypeDto(returnType, result, bookmarkService);
+		invocationDto.setReturned(returned);
+	}
+	//endregion
+
+	//region > getParameters, getParameterNames, getParameterTypes
+	public static List<ParamDto> getParameters(final ActionInvocationDto ai) {
+		final List<ParamDto> params = parameterListFor(ai);
+		final int parameterNumber = getNumberOfParameters(ai);
+		final List<ParamDto> paramDtos = _Lists.newArrayList();
+		for (int i = 0; i < parameterNumber; i++) {
+			final ParamDto paramDto = params.get(i);
+			paramDtos.add(paramDto);
+		}
+		return Collections.unmodifiableList(paramDtos);
+	}
+
+	private static int getNumberOfParameters(final ActionInvocationDto ai) {
+		final List<ParamDto> params = parameterListFor(ai);
+		return params != null ? params.size() : 0;
+	}
+
+	public static List<String> getParameterNames(final ActionInvocationDto ai) {
+		return Collections.unmodifiableList(
+				_NullSafe.stream(getParameters(ai))
+				.map(CommonDtoUtils.PARAM_DTO_TO_NAME)
+				.collect(Collectors.toList())
+				);
+	}
+	public static List<ValueType> getParameterTypes(final ActionInvocationDto ai) {
+		return Collections.unmodifiableList(
+				_NullSafe.stream(getParameters(ai))
+				.map(CommonDtoUtils.PARAM_DTO_TO_TYPE)
+				.collect(Collectors.toList())
+				);
+	}
+
+	//endregion
+
+	//region > getParameter, getParameterName, getParameterType, getParameterArgument
+	public static ParamDto getParameter(final ActionInvocationDto ai, final int paramNum) {
+		final int parameterNumber = getNumberOfParameters(ai);
+		if(paramNum > parameterNumber) {
+			throw new IllegalArgumentException(String.format("No such parameter %d (the memento has %d parameters)", paramNum, parameterNumber));
+		}
+		final List<ParamDto> parameters = getParameters(ai);
+		return parameters.get(paramNum);
+	}
+
+	public static ValueDto getParameterArgument(final ActionInvocationDto ai, final int paramNum) {
+		return getParameter(ai, paramNum);
+	}
+
+	public static String getParameterName(final ActionInvocationDto ai, final int paramNum) {
+		final ParamDto paramDto = getParameter(ai, paramNum);
+		return paramDto.getName();
+	}
+
+	public static ValueType getParameterType(final ActionInvocationDto ai, final int paramNum) {
+		final ParamDto paramDto = getParameter(ai, paramNum);
+		return paramDto.getType();
+	}
+	public static boolean isNull(final ActionInvocationDto ai, int paramNum) {
+		final ParamDto paramDto = getParameter(ai, paramNum);
+		return paramDto.isNull();
+	}
+	//endregion
+
+	//region > getParameterArgValue
+	public static <T> T getParameterArgValue(final ActionInvocationDto ai, int paramNum, Class<T> inferClass) {
+		final ParamDto paramDto = getParameter(ai, paramNum);
+		return CommonDtoUtils.getValue(paramDto);
+	}
+	public static <T> T getParameterArgValue(final ActionInvocationDto ai, int paramNum) {
+		final ParamDto paramDto = getParameter(ai, paramNum);
+		return CommonDtoUtils.getValue(paramDto);
+	}
+	//endregion
+
+
+	//region > debugging (dump)
+	public static void dump(final InteractionDto ixnDto, final PrintStream out) throws JAXBException {
+		out.println(toXml(ixnDto));
+	}
+
+	//endregion
 
 }
diff --git a/core/applib/src/test/java/org/apache/isis/applib/Module_Util_transitiveDependenciesOf_Test.java b/core/applib/src/test/java/org/apache/isis/applib/Module_Util_transitiveDependenciesOf_Test.java
index d20c454..a5e43cb 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/Module_Util_transitiveDependenciesOf_Test.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/Module_Util_transitiveDependenciesOf_Test.java
@@ -18,20 +18,19 @@
  */
 package org.apache.isis.applib;
 
+import static org.junit.Assert.assertTrue;
+
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-
+import org.apache.isis.applib.internal.collections._Lists;
+import org.apache.isis.applib.internal.collections._Sets;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
-import static org.junit.Assert.assertTrue;
-
 public class Module_Util_transitiveDependenciesOf_Test {
 
     @Rule
@@ -63,22 +62,22 @@ public class Module_Util_transitiveDependenciesOf_Test {
         }
         @Override
         public Set<Class<?>> getAdditionalModules() {
-            return Sets.<Class<?>>newHashSet(ModuleP.class);
+            return _Sets.<Class<?>>unmodifiable(ModuleP.class);
         }
     };
     final Module moduleD = new ModuleImpl("D") {
         @Override public Set<Module> getDependencies() {
-            return Sets.newHashSet(moduleE);
+            return _Sets.unmodifiable(moduleE);
         }
     };
 
     final Module moduleC = new ModuleImpl("C") {
         @Override public Set<Module> getDependencies() {
-            return Sets.newHashSet(moduleE, moduleD);
+            return _Sets.unmodifiable(moduleE, moduleD);
         }
         @Override
         public Set<Class<?>> getAdditionalModules() {
-            return Sets.newHashSet(ModuleQ.class, ModuleR.class);
+            return _Sets.unmodifiable(ModuleQ.class, ModuleR.class);
         }
         {
             withAdditionalServices(ServiceY.class, ServiceZ.class);
@@ -86,29 +85,29 @@ public class Module_Util_transitiveDependenciesOf_Test {
     };
     final Module moduleB = new ModuleImpl("B") {
         @Override public Set<Module> getDependencies() {
-            return Sets.newHashSet(moduleF, moduleC);
+            return _Sets.unmodifiable(moduleF, moduleC);
         }
     };
     final Module moduleA = new ModuleImpl("A") {
         @Override public Set<Module> getDependencies() {
-            return Sets.newHashSet(moduleE, moduleC);
+            return _Sets.unmodifiable(moduleE, moduleC);
         }
     };
 
     final Module moduleG = new ModuleImpl("G") {
         @Override public Set<Module> getDependencies() {
-            return Sets.newHashSet(moduleH);
+            return _Sets.unmodifiable(moduleH);
         }
     };
     final Module moduleH = new ModuleImpl("H") {
         @Override public Set<Module> getDependencies() {
-            return Sets.newHashSet(moduleI);
+            return _Sets.unmodifiable(moduleI);
         }
     };
 
     final Module moduleI = new ModuleImpl("I") {
         @Override public Set<Module> getDependencies() {
-            return Sets.newHashSet(moduleG);
+            return _Sets.unmodifiable(moduleG);
         }
     };
 
@@ -133,16 +132,16 @@ public class Module_Util_transitiveDependenciesOf_Test {
         assertTransitiveDependencies(
                 moduleE, Arrays.asList(moduleE));
         assertTransitiveDependenciesAsClass(
-                moduleE, Lists.<Class<?>>newArrayList(ModuleP.class));
+                moduleE, _Lists.<Class<?>>unmodifiable(ModuleP.class));
         assertTransitiveServices(
-                moduleE, Lists.<Class<?>>newArrayList(ServiceX.class));
+                moduleE, _Lists.<Class<?>>unmodifiable(ServiceX.class));
 
         assertTransitiveDependencies(
                 moduleD, Arrays.asList(moduleE, moduleD));
         assertTransitiveDependenciesAsClass(
-                moduleD, Lists.<Class<?>>newArrayList(ModuleP.class));
+                moduleD, _Lists.<Class<?>>unmodifiable(ModuleP.class));
         assertTransitiveServices(
-                moduleD, Lists.<Class<?>>newArrayList(ServiceX.class));
+                moduleD, _Lists.<Class<?>>unmodifiable(ServiceX.class));
 
         assertTransitiveDependencies(
                 moduleC, Arrays.asList(moduleE, moduleD, moduleC));
diff --git a/core/applib/src/test/java/org/apache/isis/applib/internal/compare/ComparatorsTest.java b/core/applib/src/test/java/org/apache/isis/applib/internal/compare/ComparatorsTest.java
index e29f771..4d21a50 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/internal/compare/ComparatorsTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/internal/compare/ComparatorsTest.java
@@ -27,14 +27,12 @@ import java.util.List;
 import java.util.SortedSet;
 import java.util.TreeSet;
 
+import org.apache.isis.applib.internal.collections._Lists;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
-import com.google.common.collect.Iterators;
-import com.google.common.collect.Lists;
-
 public class ComparatorsTest {
 	
 	@Rule
@@ -146,13 +144,13 @@ public class ComparatorsTest {
 	}
 
 	private static List<String> ofL(String... str) {
-		return Lists.newArrayList(ofS(str));
+		return _Lists.newArrayList(ofS(str));
 	}
 
 	private static void assertThatSorting(Collection<String> input, List<String> expected) {
 		final SortedSet<String> treeSet = new TreeSet<String>(_Comparators.deweyOrderComparator);
 		treeSet.addAll(input);
-		final List<String> strings = Arrays.asList(Iterators.toArray(treeSet.iterator(), String.class));
+		final List<String> strings = _Lists.newArrayList(treeSet); 
 		Assert.assertThat(strings, is(expected));
 	}
 }
diff --git a/core/applib/src/test/java/org/apache/isis/applib/query/QueryDefaultTest_withStart_or_withCount.java b/core/applib/src/test/java/org/apache/isis/applib/query/QueryDefaultTest_withStart_or_withCount.java
index df1c3bb..990b9d8 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/query/QueryDefaultTest_withStart_or_withCount.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/query/QueryDefaultTest_withStart_or_withCount.java
@@ -16,11 +16,9 @@
  */
 package org.apache.isis.applib.query;
 
-import static org.hamcrest.CoreMatchers.*;
+import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
-import com.google.common.collect.ImmutableMap;
-
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/jdo/ExceptionRecognizerCompositeForJdoObjectStoreTest.java b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/jdo/ExceptionRecognizerCompositeForJdoObjectStoreTest.java
index ae9973d..80c6947 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/jdo/ExceptionRecognizerCompositeForJdoObjectStoreTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/exceprecog/jdo/ExceptionRecognizerCompositeForJdoObjectStoreTest.java
@@ -18,18 +18,15 @@
  */
 package org.apache.isis.applib.services.exceprecog.jdo;
 
-import java.util.Collections;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
 
-import com.google.common.collect.ImmutableBiMap;
+import java.util.Collections;
 
+import org.apache.isis.applib.internal.collections._Maps;
 import org.junit.Before;
 import org.junit.Test;
 
-import org.apache.isis.applib.services.exceprecog.jdo.ExceptionRecognizerCompositeForJdoObjectStore;
-
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
 public class ExceptionRecognizerCompositeForJdoObjectStoreTest {
 
     private boolean[] called;
@@ -57,7 +54,7 @@ public class ExceptionRecognizerCompositeForJdoObjectStoreTest {
     @Test
     public void whenDisabledFlagSetToTrue() throws Exception {
         // when
-        recog.init(ImmutableBiMap.of(ExceptionRecognizerCompositeForJdoObjectStore.KEY_DISABLE, "true"));
+        recog.init(_Maps.unmodifiable(ExceptionRecognizerCompositeForJdoObjectStore.KEY_DISABLE, "true"));
 
         // then
         assertThat(called[0], is(false));
@@ -66,7 +63,7 @@ public class ExceptionRecognizerCompositeForJdoObjectStoreTest {
     @Test
     public void whenDisabledFlagSetToFalse() throws Exception {
         // when
-        recog.init(ImmutableBiMap.of(ExceptionRecognizerCompositeForJdoObjectStore.KEY_DISABLE, "false"));
+    	recog.init(_Maps.unmodifiable(ExceptionRecognizerCompositeForJdoObjectStore.KEY_DISABLE, "false"));
 
         // then
         assertThat(called[0], is(true));
diff --git a/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java b/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
index 8379ce7..25398ef 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/services/xmlsnapshot/XmlSnapshotServiceAbstractTest.java
@@ -21,14 +21,11 @@ import static org.junit.Assert.assertThat;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
-import java.net.URL;
 import java.nio.charset.Charset;
 import java.util.Locale;
 
-import com.google.common.io.Resources;
-
+import org.apache.isis.applib.internal.resources._Resource;
 import org.joda.time.LocalDate;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.w3c.dom.Document;
@@ -41,9 +38,10 @@ public class XmlSnapshotServiceAbstractTest {
     
     @Before
     public void setUp() throws Exception {
-        URL resource = Resources.getResource(XmlSnapshotServiceAbstractTest.class, "XmlSnapshotServiceAbstractTest.xml");
-        xmlStr = Resources.toString(resource, Charset.forName("UTF-8"));
-        
+        xmlStr = _Resource.loadAsString(
+        		XmlSnapshotServiceAbstractTest.class, 
+        		"XmlSnapshotServiceAbstractTest.xml", 
+        		Charset.forName("UTF-8"));
         xmlSnapshotService = new XmlSnapshotServiceForUnitTesting();
         
     }
diff --git a/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_equals_and_hashCode.java b/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_equals_and_hashCode.java
index a7732d2..89dee00 100644
--- a/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_equals_and_hashCode.java
+++ b/core/applib/src/test/java/org/apache/isis/applib/util/ObjectContractsTest_equals_and_hashCode.java
@@ -18,11 +18,9 @@ package org.apache.isis.applib.util;
 
 import java.util.List;
 
-import com.google.common.collect.Lists;
-
-import org.junit.Before;
-
+import org.apache.isis.applib.internal.collections._Lists;
 import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
+import org.junit.Before;
 
 public class ObjectContractsTest_equals_and_hashCode extends ValueTypeContractTestAbstract<InvoiceItem3> {
 
@@ -39,7 +37,7 @@ public class ObjectContractsTest_equals_and_hashCode extends ValueTypeContractTe
 
     @Override
     protected List<InvoiceItem3> getObjectsWithSameValue() {
-        return Lists.newArrayList(
+        return _Lists.unmodifiable(
                     InvoiceItem3.newInvoiceItem(inv123, "A", new Integer(1)),
                     InvoiceItem3.newInvoiceItem(inv123, "A", new Integer(1))
                 );
@@ -47,7 +45,7 @@ public class ObjectContractsTest_equals_and_hashCode extends ValueTypeContractTe
 
     @Override
     protected List<InvoiceItem3> getObjectsWithDifferentValue() {
-        return Lists.newArrayList(
+        return _Lists.unmodifiable(
                     InvoiceItem3.newInvoiceItem(null, "A", new Integer(2)),
                     InvoiceItem3.newInvoiceItem(inv456, "A", new Integer(2)),
                     InvoiceItem3.newInvoiceItem(inv123, null, new Integer(1)),

-- 
To stop receiving notification emails like this one, please contact
ahuber@apache.org.