Index: src/libcfa/concurrency/alarm.c
===================================================================
--- src/libcfa/concurrency/alarm.c	(revision bb37870b4f40d34fb70d1cfcb9ab7b91908aa4bb)
+++ src/libcfa/concurrency/alarm.c	(revision bc03be389ffa6ebe951b6f27c39cce6f746fd594)
@@ -10,6 +10,6 @@
 // Created On       : Fri Jun 2 11:31:25 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Mar 27 14:12:11 2018
-// Update Count     : 41
+// Last Modified On : Wed Apr  4 16:47:29 2018
+// Update Count     : 49
 //
 
@@ -28,6 +28,7 @@
 
 static inline void ?{}( itimerval & this, Duration alarm ) with( this ) {
-	it_value   { alarm };								// seconds, microseconds
-	it_interval{ 0 };
+	// itimerval.it_value is a duration but uses time data-structure timeval.
+	it_value{ alarm`s, alarm`us };						// seconds, microseconds
+	it_interval{ 0 };									// 0 seconds, 0 microseconds
 }
 
Index: src/libcfa/time
===================================================================
--- src/libcfa/time	(revision bb37870b4f40d34fb70d1cfcb9ab7b91908aa4bb)
+++ src/libcfa/time	(revision bc03be389ffa6ebe951b6f27c39cce6f746fd594)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar 14 23:18:57 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Apr  3 08:46:08 2018
-// Update Count     : 585
+// Last Modified On : Wed Apr  4 16:28:48 2018
+// Update Count     : 595
 // 
 
@@ -63,9 +63,10 @@
 static inline tm * localtime_r( time_t tp, tm * result ) { return localtime_r( &tp, result ); }
 
+
 //######################### Duration #########################
 
 struct Duration {
-	int64_t tv;
-};
+	int64_t tv;											// nanoseconds
+}; // Duration
 
 static inline void ?{}( Duration & dur ) with( dur ) { tv = 0; }
@@ -92,7 +93,21 @@
 	return dur;
 } // ?=? timespec
+
+//------------------------- timeval (cont) -------------------------
+
+static inline void ?{}( timeval & t, Duration dur ) with( dur ) {
+	t.tv_sec = tv / TIMEGRAN;							// seconds
+	t.tv_usec = tv % TIMEGRAN / (TIMEGRAN / 1_000_000LL); // microseconds
+} // ?{}
+
+//------------------------- timespec (cont) -------------------------
+
+static inline void ?{}( timespec & t, Duration dur ) with( dur ) {
+	t.tv_sec = tv / TIMEGRAN;							// seconds
+	t.tv_nsec = tv % TIMEGRAN;							// nanoseconds
+} // Timespec
+
+static inline int64_t nsecs( Duration dur ) with( dur ) { return tv; }
 #endif
-
-//static inline int64_t nsecs( Duration dur ) with( dur ) { return tv; }
 
 static inline Duration +?( Duration rhs ) with( rhs ) {	return (Duration)@{ +tv }; }
@@ -129,21 +144,21 @@
 static inline _Bool ?>=?( Duration lhs, zero_t ) { return lhs.tv >= 0; }
 
-static inline Duration abs( Duration lhs ) { return lhs.tv >= 0 ? lhs : -lhs; }
+static inline Duration abs( Duration rhs ) { return rhs.tv >= 0 ? rhs : -rhs; }
 
 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype & os, Duration dur );
 
-static inline Duration ?`ns( int64_t nsec  ) { return (Duration)@{ nsec }; }
-static inline Duration ?`us( int64_t usec  ) { return (Duration)@{ usec * (TIMEGRAN / 1_000_000LL) }; }
-static inline Duration ?`ms( int64_t msec  ) { return (Duration)@{ msec * (TIMEGRAN / 1_000LL) }; }
-static inline Duration ?`s ( int64_t sec   ) { return (Duration)@{ sec * TIMEGRAN }; }
-static inline Duration ?`s ( double  sec   ) { return (Duration)@{ sec * TIMEGRAN }; }
-static inline Duration ?`m ( int64_t min   ) { return (Duration)@{ min * (60LL * TIMEGRAN) }; }
-static inline Duration ?`m ( double  min   ) { return (Duration)@{ min * (60LL * TIMEGRAN) }; }
+static inline Duration ?`ns( int64_t nsec ) { return (Duration)@{ nsec }; }
+static inline Duration ?`us( int64_t usec ) { return (Duration)@{ usec * (TIMEGRAN / 1_000_000LL) }; }
+static inline Duration ?`ms( int64_t msec ) { return (Duration)@{ msec * (TIMEGRAN / 1_000LL) }; }
+static inline Duration ?`s ( int64_t sec ) { return (Duration)@{ sec * TIMEGRAN }; }
+static inline Duration ?`s ( double sec ) { return (Duration)@{ sec * TIMEGRAN }; }
+static inline Duration ?`m ( int64_t min ) { return (Duration)@{ min * (60LL * TIMEGRAN) }; }
+static inline Duration ?`m ( double min ) { return (Duration)@{ min * (60LL * TIMEGRAN) }; }
 static inline Duration ?`h ( int64_t hours ) { return (Duration)@{ hours * (60LL * 60LL * TIMEGRAN) }; }
-static inline Duration ?`h ( double  hours ) { return (Duration)@{ hours * (60LL * 60LL * TIMEGRAN) }; }
-static inline Duration ?`d ( int64_t days  ) { return (Duration)@{ days * (24LL * 60LL * 60LL * TIMEGRAN) }; }
-static inline Duration ?`d ( double  days  ) { return (Duration)@{ days * (24LL * 60LL * 60LL * TIMEGRAN) }; }
+static inline Duration ?`h ( double hours ) { return (Duration)@{ hours * (60LL * 60LL * TIMEGRAN) }; }
+static inline Duration ?`d ( int64_t days ) { return (Duration)@{ days * (24LL * 60LL * 60LL * TIMEGRAN) }; }
+static inline Duration ?`d ( double days ) { return (Duration)@{ days * (24LL * 60LL * 60LL * TIMEGRAN) }; }
 static inline Duration ?`w ( int64_t weeks ) { return (Duration)@{ weeks * (7LL * 24LL * 60LL * 60LL * TIMEGRAN) }; }
-static inline Duration ?`w ( double  weeks ) { return (Duration)@{ weeks * (7LL * 24LL * 60LL * 60LL * TIMEGRAN) }; }
+static inline Duration ?`w ( double weeks ) { return (Duration)@{ weeks * (7LL * 24LL * 60LL * 60LL * TIMEGRAN) }; }
 //static inline Duration ?`f ( int64_t fortnight ) { return (Duration)@{ fortnight * (14LL * 24LL * 60LL * 60LL * TIMEGRAN) }; }
 //static inline Duration ?`f ( double  fortnight ) { return (Duration)@{ fortnight * (14LL * 24LL * 60LL * 60LL * TIMEGRAN) }; }
@@ -159,24 +174,9 @@
 static inline int64_t ?`f  ( Duration dur ) { return dur.tv / (14LL * 24LL * 60LL * 60LL * TIMEGRAN); }
 
-//------------------------- timeval (cont) -------------------------
-
-static inline void ?{}( timeval & t, Duration dur ) with( dur ) {
-	t.tv_sec = tv / TIMEGRAN;							// seconds
-	t.tv_usec = tv % TIMEGRAN / (TIMEGRAN / 1_000_000LL); // microseconds
-} // ?{}
-
-//------------------------- timespec (cont) -------------------------
-
-static inline void ?{}( timespec & t, Duration dur ) with( dur ) {
-	t.tv_sec = tv / TIMEGRAN;							// seconds
-	t.tv_nsec = tv % TIMEGRAN;							// nanoseconds
-} // Timespec
-
 
 //######################### Time #########################
 
-
 struct Time {
-	uint64_t tv;
+	uint64_t tv;										// nanoseconds since UNIX epoch
 };
 
@@ -211,14 +211,10 @@
 } // Time
 
+static inline void ?{}( Time & t, zero_t ) { t.tv = 0; }
+static inline Time ?=?( Time & t, zero_t ) { return t{ 0 }; }
+
 static inline void ?{}( Time & time, timeval t ) with( time ) {
 	tv = (int64_t)t.tv_sec * TIMEGRAN + t.tv_usec * 1000;
 } // Time
-
-static inline void ?{}( Time & time, timespec t ) with( time ) {
-	tv = (int64_t)t.tv_sec * TIMEGRAN + t.tv_nsec;
-} // Time
-
-static inline void ?{}( Time & t, zero_t ) { t.tv = 0; }
-static inline Time ?=?( Time & t, zero_t ) { return t{ 0 }; }
 
 static inline Time ?=?( Time & time, timeval t ) with( time ) {
@@ -226,4 +222,8 @@
 	return time;
 } // ?=?
+
+static inline void ?{}( Time & time, timespec t ) with( time ) {
+	tv = (int64_t)t.tv_sec * TIMEGRAN + t.tv_nsec;
+} // Time
 
 static inline Time ?=?( Time & time, timespec t ) with( time ) {
@@ -282,5 +282,4 @@
 //######################### Clock #########################
 
-
 struct Clock {
 	Duration offset;									// for virtual clock: contains offset from real-time
