diff --git a/src/test/java/org/apache/sling/launchpad/testing/LoggingSuite.java b/src/test/java/org/apache/sling/launchpad/testing/LoggingSuite.java
new file mode 100644
index 0000000..48774af
--- /dev/null
+++ b/src/test/java/org/apache/sling/launchpad/testing/LoggingSuite.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You 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.
+ */
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to You 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 org.apache.sling.launchpad.testing;
+
+import java.util.Set;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestResult;
+import junit.framework.TestSuite;
+
+import org.slf4j.Logger;
+
+/**
+ * Simple TestSuite subclass which logs when each test is starting.
+ * 
+ */
+class LoggingSuite extends TestSuite {
+
+    private Logger logger;
+
+    LoggingSuite(Set<Class<TestCase>> classSet, String name, Logger logger) {
+        super(classSet.toArray(new Class[classSet.size()]), name);
+        this.logger = logger;
+    }
+
+    @Override
+    public void runTest(Test test, TestResult result) {
+        if (test instanceof TestSuite) {
+            logger.info("Starting test run for class " + ((TestSuite) test).getName());
+        }
+        super.runTest(test, result);
+    }
+
+}
diff --git a/src/test/java/org/apache/sling/launchpad/testing/TestAll.java b/src/test/java/org/apache/sling/launchpad/testing/TestAll.java
index d79cc2f..a22bc1c 100644
--- a/src/test/java/org/apache/sling/launchpad/testing/TestAll.java
+++ b/src/test/java/org/apache/sling/launchpad/testing/TestAll.java
@@ -83,7 +83,7 @@
             }
         }
         LOGGER.info(classSet.size() + " test classes found using Pattern " + testRegex);
-        TestSuite suite = new TestSuite(classSet.toArray(new Class[classSet.size()]),"Sling Integration Tests matching "+testPattern);
+        TestSuite suite = new LoggingSuite(classSet,"Sling Integration Tests matching "+testPattern,LOGGER);
       
         return suite;
     }
