diff --git a/sys/net/ccn_lite/ccn-lite-relay.c b/sys/net/ccn_lite/ccn-lite-relay.c
index 700f29e0f31c066b90bda1df16ef567f7ed3959c..44047aad99336cb4b7301a38ae8e358e1460ce93 100644
--- a/sys/net/ccn_lite/ccn-lite-relay.c
+++ b/sys/net/ccn_lite/ccn-lite-relay.c
@@ -413,19 +413,23 @@ void ccnl_riot_relay_start(void)
 
     ccnl_core_cleanup(theRelay);
 
+    mutex_lock(&theRelay->stop_lock);
     ccnl_free(theRelay);
 }
 
 void ccnl_riot_relay_helper_start(void)
 {
     unsigned long us = CCNL_CHECK_RETRANSMIT_USEC;
+    mutex_lock(&theRelay->stop_lock);
     while (!theRelay->halt_flag) {
-        vtimer_usleep(us);
-
         mutex_lock(&theRelay->global_lock);
         ccnl_run_events();
         mutex_unlock(&theRelay->global_lock);
+
+        vtimer_usleep(us);
     }
+
+    mutex_unlock(&theRelay->stop_lock);
 }
 
 // eof
diff --git a/sys/net/ccn_lite/ccnl-core.h b/sys/net/ccn_lite/ccnl-core.h
index 926d2b38900122c19d56df92df655a9a7975edd9..0f2d6c777b2df362e5d2496802aca6848ecfeaa7 100644
--- a/sys/net/ccn_lite/ccnl-core.h
+++ b/sys/net/ccn_lite/ccnl-core.h
@@ -107,6 +107,7 @@ struct ccnl_relay_s {
     int riot_pid;
     int riot_helper_pid;
     mutex_t global_lock;
+    mutex_t stop_lock;
 };
 
 struct ccnl_buf_s {