diff --git a/src/test/java/org/apache/sling/launchpad/testing/LoggingSuite.java b/src/test/java/org/apache/sling/launchpad/testing/LoggingSuite.java
index 48774af..658b3fb 100644
--- a/src/test/java/org/apache/sling/launchpad/testing/LoggingSuite.java
+++ b/src/test/java/org/apache/sling/launchpad/testing/LoggingSuite.java
@@ -5,9 +5,9 @@
  * 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
@@ -21,9 +21,9 @@
  * 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
@@ -43,23 +43,50 @@
 
 /**
  * Simple TestSuite subclass which logs when each test is starting.
- * 
  */
 class LoggingSuite extends TestSuite {
 
     private Logger logger;
 
+    private int lastRuns;
+
+    private int lastErrors;
+
+    private int lastFailures;
+
     LoggingSuite(Set<Class<TestCase>> classSet, String name, Logger logger) {
         super(classSet.toArray(new Class[classSet.size()]), name);
         this.logger = logger;
     }
 
     @Override
+    public void run(TestResult result) {
+        // result.addListener(new SlingTestListener());
+        super.run(result);
+    }
+
+    @Override
     public void runTest(Test test, TestResult result) {
-        if (test instanceof TestSuite) {
-            logger.info("Starting test run for class " + ((TestSuite) test).getName());
-        }
+        final String name = (test instanceof TestSuite)
+                ? ((TestSuite) test).getName()
+                : test.getClass().getName();
+        final String startMessage = String.format("Running %s", name);
+        System.out.println(startMessage);
+        logger.info(startMessage);
+
         super.runTest(test, result);
+
+        final String endMessage = String.format(
+            "Tests run: %d, Failures: %d, Errors: %d, Skipped: %d",
+            result.runCount() - lastRuns, result.failureCount() - lastFailures,
+            result.errorCount() - lastErrors,
+            test.countTestCases() - result.runCount() + lastRuns);
+        System.out.println(endMessage);
+        logger.info(endMessage);
+
+        lastRuns = result.runCount();
+        lastFailures = result.failureCount();
+        lastErrors = result.errorCount();
     }
 
 }
