diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ChainedDataSetMigrationTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ChainedDataSetMigrationTask.java
index cb24ee5d45110a1720e75b728535b4d7571e96b3..f4b62ecebdbf2f0bc6b62b88d2a8dbefcebbc1b4 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ChainedDataSetMigrationTask.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/plugins/ChainedDataSetMigrationTask.java
@@ -36,20 +36,23 @@ import ch.systemsx.cisd.etlserver.IMaintenanceTask;
 
 /**
  * Maintenance task migrating all data sets of a store by a chain of {@link IMigrator} instances.
- *
+ * 
  * @author Franz-Josef Elmer
  */
 public class ChainedDataSetMigrationTask implements IMaintenanceTask
 {
     public static final String MIGRATORS_PROPERTY = "migrators";
-    public  static final String STORE_ROOT_PROPERTY = "storeRoot";
-    
-    private static final Pattern UUID_PATTERN = Pattern.compile("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}");
-    
+
+    public static final String STORE_ROOT_PROPERTY = "storeRoot";
+
+    private static final Pattern UUID_PATTERN =
+            Pattern.compile("[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}");
+
     private static final Logger operationLog =
-        LogFactory.getLogger(LogCategory.OPERATION, ChainedDataSetMigrationTask.class);
-    
+            LogFactory.getLogger(LogCategory.OPERATION, ChainedDataSetMigrationTask.class);
+
     private File storeRoot;
+
     private List<IMigrator> migrators;
 
     public void setUp(String pluginName, Properties properties)
@@ -62,7 +65,8 @@ public class ChainedDataSetMigrationTask implements IMaintenanceTask
                     + " does not exist or is not a directory.");
         }
         SectionProperties[] sectionProperties =
-                PropertyParametersUtil.extractSectionProperties(properties, MIGRATORS_PROPERTY, false);
+                PropertyParametersUtil.extractSectionProperties(properties, MIGRATORS_PROPERTY,
+                        false);
         migrators = new ArrayList<IMigrator>();
         for (SectionProperties props : sectionProperties)
         {
@@ -86,7 +90,7 @@ public class ChainedDataSetMigrationTask implements IMaintenanceTask
             operationLog.info("Chain of migrators have been set up: " + builder);
         }
     }
-    
+
     public void execute()
     {
         File[] files = storeRoot.listFiles(new FileFilter()
@@ -113,17 +117,30 @@ public class ChainedDataSetMigrationTask implements IMaintenanceTask
             }
         }
     }
-    
+
     private boolean migrate(File dbInstanceDir, IMigrator migrator)
     {
         List<File> migratedDataSets = new ArrayList<File>();
         List<File> failedDataSets = new ArrayList<File>();
         for (File l1 : dbInstanceDir.listFiles())
         {
+            // The OS may put files into these folders (e.g., .DS_Store)
+            if (false == l1.isDirectory())
+            {
+                continue;
+            }
             for (File l2 : l1.listFiles())
             {
+                if (false == l2.isDirectory())
+                {
+                    continue;
+                }
                 for (File l3 : l2.listFiles())
                 {
+                    if (false == l3.isDirectory())
+                    {
+                        continue;
+                    }
                     for (File dataset : l3.listFiles())
                     {
                         boolean success = migrator.migrate(dataset);