diff --git a/common/source/java/ch/systemsx/cisd/common/io/DefaultFileBasedHierarchicalContent.java b/common/source/java/ch/systemsx/cisd/common/io/DefaultFileBasedHierarchicalContent.java
index 8132da599f80da71b4820eb1326f7c5c4ea162e1..05a679ee81a6cd151f3cf84e7743554e16a67f86 100644
--- a/common/source/java/ch/systemsx/cisd/common/io/DefaultFileBasedHierarchicalContent.java
+++ b/common/source/java/ch/systemsx/cisd/common/io/DefaultFileBasedHierarchicalContent.java
@@ -207,15 +207,13 @@ class DefaultFileBasedHierarchicalContent implements IHierarchicalContent
         assert dirNode.isDirectory() : "expected a directory node, got: " + dirNode;
         for (IHierarchicalContentNode childNode : dirNode.getChildNodes())
         {
+            if (filter.accept(childNode))
+            {
+                result.add(childNode);
+            }
             if (childNode.isDirectory())
             {
                 findMatchingNodes(childNode, filter, result);
-            } else
-            {
-                if (filter.accept(childNode))
-                {
-                    result.add(childNode);
-                }
             }
         }
     }
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/io/DefaultFileBasedHierarchicalContentTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/io/DefaultFileBasedHierarchicalContentTest.java
index f594e17c0e51d526b291e23b0093aefde91c77f0..cdbfd78c8323b097e0dd271c3bef561c898d865f 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/io/DefaultFileBasedHierarchicalContentTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/io/DefaultFileBasedHierarchicalContentTest.java
@@ -343,12 +343,13 @@ public class DefaultFileBasedHierarchicalContentTest extends AbstractFileSystemT
         // matches in levels > 1
         List<IHierarchicalContentNode> matchingSubDirFiles =
                 rootContent.listMatchingNodes("subDir/.*");
-        assertEquals(4, matchingSubDirFiles.size());
+        assertEquals(5, matchingSubDirFiles.size());
         sortNodes(matchingSubDirFiles);
-        checkNodeMatchesFile(matchingSubDirFiles.get(0), subFile1);
-        checkNodeMatchesFile(matchingSubDirFiles.get(1), subFile2);
-        checkNodeMatchesFile(matchingSubDirFiles.get(2), subFile3);
-        checkNodeMatchesFile(matchingSubDirFiles.get(3), subSubFile);
+        checkNodeMatchesFile(matchingSubDirFiles.get(0), subSubDir);
+        checkNodeMatchesFile(matchingSubDirFiles.get(1), subFile1);
+        checkNodeMatchesFile(matchingSubDirFiles.get(2), subFile2);
+        checkNodeMatchesFile(matchingSubDirFiles.get(3), subFile3);
+        checkNodeMatchesFile(matchingSubDirFiles.get(4), subSubFile);
 
         context.assertIsSatisfied();
     }