diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/utils/FileScanner.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/utils/FileScanner.java
index ce9d834551f5a316c720d598d807f1d56dec2973..3031aa3eed1051abbed693c8146c1949bd5bcdeb 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/utils/FileScanner.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/utils/FileScanner.java
@@ -36,8 +36,8 @@ public class FileScanner
     {
         String patternAsRegEx = pattern.replace("$", "\\$");
         patternAsRegEx = patternAsRegEx.replace(".", "\\.");
-        patternAsRegEx = patternAsRegEx.replace("*", ".*");
-        patternAsRegEx = patternAsRegEx.replace(".*.*/", "(.+/)*");
+        patternAsRegEx = patternAsRegEx.replace("**/", "(.+/){0,}");
+        patternAsRegEx = patternAsRegEx.replace("*", "[^/]*");
         patternAsRegEx = patternAsRegEx.replace("?", ".");
         pathRegex = Pattern.compile("/" + patternAsRegEx);
     }
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/utils/FileScannerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/utils/FileScannerTest.java
index d28e11d4be16f8ac3419d1dc8c33038a3a494bb0..15bce1eedbe464be5b0459313eb37449fc76e7f6 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/utils/FileScannerTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/utils/FileScannerTest.java
@@ -54,6 +54,7 @@ public class FileScannerTest extends AbstractFileSystemTestCase
             }
             beta = dir(root, "beta");
             {
+                file(beta, "b.txt");
                 File one = dir(beta, "1");
                 {
                     hi = file(one, "hi.txt");
@@ -107,10 +108,10 @@ public class FileScannerTest extends AbstractFileSystemTestCase
     @Test
     public void testFindAll()
     {
-        FileScanner scanner = new FileScanner("*");
+        FileScanner scanner = new FileScanner("**/*");
         
         List<File> files = scanner.scan(beta);
-        assertEquals(3, files.size());
+        assertEquals(4, files.size());
         
         files = scanner.scan(hi);
         assertEquals(hi, files.get(0));
@@ -127,7 +128,20 @@ public class FileScannerTest extends AbstractFileSystemTestCase
         Collections.sort(files);
         assertEquals(hello, files.get(0));
         assertEquals(hi, files.get(1));
-        assertEquals(2, files.size());
+        assertEquals("b.txt", files.get(2).getName());
+        assertEquals(3, files.size());
+    }
+    
+    @Test
+    public void testFindTopLevelTextFiles()
+    {
+        FileScanner scanner = new FileScanner("*.txt");
+        
+        List<File> files = scanner.scan(beta);
+        
+        Collections.sort(files);
+        assertEquals("b.txt", files.get(0).getName());
+        assertEquals(1, files.size());
     }
     
     @Test