diff --git a/include/libnux/scheduling.hpp b/include/libnux/scheduling.hpp
index 383e78ff045ce274119601248483d802b0f8eb5d..3abfa8219fba1fcfb5af94ef31679e5840c3f809 100644
--- a/include/libnux/scheduling.hpp
+++ b/include/libnux/scheduling.hpp
@@ -1,6 +1,5 @@
 #pragma once
 
 #include "libnux/scheduling/Scheduler.hpp"
-#include "libnux/scheduling/SchedulerSignaller.hpp"
 #include "libnux/scheduling/Service.hpp"
 #include "libnux/scheduling/Timer.hpp"
diff --git a/include/libnux/scheduling/Scheduler.hpp b/include/libnux/scheduling/Scheduler.hpp
index 1ae72ec9e52e7a306f93e7b4728abc7ef9698ab1..4782dc7caa8ec0dc5e1fa50b7c1ac67fb01cf1ec 100644
--- a/include/libnux/scheduling/Scheduler.hpp
+++ b/include/libnux/scheduling/Scheduler.hpp
@@ -24,13 +24,12 @@ public:
 
 	/**
 	 * Scheduler loop.
-	 * \tparam Signaller Scheduler loop control type
 	 * \tparam E Event source types
-	 * \param signaller Scheduler loop control instance
+	 * \param stop_time Time at which to stop execution
 	 * \param event_sources Tuple of references to event sources
 	 */
-	template <typename Signaller, typename... E>
-	void execute(Signaller& signaller, std::tuple<E&...>& event_sources);
+	template <typename... E>
+	void execute(time_type stop_time, std::tuple<E&...>& event_sources);
 
 	/**
 	 * Get maximal number of elements stored in queue since creation.
@@ -178,20 +177,14 @@ inline __attribute__((always_inline)) void Scheduler<queue_size>::run_queue_serv
 }
 
 template <size_t queue_size>
-template <typename Signaller, typename... E>
-void Scheduler<queue_size>::execute(Signaller& signaller, std::tuple<E&...>& event_sources)
+template <typename... E>
+void Scheduler<queue_size>::execute(time_type const stop_time, std::tuple<E&...>& event_sources)
 {
-	scheduler_signal signal = signaller.signal();
-	while (not(signal == scheduler_exit)) {
-		if (not(signal == scheduler_wait)) {
-			if ((signal == scheduler_run) or (signal == scheduler_finish)) {
-				if (not(signal == scheduler_finish)) {
-					fetch_events_timed(event_sources, get_time());
-				}
-				sort_earliest_first();
-				run_queue_service();
-			}
-		}
-		signal = signaller.signal();
+	time_type current_time = get_time();
+	while (current_time < stop_time) {
+		fetch_events_timed(event_sources, current_time);
+		sort_earliest_first();
+		run_queue_service();
+		current_time = get_time();
 	}
 }
diff --git a/include/libnux/scheduling/SchedulerSignaller.hpp b/include/libnux/scheduling/SchedulerSignaller.hpp
deleted file mode 100644
index d13f839b6e8e39c38cb97f4eafdbed4a07ff4e65..0000000000000000000000000000000000000000
--- a/include/libnux/scheduling/SchedulerSignaller.hpp
+++ /dev/null
@@ -1,94 +0,0 @@
-#pragma once
-//#include "libnux/vx/mailbox.h"
-#include "libnux/scheduling/types.hpp"
-#include "libnux/vx/spr.h"
-
-///**
-// * Scheduler loop control that listens on a mailbox address for signals
-// * \tparam signal_address Signal address in mailbox
-// */
-// template <uint32_t signal_address>
-// class SchedulerSignallerMailbox
-//{
-// public:
-//	/**
-//	 * Get current signal state.
-//	 * \return Signal state
-//	 */
-//	inline __attribute__((always_inline)) scheduler_signal signal();
-//};
-//
-// template <uint32_t signal_address>
-// inline __attribute__((always_inline)) scheduler_signal
-// SchedulerSignallerMailbox<signal_address>::signal()
-//{
-//	uint8_t signal = libnux_mailbox_read_u8(signal_address);
-//	switch (signal) {
-//		case scheduler_wait:
-//			return scheduler_wait;
-//		case scheduler_run:
-//			return scheduler_run;
-//		case scheduler_finish:
-//			return scheduler_finish;
-//		case scheduler_exit:
-//			return scheduler_exit;
-//		// if unknown signal is encountered, wait
-//		default:
-//			return scheduler_wait;
-//	}
-//	return scheduler_exit; // This should never be called
-//}
-
-// scheduler signaller, that:
-// waits until start,
-// runs from start to finish,
-// finishes from finish to stop
-// and exits at stop.
-class SchedulerSignallerTimer
-{
-	time_type m_start;
-	time_type m_finish;
-	time_type m_stop;
-
-public:
-	SchedulerSignallerTimer(time_type start, time_type finish, time_type stop);
-	SchedulerSignallerTimer(time_type start, time_type stop);
-	SchedulerSignallerTimer(time_type stop);
-	inline __attribute__((always_inline)) scheduler_signal signal();
-};
-
-SchedulerSignallerTimer::SchedulerSignallerTimer(time_type start, time_type finish, time_type stop)
-{
-	this->m_start = start;
-	this->m_finish = finish;
-	this->m_stop = stop;
-}
-
-SchedulerSignallerTimer::SchedulerSignallerTimer(time_type start, time_type stop)
-{
-	this->m_start = start;
-	this->m_finish = stop;
-	this->m_stop = stop;
-}
-
-SchedulerSignallerTimer::SchedulerSignallerTimer(time_type stop)
-{
-	this->m_start = 0;
-	this->m_finish = stop;
-	this->m_stop = stop;
-}
-
-inline __attribute__((always_inline)) scheduler_signal SchedulerSignallerTimer::signal()
-{
-	time_type t = get_time();
-	if (t < this->m_start) {
-		return scheduler_wait;
-	} else if (t >= this->m_start and t < this->m_finish) {
-		return scheduler_run;
-	} else if (t >= this->m_finish and t < this->m_stop) {
-		return scheduler_finish;
-	} else if (t >= this->m_stop) {
-		return scheduler_exit;
-	}
-	return scheduler_exit; // This will never be called.
-}
diff --git a/include/libnux/scheduling/types.hpp b/include/libnux/scheduling/types.hpp
index 80dd14aab6dcf81011a717c0309016912f31fa3c..a5cc9e9a9e8c6bfe7e9db9ffb9dc5a6fc5db9e5c 100644
--- a/include/libnux/scheduling/types.hpp
+++ b/include/libnux/scheduling/types.hpp
@@ -19,16 +19,3 @@ struct Event
 	Service const* service;
 	time_type deadline;
 };
-
-// scheduler signals
-enum scheduler_signal
-{
-	// don't do anything except staying alive
-	scheduler_wait = 0,
-	// run, i.e. fetch events and execute them
-	scheduler_run = 1,
-	// execute events in queue, but don't fetch new ones
-	scheduler_finish = 2,
-	// exit execution function
-	scheduler_exit = 3,
-};