Index: libcfa/src/concurrency/alarm.cfa
===================================================================
--- libcfa/src/concurrency/alarm.cfa	(revision b1e614f4e7eae09eff92b444964388046997d713)
+++ libcfa/src/concurrency/alarm.cfa	(revision 0f1fb78b67f0828e773dbfd27038942fa7c158b2)
@@ -55,4 +55,5 @@
 	this.period  = period;
 	this.thrd = thrd;
+	this.timeval = __kernel_get_time() + alarm;
 	set = false;
 	type = User;
@@ -63,11 +64,13 @@
 	this.period  = period;
 	this.proc = proc;
+	this.timeval = __kernel_get_time() + alarm;
 	set = false;
 	type = Kernel;
 }
 void ?{}( alarm_node_t & this, Alarm_Callback callback, Duration alarm, Duration period ) with( this ) {
+	this.callback = callback;
 	this.initial = alarm;
 	this.period  = period;
-	this.callback = callback;
+	this.timeval = __kernel_get_time() + alarm;
 	set = false;
 	type = Callback;
@@ -110,12 +113,10 @@
 	lock( event_kernel->lock __cfaabi_dbg_ctx2 );
 	{
-		Time curr = __kernel_get_time();
-		this->timeval = curr + this->initial;
-
 		/* paranoid */ verify( validate( alarms ) );
 
+		Time curr = __kernel_get_time();
 		__cfadbg_print_safe( preemption, " KERNEL: alarm inserting %p (%lu -> %lu).\n", this, curr.tn, this->timeval.tn );
 		insert( &alarms, this );
-		__kernel_set_timer( this->initial );
+		__kernel_set_timer( this->timeval - curr);
 	}
 	unlock( event_kernel->lock );
