diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java
index e67214f..091d426 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/AbstractMetadataPackageMojo.java
@@ -110,7 +110,7 @@
 
     /**
      * Sets the map of embedded files as project properties as a helper to pass data between the goals
-     * @param embeddedFiles map of embedded files.
+     * @param embeddedFiles map of embedded files (key=destination file name, value = source file)
      */
     @SuppressWarnings("unchecked")
     void setEmbeddedFilesMap(Map<String, File> embeddedFiles) {
@@ -119,7 +119,7 @@
 
     /**
      * Reads the map of embedded files from the project properties. This is a helper to pass data between the goals.
-     * @return the map of embedded files.
+     * @return the map of embedded files (key=destination file name, value = source file)
      */
     @SuppressWarnings("unchecked")
     Map<String, File> getEmbeddedFilesMap() {
@@ -166,6 +166,7 @@
         }
         return metaInfDirectory;
     }
+
     Filters loadGeneratedFilterFile() throws IOException, ConfigurationException {
         // load filters for further processing
         Filters filters = new Filters();
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java
index 0f10f36..92d2a2e 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/GenerateMetadataMojo.java
@@ -49,6 +49,7 @@
 
 import org.apache.commons.io.FilenameUtils;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
+import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
 import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.filter.DefaultPathFilter;
@@ -627,7 +628,7 @@
         return sourceFilters.getSourceAsString();
     }
 
-    private void mergeFilters(DefaultWorkspaceFilter dst, DefaultWorkspaceFilter src) {
+    private void mergeFilters(DefaultWorkspaceFilter dst, WorkspaceFilter src) {
         for (PathFilterSet fs: src.getFilterSets()) {
             // check for collision
             for (PathFilterSet mfs: dst.getFilterSets()) {
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java
index 05acaeb..08dee46 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/VaultMojo.java
@@ -20,6 +20,8 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -230,14 +232,15 @@
      */
     protected void addFileToArchive(MavenResourcesExecution mavenResourcesExecution, ContentPackageArchiver archiver, File sourceFile,
             String destFileName) throws MavenFilteringException {
-        if ((destFileName.startsWith(Constants.ROOT_DIR) && enableJcrRootFiltering) ||
-            (destFileName.startsWith(Constants.ROOT_DIR) && enableMetaInfFiltering)) {
+        Path destFile = Paths.get(destFileName);
+        if ((destFile.startsWith(Constants.ROOT_DIR) && enableJcrRootFiltering) ||
+            (destFile.startsWith(Constants.META_INF) && enableMetaInfFiltering)) {
             getLog().info("Apply filtering to " + sourceFile);
             Resource resource = new Resource();
             resource.setDirectory(sourceFile.getParent());
             resource.setIncludes(Collections.singletonList(sourceFile.getName()));
             resource.setFiltering(true);
-            File newTargetDirectory = applyFiltering(mavenResourcesExecution, resource);
+            File newTargetDirectory = applyFiltering(destFile.getParent().toString(), mavenResourcesExecution, resource);
             sourceFile = new File(newTargetDirectory, sourceFile.getName());
         }
         archiver.addFile(sourceFile, destFileName);
@@ -252,9 +255,9 @@
      * @throws MavenFilteringException in case filtering failed
      */
     protected void addFileSetToArchive(MavenResourcesExecution mavenResourcesExecution, ContentPackageArchiver archiver, DefaultFileSet fileSet) throws MavenFilteringException {
-        // TODO: what to do with file sets not having any prefix set (workDirectory)
+        // ignore directories added with no prefix (workDirectory)
         if ((fileSet.getPrefix().startsWith(Constants.ROOT_DIR) && enableJcrRootFiltering) ||
-            (fileSet.getPrefix().startsWith(Constants.ROOT_DIR) && enableMetaInfFiltering)) {
+            (fileSet.getPrefix().startsWith(Constants.META_INF) && enableMetaInfFiltering)) {
             
             getLog().info("Apply filtering to FileSet below " + fileSet.getDirectory());
             Resource resource = new Resource();
@@ -267,20 +270,20 @@
                 // default exclude are managed via mavenResourcesExecution
             }
             resource.setFiltering(true);
-            File newTargetDirectory = applyFiltering(mavenResourcesExecution, resource);
+            File newTargetDirectory = applyFiltering(fileSet.getPrefix(), mavenResourcesExecution, resource);
             fileSet.setDirectory(newTargetDirectory);
         }
-
         archiver.addFileSet(fileSet);
     }
 
-    private @NotNull File applyFiltering(MavenResourcesExecution mavenResourcesExecution, Resource resource) throws MavenFilteringException {
+    private @NotNull File applyFiltering(String prefix, MavenResourcesExecution mavenResourcesExecution, Resource resource) throws MavenFilteringException {
         File targetPath = new File(project.getBuild().getDirectory(), "filteredFiles");
+        mavenResourcesExecution.setOutputDirectory(targetPath);
+        targetPath = new File(targetPath, prefix);
         // which path to set as target (is a temporary path)
         getLog().debug("Applying filtering to resource " + resource);
         resource.setTargetPath(targetPath.getPath());
         mavenResourcesExecution.setResources(Collections.singletonList(resource));
-        mavenResourcesExecution.setOutputDirectory(targetPath);
         mavenResourcesFiltering.filterResources(mavenResourcesExecution);
         return targetPath;
     }
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/FilteringIT.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/FilteringIT.java
index 3b7ca65..c7e33e9 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/FilteringIT.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/FilteringIT.java
@@ -26,30 +26,45 @@
  */
 public class FilteringIT {
 
-    private ProjectBuilder verify(String projectName, String expectedFilesWithChecksumsFile, boolean enableJcrRootFiltering, boolean enableMetaInfFiltering, String ... goals) throws VerificationException, IOException {
+    private ProjectBuilder verify(String projectName, boolean enableJcrRootFiltering, boolean enableMetaInfFiltering, String ... goals) throws VerificationException, IOException {
         return new ProjectBuilder()
                 .setTestProjectDir("filtering-tests/" + projectName)
                 .setTestGoals(goals)
                 .setProperty("vault.enableMetaInfFiltering", Boolean.toString(enableMetaInfFiltering))
                 .setProperty("vault.enableJcrRootFiltering", Boolean.toString(enableJcrRootFiltering))
-                .setExpectedFilesWithChecksumsFile(expectedFilesWithChecksumsFile)
-                .build() 
-                .verifyExpectedFilesChecksum();
+                .build()
+                .verifyExpectedFiles();
     }
 
-    /**
-     * Tests if a pom with no filter definition at all fails.
-     */
     @Test
     public void test_simple_filter_with_filtering_enabled() throws Exception {
-        verify("simple-filter", "expected-files-with-checksums-filtered.txt", true, true);
+        verify("simple-filter", true, true)
+            .verifyExpectedFileChecksum("META-INF/vault/properties.xml", "d4c457e5")
+            .verifyExpectedFileChecksum("jcr_root/apps/bar/test1.properties", "10791371")
+            .verifyExpectedFileChecksum("jcr_root/apps/foo/test2.properties", "7563f01d");
     }
 
-    /**
-     * Tests if a pom with no filter definition at all fails.
-     */
     @Test
     public void test_simple_filter_with_filtering_disabled() throws Exception {
-        verify("simple-filter", "expected-files-with-checksums-unfiltered.txt", false, false);
+        verify("simple-filter", false, false)
+        .verifyExpectedFileChecksum("META-INF/vault/properties.xml", "e04970b0")
+        .verifyExpectedFileChecksum("jcr_root/apps/bar/test1.properties", "34e5a01d")
+        .verifyExpectedFileChecksum("jcr_root/apps/foo/test2.properties", "a41ae6f8");
+    }
+
+    @Test
+    public void test_simple_filter_with_filtering_partially_enabled() throws Exception {
+        verify("simple-filter", true, false)
+        .verifyExpectedFileChecksum("META-INF/vault/properties.xml", "e04970b0")
+        .verifyExpectedFileChecksum("jcr_root/apps/bar/test1.properties", "10791371")
+        .verifyExpectedFileChecksum("jcr_root/apps/foo/test2.properties", "7563f01d");
+    }
+
+    @Test
+    public void test_simple_filter_with_filtering_partially_enabled2() throws Exception {
+        verify("simple-filter", false, true)
+        .verifyExpectedFileChecksum("META-INF/vault/properties.xml", "d4c457e5")
+        .verifyExpectedFileChecksum("jcr_root/apps/bar/test1.properties", "34e5a01d")
+        .verifyExpectedFileChecksum("jcr_root/apps/foo/test2.properties", "a41ae6f8");
     }
 }
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
index 10b2081..d9759f0 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/ProjectBuilder.java
@@ -333,39 +333,45 @@
         for (String expectedEntryWithChecksum : expectedEntriesWithChecksums) {
             // split name and checksum
             String[] parts = expectedEntryWithChecksum.split(" ", 2);
-            final String name = parts[0];
-            // the second part must be a hexadecimal CRC32 checksum
-            final long expectedChecksum = Long.parseLong(parts[1], 16);
-            try (JarFile jar = new JarFile(testPackageFile)) {
-                JarEntry entry = jar.getJarEntry(name);
-                if (entry == null) {
-                    fail("Could not find entry with name " + name + " in package " + testPackageFile);
-                }
-                Assert.assertThat(entry, new JarEntryMatcher(jar, expectedChecksum));
+            verifyExpectedFileChecksum(parts[0], parts[1]);
+        }
+        return this;
+    }
+
+    public ProjectBuilder verifyExpectedFileChecksum(String name, String checksum) throws IOException {
+        // the second part must be a hexadecimal CRC32 checksum
+        final long expectedChecksum = Long.parseLong(checksum, 16);
+        try (JarFile jar = new JarFile(testPackageFile)) {
+            JarEntry entry = jar.getJarEntry(name);
+            if (entry == null) {
+                fail("Could not find entry with name " + name + " in package " + testPackageFile);
             }
+            Assert.assertThat(entry, new JarEntryMatcher(name, jar, expectedChecksum));
         }
         return this;
     }
 
     private final static class JarEntryMatcher extends TypeSafeMatcher<JarEntry> {
 
+        private final String name;
         private final long expectedCrc; 
         private final JarFile jarFile;
-        public JarEntryMatcher(JarFile jarFile, long expectedCrc) {
+        public JarEntryMatcher(String name, JarFile jarFile, long expectedCrc) {
+            this.name = name;
             this.jarFile = jarFile;
             this.expectedCrc = expectedCrc;
         }
 
         @Override
         protected void describeMismatchSafely(JarEntry item, Description mismatchDescription) {
-            mismatchDescription.appendText("was Jar entry with CRC '").appendText(Long.toHexString(item.getCrc())).appendText("'");
+            mismatchDescription.appendText("was Jar entry with name ").appendValue(item.getName()).appendText(" having the CRC ").appendValue(Long.toHexString(item.getCrc()));
             try (Reader reader = new BoundedReader(new InputStreamReader(jarFile.getInputStream(item), StandardCharsets.UTF_8), 8000)) {
                 String content = IOUtils.toString(reader);
                 // make new line visible
                 content = content.replaceAll("\r", Matcher.quoteReplacement("\r")).replaceAll("\n",  Matcher.quoteReplacement("\n"));
-                mismatchDescription.appendText("(").appendValue(content).appendText(")");
+                mismatchDescription.appendText(" (").appendValue(content).appendText(")");
             } catch (IOException e) {
-                mismatchDescription.appendText("(Could not extract value due to exception ").appendValue(e).appendText(")");
+                mismatchDescription.appendText(" (Could not extract value due to exception ").appendValue(e).appendText(")");
             }
         }
 
@@ -376,7 +382,7 @@
 
         @Override
         public void describeTo(Description description) {
-            description.appendText("having a crc ").appendText(Long.toHexString(expectedCrc));
+            description.appendText("Jar entry with name ").appendValue(name).appendText(" having the CRC ").appendValue(Long.toHexString(expectedCrc));
         }
     }
 
diff --git a/src/test/resources/test-projects/filtering-tests/simple-filter/META-INF/vault/properties.xml b/src/test/resources/test-projects/filtering-tests/simple-filter/META-INF/vault/properties.xml
new file mode 100644
index 0000000..618662e
--- /dev/null
+++ b/src/test/resources/test-projects/filtering-tests/simple-filter/META-INF/vault/properties.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You 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.
+  -->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+<comment>FileVault Package Properties</comment>
+<entry key="createdBy">admin</entry>
+<entry key="name">${customKey}</entry>
+<entry key="lastModified">2011-11-15T09:43:22.972+01:00</entry>
+<entry key="lastModifiedBy">admin</entry>
+<entry key="created">2011-11-15T09:43:22.993+01:00</entry>
+<entry key="buildCount">1</entry>
+<entry key="version"/>
+<entry key="dependencies"/>
+<entry key="packageFormatVersion">2</entry>
+<entry key="description"/>
+<entry key="lastWrapped">2011-11-15T09:43:22.972+01:00</entry>
+<entry key="group"/>
+<entry key="lastWrappedBy">admin</entry>
+<entry key="acHandling">overwrite</entry>
+</properties>
diff --git a/src/test/resources/test-projects/filtering-tests/simple-filter/expected-files-with-checksums-filtered.txt b/src/test/resources/test-projects/filtering-tests/simple-filter/expected-files-with-checksums-filtered.txt
deleted file mode 100644
index 5932341..0000000
--- a/src/test/resources/test-projects/filtering-tests/simple-filter/expected-files-with-checksums-filtered.txt
+++ /dev/null
@@ -1 +0,0 @@
-jcr_root/apps/foo/test.properties 10791371
\ No newline at end of file
diff --git a/src/test/resources/test-projects/filtering-tests/simple-filter/expected-files-with-checksums-unfiltered.txt b/src/test/resources/test-projects/filtering-tests/simple-filter/expected-files-with-checksums-unfiltered.txt
deleted file mode 100644
index 0019059..0000000
--- a/src/test/resources/test-projects/filtering-tests/simple-filter/expected-files-with-checksums-unfiltered.txt
+++ /dev/null
@@ -1 +0,0 @@
-jcr_root/apps/foo/test.properties 34e5a01d
\ No newline at end of file
diff --git a/src/test/resources/test-projects/filtering-tests/simple-filter/expected-files.txt b/src/test/resources/test-projects/filtering-tests/simple-filter/expected-files.txt
new file mode 100644
index 0000000..2a8bd38
--- /dev/null
+++ b/src/test/resources/test-projects/filtering-tests/simple-filter/expected-files.txt
@@ -0,0 +1,18 @@
+META-INF/
+META-INF/MANIFEST.MF
+META-INF/maven/
+META-INF/maven/org.apache.jackrabbit.filevault/
+META-INF/maven/org.apache.jackrabbit.filevault/package-plugin-test-pkg/
+META-INF/maven/org.apache.jackrabbit.filevault/package-plugin-test-pkg/pom.properties
+META-INF/maven/org.apache.jackrabbit.filevault/package-plugin-test-pkg/pom.xml
+META-INF/vault/
+META-INF/vault/config.xml
+META-INF/vault/filter.xml
+META-INF/vault/properties.xml
+META-INF/vault/settings.xml
+jcr_root/
+jcr_root/apps/
+jcr_root/apps/bar/
+jcr_root/apps/bar/test1.properties
+jcr_root/apps/foo/
+jcr_root/apps/foo/test2.properties
\ No newline at end of file
diff --git a/src/test/resources/test-projects/filtering-tests/simple-filter/jcr_root/apps/foo/test.properties b/src/test/resources/test-projects/filtering-tests/simple-filter/jcr_root/apps/bar/test1.properties
similarity index 100%
rename from src/test/resources/test-projects/filtering-tests/simple-filter/jcr_root/apps/foo/test.properties
rename to src/test/resources/test-projects/filtering-tests/simple-filter/jcr_root/apps/bar/test1.properties
diff --git a/src/test/resources/test-projects/filtering-tests/simple-filter/jcr_root/apps/foo/test2.properties b/src/test/resources/test-projects/filtering-tests/simple-filter/jcr_root/apps/foo/test2.properties
new file mode 100644
index 0000000..2ea902c
--- /dev/null
+++ b/src/test/resources/test-projects/filtering-tests/simple-filter/jcr_root/apps/foo/test2.properties
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+#
+# only values which are not OS/environment specific should be validated here
+project.name=${project.name}
+customKey2=${customKey}
\ No newline at end of file
diff --git a/src/test/resources/test-projects/filtering-tests/simple-filter/pom.xml b/src/test/resources/test-projects/filtering-tests/simple-filter/pom.xml
index 6b9c325..8d815b5 100644
--- a/src/test/resources/test-projects/filtering-tests/simple-filter/pom.xml
+++ b/src/test/resources/test-projects/filtering-tests/simple-filter/pom.xml
@@ -37,6 +37,9 @@
                 <configuration>
                     <filters>
                         <filter>
+                            <root>/apps/bar</root>
+                        </filter>
+                        <filter>
                             <root>/apps/foo</root>
                         </filter>
                     </filters>
