diff --git a/pom.xml b/pom.xml
index 872f2c1..513a9aa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,87 +1,87 @@
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <!--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. -->
+    not use this file except in compliance with the License. You may obtain a 
+    copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless 
+    required by applicable law or agreed to in writing, software distributed 
+    under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 
+    OR CONDITIONS OF ANY KIND, either express or implied. See the License for 
+    the specific language governing permissions and limitations under the License. -->
 <project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>org.apache.sling</groupId>
-		<artifactId>sling</artifactId>
-		<version>32</version>
-	</parent>
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.sling</groupId>
+        <artifactId>sling</artifactId>
+        <version>32</version>
+    </parent>
 
-	<artifactId>org.apache.sling.resource.filter</artifactId>
-	<version>1.0.0-SNAPSHOT</version>
-	<packaging>bundle</packaging>
+    <artifactId>org.apache.sling.resource.filter</artifactId>
+    <version>1.0.0-SNAPSHOT</version>
+    <packaging>bundle</packaging>
 
-	<name>Apache Sling Resource Filter</name>
+    <name>Apache Sling Resource Filter</name>
 
-	<properties>
-		<sling.java.version>8</sling.java.version>
-	</properties>
+    <properties>
+        <sling.java.version>8</sling.java.version>
+    </properties>
 
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<extensions>true</extensions>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.sling</groupId>
-				<artifactId>maven-sling-plugin</artifactId>
-			</plugin>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>javacc-maven-plugin</artifactId>
-				<version>2.6</version>
-				<executions>
-					<execution>
-						<id>javacc</id>
-						<goals>
-							<goal>javacc</goal>
-						</goals>
-						<configuration>
-							<jdkVersion>1.8</jdkVersion>
-							<javadocFriendlyComments>true</javadocFriendlyComments>
-							<outputDirectory>${basedir}/src/main/java</outputDirectory>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-	<dependencies>
-		<dependency>
-			<groupId>org.apache.commons</groupId>
-			<artifactId>commons-lang3</artifactId>
-			<version>3.4</version>
-			<scope>provided</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.sling</groupId>
-			<artifactId>org.apache.sling.testing.sling-mock</artifactId>
-			<version>2.2.10</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.sling</groupId>
-			<artifactId>org.apache.sling.api</artifactId>
-			<version>2.16.4</version>
-			<scope>provided</scope>
-		</dependency>
-	</dependencies>
-	<description>provides a set of utilities to create and handle streams</description>
-	<scm>
-	    <url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-resource-filter.git</url>
-	    <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git</connection>
-	    <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git</developerConnection>
-	    <tag>HEAD</tag>
-	</scm>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.sling</groupId>
+                <artifactId>maven-sling-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>javacc-maven-plugin</artifactId>
+                <version>2.6</version>
+                <executions>
+                    <execution>
+                        <id>javacc</id>
+                        <goals>
+                            <goal>javacc</goal>
+                        </goals>
+                        <configuration>
+                            <jdkVersion>1.8</jdkVersion>
+                            <javadocFriendlyComments>true</javadocFriendlyComments>
+                            <outputDirectory>${basedir}/src/main/java</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.4</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.testing.sling-mock</artifactId>
+            <version>2.2.10</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.api</artifactId>
+            <version>2.16.4</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+    <description>provides a set of utilities to create and handle streams</description>
+    <scm>
+        <url>https://gitbox.apache.org/repos/asf?p=sling-org-apache-sling-resource-filter.git</url>
+        <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git</connection>
+        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resource-filter.git</developerConnection>
+        <tag>HEAD</tag>
+    </scm>
 </project>
diff --git a/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java b/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java
index a204ec5..795f94f 100644
--- a/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java
+++ b/src/main/java/org/apache/sling/resource/filter/ResourceFilter.java
@@ -25,8 +25,23 @@
 
 public interface ResourceFilter {
 
+    /**
+     * Creates a Predicate<Resource> based on the scripted matching
+     * 
+     * @param filter
+     * @return
+     * @throws ResourceFilterException
+     */
     public Predicate<Resource> parse(String filter) throws ResourceFilterException;
 
+    /**
+     * Creates a Predicate<Resource> based on the scripted matching
+     * 
+     * @param filter
+     * @param charEncoding
+     * @return
+     * @throws ResourceFilterException
+     */
     public Predicate<Resource> parse(String filter, String charEncoding) throws ResourceFilterException;
 
     /**
@@ -34,7 +49,7 @@
      * filter creation
      * 
      * @param params
-     * @return
+     * @return this
      */
     public abstract ResourceFilter addParams(Map<String, Object> params);
 
@@ -43,7 +58,7 @@
      * creation
      * 
      * @param params
-     * @return
+     * @return this
      */
     public abstract ResourceFilter addParam(String key, Object value);
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java b/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java
index ae86dd4..6bf389b 100644
--- a/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java
+++ b/src/main/java/org/apache/sling/resource/filter/ResourceFilterStream.java
@@ -19,19 +19,25 @@
 
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.resource.filter.ResourceFilterStream;
-import org.apache.sling.resource.filter.impl.script.ParseException;
+
 
 /**
  * Creates a {@link Predicate} of type {@link Resource} to identify matching
  * Resource objects
  *
  */
-public class ResourceFilterStream extends ResourceStream {
+public class ResourceFilterStream {
+
+    private ResourceStream resources;
 
     private ResourceFilter resourceFilter;
 
+    private Predicate<Resource> branchSelector = resource -> true;
+
+    private Predicate<Resource> childSelector = resource -> true;
+
     public ResourceFilterStream(Resource resource, ResourceFilter filter) {
-        super(resource);
+        resources = new ResourceStream(resource);
         this.resourceFilter = filter;
     }
 
@@ -44,8 +50,9 @@
      * @return ResourceStream
      * @throws ParseException
      */
-    public Stream<Resource> stream(String branchSelector) throws ResourceFilterException {
-        return stream(resourceFilter.parse(branchSelector));
+    public ResourceFilterStream setBranchSelector(String branchSelector) throws ResourceFilterException {
+        this.branchSelector = resourceFilter.parse(branchSelector);
+        return this;
     }
 
     /**
@@ -59,35 +66,9 @@
      * @return ResourceStream
      * @throws ParseException
      */
-    public Stream<Resource> stream(String branchSelector, String charEncoding) throws ResourceFilterException {
-        return stream(resourceFilter.parse(branchSelector, charEncoding));
-    }
-
-    /**
-     * Provides a stream of the child resources filtered by the child selector
-     * 
-     * @param childSelector
-     * @return
-     * @throws ResourceFilterException
-     * @throws ParseException
-     */
-    public Stream<Resource> listChildren(String childSelector) throws ResourceFilterException {
-        return listChildren(resourceFilter.parse(childSelector));
-    }
-
-    /**
-     * Provides a stream of the child resources filtered by the child selector
-     * 
-     * @param childSelector
-     *            text based definition of the Predicate to use
-     * @param charEncoding
-     *            char encoding of the branch selector String
-     * @return
-     * @throws ResourceFilterException
-     * @throws ParseException
-     */
-    public Stream<Resource> listChildren(String childSelector, String charEncoding) throws ResourceFilterException {
-        return listChildren(resourceFilter.parse(childSelector, charEncoding));
+    public ResourceFilterStream setChildSelector(String childSelector) throws ResourceFilterException {
+        this.childSelector = resourceFilter.parse(childSelector);
+        return this;
     }
 
     /**
@@ -112,4 +93,8 @@
         resourceFilter.addParams(params);
         return this;
     }
+
+    public Stream<Resource> stream() {
+        return resources.stream(branchSelector).filter(childSelector);
+    }
 }
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java b/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java
index fce1870..ee71126 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/ComparisonVisitor.java
@@ -24,6 +24,7 @@
 import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.List;
+import java.util.NoSuchElementException;
 import java.util.Optional;
 import java.util.function.BiFunction;
 import java.util.function.Function;
@@ -73,7 +74,11 @@
         case FilterParserConstants.DYNAMIC_ARG:
             return resource -> {
                 String argument = node.text;
-                return context.getArgument(argument).orElse(new Null());
+                Optional<Object> arg = context.getArgument(argument);
+                if (!arg.isPresent()) {
+                    throw new NoSuchElementException(String.format("No value present for '%s'",argument));
+                }
+                return arg.get();
             };
         default:
             return resource -> node.text;
diff --git a/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java b/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java
index b9c234d..de9ec58 100644
--- a/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java
+++ b/src/main/java/org/apache/sling/resource/filter/impl/Visitor.java
@@ -13,6 +13,8 @@
  */
 package org.apache.sling.resource.filter.impl;
 
+import java.text.ParseException;
+
 import org.apache.sling.resource.filter.impl.node.Node;
 
 /**
diff --git a/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java b/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java
index 3d7efee..b91723b 100644
--- a/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java
+++ b/src/test/java/org/apache/sling/resource/filter/ResourceFilterArgTest.java
@@ -53,8 +53,8 @@
         Map<String,Object> params = new HashMap<>();
         params.put("date", "2013-08-08T16:32:59");
         params.put("lang", "Mongolian");
-        Predicate<Resource> filter = resourceFilter.addParams(params).parse("[jcr:content/jcr:title] == $lang");
-        List<Resource> found = handle(new ResourceStream(resource), filter);
+        ResourceFilterStream rfs = resource.adaptTo(ResourceFilterStream.class);
+        List<Resource> found = rfs.addParams(params).setChildSelector("[jcr:content/jcr:title] == $lang").stream().collect(Collectors.toList());
         assertEquals(1, found.size());
     }
 
@@ -63,9 +63,9 @@
         Map<String,Object> params = new HashMap<>();
         params.put("date", "2013-08-08T16:32:59");
         params.put("lang", "Mongolian");
-        Predicate<Resource> filter = resourceFilter.addParams(params).parse("[jcr:content/created] > $date and [jcr:content/jcr:title] == $lang");
-        List<Resource> found = handle(new ResourceStream(resource), filter);
-        assertEquals(1, found.size());
+        ResourceFilterStream rfs = resource.adaptTo(ResourceFilterStream.class);
+        long size = rfs.addParams(params).setChildSelector("[jcr:content/created] > $date and [jcr:content/jcr:title] == $lang").stream().count();
+        assertEquals(1, size);
     }
 
     @Test
