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 2e638dfe31de87f8c2a61f976951f186a4432f69..c1c9684dd384c72c862ad3c8f8fe6576da95165e 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/logging/LogMonitoringAppender.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/logging/LogMonitoringAppender.java
@@ -37,6 +37,7 @@ public final class LogMonitoringAppender extends AppenderSkeleton
     private static Map<LogMonitoringAppender, String> appenderMap = new HashMap<LogMonitoringAppender, String>();
 
     private final StringBuilder eventRecorder = new StringBuilder();
+
     private final String messagePart;
 
     private LogMonitoringAppender(String messagePart)
@@ -44,7 +45,7 @@ public final class LogMonitoringAppender extends AppenderSkeleton
         this.messagePart = messagePart;
     }
 
-    private boolean logHappened = false;
+    private int logCount = 0;
 
     /**
      * Creates an appender that monitors for <var>messagePart</var> and adds it to the {@link Logger} for
@@ -101,7 +102,7 @@ public final class LogMonitoringAppender extends AppenderSkeleton
         }
         if (eventMessage.contains(messagePart) || throwableStr.contains(messagePart))
         {
-            logHappened = true;
+            ++logCount;
         }
     }
 
@@ -119,17 +120,24 @@ public final class LogMonitoringAppender extends AppenderSkeleton
 
     public void verifyLogHasNotHappened()
     {
-        assert logHappened == false : "Log snippet '" + messagePart + "' has been unexpectedly found in log:\n"
+        assert logCount == 0 : "Log snippet '" + messagePart + "' has been unexpectedly found in log:\n"
                 + eventRecorder;
     }
-    
+
     public void verifyLogHasHappened()
     {
-        assert logHappened : "Log snippet '" + messagePart + "' has been missed in log:\n" + eventRecorder;
+        assert logCount > 0 : "Log snippet '" + messagePart + "' has been missed in log:\n" + eventRecorder;
+    }
+
+    public void verifyLogHappendNTimes(int n)
+    {
+        assert logCount == n : String.format(
+                "Log snippet '%s' should have found %d times, but has been found %d times: %s", messagePart, n,
+                logCount);
     }
-    
+
     public void reset()
     {
-        logHappened = false;
+        logCount = 0;
     }
 }