diff --git a/tests/ps_schedstatistics/main.c b/tests/ps_schedstatistics/main.c
index 3d404a1d76a2d41a434d404301bb5da39130b68a..7d2f9de6d3aeb039cb48183130f66beede8f8be7 100644
--- a/tests/ps_schedstatistics/main.c
+++ b/tests/ps_schedstatistics/main.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2017 OTA keys S.A.
+ *               2017 HAW Hamburg
  *
  * This file is subject to the terms and conditions of the GNU Lesser
  * General Public License v2.1. See the file LICENSE in the top level
@@ -14,6 +15,7 @@
  * @brief ps schedstatistics test app
  *
  * @author Vincent Dupont <vincent@otakeys.com>
+ * @author Sebastian Meiling <s@mlng.net>
  *
  * @}
  */
@@ -25,23 +27,26 @@
 #include <thread.h>
 #include <xtimer.h>
 
-#define NB_THREADS 5
+#define NB_THREADS  (5U)
 
 static char stacks[NB_THREADS][THREAD_STACKSIZE_DEFAULT];
 static kernel_pid_t pids[NB_THREADS];
 
 static void *_thread_fn(void *arg)
 {
-    int next = (int)arg < NB_THREADS - 1 ? (int)arg + 1 : 0;
-    msg_t msg;
+    int next = ((int)arg + 1) % NB_THREADS;
 
     printf("Creating thread #%d, next=%d\n", (int)arg, next);
 
     while (1) {
-        msg_receive(&msg);
-        xtimer_usleep(XTIMER_BACKOFF - 1);
-        xtimer_usleep(2 * XTIMER_BACKOFF);
-        msg_send(&msg, pids[next]);
+        msg_t m1, m2;
+        msg_receive(&m1);
+        /* generate differents loads per thead */
+        for (int i = 0; i < (10 * (next + 1)); ++i) {
+            _xtimer_now64();
+        }
+        xtimer_usleep(XTIMER_BACKOFF * 3);
+        msg_send(&m2, pids[next]);
     }
 
     return NULL;
@@ -49,13 +54,14 @@ static void *_thread_fn(void *arg)
 
 int main(void)
 {
-    for (int i = 0; i < NB_THREADS; i++) {
+    for (unsigned i = 0; i < NB_THREADS; ++i) {
         pids[i] = thread_create(stacks[i], sizeof(stacks[i]),
-                                THREAD_PRIORITY_MAIN + 1,
+                                THREAD_PRIORITY_MAIN - 1,
                                 THREAD_CREATE_STACKTEST,
                                 _thread_fn, (void *)i, "thread");
     }
-
+    /* sleep for a second, so that `ps` shows some % on idle at the beginning */
+    xtimer_sleep(1);
 
     msg_t msg;
     msg_send(&msg, pids[0]);