diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/FileScannedStore.java b/datamover/source/java/ch/systemsx/cisd/datamover/FileScannedStore.java
index 893f4dfa3cd551322a22c413ea4e560f6dac2491..ecde7ec5bc92ac5a827d264c5609e702531f4a47 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/FileScannedStore.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/FileScannedStore.java
@@ -22,7 +22,7 @@ import ch.systemsx.cisd.common.logging.ISimpleLogger;
 import ch.systemsx.cisd.common.utilities.StoreItem;
 import ch.systemsx.cisd.common.utilities.DirectoryScanningTimerTask.IScannedStore;
 import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
-import ch.systemsx.cisd.datamover.utils.QuietPeriodFileFilter;
+import ch.systemsx.cisd.datamover.utils.IStoreItemFilter;
 
 /**
  * An <code>IScannedStore</code> implementation which is based on {@link IFileStore}.
@@ -33,12 +33,12 @@ final class FileScannedStore implements IScannedStore
 {
     private final IFileStore fileStore;
 
-    private final QuietPeriodFileFilter quietPeriodFileFilter;
+    private final IStoreItemFilter storeItemFilter;
 
-    FileScannedStore(final IFileStore fileStore, final QuietPeriodFileFilter quietPeriodFileFilter)
+    FileScannedStore(final IFileStore fileStore, final IStoreItemFilter storeItemFilter)
     {
         this.fileStore = fileStore;
-        this.quietPeriodFileFilter = quietPeriodFileFilter;
+        this.storeItemFilter = storeItemFilter;
     }
 
     private final StoreItem[] filterReadyToProcess(final StoreItem[] items)
@@ -60,7 +60,7 @@ final class FileScannedStore implements IScannedStore
         {
             return false;
         }
-        return quietPeriodFileFilter.accept(item);
+        return storeItemFilter.accept(item);
     }
 
     //
diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java b/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java
index c7a9702296646eb80b8280f23049a8b86fec48cc..5917df952936dc668ec4eb50ff1cda0394dfcd05 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java
@@ -41,6 +41,7 @@ import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
 import ch.systemsx.cisd.datamover.filesystem.intf.IFileSysOperationsFactory;
 import ch.systemsx.cisd.datamover.filesystem.intf.IPathMover;
 import ch.systemsx.cisd.datamover.filesystem.intf.IRecoverableTimerTaskFactory;
+import ch.systemsx.cisd.datamover.utils.IStoreItemFilter;
 import ch.systemsx.cisd.datamover.utils.LocalBufferDirs;
 import ch.systemsx.cisd.datamover.utils.QuietPeriodFileFilter;
 
@@ -72,7 +73,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory
 
     private final String prefixForIncoming;
 
-    private final QuietPeriodFileFilter quietPeriodFileFilter;
+    private final IStoreItemFilter storeItemFilter;
 
     public static final DataMoverProcess createMovingProcess(Parameters parameters,
             IFileSysOperationsFactory factory, LocalBufferDirs bufferDirs)
@@ -99,7 +100,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory
         this.pathMover = factory.getMover();
         this.factory = factory;
         this.bufferDirs = bufferDirs;
-        this.quietPeriodFileFilter = new QuietPeriodFileFilter(incomingStore, parameters, timeProvider);
+        this.storeItemFilter = new QuietPeriodFileFilter(incomingStore, parameters, timeProvider);
     }
     
     public TimerTask createRecoverableTimerTask()
@@ -112,7 +113,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory
         final IStoreHandler pathHandler = createIncomingMovingPathHandler();
         final DirectoryScanningTimerTask movingTask =
                 new DirectoryScanningTimerTask(new FileScannedStore(incomingStore,
-                        quietPeriodFileFilter), bufferDirs.getCopyInProgressDir(), pathHandler,
+                        storeItemFilter), bufferDirs.getCopyInProgressDir(), pathHandler,
                         NUMBER_OF_ERRORS_IN_LISTING_IGNORED);
         return new DataMoverProcess(movingTask, "Mover of Incoming Data", this);
     }
diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/utils/IStoreItemFilter.java b/datamover/source/java/ch/systemsx/cisd/datamover/utils/IStoreItemFilter.java
new file mode 100644
index 0000000000000000000000000000000000000000..401daad321755fb2cdfe33caf2362f88d04e9670
--- /dev/null
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/utils/IStoreItemFilter.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2008 ETH Zuerich, CISD
+ *
+ * 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.
+ */
+
+package ch.systemsx.cisd.datamover.utils;
+
+import ch.systemsx.cisd.common.utilities.StoreItem;
+
+/**
+ * Filter of {@link StoreItem} objects. Note, that a filter can be stateful. That is, invocations
+ * of {@link #accept(StoreItem)} with the same argument might return different values.
+ *
+ * @author Franz-Josef Elmer
+ */
+public interface IStoreItemFilter
+{
+    /**
+     * Accepts the specified item or not.
+     * 
+     * @return <code>true</code> if the item is accepted (i.e. passes the filter).
+     */
+    public boolean accept(StoreItem item);
+
+}
\ No newline at end of file
diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/utils/QuietPeriodFileFilter.java b/datamover/source/java/ch/systemsx/cisd/datamover/utils/QuietPeriodFileFilter.java
index 9c75c42c35bbadbae3355ab7837746d9ea9294d0..c787e7fdb0adfa192c0da097665550a1d1acf336 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/utils/QuietPeriodFileFilter.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/utils/QuietPeriodFileFilter.java
@@ -45,7 +45,7 @@ import ch.systemsx.cisd.datamover.intf.ITimingParameters;
  * 
  * @author Bernd Rinn
  */
-public class QuietPeriodFileFilter
+public class QuietPeriodFileFilter implements IStoreItemFilter
 {
     // @Private
     static final int CLEANUP_TO_QUIET_PERIOD_RATIO = 10;
diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/utils/StoreItemFilterBank.java b/datamover/source/java/ch/systemsx/cisd/datamover/utils/StoreItemFilterBank.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5162ddc671ea97f8c08f260b4f07022429a5720
--- /dev/null
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/utils/StoreItemFilterBank.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2008 ETH Zuerich, CISD
+ *
+ * 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.
+ */
+
+package ch.systemsx.cisd.datamover.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import ch.systemsx.cisd.common.utilities.StoreItem;
+
+/**
+ * A filter bank of {@link IStoreItemFilter} instances. A {@link StoreItem} tries to passes the
+ * filters of the filter bank in the order the filters have been added (with
+ * {@link #add(IStoreItemFilter)}). If the item does not pass a filter (i.e.
+ * {@link IStoreItemFilter#accept(StoreItem)} return <code>false</code>) it does not pass the
+ * filter bank. Note, that in this case the other filter are not checked.
+ * 
+ * @author Franz-Josef Elmer
+ */
+public class StoreItemFilterBank implements IStoreItemFilter
+{
+    private final List<IStoreItemFilter> filters = new ArrayList<IStoreItemFilter>();
+    
+    /**
+     * Adds the specified filter.
+     */
+    public void add(IStoreItemFilter filter)
+    {
+        filters.add(filter);
+    }
+    
+    /**
+     * Accepts the specified item if it accepted by all filters.
+     */
+    public boolean accept(StoreItem item)
+    {
+        for (IStoreItemFilter filter : filters)
+        {
+            if (filter.accept(item) == false)
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+}