http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/legacy/Specifications.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/legacy/Specifications.java 
b/core/runtime/src/main/java/org/apache/zest/runtime/legacy/Specifications.java
new file mode 100644
index 0000000..48a5a67
--- /dev/null
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/legacy/Specifications.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2010, Rickard Öberg. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at 
http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.zest.runtime.legacy;
+
+import java.util.Arrays;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+/**
+ * Common generic specification expressions
+ */
+public class Specifications
+{
+    public static <FROM, TO> Predicate<FROM> translate( final Function<FROM, 
TO> function,
+                                                        final Predicate<? 
super TO> specification
+    )
+    {
+        return item -> specification.test( function.apply( item ) );
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectModel.java 
b/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectModel.java
index e4df4e5..8764fba 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectModel.java
@@ -14,6 +14,7 @@
 
 package org.apache.zest.runtime.object;
 
+import java.util.stream.Stream;
 import org.apache.zest.api.common.ConstructionException;
 import org.apache.zest.api.common.MetaInfo;
 import org.apache.zest.api.common.Visibility;
@@ -27,8 +28,6 @@ import org.apache.zest.runtime.injection.InjectedFieldsModel;
 import org.apache.zest.runtime.injection.InjectedMethodsModel;
 import org.apache.zest.runtime.injection.InjectionContext;
 
-import static org.apache.zest.functional.Iterables.iterable;
-
 /**
  * JAVADOC
  */
@@ -58,10 +57,9 @@ public final class ObjectModel
 
     @Override
     @SuppressWarnings( "unchecked" )
-    public Iterable<Class<?>> types()
+    public Stream<Class<?>> types()
     {
-        Iterable<? extends Class<?>> iterable = iterable( objectType );
-        return (Iterable<Class<?>>) iterable;
+        return Stream.of( objectType );
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectsModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectsModel.java 
b/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectsModel.java
index 9f05074..e610807 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectsModel.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectsModel.java
@@ -15,6 +15,7 @@
 package org.apache.zest.runtime.object;
 
 import java.util.List;
+import java.util.stream.Stream;
 import org.apache.zest.functional.HierarchicalVisitor;
 import org.apache.zest.functional.VisitableHierarchy;
 
@@ -48,8 +49,8 @@ public class ObjectsModel
         return visitor.visitLeave( this );
     }
 
-    public Iterable<ObjectModel> models()
+    public Stream<ObjectModel> stream()
     {
-        return objectModels;
+        return objectModels.stream();
     }
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertiesModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertiesModel.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertiesModel.java
index 202fc89..2f47576 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertiesModel.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertiesModel.java
@@ -21,6 +21,7 @@ import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Member;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.stream.Stream;
 import org.apache.zest.api.common.QualifiedName;
 import org.apache.zest.functional.HierarchicalVisitor;
 import org.apache.zest.functional.VisitableHierarchy;
@@ -60,9 +61,9 @@ public class PropertiesModel
         return visitor.visitLeave( this );
     }
 
-    public Iterable<PropertyModel> properties()
+    public Stream<PropertyModel> properties()
     {
-        return mapAccessiblePropertyModel.values();
+        return mapAccessiblePropertyModel.values().stream();
     }
 
     public PropertyModel getProperty( AccessibleObject accessor )

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyModel.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyModel.java
index 9f37373..571bdb1 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyModel.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyModel.java
@@ -21,6 +21,7 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Type;
 import java.lang.reflect.TypeVariable;
 import java.util.List;
+import java.util.stream.Stream;
 import org.apache.zest.api.common.MetaInfo;
 import org.apache.zest.api.common.QualifiedName;
 import org.apache.zest.api.constraint.ConstraintViolation;
@@ -44,8 +45,8 @@ import org.apache.zest.runtime.model.Binder;
 import org.apache.zest.runtime.model.Resolution;
 import org.apache.zest.runtime.types.ValueTypeFactory;
 
-import static org.apache.zest.functional.Iterables.empty;
-import static org.apache.zest.functional.Iterables.first;
+//import static org.apache.zest.functional.Iterables.empty;
+//import static org.apache.zest.functional.Iterables.first;
 
 /**
  * Model for a Property.
@@ -172,7 +173,7 @@ public class PropertyModel
         {
             if( valueType instanceof ValueCompositeType )
             {
-                return module.newValue( (Class<?>) first( valueType().types() 
) );
+                return module.newValue( 
valueType().types().findFirst().orElse( null ) );
             }
             else
             {
@@ -189,7 +190,7 @@ public class PropertyModel
     {
         ValueTypeFactory factory = ValueTypeFactory.instance();
         Class<?> declaringClass = ( (Member) accessor() ).getDeclaringClass();
-        Class<?> mainType = first( resolution.model().types() );
+        Class<?> mainType = resolution.model().types().findFirst().orElse( 
null );
         Serialization.Variant variant = findVariant();
         valueType = factory.newValueType( type(), declaringClass, mainType, 
resolution.layer(), resolution.module(), variant );
         builderInfo = new BuilderPropertyInfo();
@@ -230,8 +231,8 @@ public class PropertyModel
             List<ConstraintViolation> violations = 
constraints.checkConstraints( value );
             if( !violations.isEmpty() )
             {
-                Iterable<Class<?>> empty = empty();
-                throw new ConstraintViolationException( "<new instance>", 
empty, ( (Member) accessor ), violations );
+                Stream<Class<?>> empty = Stream.empty();
+                throw new ConstraintViolationException( "", empty, (Member) 
accessor, violations );
             }
         }
     }
@@ -300,8 +301,8 @@ public class PropertyModel
                 List<ConstraintViolation> violations = 
constraints.checkConstraints( value );
                 if( !violations.isEmpty() )
                 {
-                    Iterable<Class<?>> empty = empty();
-                    throw new ConstraintViolationException( "<new instance>", 
empty, ( (Member) accessor ), violations );
+                    Stream<Class<?>> empty = Stream.empty();
+                    throw new ConstraintViolationException( "", empty, 
(Member) accessor, violations );
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java
index 7166229..bab0be9 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java
@@ -25,7 +25,6 @@ import org.apache.zest.api.property.Property;
 import org.apache.zest.api.query.grammar.OrderBy;
 import org.apache.zest.api.util.Classes;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specifications;
 import org.apache.zest.spi.query.QuerySource;
 
 /**
@@ -154,7 +153,7 @@ public class IterableQuerySource
         }
         else
         {
-            return Iterables.toList( Iterables.filter( Specifications.and( 
Classes.instanceOf( resultType ), whereClause ), iterable ) );
+            return Iterables.toList( Iterables.filter( Classes.instanceOf( 
resultType ).and( whereClause ), iterable ) );
         }
     }
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceModel.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceModel.java
index 669010d..da2d28c 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceModel.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceModel.java
@@ -21,6 +21,7 @@ package org.apache.zest.runtime.service;
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Proxy;
+import java.util.stream.Stream;
 import org.apache.zest.api.common.MetaInfo;
 import org.apache.zest.api.common.Visibility;
 import org.apache.zest.api.service.ImportedServiceDescriptor;
@@ -32,8 +33,6 @@ import org.apache.zest.functional.VisitableHierarchy;
 import org.apache.zest.runtime.activation.ActivatorsInstance;
 import org.apache.zest.runtime.activation.ActivatorsModel;
 
-import static org.apache.zest.functional.Iterables.iterable;
-
 /**
  * JAVADOC
  */
@@ -78,10 +77,9 @@ public final class ImportedServiceModel
 
     @Override
     @SuppressWarnings( "unchecked" )
-    public Iterable<Class<?>> types()
+    public Stream<Class<?>> types()
     {
-        Iterable<? extends Class<?>> iterable = iterable( type );
-        return (Iterable<Class<?>>) iterable;
+        return Stream.of( type );
     }
 
     @Override
@@ -120,7 +118,7 @@ public final class ImportedServiceModel
         return moduleName;
     }
 
-    @SuppressWarnings( {"raw", "unchecked"} )
+    @SuppressWarnings( { "raw", "unchecked" } )
     public ActivatorsInstance<?> newActivatorsInstance( Module module )
         throws Exception
     {
@@ -144,7 +142,7 @@ public final class ImportedServiceModel
         return visitor.visitLeave( this );
     }
 
-    @SuppressWarnings( {"raw", "unchecked"} )
+    @SuppressWarnings( { "raw", "unchecked" } )
     public <T> ImportedServiceInstance<T> importInstance( Module module )
     {
         ServiceImporter importer = module.newObject( serviceImporter );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java
index 750985f..a44c7f5 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java
@@ -19,6 +19,7 @@
  */
 package org.apache.zest.runtime.service;
 
+import java.util.stream.Stream;
 import org.apache.zest.api.activation.Activation;
 import org.apache.zest.api.activation.ActivationEventListener;
 import org.apache.zest.api.activation.ActivationException;
@@ -61,7 +62,7 @@ public final class ImportedServiceReferenceInstance<T>
     }
 
     @Override
-    public Iterable<Class<?>> types()
+    public Stream<Class<?>> types()
     {
         return serviceModel.types();
     }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java
index 5fa5118..7faf290 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java
@@ -15,13 +15,14 @@
 package org.apache.zest.runtime.service;
 
 import java.util.List;
-import java.util.function.Predicate;
+import java.util.stream.Stream;
 import org.apache.zest.api.activation.Activation;
 import org.apache.zest.api.activation.ActivationEventListener;
 import org.apache.zest.api.activation.ActivationEventListenerRegistration;
 import org.apache.zest.api.activation.ActivationException;
 import org.apache.zest.api.activation.PassivationException;
 import org.apache.zest.api.common.Visibility;
+import org.apache.zest.api.service.ImportedServiceDescriptor;
 import org.apache.zest.api.service.ServiceReference;
 import org.apache.zest.functional.Iterables;
 import org.apache.zest.runtime.activation.ActivationDelegate;
@@ -37,11 +38,11 @@ public class ImportedServicesInstance
     implements Activation, ActivationEventListenerRegistration
 {
     private final ImportedServicesModel servicesModel;
-    private final List<ServiceReference> serviceReferences;
+    private final List<ServiceReference<?>> serviceReferences;
     private final ActivationDelegate activation = new ActivationDelegate( 
this, false );
 
     public ImportedServicesInstance( ImportedServicesModel servicesModel,
-                                     List<ServiceReference> serviceReferences
+                                     List<ServiceReference<?>> 
serviceReferences
     )
     {
         this.servicesModel = servicesModel;
@@ -52,6 +53,11 @@ public class ImportedServicesInstance
         }
     }
 
+    public Stream<ImportedServiceModel> models()
+    {
+        return servicesModel.stream();
+    }
+
     @Override
     public void activate()
         throws ActivationException
@@ -67,18 +73,14 @@ public class ImportedServicesInstance
         activation.passivate();
     }
 
-    public Iterable<ServiceReference> visibleServices( final Visibility 
visibility )
+    public Stream<ServiceReference<?>> visibleServices( final Visibility 
visibility )
     {
-        return Iterables.filter( new Predicate<ServiceReference>()
-        {
-            @Override
-            public boolean test( ServiceReference item )
-            {
-                return ( (ImportedServiceReferenceInstance) item 
).serviceDescriptor()
-                    .visibility()
-                    .ordinal() >= visibility.ordinal();
-            }
-        }, serviceReferences );
+        return serviceReferences.stream()
+            .filter( item ->
+                         ( (ImportedServiceReferenceInstance) item 
).serviceDescriptor()
+                             .visibility()
+                             .ordinal() >= visibility.ordinal()
+            );
     }
 
     @Override
@@ -107,4 +109,9 @@ public class ImportedServicesInstance
     {
         activation.deregisterActivationEventListener( listener );
     }
+
+    public Stream<? extends ImportedServiceDescriptor> stream()
+    {
+        return servicesModel.stream();
+    }
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesModel.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesModel.java
index 5d19cc9..9853830 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesModel.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesModel.java
@@ -16,6 +16,8 @@ package org.apache.zest.runtime.service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Stream;
+import org.apache.zest.api.service.ImportedServiceDescriptor;
 import org.apache.zest.api.service.ServiceReference;
 import org.apache.zest.functional.HierarchicalVisitor;
 import org.apache.zest.functional.VisitableHierarchy;
@@ -36,7 +38,7 @@ public class ImportedServicesModel
 
     public ImportedServicesInstance newInstance( ModuleInstance module )
     {
-        List<ServiceReference> serviceReferences = new 
ArrayList<ServiceReference>();
+        List<ServiceReference<?>> serviceReferences = new ArrayList<>();
         for( ImportedServiceModel serviceModel : importedServiceModels )
         {
             ImportedServiceReferenceInstance serviceReferenceInstance = new 
ImportedServiceReferenceInstance( serviceModel, module );
@@ -62,4 +64,9 @@ public class ImportedServicesModel
         }
         return visitor.visitLeave( this );
     }
+
+    public Stream<ImportedServiceModel> stream()
+    {
+        return importedServiceModels.stream();
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceModel.java 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceModel.java
index 276a8c4..2842ada 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceModel.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceModel.java
@@ -23,7 +23,9 @@ import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Method;
 import java.lang.reflect.ParameterizedType;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.apache.zest.api.common.MetaInfo;
 import org.apache.zest.api.common.Visibility;
 import org.apache.zest.api.configuration.Configuration;
@@ -34,7 +36,6 @@ import org.apache.zest.api.service.ServiceDescriptor;
 import org.apache.zest.api.structure.Module;
 import org.apache.zest.api.util.Classes;
 import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.Specifications;
 import org.apache.zest.runtime.activation.ActivatorsInstance;
 import org.apache.zest.runtime.activation.ActivatorsModel;
 import org.apache.zest.runtime.composite.CompositeMethodsModel;
@@ -47,12 +48,9 @@ import org.apache.zest.runtime.composite.UsesInstance;
 import org.apache.zest.runtime.injection.DependencyModel;
 import org.apache.zest.runtime.injection.InjectionContext;
 import org.apache.zest.runtime.property.PropertyInstance;
-import org.apache.zest.runtime.property.PropertyModel;
 import org.apache.zest.runtime.structure.ModuleInstance;
 
-import static org.apache.zest.functional.Iterables.filter;
-import static org.apache.zest.functional.Specifications.and;
-import static org.apache.zest.functional.Specifications.translate;
+import static org.apache.zest.runtime.legacy.Specifications.translate;
 
 /**
  * JAVADOC
@@ -80,7 +78,7 @@ public final class ServiceModel extends CompositeModel
     @SuppressWarnings( "raw" )
     private final Class configurationType;
 
-    public ServiceModel( Iterable<Class<?>> types,
+    public ServiceModel( List<Class<?>> types,
                          Visibility visibility,
                          MetaInfo metaInfo,
                          ActivatorsModel<?> activatorsModel,
@@ -113,8 +111,9 @@ public final class ServiceModel extends CompositeModel
         return identity;
     }
 
-    @SuppressWarnings( {"raw", "unchecked"} )
-    public ActivatorsInstance<?> newActivatorsInstance( Module module ) throws 
Exception
+    @SuppressWarnings( { "raw", "unchecked" } )
+    public ActivatorsInstance<?> newActivatorsInstance( Module module )
+        throws Exception
     {
         return new ActivatorsInstance( activatorsModel.newInstances( module ) 
);
     }
@@ -145,14 +144,13 @@ public final class ServiceModel extends CompositeModel
         }
         return visitor.visitLeave( this );
     }
-    
+
     public ServiceInstance newInstance( final ModuleInstance module )
     {
         Object[] mixins = mixinsModel.newMixinHolder();
 
         Map<AccessibleObject, Property<?>> properties = new HashMap<>();
-        for( PropertyModel propertyModel : stateModel.properties() )
-        {
+        stateModel.properties().forEach( propertyModel -> {
             Object initialValue = propertyModel.initialValue( module );
             if( propertyModel.accessor().equals( identityMethod ) )
             {
@@ -161,7 +159,7 @@ public final class ServiceModel extends CompositeModel
 
             Property<?> property = new PropertyInstance<>( propertyModel, 
initialValue );
             properties.put( propertyModel.accessor(), property );
-        }
+        } );
 
         TransientStateInstance state = new TransientStateInstance( properties 
);
         ServiceInstance compositeInstance = new ServiceInstance( this, module, 
mixins, state );
@@ -187,16 +185,14 @@ public final class ServiceModel extends CompositeModel
     @SuppressWarnings( { "raw", "unchecked" } )
     public Class calculateConfigurationType()
     {
-        Class injectionClass = null;
-        Iterable<DependencyModel> configurationThisDependencies = filter( and( 
translate( new DependencyModel.InjectionTypeFunction(), Specifications
-            .<Class<?>>in( Configuration.class ) ), new 
DependencyModel.ScopeSpecification( This.class ) ), dependencies() );
-        for( DependencyModel dependencyModel : configurationThisDependencies )
-        {
-            if( dependencyModel.rawInjectionType()
-                    .equals( Configuration.class ) && 
dependencyModel.injectionType() instanceof ParameterizedType )
-            {
-                Class<?> type = Classes.RAW_CLASS
-                    .apply( ( (ParameterizedType) 
dependencyModel.injectionType() ).getActualTypeArguments()[ 0 ] );
+        DependencyModel.ScopeSpecification thisSpec = new 
DependencyModel.ScopeSpecification( This.class );
+        Predicate<DependencyModel> configurationCheck =
+            translate( new DependencyModel.InjectionTypeFunction(), clazz -> 
clazz.equals( Configuration.class ) );
+        return dependencies().filter( thisSpec.and( configurationCheck ) )
+            .filter( dependencyModel -> 
dependencyModel.rawInjectionType().equals( Configuration.class ) )
+            .filter( dependencyModel -> dependencyModel.injectionType() 
instanceof ParameterizedType )
+            .map( dependencyModel -> Classes.RAW_CLASS.apply( ( 
(ParameterizedType) dependencyModel.injectionType() ).getActualTypeArguments()[ 
0 ] ) )
+            .reduce( null, ( injectionClass, type ) -> {
                 if( injectionClass == null )
                 {
                     injectionClass = type;
@@ -208,9 +204,41 @@ public final class ServiceModel extends CompositeModel
                         injectionClass = type;
                     }
                 }
-            }
-        }
-        return injectionClass;
+                return injectionClass;
+            } );
+
+//        Class injectionClass = null;
+//        Iterable<DependencyModel> configurationThisDependencies =
+//            filter(
+//                and(
+//                    translate( new DependencyModel.InjectionTypeFunction(),
+//                               Specifications.<Class<?>>in( 
Configuration.class )
+//                    ),
+//                    new DependencyModel.ScopeSpecification( This.class ) ),
+//                dependencies()
+//            );
+//        for( DependencyModel dependencyModel : configurationThisDependencies 
)
+//
+//        {
+//            if( dependencyModel.rawInjectionType()
+//                    .equals( Configuration.class ) && 
dependencyModel.injectionType() instanceof ParameterizedType )
+//            {
+//                Class<?> type = Classes.RAW_CLASS
+//                    .apply( ( (ParameterizedType) 
dependencyModel.injectionType() ).getActualTypeArguments()[ 0 ] );
+//                if( injectionClass == null )
+//                {
+//                    injectionClass = type;
+//                }
+//                else
+//                {
+//                    if( injectionClass.isAssignableFrom( type ) )
+//                    {
+//                        injectionClass = type;
+//                    }
+//                }
+//            }
+//        }
+//
+//        return injectionClass;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java
index 6543917..70541b3 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java
@@ -20,6 +20,7 @@
 package org.apache.zest.runtime.service;
 
 import java.lang.reflect.Method;
+import java.util.stream.Stream;
 import org.apache.zest.api.activation.Activation;
 import org.apache.zest.api.activation.ActivationEventListener;
 import org.apache.zest.api.activation.ActivationException;
@@ -71,13 +72,13 @@ public final class ServiceReferenceInstance<T>
     }
 
     @Override
-    public Iterable<Class<?>> types()
+    public Stream<Class<?>> types()
     {
         return serviceModel.types();
     }
 
     @Override
-    public <T> T metaInfo( Class<T> infoType )
+    public <M> M metaInfo( Class<M> infoType )
     {
         return serviceModel.metaInfo( infoType );
     }
@@ -122,14 +123,7 @@ public final class ServiceReferenceInstance<T>
         if( instance != null )
         {
             try {
-                activation.passivate( new Runnable()
-                {
-                    @Override
-                    public void run()
-                    {
-                        active = false;
-                    }
-                } );
+                activation.passivate( () -> active = false );
             } finally {
                 instance = null;
                 active = false;
@@ -151,14 +145,9 @@ public final class ServiceReferenceInstance<T>
 
                     try
                     {
-                        activation.activate( 
serviceModel.newActivatorsInstance( module ), instance, new Runnable()
-                        {
-                            @Override
-                            public void run()
-                            {
-                                active = true;
-                            }
-                        } );
+                        activation.activate( 
serviceModel.newActivatorsInstance( module ),
+                                             instance,
+                                             () -> active = true );
                     }
                     catch( Exception e )
                     {
@@ -194,26 +183,26 @@ public final class ServiceReferenceInstance<T>
     {
         @Override
         @SuppressWarnings( "unchecked" )
-        public <T> T proxy()
+        public <P> P proxy()
         {
-            return (T) ServiceReferenceInstance.this.get();
+            return (P) ServiceReferenceInstance.this.get();
         }
 
         @Override
-        public <T> T newProxy( Class<T> mixinType )
+        public <P> P newProxy( Class<P> mixinType )
             throws IllegalArgumentException
         {
             return getInstance().newProxy( mixinType );
         }
 
         @Override
-        public <T> T metaInfo( Class<T> infoType )
+        public <M> M metaInfo( Class<M> infoType )
         {
             return ServiceReferenceInstance.this.metaInfo( infoType );
         }
 
         @Override
-        public Iterable<Class<?>> types()
+        public Stream<Class<?>> types()
         {
             return ServiceReferenceInstance.this.types();
         }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java
index 7400faf..31e6738 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java
@@ -15,13 +15,14 @@
 package org.apache.zest.runtime.service;
 
 import java.util.List;
-import java.util.function.Predicate;
+import java.util.stream.Stream;
 import org.apache.zest.api.activation.Activation;
 import org.apache.zest.api.activation.ActivationEventListener;
 import org.apache.zest.api.activation.ActivationEventListenerRegistration;
 import org.apache.zest.api.activation.ActivationException;
 import org.apache.zest.api.activation.PassivationException;
 import org.apache.zest.api.common.Visibility;
+import org.apache.zest.api.service.ServiceDescriptor;
 import org.apache.zest.api.service.ServiceReference;
 import org.apache.zest.functional.Iterables;
 import org.apache.zest.runtime.activation.ActivationDelegate;
@@ -37,10 +38,10 @@ public class ServicesInstance
     implements Activation, ActivationEventListenerRegistration
 {
     private final ServicesModel servicesModel;
-    private final List<ServiceReference> serviceReferences;
+    private final List<ServiceReference<?>> serviceReferences;
     private final ActivationDelegate activation = new ActivationDelegate( 
this, false );
 
-    public ServicesInstance( ServicesModel servicesModel, 
List<ServiceReference> serviceReferences )
+    public ServicesInstance( ServicesModel servicesModel, 
List<ServiceReference<?>> serviceReferences )
     {
         this.servicesModel = servicesModel;
         this.serviceReferences = serviceReferences;
@@ -50,6 +51,11 @@ public class ServicesInstance
         }
     }
 
+    public Stream<ServiceModel> models()
+    {
+        return servicesModel.stream();
+    }
+
     @Override
     public void activate()
         throws ActivationException
@@ -65,18 +71,11 @@ public class ServicesInstance
         activation.passivate();
     }
 
-    public Iterable<ServiceReference> visibleServices( final Visibility 
visibility )
+    public Stream<ServiceReference<?>> visibleServices( final Visibility 
visibility )
     {
-        return Iterables.filter( new Predicate<ServiceReference>()
-        {
-            @Override
-            public boolean test( ServiceReference item )
-            {
-                return ( (ServiceReferenceInstance) item ).serviceDescriptor()
-                           .visibility()
-                           .ordinal() >= visibility.ordinal();
-            }
-        }, serviceReferences );
+        return serviceReferences.stream()
+            .filter( item -> ( (ServiceReferenceInstance) item 
).serviceDescriptor()
+                                 .visibility().ordinal() >= 
visibility.ordinal() );
     }
 
     @Override
@@ -105,4 +104,9 @@ public class ServicesInstance
     {
         activation.deregisterActivationEventListener( listener );
     }
+
+    public Stream<? extends ServiceDescriptor> stream()
+    {
+        return servicesModel.stream();
+    }
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesModel.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesModel.java 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesModel.java
index ee8b46e..2fbfb32 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesModel.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesModel.java
@@ -16,6 +16,7 @@ package org.apache.zest.runtime.service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Stream;
 import org.apache.zest.api.service.ServiceReference;
 import org.apache.zest.functional.HierarchicalVisitor;
 import org.apache.zest.functional.VisitableHierarchy;
@@ -27,16 +28,16 @@ import org.apache.zest.runtime.structure.ModuleInstance;
 public class ServicesModel
     implements VisitableHierarchy<Object, Object>
 {
-    private final Iterable<ServiceModel> serviceModels;
+    private final List<ServiceModel> serviceModels;
 
-    public ServicesModel( Iterable<ServiceModel> serviceModels )
+    public ServicesModel( List<ServiceModel> serviceModels )
     {
         this.serviceModels = serviceModels;
     }
 
     public ServicesInstance newInstance( ModuleInstance module )
     {
-        List<ServiceReference> serviceReferences = new 
ArrayList<ServiceReference>();
+        List<ServiceReference<?>> serviceReferences = new ArrayList<>();
         for( ServiceModel serviceModel : serviceModels )
         {
             ServiceReferenceInstance serviceReferenceInstance = new 
ServiceReferenceInstance( serviceModel, module );
@@ -62,4 +63,9 @@ public class ServicesModel
         }
         return visitor.visitLeave( this );
     }
+
+    public Stream<ServiceModel> stream()
+    {
+        return serviceModels.stream();
+    }
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/structure/ApplicationInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ApplicationInstance.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ApplicationInstance.java
index 9a228ad..0ca0b52 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ApplicationInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ApplicationInstance.java
@@ -16,6 +16,7 @@ package org.apache.zest.runtime.structure;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Stream;
 import org.apache.zest.api.activation.ActivationEventListener;
 import org.apache.zest.api.activation.ActivationException;
 import org.apache.zest.api.activation.PassivationException;
@@ -108,6 +109,12 @@ public class ApplicationInstance
     }
 
     @Override
+    public Stream<? extends Layer> layers()
+    {
+        return layerInstances.stream();
+    }
+
+    @Override
     public ApplicationDescriptor descriptor()
     {
         return applicationModel;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/structure/LayerInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/structure/LayerInstance.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/structure/LayerInstance.java
index f4c9cca..5b206d8 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/structure/LayerInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/structure/LayerInstance.java
@@ -16,23 +16,22 @@ package org.apache.zest.runtime.structure;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.function.Function;
+import java.util.stream.Stream;
 import org.apache.zest.api.activation.ActivationEventListener;
 import org.apache.zest.api.activation.ActivationException;
 import org.apache.zest.api.activation.PassivationException;
 import org.apache.zest.api.common.Visibility;
+import org.apache.zest.api.composite.ModelDescriptor;
 import org.apache.zest.api.composite.TransientDescriptor;
 import org.apache.zest.api.entity.EntityDescriptor;
 import org.apache.zest.api.object.ObjectDescriptor;
 import org.apache.zest.api.service.ServiceReference;
 import org.apache.zest.api.structure.Layer;
+import org.apache.zest.api.structure.Module;
 import org.apache.zest.api.value.ValueDescriptor;
 import org.apache.zest.runtime.activation.ActivationDelegate;
 import org.apache.zest.spi.module.ModelModule;
 
-import static org.apache.zest.functional.Iterables.flattenIterables;
-import static org.apache.zest.functional.Iterables.map;
-
 /**
  * Instance of a Zest application layer. Contains a list of modules which are 
managed by this layer.
  */
@@ -110,6 +109,12 @@ public class LayerInstance
         activation.deregisterActivationEventListener( listener );
     }
 
+    @Override
+    public Stream<? extends Module> modules()
+    {
+        return moduleInstances.stream();
+    }
+
     // Other methods
     /* package */ void addModule( ModuleInstance module )
     {
@@ -132,69 +137,29 @@ public class LayerInstance
         return usedLayersInstance;
     }
 
-    /* package */ Iterable<ModelModule<ObjectDescriptor>> visibleObjects( 
final Visibility visibility )
+    /* package */ Stream<ModelModule<? extends ModelDescriptor>> 
visibleObjects( final Visibility visibility )
     {
-        return flattenIterables( map( new Function<ModuleInstance, 
Iterable<ModelModule<ObjectDescriptor>>>()
-        {
-
-            @Override
-            public Iterable<ModelModule<ObjectDescriptor>> apply( 
ModuleInstance moduleInstance )
-            {
-                return moduleInstance.visibleObjects( visibility );
-            }
-        }, moduleInstances ) );
+        return moduleInstances.stream().flatMap( module -> 
module.visibleObjects( visibility ) );
     }
 
-    /* package */ Iterable<ModelModule<TransientDescriptor>> 
visibleTransients( final Visibility visibility )
+    /* package */ Stream<ModelModule<? extends ModelDescriptor>> 
visibleTransients( final Visibility visibility )
     {
-        return flattenIterables( map( new Function<ModuleInstance, 
Iterable<ModelModule<TransientDescriptor>>>()
-        {
-
-            @Override
-            public Iterable<ModelModule<TransientDescriptor>> apply( 
ModuleInstance moduleInstance )
-            {
-                return moduleInstance.visibleTransients( visibility );
-            }
-        }, moduleInstances ) );
+        return moduleInstances.stream().flatMap( module -> 
module.visibleTransients( visibility ) );
     }
 
-    /* package */ Iterable<ModelModule<EntityDescriptor>> visibleEntities( 
final Visibility visibility )
+    /* package */ Stream<ModelModule<? extends ModelDescriptor>> 
visibleEntities( final Visibility visibility )
     {
-        return flattenIterables( map( new Function<ModuleInstance, 
Iterable<ModelModule<EntityDescriptor>>>()
-        {
-
-            @Override
-            public Iterable<ModelModule<EntityDescriptor>> apply( 
ModuleInstance moduleInstance )
-            {
-                return moduleInstance.visibleEntities( visibility );
-            }
-        }, moduleInstances ) );
+        return moduleInstances.stream().flatMap( module -> 
module.visibleEntities( visibility ) );
     }
 
-    /* package */ Iterable<ModelModule<ValueDescriptor>> visibleValues( final 
Visibility visibility )
+    /* package */ Stream<ModelModule<? extends ModelDescriptor>> 
visibleValues( final Visibility visibility )
     {
-        return flattenIterables( map( new Function<ModuleInstance, 
Iterable<ModelModule<ValueDescriptor>>>()
-        {
-
-            @Override
-            public Iterable<ModelModule<ValueDescriptor>> apply( 
ModuleInstance moduleInstance )
-            {
-                return moduleInstance.visibleValues( visibility );
-            }
-        }, moduleInstances ) );
+        return moduleInstances.stream().flatMap( module -> 
module.visibleValues( visibility ) );
     }
 
-    /* package */ Iterable<ServiceReference<?>> visibleServices( final 
Visibility visibility )
+    /* package */ Stream<ServiceReference<?>> visibleServices( final 
Visibility visibility )
     {
-        return flattenIterables( map( new Function<ModuleInstance, 
Iterable<ServiceReference<?>>>()
-        {
-
-            @Override
-            public Iterable<ServiceReference<?>> apply( ModuleInstance 
moduleInstance )
-            {
-                return moduleInstance.visibleServices( visibility );
-            }
-        }, moduleInstances ) );
+        return moduleInstances.stream().flatMap( module -> 
module.visibleServices( visibility ) );
     }
 
     /* package */ ModuleInstance findModule( String moduleName )

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
index bdf002c..2237dfa 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
@@ -28,6 +28,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.function.Predicate;
+import java.util.stream.Stream;
 import org.apache.zest.api.activation.Activation;
 import org.apache.zest.api.activation.ActivationEventListener;
 import org.apache.zest.api.activation.ActivationException;
@@ -52,6 +53,7 @@ import org.apache.zest.api.property.Property;
 import org.apache.zest.api.property.PropertyDescriptor;
 import org.apache.zest.api.query.QueryBuilder;
 import org.apache.zest.api.query.QueryBuilderFactory;
+import org.apache.zest.api.service.ImportedServiceDescriptor;
 import org.apache.zest.api.service.NoSuchServiceException;
 import org.apache.zest.api.service.ServiceDescriptor;
 import org.apache.zest.api.service.ServiceReference;
@@ -67,7 +69,6 @@ import org.apache.zest.api.value.ValueComposite;
 import org.apache.zest.api.value.ValueDescriptor;
 import org.apache.zest.api.value.ValueSerialization;
 import org.apache.zest.api.value.ValueSerializationException;
-import org.apache.zest.functional.Specifications;
 import org.apache.zest.runtime.activation.ActivationDelegate;
 import org.apache.zest.runtime.composite.FunctionStateResolver;
 import org.apache.zest.runtime.composite.StateResolver;
@@ -83,7 +84,6 @@ import org.apache.zest.runtime.injection.InjectionContext;
 import org.apache.zest.runtime.object.ObjectModel;
 import org.apache.zest.runtime.object.ObjectsModel;
 import org.apache.zest.runtime.property.PropertyInstance;
-import org.apache.zest.runtime.property.PropertyModel;
 import org.apache.zest.runtime.query.QueryBuilderFactoryImpl;
 import org.apache.zest.runtime.service.ImportedServicesInstance;
 import org.apache.zest.runtime.service.ImportedServicesModel;
@@ -102,15 +102,11 @@ import org.apache.zest.spi.module.ModelModule;
 import org.apache.zest.spi.module.ModuleSpi;
 import org.apache.zest.valueserialization.orgjson.OrgJsonValueSerialization;
 
+import static java.util.stream.Stream.concat;
 import static org.apache.zest.api.util.Classes.RAW_CLASS;
 import static org.apache.zest.api.util.Classes.modelTypeSpecification;
-import static org.apache.zest.functional.Iterables.cast;
-import static org.apache.zest.functional.Iterables.filter;
-import static org.apache.zest.functional.Iterables.first;
-import static org.apache.zest.functional.Iterables.flatten;
 import static org.apache.zest.functional.Iterables.iterable;
-import static org.apache.zest.functional.Iterables.map;
-import static org.apache.zest.functional.Iterables.toList;
+import static org.apache.zest.runtime.legacy.Specifications.translate;
 
 /**
  * Instance of a Zest Module. Contains the various composites for this Module.
@@ -262,6 +258,42 @@ public class ModuleInstance
         }
     }
 
+    @Override
+    public Stream<? extends TransientDescriptor> transientComposites()
+    {
+        return transients.stream();
+    }
+
+    @Override
+    public Stream<? extends ValueDescriptor> valueComposites()
+    {
+        return values.stream();
+    }
+
+    @Override
+    public Stream<? extends ServiceDescriptor> serviceComposites()
+    {
+        return services.stream();
+    }
+
+    @Override
+    public Stream<? extends EntityDescriptor> entityComposites()
+    {
+        return entities.stream();
+    }
+
+    @Override
+    public Stream<? extends ImportedServiceDescriptor> importedServices()
+    {
+        return importedServices.stream();
+    }
+
+    @Override
+    public Stream<? extends ObjectDescriptor> objects()
+    {
+        return objects.stream();
+    }
+
     // Implementation of MetaInfoHolder
     @Override
     public <T> T metaInfo( Class<T> infoType )
@@ -316,12 +348,15 @@ public class ModuleInstance
         }
 
         Map<AccessibleObject, Property<?>> properties = new HashMap<>();
-        for( PropertyModel propertyModel : 
modelModule.model().state().properties() )
-        {
-            Property<?> property = new PropertyInstance<>( 
propertyModel.getBuilderInfo(),
-                                                           
propertyModel.initialValue( modelModule.module() ) );
-            properties.put( propertyModel.accessor(), property );
-        }
+        modelModule.model().state().properties().forEach( propertyModel ->
+                                                          {
+                                                              Property<?> 
property = new PropertyInstance<>( propertyModel
+                                                                               
                                  .getBuilderInfo(),
+                                                                               
                              propertyModel
+                                                                               
                                  .initialValue( modelModule
+                                                                               
                                                     .module() ) );
+                                                              properties.put( 
propertyModel.accessor(), property );
+                                                          } );
 
         TransientStateInstance state = new TransientStateInstance( properties 
);
 
@@ -427,7 +462,7 @@ public class ModuleInstance
         NullArgumentException.validateNotNull( "prototype", prototype );
 
         ValueInstance valueInstance = ValueInstance.valueInstanceOf( 
(ValueComposite) prototype );
-        Class<Composite> valueType = (Class<Composite>) first( 
valueInstance.types() );
+        Class<Composite> valueType = (Class<Composite>) 
valueInstance.types().findFirst().orElse( null );
 
         ModelModule<ValueModel> modelModule = typeLookup.lookupValueModel( 
valueType );
 
@@ -681,34 +716,38 @@ public class ModuleInstance
         return metrics;
     }
 
-    public Iterable<ModelModule<ObjectDescriptor>> visibleObjects( Visibility 
visibility )
+    public Stream<ModelModule<? extends ModelDescriptor>> visibleObjects( 
Visibility visibility )
     {
-        return map( ModelModule.<ObjectDescriptor>modelModuleFunction( this ),
-                    filter( new Visibilitypredicate( visibility ), 
objects.models() ) );
+        return objects.stream()
+            .filter( new Visibilitypredicate( visibility ) )
+            .map( ModelModule.<ObjectDescriptor>modelModuleFunction( this ) );
     }
 
-    public Iterable<ModelModule<TransientDescriptor>> visibleTransients( 
Visibility visibility )
+    public Stream<ModelModule<? extends ModelDescriptor>> visibleTransients( 
Visibility visibility )
     {
-        return map( ModelModule.<TransientDescriptor>modelModuleFunction( this 
),
-                    filter( new Visibilitypredicate( visibility ), 
transients.models() ) );
+        return transients.models()
+            .filter( new Visibilitypredicate( visibility ) )
+            .map( ModelModule.<TransientDescriptor>modelModuleFunction( this ) 
);
     }
 
-    public Iterable<ModelModule<EntityDescriptor>> visibleEntities( Visibility 
visibility )
+    public Stream<ModelModule<? extends ModelDescriptor>> visibleEntities( 
Visibility visibility )
     {
-        return map( ModelModule.<EntityDescriptor>modelModuleFunction( this ),
-                    filter( new Visibilitypredicate( visibility ), 
entities.models() ) );
+        return entities.models()
+            .filter( new Visibilitypredicate( visibility ) )
+            .map( ModelModule.<EntityDescriptor>modelModuleFunction( this ) );
     }
 
-    public Iterable<ModelModule<ValueDescriptor>> visibleValues( Visibility 
visibility )
+    public Stream<ModelModule<? extends ModelDescriptor>> visibleValues( 
Visibility visibility )
     {
-        return map( ModelModule.<ValueDescriptor>modelModuleFunction( this ),
-                    filter( new Visibilitypredicate( visibility ), 
values.models() ) );
+        return values.models()
+            .filter( new Visibilitypredicate( visibility ) )
+            .map( ModelModule.<ValueDescriptor>modelModuleFunction( this ) );
     }
 
-    public Iterable<ServiceReference<?>> visibleServices( Visibility 
visibility )
+    public Stream<ServiceReference<?>> visibleServices( Visibility visibility )
     {
-        return flatten( services.visibleServices( visibility ),
-                        importedServices.visibleServices( visibility ) );
+        return concat( services.visibleServices( visibility ),
+                       importedServices.visibleServices( visibility ) );
     }
 
     // Module ClassLoader
@@ -733,59 +772,76 @@ public class ModuleInstance
             if( clazz == null )
             {
                 Predicate<ModelDescriptor> modelTypeSpecification = 
modelTypeSpecification( name );
-                Predicate<ModelModule<ModelDescriptor>> translate = 
Specifications.translate( ModelModule.modelFunction(), modelTypeSpecification );
-                // Check module
+                Predicate<ModelModule<? extends ModelDescriptor>> translation 
= translate( ModelModule.modelFunction(), modelTypeSpecification );
+                Stream<ModelModule<? extends ModelDescriptor>> moduleModels = 
concat(
+                    moduleInstance.visibleObjects( Visibility.module ),
+                    concat(
+                        moduleInstance.visibleEntities( Visibility.module ),
+                        concat(
+                            moduleInstance.visibleTransients( 
Visibility.module ),
+                            moduleInstance.visibleValues( Visibility.module )
+                        )
+                    )
+                ).filter( translation );
+
+                Iterator<ModelModule<? extends ModelDescriptor>> 
moduleModelsIter = moduleModels.iterator();
+                if( moduleModelsIter.hasNext() )
                 {
-                    Iterable<ModelModule<ModelDescriptor>> i = cast( flatten(
-                        cast( moduleInstance.visibleObjects( Visibility.module 
) ),
-                        cast( moduleInstance.visibleEntities( 
Visibility.module ) ),
-                        cast( moduleInstance.visibleTransients( 
Visibility.module ) ),
-                        cast( moduleInstance.visibleValues( Visibility.module 
) ) ) );
-
-                    Iterable<ModelModule<ModelDescriptor>> moduleModels = 
filter( translate, i );
-                    Iterator<ModelModule<ModelDescriptor>> iter = 
moduleModels.iterator();
-                    if( iter.hasNext() )
-                    {
-                        clazz = first( iter.next().model().types() );
+                    clazz = 
moduleModelsIter.next().model().types().findFirst().orElse( null );
 
-                        if( iter.hasNext() )
-                        {
-                            // Ambiguous exception
-                            throw new ClassNotFoundException(
-                                name,
-                                new AmbiguousTypeException(
-                                    "More than one model matches the classname 
" + name + ":" + toList( moduleModels )
-                                )
-                            );
-                        }
+                    if( moduleModelsIter.hasNext() )
+                    {
+                        // Ambiguous exception
+                        throw new ClassNotFoundException(
+                            name,
+                            new AmbiguousTypeException(
+                                "More than one model matches the classname " + 
name + ":" + moduleModelsIter.next()
+                            )
+                        );
                     }
                 }
 
                 // Check layer
                 if( clazz == null )
                 {
-                    Iterable<ModelModule<ModelDescriptor>> flatten = cast( 
flatten(
-                        cast( moduleInstance.layerInstance().visibleObjects( 
Visibility.layer ) ),
-                        cast( 
moduleInstance.layerInstance().visibleTransients( Visibility.layer ) ),
-                        cast( moduleInstance.layerInstance().visibleEntities( 
Visibility.layer ) ),
-                        cast( moduleInstance.layerInstance().visibleValues( 
Visibility.layer ) ),
-                        cast( moduleInstance.layerInstance().visibleObjects( 
Visibility.application ) ),
-                        cast( 
moduleInstance.layerInstance().visibleTransients( Visibility.application ) ),
-                        cast( moduleInstance.layerInstance().visibleEntities( 
Visibility.application ) ),
-                        cast( moduleInstance.layerInstance().visibleValues( 
Visibility.application ) ) ) );
-                    Iterable<ModelModule<ModelDescriptor>> layerModels = 
filter( translate, flatten );
-                    Iterator<ModelModule<ModelDescriptor>> iter = 
layerModels.iterator();
-                    if( iter.hasNext() )
+                    Stream<ModelModule<? extends ModelDescriptor>> 
modelsInLayer1 = concat(
+                        moduleInstance.layerInstance().visibleObjects( 
Visibility.layer ),
+                        concat(
+                            moduleInstance.layerInstance().visibleEntities( 
Visibility.layer ),
+                            concat(
+                                
moduleInstance.layerInstance().visibleTransients( Visibility.layer ),
+                                moduleInstance.layerInstance().visibleValues( 
Visibility.layer )
+                            )
+                        )
+                    );
+                    // TODO: What does this actually represents?? Shouldn't 
'application' visible models already be handed back from 
lasyerInstance().visibleXyz() ??
+                    Stream<ModelModule<? extends ModelDescriptor>> 
modelsInLayer2 = concat(
+                        moduleInstance.layerInstance().visibleObjects( 
Visibility.application ),
+                        concat(
+                            moduleInstance.layerInstance().visibleEntities( 
Visibility.application ),
+                            concat(
+                                
moduleInstance.layerInstance().visibleTransients( Visibility.application ),
+                                moduleInstance.layerInstance().visibleValues( 
Visibility.application )
+                            )
+                        )
+                    );
+                    Stream<ModelModule<? extends ModelDescriptor>> layerModels 
= concat(
+                        modelsInLayer1,
+                        modelsInLayer2
+                    ).filter( translation );
+
+                    Iterator<ModelModule<? extends ModelDescriptor>> 
layerModelsIter = layerModels.iterator();
+                    if( layerModelsIter.hasNext() )
                     {
-                        clazz = first( iter.next().model().types() );
+                        clazz = 
layerModelsIter.next().model().types().findFirst().orElse( null );
 
-                        if( iter.hasNext() )
+                        if( layerModelsIter.hasNext() )
                         {
                             // Ambiguous exception
                             throw new ClassNotFoundException(
                                 name,
                                 new AmbiguousTypeException(
-                                    "More than one model matches the classname 
" + name + ":" + toList( layerModels ) )
+                                    "More than one model matches the classname 
" + name + ":" + layerModelsIter.next() )
                             );
                         }
                     }
@@ -794,24 +850,29 @@ public class ModuleInstance
                 // Check used layers
                 if( clazz == null )
                 {
-                    Iterable<ModelModule<ModelDescriptor>> flatten = cast( 
flatten(
-                        cast( 
moduleInstance.layerInstance().usedLayersInstance().visibleObjects() ),
-                        cast( 
moduleInstance.layerInstance().usedLayersInstance().visibleTransients() ),
-                        cast( 
moduleInstance.layerInstance().usedLayersInstance().visibleEntities() ),
-                        cast( 
moduleInstance.layerInstance().usedLayersInstance().visibleValues() ) ) );
-                    Iterable<ModelModule<ModelDescriptor>> usedLayersModels = 
filter( translate, flatten );
-                    Iterator<ModelModule<ModelDescriptor>> iter = 
usedLayersModels.iterator();
-                    if( iter.hasNext() )
+                    Stream<ModelModule<? extends ModelDescriptor>> 
usedLayersModels = concat(
+                        
moduleInstance.layerInstance().usedLayersInstance().visibleObjects(),
+                        concat(
+                            
moduleInstance.layerInstance().usedLayersInstance().visibleEntities(),
+                            concat(
+                                
moduleInstance.layerInstance().usedLayersInstance().visibleTransients(),
+                                
moduleInstance.layerInstance().usedLayersInstance().visibleValues()
+                            )
+                        )
+                    ).filter( translation );
+
+                    Iterator<ModelModule<? extends ModelDescriptor>> 
usedLayersModelsIter = usedLayersModels.iterator();
+                    if( usedLayersModelsIter.hasNext() )
                     {
-                        clazz = first( iter.next().model().types() );
+                        clazz = 
usedLayersModelsIter.next().model().types().findFirst().orElse( null );
 
-                        if( iter.hasNext() )
+                        if( usedLayersModelsIter.hasNext() )
                         {
                             // Ambiguous exception
                             throw new ClassNotFoundException(
                                 name,
                                 new AmbiguousTypeException(
-                                    "More than one model matches the classname 
" + name + ":" + toList( usedLayersModels )
+                                    "More than one model matches the classname 
" + name + ":" + usedLayersModelsIter.next()
                                 )
                             );
                         }
@@ -829,45 +890,68 @@ public class ModuleInstance
         }
     }
 
-    public Iterable<ModelModule<ValueDescriptor>> findVisibleValueTypes()
+    public Stream<ModelModule<? extends ModelDescriptor>> 
findVisibleValueTypes()
     {
-        return flatten( visibleValues( Visibility.module ),
-            layerInstance().visibleValues( Visibility.layer ),
-            layerInstance().visibleValues( Visibility.application ),
-            layerInstance().usedLayersInstance().visibleValues()
+        return concat( visibleValues( Visibility.module ),
+                       concat(
+                           layerInstance().visibleValues( Visibility.layer ),
+                           concat(
+                               layerInstance().visibleValues( 
Visibility.application ),
+                               
layerInstance().usedLayersInstance().visibleValues()
+                           )
+                       )
         );
     }
 
-    public Iterable<ModelModule<EntityDescriptor>> findVisibleEntityTypes()
+    public Stream<ModelModule<? extends ModelDescriptor>> 
findVisibleEntityTypes()
     {
-        return flatten( visibleEntities( Visibility.module ),
-            layerInstance().visibleEntities( Visibility.layer ),
-            layerInstance().visibleEntities( Visibility.application ),
-            layerInstance().usedLayersInstance().visibleEntities()
+        return concat( visibleEntities( Visibility.module ),
+                       concat(
+                           layerInstance().visibleEntities( Visibility.layer ),
+                           concat(
+                               layerInstance().visibleEntities( 
Visibility.application ),
+                               
layerInstance().usedLayersInstance().visibleEntities()
+                           )
+                       )
         );
     }
-    public Iterable<ModelModule<TransientDescriptor>> 
findVisibleTransientTypes()
+
+    public Stream<ModelModule<? extends ModelDescriptor>> 
findVisibleTransientTypes()
     {
-        return flatten( visibleTransients( Visibility.module ),
-            layerInstance().visibleTransients( Visibility.layer ),
-            layerInstance().visibleTransients( Visibility.application ),
-            layerInstance().usedLayersInstance().visibleTransients()
+        return concat( visibleTransients( Visibility.module ),
+                       concat(
+                           layerInstance().visibleTransients( Visibility.layer 
),
+                           concat(
+                               layerInstance().visibleTransients( 
Visibility.application ),
+                               
layerInstance().usedLayersInstance().visibleTransients()
+                           )
+                       )
         );
     }
-    public Iterable<ModelModule<ServiceDescriptor>> findVisibleServiceTypes()
+
+    public Stream<ServiceReference<?>> findVisibleServiceTypes()
     {
-        return flatten( visibleServices( Visibility.module ),
-            layerInstance().visibleServices( Visibility.layer ),
-            layerInstance().visibleServices( Visibility.application ),
-            layerInstance().usedLayersInstance().visibleServices()
+        return concat( visibleServices( Visibility.module ),
+                       concat(
+                           layerInstance().visibleServices( Visibility.layer ),
+                           concat(
+                               layerInstance().visibleServices( 
Visibility.application ),
+                               
layerInstance().usedLayersInstance().visibleServices()
+                           )
+                       )
         );
     }
-    public Iterable<ModelModule<ObjectDescriptor>> findVisibleObjectTypes()
+
+    public Stream<ModelModule<? extends ModelDescriptor>> 
findVisibleObjectTypes()
     {
-        return flatten( visibleObjects( Visibility.module ),
-            layerInstance().visibleObjects( Visibility.layer ),
-            layerInstance().visibleObjects( Visibility.application ),
-            layerInstance().usedLayersInstance().visibleObjects()
+        return concat( visibleObjects( Visibility.module ),
+                       concat(
+                           layerInstance().visibleObjects( Visibility.layer ),
+                           concat(
+                               layerInstance().visibleObjects( 
Visibility.application ),
+                               
layerInstance().usedLayersInstance().visibleObjects()
+                           )
+                       )
         );
     }
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleUnitOfWork.java
----------------------------------------------------------------------
diff --git 
a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleUnitOfWork.java
 
b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleUnitOfWork.java
index af796fa..5c89373 100644
--- 
a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleUnitOfWork.java
+++ 
b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleUnitOfWork.java
@@ -72,8 +72,6 @@ import org.apache.zest.spi.query.QueryBuilderSPI;
 import org.apache.zest.spi.query.QuerySource;
 
 import static org.apache.zest.api.entity.EntityReference.parseEntityReference;
-import static org.apache.zest.functional.Iterables.first;
-import static org.apache.zest.functional.Iterables.map;
 
 /**
  * JAVADOC
@@ -184,9 +182,8 @@ public class ModuleUnitOfWork
         {
             throw new EntityTypeNotFoundException( type.getName(),
                                                    module.name(),
-                                                   map( 
ModelModule.toStringFunction,
-                                                        
module.findVisibleEntityTypes()
-                                                   ) );
+                                                   
module.findVisibleEntityTypes().map( ModelModule.toStringFunction )
+            );
         }
 
         EntityStore entityStore = model.module().entityStore();
@@ -199,7 +196,7 @@ public class ModuleUnitOfWork
             {
                 throw new NoSuchServiceException( 
IdentityGenerator.class.getName(), model.module().name() );
             }
-            identity = idGen.generate( first( model.model().types() ) );
+            identity = idGen.generate( 
model.model().types().findFirst().orElse( null ) );
         }
         EntityBuilder<T> builder;
 
@@ -248,9 +245,8 @@ public class ModuleUnitOfWork
         {
             throw new EntityTypeNotFoundException( type.getName(),
                                                    module.name(),
-                                                   map( 
ModelModule.toStringFunction,
-                                                        
module.findVisibleEntityTypes()
-                                                   ) );
+                                                   
module.findVisibleEntityTypes().map( ModelModule.toStringFunction )
+            );
         }
 
         EntityStore entityStore = model.module().entityStore();
@@ -272,7 +268,7 @@ public class ModuleUnitOfWork
                 {
                     throw new NoSuchServiceException( 
IdentityGenerator.class.getName(), model.module().name() );
                 }
-                identity = idGen.generate( first( model.model().types() ) );
+                identity = idGen.generate( 
model.model().types().findFirst().orElse( null ));
             }
         }
 
@@ -293,9 +289,8 @@ public class ModuleUnitOfWork
         {
             throw new EntityTypeNotFoundException( type.getName(),
                                                    module.name(),
-                                                   map( 
ModelModule.toStringFunction,
-                                                        
module.findVisibleEntityTypes()
-                                                   ) );
+                                                   
module.findVisibleEntityTypes().map( ModelModule.toStringFunction )
+            );
         }
 
         return uow.get( parseEntityReference( identity ), this, models, type );
@@ -309,7 +304,7 @@ public class ModuleUnitOfWork
         EntityComposite entityComposite = (EntityComposite) entity;
         EntityInstance compositeInstance = EntityInstance.entityInstanceOf( 
entityComposite );
         ModelModule<EntityModel> model = new ModelModule<>( 
compositeInstance.module(), compositeInstance.entityModel() );
-        Class<T> type = (Class<T>) first( compositeInstance.types() );
+        Class<T> type = (Class<T>) 
compositeInstance.types().findFirst().orElse( null );
         return uow.get( compositeInstance.identity(), this, 
Collections.singletonList( model ), type );
     }
 

Reply via email to