diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java b/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java
index a9d04608b946b0fe6a30b7a0ab45e39a377ae859..9d5386f278068d9d93349c5545c2f12623bee402 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java
@@ -32,6 +32,7 @@ import ch.systemsx.cisd.common.process.ProcessResult;
 import ch.systemsx.cisd.common.utilities.FileUtilities;
 import ch.systemsx.cisd.common.utilities.OSUtilities;
 import ch.systemsx.cisd.common.utilities.StoreItem;
+import ch.systemsx.cisd.datamover.DatamoverConstants;
 import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
 import ch.systemsx.cisd.datamover.filesystem.intf.StoreItemLocation;
 
@@ -57,6 +58,11 @@ public class DataCompletedFilter implements IStoreItemFilter
     private final static Logger notificationLog =
             LogFactory.getLogger(LogCategory.NOTIFY, DataCompletedFilter.class);
 
+    private final ConditionalNotificationLogger conditionalNotificationLog =
+        new ConditionalNotificationLogger(operationLog, notificationLog,
+                DatamoverConstants.IGNORED_ERROR_COUNT_BEFORE_NOTIFICATION);
+
+
     private final IFileStore fileStore;
 
     private final File dataCompletedScript;
@@ -156,13 +162,11 @@ public class DataCompletedFilter implements IStoreItemFilter
                                     describeProcessResult(result), commandLine);
             if (ok)
             {
-                if (notificationLog.isInfoEnabled())
-                {
-                    notificationLog.info(message);
-                }
+                conditionalNotificationLog.reset(null);
+                conditionalNotificationLog.log(LogLevel.INFO, message);
             } else
             {
-                notificationLog.error(message);
+                conditionalNotificationLog.log(LogLevel.ERROR, message);
             }
             result.log();
             lastProcessResult = result;
diff --git a/datamover/sourceTest/java/ch/systemsx/cisd/datamover/IncomingProcessorTest.java b/datamover/sourceTest/java/ch/systemsx/cisd/datamover/IncomingProcessorTest.java
index eab28d57612fa0781cfe86e2ce862ca23330598d..ed3863331a035007a8c17c4e272a58fe662c7343 100644
--- a/datamover/sourceTest/java/ch/systemsx/cisd/datamover/IncomingProcessorTest.java
+++ b/datamover/sourceTest/java/ch/systemsx/cisd/datamover/IncomingProcessorTest.java
@@ -48,7 +48,6 @@ import ch.systemsx.cisd.common.logging.LogInitializer;
 import ch.systemsx.cisd.common.process.ProcessExecutionHelper;
 import ch.systemsx.cisd.common.test.LogMonitoringAppender;
 import ch.systemsx.cisd.common.utilities.FileUtilities;
-import ch.systemsx.cisd.common.utilities.IExitHandler;
 import ch.systemsx.cisd.common.utilities.ITimerTaskStatusProvider;
 import ch.systemsx.cisd.common.utilities.MockTimeProvider;
 import ch.systemsx.cisd.common.utilities.OSUtilities;
@@ -100,8 +99,6 @@ public final class IncomingProcessorTest
 
     private File incomingDir;
 
-    private IExitHandler exitHandler;
-
     private File copyInProgressDir;
 
     private File copyCompleteDir;
@@ -139,7 +136,6 @@ public final class IncomingProcessorTest
         fileSysOpertationFactory = context.mock(IFileSysOperationsFactory.class);
         mover = context.mock(IPathMover.class);
         remover = context.mock(IPathRemover.class);
-        exitHandler = context.mock(IExitHandler.class);
 
         FileUtilities.deleteRecursively(TEST_FOLDER);
         TEST_FOLDER.mkdirs();
@@ -253,10 +249,10 @@ public final class IncomingProcessorTest
         final DataMoverProcess process =
                 createProcess("--" + PropertyNames.INCOMING_TARGET, incomingDir.toString(), "-q",
                         "1", "--" + PropertyNames.DATA_COMPLETED_SCRIPT, exampleScript.toString());
-        final LogMonitoringAppender notifyAppender =
-                LogMonitoringAppender.addAppender(LogCategory.NOTIFY,
+        final LogMonitoringAppender operationAppender1 =
+                LogMonitoringAppender.addAppender(LogCategory.OPERATION,
                         "Processing status of data completed script has changed");
-        final LogMonitoringAppender operationAppender =
+        final LogMonitoringAppender operationAppender2 =
                 LogMonitoringAppender.addAppender(LogCategory.OPERATION, "Running command",
                         "process returned with exit value 0");
 
@@ -265,8 +261,8 @@ public final class IncomingProcessorTest
         assertFalse(errorMarker.exists());
         dataMoverTimerTask.run(); // 2. round finds that quiet period is over
         assertFalse(errorMarker.exists());
-        notifyAppender.verifyLogHasHappened();
-        operationAppender.verifyLogHasHappened();
+        operationAppender1.verifyLogHasHappened();
+        operationAppender2.verifyLogHasHappened();
 
         logRecorder.resetLogContent();
         dataMoverTimerTask.run(); // 3. round does not change status, thus no log
@@ -295,21 +291,21 @@ public final class IncomingProcessorTest
         final TimerTask dataMoverTimerTask = getInstrumentedTimerTaskFrom(process);
         dataMoverTimerTask.run(); // 1. round finds a file to process
         dataMoverTimerTask.run(); // 2. round finds that quiet period is over
-        final LogMonitoringAppender notifyAppender =
-                LogMonitoringAppender.addAppender(LogCategory.NOTIFY,
+        final LogMonitoringAppender operationAppender =
+                LogMonitoringAppender.addAppender(LogCategory.OPERATION,
                         "Processing status of data completed script has changed");
 
         logRecorder.resetLogContent();
         dataMoverTimerTask.run(); // 3. round does not change status, thus no log
         assertEquals("", logRecorder.getLogContent());
-        notifyAppender.verifyLogHasNotHappened();
+        operationAppender.verifyLogHasNotHappened();
 
         logRecorder.resetLogContent();
-        notifyAppender.reset();
+        operationAppender.reset();
         TEST_FILE.createNewFile();
         dataMoverTimerTask.run(); // 4. round finds changed status, thus log
         assertTrue(logRecorder.getLogContent().length() > 0);
-        notifyAppender.verifyLogHasHappened();
+        operationAppender.verifyLogHasHappened();
 
         context.assertIsSatisfied();
     }
@@ -341,7 +337,7 @@ public final class IncomingProcessorTest
 
     private DataMoverProcess createProcess(final String... args)
     {
-        final Parameters parameters = new Parameters(args, exitHandler);
+        final Parameters parameters = new Parameters(args);
         final LocalBufferDirs localBufferDirs =
                 new LocalBufferDirs(new HostAwareFileWithHighwaterMark(TEST_FOLDER),
                         COPY_IN_PROGRESS_DIR, COPY_COMPLETE_DIR, READY_TO_MOVE_DIR, TEMP_DIR);