http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/spi/src/main/java/org/qi4j/spi/value/ValueSerializerAdapter.java
----------------------------------------------------------------------
diff --git 
a/core/spi/src/main/java/org/qi4j/spi/value/ValueSerializerAdapter.java 
b/core/spi/src/main/java/org/qi4j/spi/value/ValueSerializerAdapter.java
index 8e21416..5a1cfea 100644
--- a/core/spi/src/main/java/org/qi4j/spi/value/ValueSerializerAdapter.java
+++ b/core/spi/src/main/java/org/qi4j/spi/value/ValueSerializerAdapter.java
@@ -25,6 +25,8 @@ import java.math.BigInteger;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.BiFunction;
+import java.util.function.Function;
 import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
 import org.joda.time.LocalDateTime;
@@ -46,8 +48,6 @@ import org.qi4j.api.value.ValueComposite;
 import org.qi4j.api.value.ValueDescriptor;
 import org.qi4j.api.value.ValueSerializationException;
 import org.qi4j.api.value.ValueSerializer;
-import org.qi4j.functional.Function;
-import org.qi4j.functional.Function2;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -97,19 +97,19 @@ public abstract class ValueSerializerAdapter<OutputType>
     private static final Logger LOG = LoggerFactory.getLogger( 
ValueSerializerAdapter.class );
     private static final String UTF_8 = "UTF-8";
 
-    private static <TO, FROM extends TO> Function2<Options, FROM, TO> 
identitySerializer()
+    private static <TO, FROM extends TO> BiFunction<Options, FROM, TO> 
identitySerializer()
     {
-        return new Function2<Options, FROM, TO>()
+        return new BiFunction<Options, FROM, TO>()
         {
             @Override
-            public TO map( Options options, FROM from )
+            public TO apply( Options options, FROM from )
             {
                 return from;
             }
         };
     }
 
-    private final Map<Class<?>, Function2<Options, Object, Object>> 
serializers = new HashMap<>( 16 );
+    private final Map<Class<?>, BiFunction<Options, Object, Object>> 
serializers = new HashMap<>( 16 );
     private final Map<Class<?>, ComplexSerializer<Object, OutputType>> 
complexSerializers = new HashMap<>( 2 );
 
     /**
@@ -120,9 +120,9 @@ public abstract class ValueSerializerAdapter<OutputType>
      * @param serializer Serialization Function
      */
     @SuppressWarnings( "unchecked" )
-    protected final <T> void registerSerializer( Class<T> type, 
Function2<Options, T, Object> serializer )
+    protected final <T> void registerSerializer( Class<T> type, 
BiFunction<Options, T, Object> serializer )
     {
-        serializers.put( type, (Function2<Options, Object, Object>) serializer 
);
+        serializers.put( type, (BiFunction<Options, Object, Object>) 
serializer );
     }
 
     /**
@@ -152,62 +152,62 @@ public abstract class ValueSerializerAdapter<OutputType>
         registerSerializer( Double.class, ValueSerializerAdapter.<Object, 
Double>identitySerializer() );
 
         // Number types
-        registerSerializer( BigDecimal.class, new Function2<Options, 
BigDecimal, Object>()
+        registerSerializer( BigDecimal.class, new BiFunction<Options, 
BigDecimal, Object>()
         {
             @Override
-            public Object map( Options options, BigDecimal bigDecimal )
+            public Object apply( Options options, BigDecimal bigDecimal )
             {
                 return bigDecimal.toString();
             }
         } );
-        registerSerializer( BigInteger.class, new Function2<Options, 
BigInteger, Object>()
+        registerSerializer( BigInteger.class, new BiFunction<Options, 
BigInteger, Object>()
         {
             @Override
-            public Object map( Options options, BigInteger bigInteger )
+            public Object apply( Options options, BigInteger bigInteger )
             {
                 return bigInteger.toString();
             }
         } );
 
         // Date types
-        registerSerializer( Date.class, new Function2<Options, Date, Object>()
+        registerSerializer( Date.class, new BiFunction<Options, Date, Object>()
         {
             @Override
-            public Object map( Options options, Date date )
+            public Object apply( Options options, Date date )
             {
                 return Dates.toUtcString( date );
             }
         } );
-        registerSerializer( DateTime.class, new Function2<Options, DateTime, 
Object>()
+        registerSerializer( DateTime.class, new BiFunction<Options, DateTime, 
Object>()
         {
             @Override
-            public Object map( Options options, DateTime date )
+            public Object apply( Options options, DateTime date )
             {
                 return date.toString();
             }
         } );
-        registerSerializer( LocalDateTime.class, new Function2<Options, 
LocalDateTime, Object>()
+        registerSerializer( LocalDateTime.class, new BiFunction<Options, 
LocalDateTime, Object>()
         {
             @Override
-            public Object map( Options options, LocalDateTime date )
+            public Object apply( Options options, LocalDateTime date )
             {
                 return date.toString();
             }
         } );
-        registerSerializer( LocalDate.class, new Function2<Options, LocalDate, 
Object>()
+        registerSerializer( LocalDate.class, new BiFunction<Options, 
LocalDate, Object>()
         {
             @Override
-            public Object map( Options options, LocalDate date )
+            public Object apply( Options options, LocalDate date )
             {
                 return date.toString();
             }
         } );
 
         // Other supported types
-        registerSerializer( EntityReference.class, new Function2<Options, 
EntityReference, Object>()
+        registerSerializer( EntityReference.class, new BiFunction<Options, 
EntityReference, Object>()
         {
             @Override
-            public Object map( Options options, EntityReference ref )
+            public Object apply( Options options, EntityReference ref )
             {
                 return ref.toString();
             }
@@ -220,7 +220,7 @@ public abstract class ValueSerializerAdapter<OutputType>
         return new Function<T, String>()
         {
             @Override
-            public String map( T object )
+            public String apply( T object )
             {
                 return serialize( object );
             }
@@ -233,7 +233,7 @@ public abstract class ValueSerializerAdapter<OutputType>
         return new Function<T, String>()
         {
             @Override
-            public String map( T object )
+            public String apply( T object )
             {
                 return serialize( options, object );
             }
@@ -247,7 +247,7 @@ public abstract class ValueSerializerAdapter<OutputType>
         return new Function<T, String>()
         {
             @Override
-            public String map( T object )
+            public String apply( T object )
             {
                 return serialize( includeTypeInfo ? new 
Options().withTypeInfo() : new Options().withoutTypeInfo(),
                                   object );
@@ -334,7 +334,7 @@ public abstract class ValueSerializerAdapter<OutputType>
             if( serializers.get( object.getClass() ) != null )
             {
                 // Plain Value
-                Object serialized = serializers.get( object.getClass() ).map( 
options, object );
+                Object serialized = serializers.get( object.getClass() 
).apply( options, object );
                 output.write( serialized.toString().getBytes( UTF_8 ) );
             }
             else if( object.getClass().isEnum() )
@@ -371,7 +371,7 @@ public abstract class ValueSerializerAdapter<OutputType>
         if( serializers.get( object.getClass() ) != null )
         {
             LOG.trace( "Registered serializer matches -> onValue( serialized 
)" );
-            onValue( output, serializers.get( object.getClass() ).map( 
options, object ) );
+            onValue( output, serializers.get( object.getClass() ).apply( 
options, object ) );
         }
         else if( complexSerializers.get( object.getClass() ) != null )
         {
@@ -423,7 +423,7 @@ public abstract class ValueSerializerAdapter<OutputType>
     private void serializeValueComposite( Options options, Object object, 
OutputType output, boolean rootPass )
         throws Exception
     {
-        CompositeInstance valueInstance = 
Qi4j.FUNCTION_COMPOSITE_INSTANCE_OF.map( (ValueComposite) object );
+        CompositeInstance valueInstance = 
Qi4j.FUNCTION_COMPOSITE_INSTANCE_OF.apply( (ValueComposite) object );
         ValueDescriptor descriptor = (ValueDescriptor) 
valueInstance.descriptor();
         AssociationStateHolder state = (AssociationStateHolder) 
valueInstance.state();
 

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueDeserializer.java
----------------------------------------------------------------------
diff --git 
a/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueDeserializer.java
 
b/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueDeserializer.java
index 452f75e..752123a 100644
--- 
a/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueDeserializer.java
+++ 
b/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueDeserializer.java
@@ -21,6 +21,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.util.Collection;
 import java.util.Map;
+import java.util.function.Function;
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.json.JSONTokener;
@@ -31,7 +32,6 @@ import org.qi4j.api.structure.Application;
 import org.qi4j.api.structure.Module;
 import org.qi4j.api.value.ValueDeserializer;
 import org.qi4j.api.value.ValueSerializationException;
-import org.qi4j.functional.Function;
 import org.qi4j.spi.value.ValueDeserializerAdapter;
 
 /**
@@ -138,7 +138,7 @@ public class OrgJsonValueDeserializer
             else
             {
                 input.back();
-                collection.add( deserializer.map( input ) );
+                collection.add( deserializer.apply( input ) );
             }
             c = input.nextClean();
             switch( c )
@@ -265,11 +265,11 @@ public class OrgJsonValueDeserializer
 
                     if( "key".equals( objectKey ) )
                     {
-                        key = keyDeserializer.map( input );
+                        key = keyDeserializer.apply( input );
                     }
                     else if( "value".equals( objectKey ) )
                     {
-                        value = valueDeserializer.map( input );
+                        value = valueDeserializer.apply( input );
                     }
                     else
                     {
@@ -393,7 +393,7 @@ public class OrgJsonValueDeserializer
         {
             return null;
         }
-        T value = valueDeserializer.map( valueNode );
+        T value = valueDeserializer.apply( valueNode );
         return value;
     }
 
@@ -413,7 +413,7 @@ public class OrgJsonValueDeserializer
         for( int idx = 0; idx < array.length(); idx++ )
         {
             Object item = array.get( idx );
-            T value = deserializer.map( item );
+            T value = deserializer.apply( item );
             collection.add( value );
         }
     }
@@ -441,8 +441,8 @@ public class OrgJsonValueDeserializer
             JSONObject object = (JSONObject) item;
             Object keyNode = object.get( "key" );
             Object valueNode = object.get( "value" );
-            K key = keyDeserializer.map( keyNode );
-            V value = valueDeserializer.map( valueNode );
+            K key = keyDeserializer.apply( keyNode );
+            V value = valueDeserializer.apply( valueNode );
             if( key != null )
             {
                 map.put( key, value );

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerialization.java
----------------------------------------------------------------------
diff --git 
a/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerialization.java
 
b/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerialization.java
index 0c758fa..01569a7 100644
--- 
a/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerialization.java
+++ 
b/core/spi/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerialization.java
@@ -17,13 +17,13 @@ package org.qi4j.valueserialization.orgjson;
 
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.function.Function;
 import org.qi4j.api.structure.Application;
 import org.qi4j.api.structure.Module;
 import org.qi4j.api.type.ValueType;
 import org.qi4j.api.value.ValueSerialization;
 import org.qi4j.api.value.ValueSerializationException;
-import org.qi4j.functional.Function;
-import org.qi4j.functional.Function2;
+import java.util.function.BiFunction;
 
 /**
  * ValueSerialization producing and consuming JSON documents using org.json.
@@ -49,7 +49,7 @@ public class OrgJsonValueSerialization
         this.deserializer = new OrgJsonValueDeserializer( application, module, 
new Function<Application, Module>()
         {
             @Override
-            public Module map( Application from )
+            public Module apply( Application from )
             {
                 return valuesModule;
             }
@@ -132,7 +132,7 @@ public class OrgJsonValueSerialization
     }
 
     @Override
-    public <T> Function2<ValueType, String, T> deserialize()
+    public <T> BiFunction<ValueType, String, T> deserialize()
     {
         return deserializer.deserialize();
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java
----------------------------------------------------------------------
diff --git 
a/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java
 
b/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java
index d0c3426..1fd4613 100644
--- 
a/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java
+++ 
b/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java
@@ -16,12 +16,12 @@
 package org.qi4j.spi.entitystore.helpers;
 
 import java.util.List;
+import java.util.function.Function;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 import org.junit.Test;
 import org.qi4j.api.entity.EntityReference;
-import org.qi4j.functional.Function;
 import org.qi4j.spi.entity.EntityStatus;
 
 import static org.hamcrest.CoreMatchers.equalTo;
@@ -125,7 +125,7 @@ public class JSONManyAssociationStateTest
         List<String> refList = toList( map( new Function<EntityReference, 
String>()
         {
             @Override
-            public String map( EntityReference from )
+            public String apply( EntityReference from )
             {
                 return from.identity();
             }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jBaseTest.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jBaseTest.java 
b/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jBaseTest.java
index 3c878a1..1a8386a 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jBaseTest.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jBaseTest.java
@@ -85,7 +85,7 @@ public abstract class AbstractQi4jBaseTest
     /**
      * This method is called when there was an AssemblyException in the 
creation of the Qi4j application model.
      * <p>
-     * Override this method to catch valid failures to place into satisfiedBy 
suites.
+     * Override this method to catch valid failures to place into test suites.
      * </p>
      * @param exception the exception thrown.
      *

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jScenarioTest.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jScenarioTest.java 
b/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jScenarioTest.java
index 48e1f0b..8b038ff 100644
--- a/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jScenarioTest.java
+++ b/core/testsupport/src/main/java/org/qi4j/test/AbstractQi4jScenarioTest.java
@@ -98,7 +98,7 @@ public abstract class AbstractQi4jScenarioTest
     /**
      * This method is called when there was an AssemblyException in the 
creation of the Qi4j application model.
      * <p>
-     * Override this method to catch valid failures to place into satisfiedBy 
suites.
+     * Override this method to catch valid failures to place into test suites.
      * </p>
      *
      * @param exception the exception thrown.

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/testsupport/src/main/java/org/qi4j/test/cache/AbstractCachePoolTest.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/qi4j/test/cache/AbstractCachePoolTest.java 
b/core/testsupport/src/main/java/org/qi4j/test/cache/AbstractCachePoolTest.java
index aee81d1..5bf627b 100644
--- 
a/core/testsupport/src/main/java/org/qi4j/test/cache/AbstractCachePoolTest.java
+++ 
b/core/testsupport/src/main/java/org/qi4j/test/cache/AbstractCachePoolTest.java
@@ -32,7 +32,7 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
 
 /**
- * Abstract satisfiedBy with tests for the CachePool interface.
+ * Abstract test with tests for the CachePool interface.
  */
 public abstract class AbstractCachePoolTest
     extends AbstractQi4jTest

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractEntityStoreTest.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractEntityStoreTest.java
 
b/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractEntityStoreTest.java
index 4549826..1917853 100644
--- 
a/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractEntityStoreTest.java
+++ 
b/core/testsupport/src/main/java/org/qi4j/test/entity/AbstractEntityStoreTest.java
@@ -59,7 +59,7 @@ import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
 
 /**
- * Abstract satisfiedBy with tests for the EntityStore interface.
+ * Abstract test with tests for the EntityStore interface.
  */
 public abstract class AbstractEntityStoreTest
     extends AbstractQi4jTest

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractAnyQueryTest.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractAnyQueryTest.java
 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractAnyQueryTest.java
index be8e07a..40dd310 100644
--- 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractAnyQueryTest.java
+++ 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractAnyQueryTest.java
@@ -37,7 +37,7 @@ import org.qi4j.test.indexing.model.entities.FemaleEntity;
 import org.qi4j.test.indexing.model.entities.MaleEntity;
 
 /**
- * Abstract satisfiedBy with tests for any queries against Index/Query engines.
+ * Abstract test with tests for any queries against Index/Query engines.
  */
 public class AbstractAnyQueryTest
     extends AbstractQi4jTest

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractComplexQueryTest.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractComplexQueryTest.java
 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractComplexQueryTest.java
index 398f29d..b363af3 100644
--- 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractComplexQueryTest.java
+++ 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractComplexQueryTest.java
@@ -42,7 +42,7 @@ import static org.qi4j.api.query.QueryExpressions.templateFor;
 import static org.qi4j.test.indexing.NameableAssert.verifyUnorderedResults;
 
 /**
- * Abstract satisfiedBy with tests for complex queries against Index/Query 
engines, ie. queries by "example values".
+ * Abstract test with tests for complex queries against Index/Query engines, 
ie. queries by "example values".
  */
 public abstract class AbstractComplexQueryTest
     extends AbstractAnyQueryTest

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractEntityFinderTest.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractEntityFinderTest.java
 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractEntityFinderTest.java
index 8d881b7..84c71d0 100644
--- 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractEntityFinderTest.java
+++ 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractEntityFinderTest.java
@@ -26,13 +26,13 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.junit.Before;
 import org.junit.Test;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.query.grammar.OrderBy;
 import org.qi4j.api.service.ServiceReference;
-import org.qi4j.functional.Specification;
 import org.qi4j.spi.query.EntityFinder;
 import org.qi4j.spi.query.EntityFinderException;
 import org.qi4j.spi.query.IndexExporter;
@@ -59,13 +59,13 @@ import static org.qi4j.functional.Iterables.toList;
 import static org.qi4j.test.indexing.NameableAssert.assertNames;
 
 /**
- * Abstract satisfiedBy with tests for the EntityFinder interface.
+ * Abstract test with tests for the EntityFinder interface.
  */
 public abstract class AbstractEntityFinderTest
     extends AbstractAnyQueryTest
 {
 
-    private static final Specification<Composite> ALL = null;
+    private static final Predicate<Composite> ALL = null;
 
     private static final OrderBy[] NO_SORTING = null;
 

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractNamedQueryTest.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractNamedQueryTest.java
 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractNamedQueryTest.java
index a00e293..e439fed 100644
--- 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractNamedQueryTest.java
+++ 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractNamedQueryTest.java
@@ -20,13 +20,13 @@ package org.qi4j.test.indexing;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.junit.Test;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.query.Query;
 import org.qi4j.api.query.grammar.OrderBy;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.functional.Specification;
 import org.qi4j.spi.query.EntityFinderException;
 import org.qi4j.spi.query.IndexExporter;
 import org.qi4j.test.EntityTestAssembler;
@@ -45,13 +45,13 @@ import static 
org.qi4j.test.indexing.NameableAssert.verifyOrderedResults;
 import static org.qi4j.test.indexing.NameableAssert.verifyUnorderedResults;
 
 /**
- * Abstract satisfiedBy with tests for named queries against Index/Query 
engines.
+ * Abstract test with tests for named queries against Index/Query engines.
  */
 public abstract class AbstractNamedQueryTest
     extends AbstractAnyQueryTest
 {
 
-    private final Map<String, Specification<Composite>> queries = new 
HashMap<>();
+    private final Map<String, Predicate<Composite>> queries = new HashMap<>();
 
     @Override
     public void assemble( ModuleAssembly module )
@@ -65,7 +65,7 @@ public abstract class AbstractNamedQueryTest
             String queryName = String.format( "script%02d", i + 1 );
             if( query[i].length() != 0 )
             {
-                Specification<Composite> expression = 
createNamedQueryDescriptor( queryName, query[i] );
+                Predicate<Composite> expression = createNamedQueryDescriptor( 
queryName, query[i] );
                 queries.put( queryName, expression );
             }
         }
@@ -73,7 +73,7 @@ public abstract class AbstractNamedQueryTest
 
     protected abstract String[] queryStrings();
 
-    protected abstract Specification<Composite> createNamedQueryDescriptor( 
String queryName, String queryString );
+    protected abstract Predicate<Composite> createNamedQueryDescriptor( String 
queryName, String queryString );
 
     @Test
     public void showNetwork()

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractQueryTest.java
----------------------------------------------------------------------
diff --git 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractQueryTest.java 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractQueryTest.java
index 8794358..38e36d8 100644
--- 
a/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractQueryTest.java
+++ 
b/core/testsupport/src/main/java/org/qi4j/test/indexing/AbstractQueryTest.java
@@ -70,7 +70,7 @@ import static 
org.qi4j.test.indexing.NameableAssert.verifyOrderedResults;
 import static org.qi4j.test.indexing.NameableAssert.verifyUnorderedResults;
 
 /**
- * Abstract satisfiedBy with tests for simple queries against Index/Query 
engines.
+ * Abstract test with tests for simple queries against Index/Query engines.
  */
 public abstract class AbstractQueryTest
     extends AbstractAnyQueryTest

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchFinder.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchFinder.java
 
b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchFinder.java
index c74083e..40e966b 100644
--- 
a/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchFinder.java
+++ 
b/extensions/indexing-elasticsearch/src/main/java/org/qi4j/index/elasticsearch/ElasticSearchFinder.java
@@ -19,6 +19,8 @@ package org.qi4j.index.elasticsearch;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Function;
+import java.util.function.Predicate;
 import org.elasticsearch.action.count.CountRequestBuilder;
 import org.elasticsearch.action.count.CountResponse;
 import org.elasticsearch.action.search.SearchRequestBuilder;
@@ -57,9 +59,7 @@ import 
org.qi4j.api.query.grammar.PropertyNotNullSpecification;
 import org.qi4j.api.query.grammar.PropertyNullSpecification;
 import org.qi4j.api.query.grammar.QuerySpecification;
 import org.qi4j.api.value.ValueComposite;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.Iterables;
-import org.qi4j.functional.Specification;
 import 
org.qi4j.index.elasticsearch.ElasticSearchFinderSupport.ComplexTypeSupport;
 import org.qi4j.spi.query.EntityFinder;
 import org.qi4j.spi.query.EntityFinderException;
@@ -93,7 +93,7 @@ public interface ElasticSearchFinder
 
         @Override
         public Iterable<EntityReference> findEntities( Class<?> resultType,
-                                                       
Specification<Composite> whereClause,
+                                                       Predicate<Composite> 
whereClause,
                                                        OrderBy[] 
orderBySegments,
                                                        Integer firstResult, 
Integer maxResults,
                                                        Map<String, Object> 
variables )
@@ -136,7 +136,7 @@ public interface ElasticSearchFinder
             return Iterables.map( new Function<SearchHit, EntityReference>()
             {
                 @Override
-                public EntityReference map( SearchHit from )
+                public EntityReference apply( SearchHit from )
                 {
                     return EntityReference.parseEntityReference( from.id() );
                 }
@@ -146,7 +146,7 @@ public interface ElasticSearchFinder
 
         @Override
         public EntityReference findEntity( Class<?> resultType,
-                                           Specification<Composite> 
whereClause,
+                                           Predicate<Composite> whereClause,
                                            Map<String, Object> variables )
             throws EntityFinderException
         {
@@ -175,7 +175,7 @@ public interface ElasticSearchFinder
 
         @Override
         public long countEntities( Class<?> resultType,
-                                   Specification<Composite> whereClause,
+                                   Predicate<Composite> whereClause,
                                    Map<String, Object> variables )
             throws EntityFinderException
         {
@@ -202,7 +202,7 @@ public interface ElasticSearchFinder
         }
 
         private QueryBuilder processWhereSpecification( AndFilterBuilder 
filterBuilder,
-                                                        
Specification<Composite> spec,
+                                                        Predicate<Composite> 
spec,
                                                         Map<String, Object> 
variables )
             throws EntityFinderException
         {
@@ -221,7 +221,7 @@ public interface ElasticSearchFinder
         }
 
         private void processSpecification( FilterBuilder filterBuilder,
-                                           Specification<Composite> spec,
+                                           Predicate<Composite> spec,
                                            Map<String, Object> variables )
             throws EntityFinderException
         {
@@ -324,12 +324,12 @@ public interface ElasticSearchFinder
             throws EntityFinderException
         {
             LOGGER.trace( "Processing BinarySpecification {}", spec );
-            Iterable<Specification<Composite>> operands = spec.operands();
+            Iterable<Predicate<Composite>> operands = spec.operands();
 
             if( spec instanceof AndSpecification )
             {
                 AndFilterBuilder andFilterBuilder = new AndFilterBuilder();
-                for( Specification<Composite> operand : operands )
+                for( Predicate<Composite> operand : operands )
                 {
                     processSpecification( andFilterBuilder, operand, variables 
);
                 }
@@ -338,7 +338,7 @@ public interface ElasticSearchFinder
             else if( spec instanceof OrSpecification )
             {
                 OrFilterBuilder orFilterBuilder = new OrFilterBuilder();
-                for( Specification<Composite> operand : operands )
+                for( Predicate<Composite> operand : operands )
                 {
                     processSpecification( orFilterBuilder, operand, variables 
);
                 }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/RdfQueryParser.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/RdfQueryParser.java
 
b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/RdfQueryParser.java
index ba2b99a..b86e032 100644
--- 
a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/RdfQueryParser.java
+++ 
b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/RdfQueryParser.java
@@ -19,14 +19,14 @@
 package org.qi4j.index.rdf.query;
 
 import java.util.Map;
+import java.util.function.Predicate;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.query.grammar.OrderBy;
-import org.qi4j.functional.Specification;
 
 public interface RdfQueryParser
 {
     String constructQuery( Class<?> resultType,
-                           Specification<Composite> whereClause,
+                           Predicate<Composite> whereClause,
                            OrderBy[] orderBySegments,
                            Integer firstResult,
                            Integer maxResults,

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/RdfQueryService.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/RdfQueryService.java
 
b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/RdfQueryService.java
index bb8b454..077241b 100644
--- 
a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/RdfQueryService.java
+++ 
b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/RdfQueryService.java
@@ -18,6 +18,7 @@
 package org.qi4j.index.rdf.query;
 
 import java.util.Map;
+import java.util.function.Predicate;
 import org.openrdf.query.QueryLanguage;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.entity.EntityReference;
@@ -27,7 +28,6 @@ import org.qi4j.api.mixin.Mixins;
 import org.qi4j.api.query.grammar.OrderBy;
 import org.qi4j.api.query.grammar.QuerySpecification;
 import org.qi4j.api.service.ServiceComposite;
-import org.qi4j.functional.Specification;
 import org.qi4j.spi.query.EntityFinder;
 import org.qi4j.spi.query.EntityFinderException;
 
@@ -55,7 +55,7 @@ public interface RdfQueryService
 
         @Override
         public Iterable<EntityReference> findEntities( Class<?> resultType,
-                                                       
Specification<Composite> whereClause,
+                                                       Predicate<Composite> 
whereClause,
                                                        OrderBy[] 
orderBySegments,
                                                        Integer firstResult,
                                                        Integer maxResults,
@@ -82,7 +82,7 @@ public interface RdfQueryService
         }
 
         @Override
-        public EntityReference findEntity( Class<?> resultType, 
Specification<Composite> whereClause, Map<String, Object> variables )
+        public EntityReference findEntity( Class<?> resultType, 
Predicate<Composite> whereClause, Map<String, Object> variables )
             throws EntityFinderException
         {
             final SingleQualifiedIdentityResultCallback singleCallback = new 
SingleQualifiedIdentityResultCallback();
@@ -102,7 +102,7 @@ public interface RdfQueryService
         }
 
         @Override
-        public long countEntities( Class<?> resultType, 
Specification<Composite> whereClause, Map<String, Object> variables )
+        public long countEntities( Class<?> resultType, Predicate<Composite> 
whereClause, Map<String, Object> variables )
             throws EntityFinderException
         {
             if (QuerySpecification.isQueryLanguage( "SERQL", whereClause ))

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/internal/RdfQueryParserImpl.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/internal/RdfQueryParserImpl.java
 
b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/internal/RdfQueryParserImpl.java
index 122ce01..30958b1 100644
--- 
a/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/internal/RdfQueryParserImpl.java
+++ 
b/extensions/indexing-rdf/src/main/java/org/qi4j/index/rdf/query/internal/RdfQueryParserImpl.java
@@ -27,6 +27,7 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.TimeZone;
+import java.util.function.Predicate;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.entity.EntityComposite;
@@ -55,7 +56,6 @@ import org.qi4j.api.query.grammar.Variable;
 import org.qi4j.api.value.ValueSerializer;
 import org.qi4j.api.value.ValueSerializer.Options;
 import org.qi4j.functional.Iterables;
-import org.qi4j.functional.Specification;
 import org.qi4j.index.rdf.query.RdfQueryParser;
 import org.qi4j.spi.Qi4jSPI;
 import org.slf4j.LoggerFactory;
@@ -111,7 +111,7 @@ public class RdfQueryParserImpl
 
     @Override
     public String constructQuery( final Class<?> resultType,
-                                  final Specification<Composite> specification,
+                                  final Predicate<Composite> specification,
                                   final OrderBy[] orderBySegments,
                                   final Integer firstResult,
                                   final Integer maxResults,
@@ -214,7 +214,7 @@ public class RdfQueryParserImpl
         return query.toString();
     }
 
-    private void processFilter( final Specification<Composite> expression, 
boolean allowInline, StringBuilder builder )
+    private void processFilter( final Predicate<Composite> expression, boolean 
allowInline, StringBuilder builder )
     {
         if( expression == null )
         {
@@ -227,7 +227,7 @@ public class RdfQueryParserImpl
 
             int start = builder.length();
             boolean first = true;
-            for( Specification<Composite> operand : conjunction.operands() )
+            for( Predicate<Composite> operand : conjunction.operands() )
             {
                 int size = builder.length();
                 processFilter( operand, allowInline, builder );
@@ -256,7 +256,7 @@ public class RdfQueryParserImpl
 
             int start = builder.length();
             boolean first = true;
-            for( Specification<Composite> operand : disjunction.operands() )
+            for( Predicate<Composite> operand : disjunction.operands() )
             {
                 int size = builder.length();
                 processFilter( operand, false, builder );
@@ -437,7 +437,7 @@ public class RdfQueryParserImpl
         builder.append( format( "regex(%s,\"%s\")", valueVariable, 
predicate.regexp() ) );
     }
 
-    private void processComparisonPredicate( final Specification<Composite> 
predicate,
+    private void processComparisonPredicate( final Predicate<Composite> 
predicate,
                                              boolean allowInline,
                                              StringBuilder builder
     )

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/RdfNamedQueryTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/RdfNamedQueryTest.java
 
b/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/RdfNamedQueryTest.java
index bdd2725..f965550 100644
--- 
a/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/RdfNamedQueryTest.java
+++ 
b/extensions/indexing-rdf/src/test/java/org/qi4j/index/rdf/RdfNamedQueryTest.java
@@ -17,11 +17,11 @@
  */
 package org.qi4j.index.rdf;
 
+import java.util.function.Predicate;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.value.ValueSerialization;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.functional.Specification;
 import org.qi4j.index.rdf.query.RdfQueryParserFactory;
 import org.qi4j.index.rdf.query.SesameExpressions;
 import org.qi4j.library.rdf.entity.EntityStateSerializer;
@@ -39,7 +39,7 @@ public class RdfNamedQueryTest extends AbstractNamedQueryTest
     }
 
     @Override
-    protected Specification<Composite> createNamedQueryDescriptor( String 
queryName, String queryString )
+    protected Predicate<Composite> createNamedQueryDescriptor( String 
queryName, String queryString )
     {
         return SesameExpressions.sparql( queryString );
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SolrEntityQueryMixin.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SolrEntityQueryMixin.java
 
b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SolrEntityQueryMixin.java
index 73e4988..15d185b 100644
--- 
a/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SolrEntityQueryMixin.java
+++ 
b/extensions/indexing-solr/src/main/java/org/qi4j/index/solr/internal/SolrEntityQueryMixin.java
@@ -19,6 +19,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.apache.solr.client.solrj.SolrServer;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.response.QueryResponse;
@@ -33,7 +34,6 @@ import org.qi4j.api.injection.scope.Service;
 import org.qi4j.api.query.grammar.OrderBy;
 import org.qi4j.api.query.grammar.QuerySpecification;
 import org.qi4j.functional.Iterables;
-import org.qi4j.functional.Specification;
 import org.qi4j.index.solr.EmbeddedSolrService;
 import org.qi4j.index.solr.SolrSearch;
 import org.qi4j.spi.query.EntityFinder;
@@ -53,7 +53,7 @@ public class SolrEntityQueryMixin
     private Logger logger = LoggerFactory.getLogger( 
SolrEntityQueryMixin.class );
 
     @Override
-    public Iterable<EntityReference> findEntities( Class<?> resultType, 
@Optional Specification<Composite> whereClause, @Optional OrderBy[] 
orderBySegments, @Optional Integer firstResult, @Optional Integer maxResults, 
Map<String, Object> variables ) throws EntityFinderException
+    public Iterable<EntityReference> findEntities( Class<?> resultType, 
@Optional Predicate<Composite> whereClause, @Optional OrderBy[] 
orderBySegments, @Optional Integer firstResult, @Optional Integer maxResults, 
Map<String, Object> variables ) throws EntityFinderException
     {
         try
         {
@@ -99,7 +99,7 @@ public class SolrEntityQueryMixin
     }
 
     @Override
-    public EntityReference findEntity( Class<?> resultType, @Optional 
Specification<Composite> whereClause, Map<String, Object> variables ) throws 
EntityFinderException
+    public EntityReference findEntity( Class<?> resultType, @Optional 
Predicate<Composite> whereClause, Map<String, Object> variables ) throws 
EntityFinderException
     {
         Iterator<EntityReference> iter = findEntities( resultType, 
whereClause, null, 0, 1, variables ).iterator();
 
@@ -110,7 +110,7 @@ public class SolrEntityQueryMixin
     }
 
     @Override
-    public long countEntities( Class<?> resultType, @Optional 
Specification<Composite> whereClause, Map<String, Object> variables ) throws 
EntityFinderException
+    public long countEntities( Class<?> resultType, @Optional 
Predicate<Composite> whereClause, Map<String, Object> variables ) throws 
EntityFinderException
     {
         return Iterables.count( findEntities( resultType, whereClause, null, 
0, 1, variables ) );
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-solr/src/test/java/org/qi4j/index/solr/SolrNamedQueryTest.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-solr/src/test/java/org/qi4j/index/solr/SolrNamedQueryTest.java
 
b/extensions/indexing-solr/src/test/java/org/qi4j/index/solr/SolrNamedQueryTest.java
index d64de1e..302d440 100644
--- 
a/extensions/indexing-solr/src/test/java/org/qi4j/index/solr/SolrNamedQueryTest.java
+++ 
b/extensions/indexing-solr/src/test/java/org/qi4j/index/solr/SolrNamedQueryTest.java
@@ -18,12 +18,12 @@
 package org.qi4j.index.solr;
 
 import java.io.File;
+import java.util.function.Predicate;
 import org.junit.Ignore;
 import org.junit.Rule;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.functional.Specification;
 import org.qi4j.library.fileconfig.FileConfigurationOverride;
 import org.qi4j.library.fileconfig.FileConfigurationService;
 import org.qi4j.test.indexing.AbstractNamedQueryTest;
@@ -59,7 +59,7 @@ public class SolrNamedQueryTest
     }
 
     @Override
-    protected Specification<Composite> createNamedQueryDescriptor( String 
queryName, String queryString )
+    protected Predicate<Composite> createNamedQueryDescriptor( String 
queryName, String queryString )
     {
         return SolrExpressions.search( queryString );
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/SQLEntityFinder.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/SQLEntityFinder.java
 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/SQLEntityFinder.java
index 375b119..fa7982c 100644
--- 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/SQLEntityFinder.java
+++ 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/internal/SQLEntityFinder.java
@@ -25,13 +25,13 @@ import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import javax.sql.DataSource;
 import org.qi4j.api.common.Optional;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.entity.EntityReference;
 import org.qi4j.api.injection.scope.Service;
 import org.qi4j.api.query.grammar.OrderBy;
-import org.qi4j.functional.Specification;
 import org.qi4j.index.sql.support.api.SQLQuerying;
 import org.qi4j.library.sql.common.SQLUtil;
 import org.qi4j.spi.query.EntityFinder;
@@ -58,7 +58,7 @@ public class SQLEntityFinder
     }
 
     @Override
-    public long countEntities( Class<?> resultType, @Optional 
Specification<Composite> whereClause, Map<String, Object> variables )
+    public long countEntities( Class<?> resultType, @Optional 
Predicate<Composite> whereClause, Map<String, Object> variables )
         throws EntityFinderException
     {
         final List<Object> values = new ArrayList<>();
@@ -93,7 +93,7 @@ public class SQLEntityFinder
 
     @Override
     public Iterable<EntityReference> findEntities( Class<?> resultType,
-                                                   @Optional 
Specification<Composite> whereClause,
+                                                   @Optional 
Predicate<Composite> whereClause,
                                                    @Optional OrderBy[] 
orderBySegments,
                                                    @Optional final Integer 
firstResult,
                                                    @Optional final Integer 
maxResults,
@@ -161,7 +161,7 @@ public class SQLEntityFinder
 
     @Override
     public EntityReference findEntity( Class<?> resultType,
-                                       @Optional Specification<Composite> 
whereClause,
+                                       @Optional Predicate<Composite> 
whereClause,
                                        Map<String, Object> variables )
         throws EntityFinderException
     {

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/SQLQuerying.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/SQLQuerying.java
 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/SQLQuerying.java
index de9b61c..d7db4d7 100644
--- 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/SQLQuerying.java
+++ 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/api/SQLQuerying.java
@@ -20,10 +20,10 @@ package org.qi4j.index.sql.support.api;
 import java.sql.PreparedStatement;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.qi4j.api.common.Optional;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.query.grammar.OrderBy;
-import org.qi4j.functional.Specification;
 import org.qi4j.spi.query.EntityFinderException;
 
 /**
@@ -53,7 +53,7 @@ public interface SQLQuerying
      */
     public String constructQuery( //
         Class<?> resultType, //
-        @Optional Specification<Composite> whereClause, //
+        @Optional Predicate<Composite> whereClause, //
         @Optional OrderBy[] orderBySegments, //
         @Optional Integer firstResult, //
         @Optional Integer maxResults, //

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/postgresql/PostgreSQLQuerying.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/postgresql/PostgreSQLQuerying.java
 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/postgresql/PostgreSQLQuerying.java
index 9f8733f..65dfe7f 100644
--- 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/postgresql/PostgreSQLQuerying.java
+++ 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/postgresql/PostgreSQLQuerying.java
@@ -20,9 +20,9 @@ package org.qi4j.index.sql.support.postgresql;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.qi4j.api.composite.Composite;
 import org.qi4j.api.query.grammar.OrderBy;
-import org.qi4j.functional.Specification;
 import org.qi4j.index.sql.support.skeletons.AbstractSQLQuerying;
 import org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder;
 import org.sql.generation.api.grammar.query.QueryExpression;
@@ -36,7 +36,7 @@ public class PostgreSQLQuerying
     protected QueryExpression finalizeQuery(
             SQLVendor sqlVendor, QuerySpecificationBuilder specBuilder,
             Class<?> resultType,
-            Specification<Composite> whereClause,
+            Predicate<Composite> whereClause,
             OrderBy[] orderBySegments,
             Integer firstResult,
             Integer maxResults,

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLIndexing.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLIndexing.java
 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLIndexing.java
index 5f3457a..aab952d 100644
--- 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLIndexing.java
+++ 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLIndexing.java
@@ -31,6 +31,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Predicate;
 import javax.sql.DataSource;
 import org.qi4j.api.Qi4j;
 import org.qi4j.api.association.AssociationDescriptor;
@@ -47,9 +48,7 @@ import org.qi4j.api.service.ServiceDescriptor;
 import org.qi4j.api.structure.Application;
 import org.qi4j.api.value.ValueComposite;
 import org.qi4j.api.value.ValueDescriptor;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.Iterables;
-import org.qi4j.functional.Specification;
 import org.qi4j.index.sql.support.api.SQLIndexing;
 import org.qi4j.index.sql.support.common.DBNames;
 import org.qi4j.index.sql.support.common.QNameInfo;
@@ -198,10 +197,10 @@ public abstract class AbstractSQLIndexing
             Map<Long, EntityState> statesByPK = new HashMap<>();
             Map<Long, Integer> qNamePKs = new HashMap<>();
 
-            Iterable<EntityState> relatedStates = Iterables.filter( new 
Specification<EntityState>()
+            Iterable<EntityState> relatedStates = Iterables.filter( new 
Predicate<EntityState>()
             {
                 @Override
-                public boolean satisfiedBy( EntityState item )
+                public boolean test( EntityState item )
                 {
                     return item.entityDescriptor().queryable();
                 }
@@ -928,7 +927,7 @@ public abstract class AbstractSQLIndexing
         throws SQLException
     {
         ValueDescriptor vDesc = this._qi4SPI.valueDescriptorFor( 
(ValueComposite) property );
-        StateHolder state = Qi4j.FUNCTION_COMPOSITE_INSTANCE_OF.map( 
(ValueComposite) property ).state();
+        StateHolder state = Qi4j.FUNCTION_COMPOSITE_INSTANCE_OF.apply( 
(ValueComposite) property ).state();
         Integer originalPropertyPK = propertyPK;
         ++propertyPK;
         for( PropertyDescriptor pDesc : vDesc.state().properties() )

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLQuerying.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLQuerying.java
 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLQuerying.java
index 79ad2e2..70ab854 100644
--- 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLQuerying.java
+++ 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLQuerying.java
@@ -28,6 +28,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.Stack;
+import java.util.function.Predicate;
 import org.qi4j.api.Qi4j;
 import org.qi4j.api.common.QualifiedName;
 import org.qi4j.api.composite.Composite;
@@ -65,7 +66,6 @@ import org.qi4j.api.service.ServiceDescriptor;
 import org.qi4j.api.structure.Module;
 import org.qi4j.api.value.ValueComposite;
 import org.qi4j.functional.Iterables;
-import org.qi4j.functional.Specification;
 import org.qi4j.index.sql.support.api.SQLQuerying;
 import org.qi4j.index.sql.support.common.DBNames;
 import org.qi4j.index.sql.support.common.QNameInfo;
@@ -196,7 +196,7 @@ public abstract class AbstractSQLQuerying
     {
         public QueryBuilder processBooleanExpression(
             AbstractSQLQuerying thisObject,
-            Specification<Composite> expression,
+            Predicate<Composite> expression,
             Boolean negationActive,
             SQLVendor vendor,
             org.sql.generation.api.grammar.booleans.BooleanExpression 
entityTypeCondition,
@@ -206,11 +206,11 @@ public abstract class AbstractSQLQuerying
         );
     }
 
-    private static final Map<Class<? extends Specification>, 
SQLBooleanCreator> SQL_OPERATORS;
+    private static final Map<Class<? extends Predicate>, SQLBooleanCreator> 
SQL_OPERATORS;
 
-    private static final Map<Class<? extends Specification>, JoinType> 
JOIN_STYLES;
+    private static final Map<Class<? extends Predicate>, JoinType> JOIN_STYLES;
 
-    private static final Map<Class<? extends Specification>, JoinType> 
NEGATED_JOIN_STYLES;
+    private static final Map<Class<? extends Predicate>, JoinType> 
NEGATED_JOIN_STYLES;
 
     private static final Map<Class<?>, BooleanExpressionProcessor> 
EXPRESSION_PROCESSORS;
 
@@ -350,14 +350,14 @@ public abstract class AbstractSQLQuerying
             @Override
             public QueryBuilder processBooleanExpression(
                 AbstractSQLQuerying thisObject,
-                Specification<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
+                Predicate<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
                 BooleanExpression entityTypeCondition, Map<String, Object> 
variables,
                 List<Object> values,
                 List<Integer> valueSQLTypes )
             {
                 QueryBuilder result = null;
                 AndSpecification conjunction = (AndSpecification) expression;
-                for( Specification<Composite> entitySpecification : 
conjunction.operands() )
+                for( Predicate<Composite> entitySpecification : 
conjunction.operands() )
                 {
                     if( result == null )
                     {
@@ -382,14 +382,14 @@ public abstract class AbstractSQLQuerying
             @Override
             public QueryBuilder processBooleanExpression(
                 AbstractSQLQuerying thisObject,
-                Specification<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
+                Predicate<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
                 BooleanExpression entityTypeCondition, Map<String, Object> 
variables,
                 List<Object> values,
                 List<Integer> valueSQLTypes )
             {
                 QueryBuilder result = null;
                 OrSpecification conjunction = (OrSpecification) expression;
-                for( Specification<Composite> entitySpecification : 
conjunction.operands() )
+                for( Predicate<Composite> entitySpecification : 
conjunction.operands() )
                 {
                     if( result == null )
                     {
@@ -416,7 +416,7 @@ public abstract class AbstractSQLQuerying
             @Override
             public QueryBuilder processBooleanExpression(
                 AbstractSQLQuerying thisObject,
-                Specification<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
+                Predicate<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
                 BooleanExpression entityTypeCondition, Map<String, Object> 
variables,
                 List<Object> values,
                 List<Integer> valueSQLTypes )
@@ -431,7 +431,7 @@ public abstract class AbstractSQLQuerying
             @Override
             public QueryBuilder processBooleanExpression(
                 AbstractSQLQuerying thisObject,
-                Specification<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
+                Predicate<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
                 BooleanExpression entityTypeCondition, Map<String, Object> 
variables,
                 List<Object> values,
                 List<Integer> valueSQLTypes )
@@ -446,7 +446,7 @@ public abstract class AbstractSQLQuerying
             @Override
             public QueryBuilder processBooleanExpression(
                 AbstractSQLQuerying thisObject,
-                Specification<Composite> expression, Boolean negationActive,
+                Predicate<Composite> expression, Boolean negationActive,
                 SQLVendor vendor,
                 BooleanExpression entityTypeCondition, Map<String, Object> 
variables,
                 List<Object> values,
@@ -463,7 +463,7 @@ public abstract class AbstractSQLQuerying
             @Override
             public QueryBuilder processBooleanExpression(
                 AbstractSQLQuerying thisObject,
-                Specification<Composite> expression, Boolean negationActive,
+                Predicate<Composite> expression, Boolean negationActive,
                 SQLVendor vendor,
                 BooleanExpression entityTypeCondition, Map<String, Object> 
variables,
                 List<Object> values,
@@ -479,7 +479,7 @@ public abstract class AbstractSQLQuerying
             @Override
             public QueryBuilder processBooleanExpression(
                 AbstractSQLQuerying thisObject,
-                Specification<Composite> expression, Boolean negationActive,
+                Predicate<Composite> expression, Boolean negationActive,
                 SQLVendor vendor,
                 BooleanExpression entityTypeCondition, Map<String, Object> 
variables,
                 List<Object> values,
@@ -495,7 +495,7 @@ public abstract class AbstractSQLQuerying
             @Override
             public QueryBuilder processBooleanExpression(
                 AbstractSQLQuerying thisObject,
-                Specification<Composite> expression, Boolean negationActive,
+                Predicate<Composite> expression, Boolean negationActive,
                 SQLVendor vendor,
                 BooleanExpression entityTypeCondition, Map<String, Object> 
variables,
                 List<Object> values,
@@ -510,7 +510,7 @@ public abstract class AbstractSQLQuerying
         {
             @Override
             public QueryBuilder processBooleanExpression( AbstractSQLQuerying 
thisObject,
-                                                          
Specification<Composite> expression, Boolean negationActive,
+                                                          Predicate<Composite> 
expression, Boolean negationActive,
                                                           SQLVendor vendor,
                                                           BooleanExpression 
entityTypeCondition, Map<String, Object> variables,
                                                           List<Object> values,
@@ -526,7 +526,7 @@ public abstract class AbstractSQLQuerying
             @Override
             public QueryBuilder processBooleanExpression(
                 AbstractSQLQuerying thisObject,
-                Specification<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
+                Predicate<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
                 BooleanExpression entityTypeCondition, Map<String, Object> 
variables,
                 List<Object> values,
                 List<Integer> valueSQLTypes )
@@ -541,7 +541,7 @@ public abstract class AbstractSQLQuerying
             @Override
             public QueryBuilder processBooleanExpression(
                 AbstractSQLQuerying thisObject,
-                Specification<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
+                Predicate<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
                 BooleanExpression entityTypeCondition, Map<String, Object> 
variables,
                 List<Object> values,
                 List<Integer> valueSQLTypes )
@@ -556,7 +556,7 @@ public abstract class AbstractSQLQuerying
             @Override
             public QueryBuilder processBooleanExpression(
                 AbstractSQLQuerying thisObject,
-                Specification<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
+                Predicate<Composite> expression, Boolean negationActive, 
SQLVendor vendor,
                 BooleanExpression entityTypeCondition, Map<String, Object> 
variables,
                 List<Object> values,
                 List<Integer> valueSQLTypes )
@@ -744,7 +744,7 @@ public abstract class AbstractSQLQuerying
 
     @Override
     public String constructQuery( Class<?> resultType, //
-                                  Specification<Composite> whereClause, //
+                                  Predicate<Composite> whereClause, //
                                   OrderBy[] orderBySegments, //
                                   Integer firstResult, //
                                   Integer maxResults, //
@@ -813,7 +813,7 @@ public abstract class AbstractSQLQuerying
     protected abstract QueryExpression finalizeQuery(
         SQLVendor sqlVendor, QuerySpecificationBuilder specBuilder,
         Class<?> resultType,
-        Specification<Composite> whereClause,
+        Predicate<Composite> whereClause,
         OrderBy[] orderBySegments,
         Integer firstResult,
         Integer maxResults,
@@ -823,7 +823,7 @@ public abstract class AbstractSQLQuerying
         Boolean countOnly );
 
     protected QueryBuilder processBooleanExpression(
-        Specification<Composite> expression,
+        Predicate<Composite> expression,
         Boolean negationActive,
         SQLVendor vendor,
         org.sql.generation.api.grammar.booleans.BooleanExpression 
entityTypeCondition,
@@ -1248,7 +1248,7 @@ public abstract class AbstractSQLQuerying
     }
 
     protected QueryBuilder singleQuery(
-        Specification<Composite> predicate, //
+        Predicate<Composite> predicate, //
         PropertyFunction<?> propRef, //
         TraversedAssoOrManyAssoRef assoRef, //
         Boolean includeLastAssoPathTable, //
@@ -1265,7 +1265,7 @@ public abstract class AbstractSQLQuerying
     }
 
     protected QuerySpecification constructQueryForPredicate(
-        Specification<Composite> predicate, //
+        Predicate<Composite> predicate, //
         PropertyFunction<?> propRef, //
         TraversedAssoOrManyAssoRef assoRef, //
         Boolean includeLastAssoPathTable, //
@@ -1340,29 +1340,29 @@ public abstract class AbstractSQLQuerying
         );
     }
 
-    protected SQLBooleanCreator getOperator( Specification<Composite> 
predicate )
+    protected SQLBooleanCreator getOperator( Predicate<Composite> predicate )
     {
         return this.findFromLookupTables( SQL_OPERATORS, null, predicate, 
false );
     }
 
     protected JoinType
-        getTableJoinStyle( Specification<Composite> predicate, Boolean 
negationActive )
+        getTableJoinStyle( Predicate<Composite> predicate, Boolean 
negationActive )
     {
         return this.findFromLookupTables( JOIN_STYLES, NEGATED_JOIN_STYLES, 
predicate,
                                           negationActive );
     }
 
     protected <ReturnType> ReturnType findFromLookupTables(
-        Map<Class<? extends Specification>, ReturnType> normal,
-        Map<Class<? extends Specification>, ReturnType> negated,
-        Specification<Composite> predicate, Boolean negationActive )
+        Map<Class<? extends Predicate>, ReturnType> normal,
+        Map<Class<? extends Predicate>, ReturnType> negated,
+        Predicate<Composite> predicate, Boolean negationActive )
     {
-        Class<? extends Specification> predicateClass = predicate.getClass();
+        Class<? extends Predicate> predicateClass = predicate.getClass();
         ReturnType result = null;
-        Set<Map.Entry<Class<? extends Specification>, ReturnType>> entries = 
negationActive
+        Set<Map.Entry<Class<? extends Predicate>, ReturnType>> entries = 
negationActive
                                                                              ? 
negated.entrySet()
                                                                              : 
normal.entrySet();
-        for( Map.Entry<Class<? extends Specification>, ReturnType> entry : 
entries )
+        for( Map.Entry<Class<? extends Predicate>, ReturnType> entry : entries 
)
         {
             if( entry.getKey().isAssignableFrom( predicateClass ) )
             {
@@ -1644,7 +1644,7 @@ public abstract class AbstractSQLQuerying
     protected Integer modifyFromClauseAndWhereClauseToGetValue(
         final QualifiedName qName,
         Object value,
-        final Specification<Composite> predicate, final Boolean negationActive,
+        final Predicate<Composite> predicate, final Boolean negationActive,
         final Integer currentTableIndex,
         final ModifiableInt maxTableIndex, final String columnName,
         final String collectionPath,
@@ -1747,7 +1747,7 @@ public abstract class AbstractSQLQuerying
             // Visit all properties with recursion and make joins as necessary
             // @formatter:off
             for( Property<?> property
-                 : Qi4j.FUNCTION_COMPOSITE_INSTANCE_OF.map( (ValueComposite) 
value ).state().properties() )
+                 : Qi4j.FUNCTION_COMPOSITE_INSTANCE_OF.apply( (ValueComposite) 
value ).state().properties() )
             {
                 Boolean qNameJoinDone = false;
                 Integer sourceIndex = maxTableIndex.getInt();

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLStartup.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLStartup.java
 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLStartup.java
index ddb2041..8a62b59 100644
--- 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLStartup.java
+++ 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/AbstractSQLStartup.java
@@ -37,6 +37,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.function.Function;
+import java.util.function.Predicate;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.sql.DataSource;
@@ -58,10 +60,8 @@ import org.qi4j.api.structure.ApplicationDescriptor;
 import org.qi4j.api.structure.LayerDescriptor;
 import org.qi4j.api.structure.ModuleDescriptor;
 import org.qi4j.api.value.ValueDescriptor;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.HierarchicalVisitorAdapter;
 import org.qi4j.functional.Iterables;
-import org.qi4j.functional.Specification;
 import org.qi4j.index.reindexer.Reindexer;
 import org.qi4j.index.sql.support.api.SQLAppStartup;
 import org.qi4j.index.sql.support.api.SQLTypeInfo;
@@ -1520,10 +1520,10 @@ public abstract class AbstractSQLStartup
                             // TODO this doesn't understand, say, Map<String, 
String>, or indeed,
                             // any
                             // other Serializable
-                            if( Iterables.matchesAny( new 
Specification<Class<?>>()
+                            if( Iterables.matchesAny( new Predicate<Class<?>>()
                             {
                                 @Override
-                                public boolean satisfiedBy( Class<?> item )
+                                public boolean test( Class<?> item )
                                 {
                                     return vTypeClass.isAssignableFrom( item );
                                 }
@@ -1690,7 +1690,7 @@ public abstract class AbstractSQLStartup
                + Iterables.toString( descriptor.types(), new 
Function<Class<?>, String>()
         {
             @Override
-            public String map( Class<?> item )
+            public String apply( Class<?> item )
             {
                 return item.getName();
             }
@@ -1739,7 +1739,7 @@ public abstract class AbstractSQLStartup
                         new Function<Class<?>, String>()
                         {
                             @Override
-                            public String map( Class<?> from )
+                            public String apply( Class<?> from )
                             {
                                 return from.getName();
                             }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
----------------------------------------------------------------------
diff --git 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
index 2dad7f1..82fe6de 100644
--- 
a/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
+++ 
b/extensions/indexing-sql/src/main/java/org/qi4j/index/sql/support/skeletons/SQLCompatEntityStateWrapper.java
@@ -17,6 +17,8 @@
  */
 package org.qi4j.index.sql.support.skeletons;
 
+import java.util.function.Function;
+import java.util.function.Predicate;
 import org.qi4j.api.association.AssociationDescriptor;
 import org.qi4j.api.association.AssociationStateDescriptor;
 import org.qi4j.api.common.QualifiedName;
@@ -27,9 +29,7 @@ import org.qi4j.api.property.PropertyDescriptor;
 import org.qi4j.api.type.CollectionType;
 import org.qi4j.api.type.ValueCompositeType;
 import org.qi4j.api.type.ValueType;
-import org.qi4j.functional.Function;
 import org.qi4j.functional.Iterables;
-import org.qi4j.functional.Specification;
 import org.qi4j.spi.entity.EntityState;
 import org.qi4j.spi.entity.EntityStatus;
 import org.qi4j.spi.entity.ManyAssociationState;
@@ -52,16 +52,16 @@ import org.slf4j.LoggerFactory;
     {
 
         @Override
-        public EntityState map( EntityState from )
+        public EntityState apply( EntityState from )
         {
             return new SQLCompatEntityStateWrapper( from );
         }
     };
-    private static final Specification<PropertyDescriptor> PROPERTY_SPEC = new 
Specification<PropertyDescriptor>()
+    private static final Predicate<PropertyDescriptor> PROPERTY_SPEC = new 
Predicate<PropertyDescriptor>()
     {
 
         @Override
-        public boolean satisfiedBy( PropertyDescriptor propertyDescriptor )
+        public boolean test( PropertyDescriptor propertyDescriptor )
         {
             boolean supported = isSupported( propertyDescriptor.valueType() );
             if( !supported )

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueDeserializer.java
----------------------------------------------------------------------
diff --git 
a/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueDeserializer.java
 
b/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueDeserializer.java
index 5c6774b..f9c1e7f 100644
--- 
a/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueDeserializer.java
+++ 
b/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueDeserializer.java
@@ -25,6 +25,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
 import java.io.InputStream;
 import java.util.Collection;
 import java.util.Map;
+import java.util.function.Function;
 import org.qi4j.api.injection.scope.Service;
 import org.qi4j.api.injection.scope.Structure;
 import org.qi4j.api.service.ServiceReference;
@@ -33,7 +34,6 @@ import org.qi4j.api.structure.Module;
 import org.qi4j.api.type.ValueType;
 import org.qi4j.api.value.ValueDeserializer;
 import org.qi4j.api.value.ValueSerializationException;
-import org.qi4j.functional.Function;
 import org.qi4j.spi.value.ValueDeserializerAdapter;
 
 /**
@@ -125,7 +125,7 @@ public class JacksonValueDeserializer
         }
         while( input.nextToken() != JsonToken.END_ARRAY )
         {
-            T element = deserializer.map( input );
+            T element = deserializer.apply( input );
             collection.add( element );
         }
         return collection;
@@ -173,11 +173,11 @@ public class JacksonValueDeserializer
                 input.nextToken();
                 if( "key".equals( objectKey ) )
                 {
-                    key = keyDeserializer.map( input );
+                    key = keyDeserializer.apply( input );
                 }
                 else if( "value".equals( objectKey ) )
                 {
-                    value = valueDeserializer.map( input );
+                    value = valueDeserializer.apply( input );
                 }
                 else
                 {
@@ -282,7 +282,7 @@ public class JacksonValueDeserializer
         {
             return null;
         }
-        T value = valueDeserializer.map( valueNode );
+        T value = valueDeserializer.apply( valueNode );
         return value;
     }
 
@@ -303,7 +303,7 @@ public class JacksonValueDeserializer
         ArrayNode array = (ArrayNode) inputNode;
         for( JsonNode item : array )
         {
-            T value = deserializer.map( item );
+            T value = deserializer.apply( item );
             collection.add( value );
         }
     }
@@ -332,8 +332,8 @@ public class JacksonValueDeserializer
             }
             JsonNode keyNode = item.get( "key" );
             JsonNode valueNode = item.get( "value" );
-            K key = keyDeserializer.map( keyNode );
-            V value = valueDeserializer.map( valueNode );
+            K key = keyDeserializer.apply( keyNode );
+            V value = valueDeserializer.apply( valueNode );
             if( key != null )
             {
                 map.put( key, value );

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueSerializationAssembler.java
----------------------------------------------------------------------
diff --git 
a/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueSerializationAssembler.java
 
b/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueSerializationAssembler.java
index a0ee430..ff9b2d9 100644
--- 
a/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueSerializationAssembler.java
+++ 
b/extensions/valueserialization-jackson/src/main/java/org/qi4j/valueserialization/jackson/JacksonValueSerializationAssembler.java
@@ -15,13 +15,13 @@
  */
 package org.qi4j.valueserialization.jackson;
 
+import java.util.function.Function;
 import org.qi4j.api.structure.Application;
 import org.qi4j.api.structure.Module;
 import org.qi4j.api.value.ValueSerialization;
 import org.qi4j.bootstrap.Assemblers;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.functional.Function;
 
 /**
  * Assemble a ValueSerialization Service producing and consuming JSON 
documents.

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/valueserialization-orgjson/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerializationAssembler.java
----------------------------------------------------------------------
diff --git 
a/extensions/valueserialization-orgjson/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerializationAssembler.java
 
b/extensions/valueserialization-orgjson/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerializationAssembler.java
index 82ed416..e8f951e 100644
--- 
a/extensions/valueserialization-orgjson/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerializationAssembler.java
+++ 
b/extensions/valueserialization-orgjson/src/main/java/org/qi4j/valueserialization/orgjson/OrgJsonValueSerializationAssembler.java
@@ -15,13 +15,13 @@
  */
 package org.qi4j.valueserialization.orgjson;
 
+import java.util.function.Function;
 import org.qi4j.api.structure.Application;
 import org.qi4j.api.structure.Module;
 import org.qi4j.api.value.ValueSerialization;
 import org.qi4j.bootstrap.Assemblers;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.functional.Function;
 
 /**
  * Assemble a ValueSerialization Service producing and consuming JSON 
documents.

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueDeserializer.java
----------------------------------------------------------------------
diff --git 
a/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueDeserializer.java
 
b/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueDeserializer.java
index 9bdc34a..cecb206 100644
--- 
a/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueDeserializer.java
+++ 
b/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueDeserializer.java
@@ -7,6 +7,7 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Collection;
 import java.util.Map;
+import java.util.function.Function;
 import javax.xml.stream.XMLEventReader;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
@@ -23,7 +24,6 @@ import org.qi4j.api.structure.Application;
 import org.qi4j.api.structure.Module;
 import org.qi4j.api.value.ValueDeserializer;
 import org.qi4j.api.value.ValueSerializationException;
-import org.qi4j.functional.Function;
 import org.qi4j.spi.value.ValueDeserializerAdapter;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -122,7 +122,7 @@ public class StaxValueDeserializer
             {
                 throw new ValueSerializationException( "Expected a <value/> 
but got: " + currentTag );
             }
-            T item = deserializer.map( input );
+            T item = deserializer.apply( input );
             collection.add( item );
         }
         return collection;
@@ -168,10 +168,10 @@ public class StaxValueDeserializer
                 switch( keyOrValue )
                 {
                     case "key":
-                        key = keyDeserializer.map( input );
+                        key = keyDeserializer.apply( input );
                         break;
                     case "value":
-                        value = valueDeserializer.map( input );
+                        value = valueDeserializer.apply( input );
                         break;
                     default:
                         readObjectTree( input );
@@ -350,7 +350,7 @@ public class StaxValueDeserializer
         {
             return null;
         }
-        T value = valueDeserializer.map( valueNode );
+        T value = valueDeserializer.apply( valueNode );
         return value;
     }
 
@@ -372,7 +372,7 @@ public class StaxValueDeserializer
         for( int arrayValuesIndex = 0; arrayValuesIndex < 
arrayValues.getLength(); arrayValuesIndex++ )
         {
             Node arrayValue = arrayValues.item( arrayValuesIndex );
-            T value = deserializer.map( arrayValue.getFirstChild() );
+            T value = deserializer.apply( arrayValue.getFirstChild() );
             collection.add( value );
         }
     }

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueSerializationAssembler.java
----------------------------------------------------------------------
diff --git 
a/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueSerializationAssembler.java
 
b/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueSerializationAssembler.java
index 84c8f21..d99616c 100644
--- 
a/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueSerializationAssembler.java
+++ 
b/extensions/valueserialization-stax/src/main/java/org/qi4j/valueserialization/stax/StaxValueSerializationAssembler.java
@@ -15,13 +15,13 @@
  */
 package org.qi4j.valueserialization.stax;
 
+import java.util.function.Function;
 import org.qi4j.api.structure.Application;
 import org.qi4j.api.structure.Module;
 import org.qi4j.api.value.ValueSerialization;
 import org.qi4j.bootstrap.Assemblers;
 import org.qi4j.bootstrap.AssemblyException;
 import org.qi4j.bootstrap.ModuleAssembly;
-import org.qi4j.functional.Function;
 
 /**
  * Assemble a ValueSerialization Service producing and consuming XML documents.

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/CircuitBreaker.java
----------------------------------------------------------------------
diff --git 
a/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/CircuitBreaker.java
 
b/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/CircuitBreaker.java
index eacf53f..2e53b46 100644
--- 
a/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/CircuitBreaker.java
+++ 
b/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/CircuitBreaker.java
@@ -22,7 +22,7 @@ import java.beans.PropertyVetoException;
 import java.beans.VetoableChangeListener;
 import java.beans.VetoableChangeSupport;
 import java.util.Date;
-import org.qi4j.functional.Specification;
+import java.util.function.Predicate;
 import org.qi4j.functional.Specifications;
 
 import static org.qi4j.functional.Specifications.not;
@@ -40,7 +40,7 @@ public class CircuitBreaker
 
     private int threshold;
     private long timeout;
-    private Specification<Throwable> allowedThrowables;
+    private Predicate<Throwable> allowedThrowables;
 
     private int countDown;
     private long trippedOn = -1;
@@ -53,7 +53,7 @@ public class CircuitBreaker
     PropertyChangeSupport pcs = new PropertyChangeSupport( this );
     VetoableChangeSupport vcs = new VetoableChangeSupport( this );
 
-    public CircuitBreaker( int threshold, long timeout, 
Specification<Throwable> allowedThrowables )
+    public CircuitBreaker( int threshold, long timeout, Predicate<Throwable> 
allowedThrowables )
     {
         this.threshold = threshold;
         this.countDown = threshold;
@@ -186,7 +186,7 @@ public class CircuitBreaker
     {
         if( status == Status.on )
         {
-            if( allowedThrowables.satisfiedBy( throwable ) )
+            if( allowedThrowables.test( throwable ) )
             {
                 // Allowed throwable, so counts as success
                 success();

http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/9479a63e/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/CircuitBreakers.java
----------------------------------------------------------------------
diff --git 
a/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/CircuitBreakers.java
 
b/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/CircuitBreakers.java
index 3919907..6dbe7c4 100644
--- 
a/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/CircuitBreakers.java
+++ 
b/libraries/circuitbreaker/src/main/java/org/qi4j/library/circuitbreaker/CircuitBreakers.java
@@ -15,7 +15,7 @@
  */
 package org.qi4j.library.circuitbreaker;
 
-import org.qi4j.functional.Specification;
+import java.util.function.Predicate;
 import org.qi4j.io.Output;
 import org.qi4j.io.Receiver;
 import org.qi4j.io.Sender;
@@ -73,12 +73,12 @@ public class CircuitBreakers
     * @param throwables The Throwable types that are allowed.
     * @return A Specification that specifies the allowed Throwables.
     */
-   public static Specification<Throwable> in( final Class<? extends 
Throwable>... throwables)
+   public static Predicate<Throwable> in( final Class<? extends Throwable>... 
throwables)
    {
-      return new Specification<Throwable>()
+      return new Predicate<Throwable>()
       {
          @Override
-         public boolean satisfiedBy( Throwable item )
+         public boolean test( Throwable item )
          {
             Class<? extends Throwable> throwableClass = item.getClass();
             for (Class<? extends Throwable> throwable : throwables)
@@ -91,14 +91,14 @@ public class CircuitBreakers
       };
    }
 
-   public static Specification<Throwable> rootCause( final 
Specification<Throwable> specification)
+   public static Predicate<Throwable> rootCause( final Predicate<Throwable> 
specification)
    {
-      return new Specification<Throwable>()
+      return new Predicate<Throwable>()
       {
          @Override
-         public boolean satisfiedBy( Throwable item )
+         public boolean test( Throwable item )
          {
-            return specification.satisfiedBy( unwrap(item) );
+            return specification.test( unwrap(item) );
          }
 
          private Throwable unwrap(Throwable item)

Reply via email to