Index: src/libcfa/Makefile.am
===================================================================
--- src/libcfa/Makefile.am	(revision 01963dfa3760cf41cdf4471fc638f355a8f15a09)
+++ src/libcfa/Makefile.am	(revision 5f08961d04c47678910366c75e15d9ab91808630)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 08:54:01 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Sun Apr  8 23:49:34 2018
-## Update Count     : 227
+## Last Modified On : Thu Apr 12 14:38:34 2018
+## Update Count     : 231
 ###############################################################################
 
@@ -100,4 +100,6 @@
 	math 				\
 	gmp 				\
+	time_t.h			\
+	clock			\
 	bits/align.h 		\
 	bits/containers.h		\
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision 01963dfa3760cf41cdf4471fc638f355a8f15a09)
+++ src/libcfa/Makefile.in	(revision 5f08961d04c47678910366c75e15d9ab91808630)
@@ -264,6 +264,6 @@
 	containers/result containers/vector concurrency/coroutine \
 	concurrency/thread concurrency/kernel concurrency/monitor \
-	${shell find stdhdr -type f -printf "%p "} math gmp \
-	bits/align.h bits/containers.h bits/defs.h bits/debug.h \
+	${shell find stdhdr -type f -printf "%p "} math gmp time_t.h \
+	clock bits/align.h bits/containers.h bits/defs.h bits/debug.h \
 	bits/locks.h concurrency/invoke.h
 HEADERS = $(nobase_cfa_include_HEADERS)
@@ -437,4 +437,6 @@
 	math 				\
 	gmp 				\
+	time_t.h			\
+	clock			\
 	bits/align.h 		\
 	bits/containers.h		\
Index: src/libcfa/clock
===================================================================
--- src/libcfa/clock	(revision 5f08961d04c47678910366c75e15d9ab91808630)
+++ src/libcfa/clock	(revision 5f08961d04c47678910366c75e15d9ab91808630)
@@ -0,0 +1,88 @@
+// 
+// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// clock -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Thu Apr 12 14:36:06 2018
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Apr 12 16:53:31 2018
+// Update Count     : 3
+// 
+
+#include <time>
+
+
+//######################### C time #########################
+
+static inline char * ctime( time_t tp ) { char * buf = ctime( &tp ); buf[24] = '\0'; return buf; }
+static inline char * ctime_r( time_t tp, char * buf ) { ctime_r( &tp, buf ); buf[24] = '\0'; return buf; }
+static inline tm * gmtime( time_t tp ) { return gmtime( &tp ); }
+static inline tm * gmtime_r( time_t tp, tm * result ) { return gmtime_r( &tp, result ); }
+static inline tm * localtime( time_t tp ) { return localtime( &tp ); }
+static inline tm * localtime_r( time_t tp, tm * result ) { return localtime_r( &tp, result ); }
+
+
+//######################### Clock #########################
+
+struct Clock {											// private
+	Duration offset;									// for virtual clock: contains offset from real-time
+	int clocktype;										// implementation only -1 (virtual), CLOCK_REALTIME
+};
+
+static inline void resetClock( Clock & clk ) with( clk ) {
+	clocktype = CLOCK_REALTIME_COARSE;
+} // Clock::resetClock
+
+static inline void resetClock( Clock & clk, Duration adj ) with( clk ) {
+	clocktype = -1;
+	offset = adj + timezone`s;							// timezone (global) is (UTC - local time) in seconds
+} // resetClock
+
+static inline void ?{}( Clock & clk ) { resetClock( clk ); }
+static inline void ?{}( Clock & clk, Duration adj ) { resetClock( clk, adj ); }
+
+static inline Duration getRes() {
+	struct timespec res;
+	clock_getres( CLOCK_REALTIME_COARSE, &res );
+	return ((int64_t)res.tv_sec * TIMEGRAN + res.tv_nsec)`ns;
+} // getRes
+
+static inline Time getTimeNsec() {						// with nanoseconds
+	timespec curr;
+	clock_gettime( CLOCK_REALTIME_COARSE, &curr );
+	return (Time){ curr };
+} // getTime
+
+static inline Time getTime() {							// without nanoseconds
+	timespec curr;
+	clock_gettime( CLOCK_REALTIME_COARSE, &curr );
+	curr.tv_nsec = 0;
+	return (Time){ curr };
+} // getTime
+
+static inline Time getTime( Clock & clk ) with( clk ) {
+	return getTime() + offset;
+} // getTime
+
+static inline Time ?()( Clock & clk ) with( clk ) {		// alternative syntax
+	return getTime() + offset;
+} // getTime
+
+static inline timeval getTime( Clock & clk ) {
+	return (timeval){ clk() };
+} // getTime
+
+static inline tm getTime( Clock & clk ) with( clk ) {
+	tm ret;
+	localtime_r( getTime( clk ).tv_sec, &ret );
+	return ret;
+} // getTime
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
Index: src/libcfa/concurrency/kernel
===================================================================
--- src/libcfa/concurrency/kernel	(revision 01963dfa3760cf41cdf4471fc638f355a8f15a09)
+++ src/libcfa/concurrency/kernel	(revision 5f08961d04c47678910366c75e15d9ab91808630)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 23 17:08:20 2018
-// Update Count     : 3
+// Last Modified On : Tue Apr 10 14:46:49 2018
+// Update Count     : 10
 //
 
@@ -19,5 +19,5 @@
 
 #include "invoke.h"
-#include "time"
+#include "time_t.h"
 
 extern "C" {
Index: src/libcfa/concurrency/kernel.c
===================================================================
--- src/libcfa/concurrency/kernel.c	(revision 01963dfa3760cf41cdf4471fc638f355a8f15a09)
+++ src/libcfa/concurrency/kernel.c	(revision 5f08961d04c47678910366c75e15d9ab91808630)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 30 18:26:11 2018
-// Update Count     : 23
+// Last Modified On : Mon Apr  9 16:11:46 2018
+// Update Count     : 24
 //
 
@@ -25,4 +25,5 @@
 
 //CFA Includes
+#include "time"
 #include "kernel_private.h"
 #include "preemption.h"
Index: src/libcfa/iostream
===================================================================
--- src/libcfa/iostream	(revision 01963dfa3760cf41cdf4471fc638f355a8f15a09)
+++ src/libcfa/iostream	(revision 5f08961d04c47678910366c75e15d9ab91808630)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jan 25 13:08:39 2018
-// Update Count     : 149
+// Last Modified On : Thu Apr 12 14:34:37 2018
+// Update Count     : 150
 //
 
@@ -159,4 +159,11 @@
 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, _Istream_cstrC );
 
+
+#include <time_t.h>										// Duration (constructors) / Time (constructors)
+
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype & os, Duration dur );
+forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype & os, Time time );
+
+
 // Local Variables: //
 // mode: c //
Index: src/libcfa/time
===================================================================
--- src/libcfa/time	(revision 01963dfa3760cf41cdf4471fc638f355a8f15a09)
+++ src/libcfa/time	(revision 5f08961d04c47678910366c75e15d9ab91808630)
@@ -10,6 +10,6 @@
 // Created On       : Wed Mar 14 23:18:57 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Apr  9 13:10:23 2018
-// Update Count     : 616
+// Last Modified On : Fri Apr 13 07:51:52 2018
+// Update Count     : 634
 // 
 
@@ -23,5 +23,5 @@
 #include <sys/time.h>									// timeval
 }
-#include <iostream>										// istype/ostype
+#include <time_t.h>										// Duration/Time types
 
 enum { TIMEGRAN = 1_000_000_000LL };					// nanosecond granularity, except for timeval
@@ -30,12 +30,6 @@
 //######################### Duration #########################
 
-struct Duration {										// private
-	int64_t tv;											// nanoseconds
-}; // Duration
-
-static inline void ?{}( Duration & dur ) with( dur ) { tv = 0; }
 static inline void ?{}( Duration & dur, Duration d ) with( dur ) { tv = d.tv; }
 
-static inline void ?{}( Duration & dur, zero_t ) with( dur ) { tv = 0; }
 static inline Duration ?=?( Duration & dur, zero_t ) { return dur{ 0 }; }
 
@@ -75,6 +69,4 @@
 
 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 }; }
@@ -143,29 +135,11 @@
 
 
-//######################### C time #########################
-
-static inline char * ctime( time_t tp ) { char * buf = ctime( &tp ); buf[24] = '\0'; return buf; }
-static inline char * ctime_r( time_t tp, char * buf ) { ctime_r( &tp, buf ); buf[24] = '\0'; return buf; }
-static inline tm * gmtime( time_t tp ) { return gmtime( &tp ); }
-static inline tm * gmtime_r( time_t tp, tm * result ) { return gmtime_r( &tp, result ); }
-static inline tm * localtime( time_t tp ) { return localtime( &tp ); }
-static inline tm * localtime_r( time_t tp, tm * result ) { return localtime_r( &tp, result ); }
-
-
 //######################### Time #########################
 
-struct Time {											// private
-	uint64_t tv;										// nanoseconds since UNIX epoch
-}; // Time
-
-static inline void ?{}( Time & t ) with( t ) { tv = 0; } // fast
-void ?{}( Time & time, int year, int month = 0, int day = 0, int hour = 0, int min = 0, int sec = 0, int nsec = 0 ); // slow
-
-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, Time t ) with( time ) { tv = t.tv; }
+void ?{}( Time & time, int year, int month = 0, int day = 0, int hour = 0, int min = 0, int sec = 0, int nsec = 0 );
+static inline void ?{}( Time & time, timeval t ) with( time ) { tv = (int64_t)t.tv_sec * TIMEGRAN + t.tv_usec * 1000; }
+
+static inline Time ?=?( Time & time, zero_t ) { return time{ 0 }; }
 
 static inline Time ?=?( Time & time, timeval t ) with( time ) {
@@ -214,6 +188,4 @@
 size_t strftime( char * buf, size_t size, const char * fmt, Time time );
 
-forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype & os, Time time );
-
 //------------------------- timeval (cont) -------------------------
 
@@ -230,66 +202,4 @@
 } // ?{}
 
-
-//######################### Clock #########################
-
-struct Clock {											// private
-	Duration offset;									// for virtual clock: contains offset from real-time
-	int clocktype;										// implementation only -1 (virtual), CLOCK_REALTIME
-};
-
-static inline void resetClock( Clock & clk ) with( clk ) {
-	clocktype = CLOCK_REALTIME_COARSE;
-} // Clock::resetClock
-
-static inline void resetClock( Clock & clk, Duration adj ) with( clk ) {
-	clocktype = -1;
-	offset = adj + timezone`s;							// timezone (global) is (UTC - local time) in seconds
-} // resetClock
-
-static inline void ?{}( Clock & clk ) {
-	resetClock( clk );
-} // Clock
-
-static inline void ?{}( Clock & clk, Duration adj ) {
-	resetClock( clk, adj );
-} // Clock
-
-static inline Duration getRes() {
-	struct timespec res;
-	clock_getres( CLOCK_REALTIME_COARSE, &res );
-	return ((int64_t)res.tv_sec * TIMEGRAN + res.tv_nsec)`ns;
-} // getRes
-
-static inline Time getTimeNsec() {						// with nanoseconds
-	timespec curr;
-	clock_gettime( CLOCK_REALTIME_COARSE, &curr );
-	return (Time){ curr };
-} // getTime
-
-static inline Time getTime() {							// without nanoseconds
-	timespec curr;
-	clock_gettime( CLOCK_REALTIME_COARSE, &curr );
-	curr.tv_nsec = 0;
-	return (Time){ curr };
-} // getTime
-
-static inline Time getTime( Clock & clk ) with( clk ) {
-	return getTime() + offset;
-} // getTime
-
-static inline Time ?()( Clock & clk ) with( clk ) {		// alternative syntax
-	return getTime() + offset;
-} // getTime
-
-static inline timeval getTime( Clock & clk ) {
-	return (timeval){ clk() };
-} // getTime
-
-static inline tm getTime( Clock & clk ) with( clk ) {
-	tm ret;
-	localtime_r( getTime( clk ).tv_sec, &ret );
-	return ret;
-} // getTime
-
 // Local Variables: //
 // mode: c //
Index: src/libcfa/time.c
===================================================================
--- src/libcfa/time.c	(revision 01963dfa3760cf41cdf4471fc638f355a8f15a09)
+++ src/libcfa/time.c	(revision 5f08961d04c47678910366c75e15d9ab91808630)
@@ -10,9 +10,10 @@
 // Created On       : Tue Mar 27 13:33:14 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Apr  1 17:30:08 2018
-// Update Count     : 21
+// Last Modified On : Thu Apr 12 14:41:00 2018
+// Update Count     : 22
 // 
 
 #include "time"
+#include "iostream"
 #include <stdio.h>										// snprintf
 
Index: src/libcfa/time_t.h
===================================================================
--- src/libcfa/time_t.h	(revision 5f08961d04c47678910366c75e15d9ab91808630)
+++ src/libcfa/time_t.h	(revision 5f08961d04c47678910366c75e15d9ab91808630)
@@ -0,0 +1,41 @@
+// 
+// Cforall Version 1.0.0 Copyright (C) 2018 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+// 
+// time_t.h -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Tue Apr 10 14:42:03 2018
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Fri Apr 13 07:51:47 2018
+// Update Count     : 6
+// 
+
+#pragma once
+
+
+//######################### Duration #########################
+
+struct Duration {										// private
+	int64_t tv;											// nanoseconds
+}; // Duration
+
+static inline void ?{}( Duration & dur ) with( dur ) { tv = 0; }
+static inline void ?{}( Duration & dur, zero_t ) with( dur ) { tv = 0; }
+
+
+//######################### Time #########################
+
+struct Time {											// private
+	uint64_t tv;										// nanoseconds since UNIX epoch
+}; // Time
+
+static inline void ?{}( Time & time ) with( time ) { tv = 0; }
+static inline void ?{}( Time & time, zero_t ) with( time ) { tv = 0; }
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
