diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java b/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java
index da6af97a52f423f690a0c43f4f4f519d5cf968aa..9363d1fd3f79616c90d80ecbffe0e1aa1dd722ab 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java
+++ b/common/source/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTask.java
@@ -175,8 +175,11 @@ public final class DirectoryScanningTimerTask extends TimerTask implements ISelf
 
     private File[] listFiles()
     {
-        final boolean logErrors = (errorCountReadingDirectory == ignoredErrorCount); // Avoid mailbox flooding.
-        final ISimpleLogger errorLogger = logErrors ? createSimpleErrorLogger() : null;
+        final boolean logNotifyError = (errorCountReadingDirectory == ignoredErrorCount); // Avoid mailbox flooding.
+        final boolean logOperationError = (errorCountReadingDirectory < ignoredErrorCount);
+        final ISimpleLogger errorLogger =
+                logNotifyError ? createSimpleErrorLogger(LogCategory.NOTIFY)
+                        : (logOperationError ? createSimpleErrorLogger(LogCategory.OPERATION) : null);
 
         final File[] paths = FileUtilities.tryListFiles(sourceDirectory, filter, errorLogger);
         if (errorCountReadingDirectory > ignoredErrorCount && paths != null)
@@ -196,13 +199,19 @@ public final class DirectoryScanningTimerTask extends TimerTask implements ISelf
         return (paths == null) ? new File[0] : paths;
     }
 
-    private ISimpleLogger createSimpleErrorLogger()
+    private ISimpleLogger createSimpleErrorLogger(final LogCategory category)
     {
         return new ISimpleLogger()
             {
                 public void log(String message)
                 {
-                    notificationLog.log(Level.ERROR, message);
+                    if (category == LogCategory.NOTIFY)
+                    {
+                        notificationLog.log(Level.ERROR, message);
+                    } else
+                    {
+                        operationLog.log(Level.WARN, message);
+                    }
                 }
 
                 public void log(String messageTemplate, Object... args)
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/logging/LogMonitoringAppender.java b/common/sourceTest/java/ch/systemsx/cisd/common/logging/LogMonitoringAppender.java
index 4f1f3b6193602735445fabc6781f4ae2498bfe1f..28d3c8a7ec3d55b1f7a0c23f3f1dcaf0a679d3f4 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/logging/LogMonitoringAppender.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/logging/LogMonitoringAppender.java
@@ -118,4 +118,9 @@ public final class LogMonitoringAppender extends AppenderSkeleton
     {
         assert logHappened : "Following log snippet has been missed: " + messagePart;
     }
+    
+    public void reset()
+    {
+        logHappened = false;
+    }
 }
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java
index 802f22a225bad151ab07431bd0474a37c76a9d96..969ec93914a6be995ccb3bcc9cb41ea4bb982fe2 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/utilities/DirectoryScanningTimerTaskTest.java
@@ -304,16 +304,21 @@ public class DirectoryScanningTimerTaskTest
     {
         final File dir = new File(workingDirectory, "testMissingDirectory");
         dir.mkdir();
-        LogMonitoringAppender appender =
+        final LogMonitoringAppender appender =
                 LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory");
-        // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
-        final DirectoryScanningTimerTask scanner =
-                new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler);
-        dir.delete();
-        assert dir.exists() == false;
-        scanner.run();
-        appender.verifyLogHasHappened();
-        LogMonitoringAppender.removeAppender(appender);
+        try
+        {
+            // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
+            final DirectoryScanningTimerTask scanner =
+                    new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler);
+            dir.delete();
+            assert dir.exists() == false;
+            scanner.run();
+            appender.verifyLogHasHappened();
+        } finally
+        {
+            LogMonitoringAppender.removeAppender(appender);
+        }
     }
 
     @Test
@@ -321,19 +326,25 @@ public class DirectoryScanningTimerTaskTest
     {
         final File dir = new File(workingDirectory, "testMissingDirectory");
         dir.mkdir();
-        LogMonitoringAppender appender =
+        final LogMonitoringAppender appender =
                 LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory");
-        // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
-        final DirectoryScanningTimerTask scanner =
-                new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler);
-        dir.delete();
-        dir.createNewFile();
-        dir.deleteOnExit();
-        assert dir.isFile();
-        scanner.run();
-        appender.verifyLogHasHappened();
-        dir.delete();
-        LogMonitoringAppender.removeAppender(appender);
+        try
+        {
+            // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
+            final DirectoryScanningTimerTask scanner =
+                    new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler);
+            dir.delete();
+            dir.createNewFile();
+            dir.deleteOnExit();
+            assert dir.isFile();
+            scanner.run();
+            appender.verifyLogHasHappened();
+            dir.delete();
+        }
+        finally
+        {
+            LogMonitoringAppender.removeAppender(appender);
+        }
     }
 
     @Test
@@ -345,20 +356,25 @@ public class DirectoryScanningTimerTaskTest
         final File file = new File(dir, "some.file");
         file.createNewFile();
         file.deleteOnExit();
-        LogMonitoringAppender appender1 =
+        final LogMonitoringAppender appender1 =
                 LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory");
-        LogMonitoringAppender appender2 =
+        final LogMonitoringAppender appender2 =
                 LogMonitoringAppender.addAppender(LogCategory.NOTIFY, EXCEPTION_THROWING_FILE_FILTER_MESSAGE);
-        // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
-        final DirectoryScanningTimerTask scanner =
-                new DirectoryScanningTimerTask(dir, EXCEPTION_THROWING_FILE_FILTER, mockPathHandler);
-        scanner.run();
-        appender1.verifyLogHasHappened();
-        appender2.verifyLogHasHappened();
-        file.delete();
-        dir.delete();
-        LogMonitoringAppender.removeAppender(appender1);
-        LogMonitoringAppender.removeAppender(appender2);
+        try
+        {
+            // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
+            final DirectoryScanningTimerTask scanner =
+                    new DirectoryScanningTimerTask(dir, EXCEPTION_THROWING_FILE_FILTER, mockPathHandler);
+            scanner.run();
+            appender1.verifyLogHasHappened();
+            appender2.verifyLogHasHappened();
+            file.delete();
+            dir.delete();
+        } finally
+        {
+            LogMonitoringAppender.removeAppender(appender1);
+            LogMonitoringAppender.removeAppender(appender2);
+        }
     }
 
     @Test
@@ -366,32 +382,45 @@ public class DirectoryScanningTimerTaskTest
     {
         final File dir = new File(workingDirectory, "testSuppressLogging");
         dir.mkdir();
-        LogMonitoringAppender appenderError =
+        final LogMonitoringAppender appenderNotifyError =
                 LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "Failed to get listing of directory");
-        LogMonitoringAppender appenderOK =
+        final LogMonitoringAppender appenderOperationError =
+            LogMonitoringAppender.addAppender(LogCategory.OPERATION, "Failed to get listing of directory");
+        final LogMonitoringAppender appenderOK =
             LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "' is available again");
-        final int numberOfErrorsToIgnore = 2;
-        // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
-        final DirectoryScanningTimerTask scanner =
-                new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler, numberOfErrorsToIgnore);
-        dir.delete();
-        assert dir.exists() == false;
-        // First error -> ignored
-        scanner.run();
-        appenderError.verifyLogHasNotHappened();
-        // Second error -> ignored
-        scanner.run();
-        appenderError.verifyLogHasNotHappened();
-        // Third error -> recorded
-        scanner.run();
-        appenderError.verifyLogHasHappened();
-        dir.mkdir();
-        assert dir.exists();
-        // Now it is OK again and that should be logged as well
-        scanner.run();
-        appenderOK.verifyLogHasHappened();
-        LogMonitoringAppender.removeAppender(appenderError);
-        LogMonitoringAppender.removeAppender(appenderOK);
+        try
+        {
+            final int numberOfErrorsToIgnore = 2;
+            // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
+            final DirectoryScanningTimerTask scanner =
+                    new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler, numberOfErrorsToIgnore);
+            dir.delete();
+            assert dir.exists() == false;
+            // First error -> ignored
+            scanner.run();
+            appenderOperationError.verifyLogHasHappened();
+            appenderNotifyError.verifyLogHasNotHappened();
+            // Second error -> ignored
+            appenderOperationError.reset();
+            scanner.run();
+            appenderOperationError.verifyLogHasHappened();
+            appenderNotifyError.verifyLogHasNotHappened();
+            // Third error -> recorded
+            appenderOperationError.reset();
+            scanner.run();
+            appenderOperationError.verifyLogHasNotHappened();
+            appenderNotifyError.verifyLogHasHappened();
+            dir.mkdir();
+            assert dir.exists();
+            // Now it is OK again and that should be logged as well
+            scanner.run();
+            appenderOK.verifyLogHasHappened();
+        } finally
+        {
+            LogMonitoringAppender.removeAppender(appenderNotifyError);
+            LogMonitoringAppender.removeAppender(appenderOperationError);
+            LogMonitoringAppender.removeAppender(appenderOK);
+        }
     }
 
     @Test
@@ -399,26 +428,31 @@ public class DirectoryScanningTimerTaskTest
     {
         final File dir = new File(workingDirectory, "testDoNotLogDirectoryAvailableWhenNoErrorWasLogged");
         dir.mkdir();
-        LogMonitoringAppender appender =
+        final LogMonitoringAppender appender =
                 LogMonitoringAppender.addAppender(LogCategory.NOTIFY, "' is available again.");
-        final int numberOfErrorsToIgnore = 2;
-        // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
-        final DirectoryScanningTimerTask scanner =
+        try
+        {
+            final int numberOfErrorsToIgnore = 2;
+            // The directory needs to exist when the scanner is created, otherwise the self-test will fail.
+            final DirectoryScanningTimerTask scanner =
                 new DirectoryScanningTimerTask(dir, ACCEPT_ALL_FILTER, mockPathHandler, numberOfErrorsToIgnore);
-        dir.delete();
-        assert dir.exists() == false;
-        // First error -> ignored
-        scanner.run();
-        appender.verifyLogHasNotHappened();
-        // Second error -> ignored
-        scanner.run();
-        appender.verifyLogHasNotHappened();
-        dir.mkdir();
-        assert dir.exists();
-        // Now it's OK, but nothing should be logged because the error wasn't logged either.
-        scanner.run();
-        appender.verifyLogHasNotHappened();
-        LogMonitoringAppender.removeAppender(appender);
+            dir.delete();
+            assert dir.exists() == false;
+            // First error -> ignored
+            scanner.run();
+            appender.verifyLogHasNotHappened();
+            // Second error -> ignored
+            scanner.run();
+            appender.verifyLogHasNotHappened();
+            dir.mkdir();
+            assert dir.exists();
+            // Now it's OK, but nothing should be logged because the error wasn't logged either.
+            scanner.run();
+            appender.verifyLogHasNotHappened();
+        } finally
+        {
+            LogMonitoringAppender.removeAppender(appender);
+        }
     }
 
 }