Index: libcfa/prelude/builtins.c
===================================================================
--- libcfa/prelude/builtins.c	(revision 2a59655a1dd1d977b68a881bb4951a8e017eeb1d)
+++ libcfa/prelude/builtins.c	(revision fd54fef231baeeb0016103bf19cc8e6d87287faf)
@@ -18,5 +18,5 @@
 // type that wraps a pointer and a destructor-like function - used in generating implicit destructor calls for struct members in user-defined functions
 // Note: needs to occur early, because it is used to generate destructor calls during code generation
-forall(dtype T)
+forall(T &)
 struct __Destructor {
 	T * object;
@@ -25,5 +25,5 @@
 
 // defined destructor in the case that non-generated code wants to use __Destructor
-forall(dtype T)
+forall(T &)
 static inline void ^?{}(__Destructor(T) & x) {
 	if (x.object && x.dtor) {
@@ -34,5 +34,5 @@
 // easy interface into __Destructor's destructor for easy codegen purposes
 extern "C" {
-	forall(dtype T)
+	forall(T &)
 	static inline void __destroy_Destructor(__Destructor(T) * dtor) {
 		^(*dtor){};
@@ -51,5 +51,5 @@
 void abort( const char fmt[], ... ) __attribute__ (( format(printf, 1, 2), __nothrow__, __leaf__, __noreturn__ ));
 
-forall(dtype T)
+forall(T &)
 static inline T & identity(T & i) {
 	return i;
@@ -64,10 +64,10 @@
 static inline void ^?{}($generator &) {}
 
-trait is_generator(dtype T) {
+trait is_generator(T &) {
       void main(T & this);
       $generator * get_generator(T & this);
 };
 
-forall(dtype T | is_generator(T))
+forall(T & | is_generator(T))
 static inline T & resume(T & gen) {
 	main(gen);
@@ -78,22 +78,22 @@
 
 static inline {
-	forall( dtype DT | { DT & ?+=?( DT &, one_t ); } )
+	forall( DT & | { DT & ?+=?( DT &, one_t ); } )
 	DT & ++?( DT & x ) { return x += 1; }
 
-	forall( dtype DT | sized(DT) | { void ?{}( DT &, DT ); void ^?{}( DT & ); DT & ?+=?( DT &, one_t ); } )
+	forall( DT & | sized(DT) | { void ?{}( DT &, DT ); void ^?{}( DT & ); DT & ?+=?( DT &, one_t ); } )
 	DT & ?++( DT & x ) { DT tmp = x; x += 1; return tmp; }
 
-	forall( dtype DT | { DT & ?-=?( DT &, one_t ); } )
+	forall( DT & | { DT & ?-=?( DT &, one_t ); } )
 	DT & --?( DT & x ) { return x -= 1; }
 
-	forall( dtype DT | sized(DT) | { void ?{}( DT &, DT ); void ^?{}( DT & ); DT & ?-=?( DT &, one_t ); } )
+	forall( DT & | sized(DT) | { void ?{}( DT &, DT ); void ^?{}( DT & ); DT & ?-=?( DT &, one_t ); } )
 	DT & ?--( DT & x ) { DT tmp = x; x -= 1; return tmp; }
 
-	forall( dtype DT | { int ?!=?( const DT &, zero_t ); } )
+	forall( DT & | { int ?!=?( const DT &, zero_t ); } )
 	int !?( const DT & x ) { return !( x != 0 ); }
 } // distribution
 
 // universal typed pointer constant
-static inline forall( dtype DT ) DT * intptr( uintptr_t addr ) { return (DT *)addr; }
+static inline forall( DT & ) DT * intptr( uintptr_t addr ) { return (DT *)addr; }
 static inline forall( ftype FT ) FT * intptr( uintptr_t addr ) { return (FT *)addr; }
 
@@ -156,5 +156,5 @@
 #define __CFA_EXP_OVERFLOW__()
 
-static inline forall( otype OT | { void ?{}( OT & this, one_t ); OT ?*?( OT, OT ); } ) {
+static inline forall( OT | { void ?{}( OT & this, one_t ); OT ?*?( OT, OT ); } ) {
 	OT ?\?( OT ep, unsigned int y ) { __CFA_EXP__(); }
 	OT ?\?( OT ep, unsigned long int y ) { __CFA_EXP__(); }
Index: libcfa/prelude/prelude-gen.cc
===================================================================
--- libcfa/prelude/prelude-gen.cc	(revision 2a59655a1dd1d977b68a881bb4951a8e017eeb1d)
+++ libcfa/prelude/prelude-gen.cc	(revision fd54fef231baeeb0016103bf19cc8e6d87287faf)
@@ -159,5 +159,5 @@
 int main() {
 	cout << "# 2 \"prelude.cfa\"  // needed for error messages from this file" << endl;
-	cout << "trait sized(dtype T) {};" << endl;
+	cout << "trait sized(T &) {};" << endl;
 
 	cout << "//////////////////////////" << endl;
@@ -264,5 +264,5 @@
 		for (auto cvq : qualifiersPair) {
 			for (auto is_vol : { "        ", "volatile" }) {
-				cout << "forall(dtype DT) void  ?{}(" << cvq.first << type << " * " << is_vol << " &, " << cvq.second << "DT *);" << endl;
+				cout << "forall(DT &) void  ?{}(" << cvq.first << type << " * " << is_vol << " &, " << cvq.second << "DT *);" << endl;
 			}
 		}
@@ -279,8 +279,8 @@
 	for (auto cvq : qualifiersSingle) {
 		for (auto is_vol : { "        ", "volatile" }) {
-			cout << "forall(dtype DT) void  ?{}(" << cvq << "  DT" << " * " << is_vol << " &);" << endl;
+			cout << "forall(DT &) void  ?{}(" << cvq << "  DT" << " * " << is_vol << " &);" << endl;
 		}
 		for (auto is_vol : { "        ", "volatile" }) {
-			cout << "forall(dtype DT) void ^?{}(" << cvq << "  DT" << " * " << is_vol << " &);" << endl;
+			cout << "forall(DT &) void ^?{}(" << cvq << "  DT" << " * " << is_vol << " &);" << endl;
 		}
 	}
@@ -290,5 +290,5 @@
 		for (auto is_vol : { "        ", "volatile" }) {
 			for (auto cvq : qualifiersSingle) {
-				cout << "forall(dtype DT) void ?{}( " << cvq << type << " * " << is_vol << " &, zero_t);" << endl;
+				cout << "forall(DT &) void ?{}( " << cvq << type << " * " << is_vol << " &, zero_t);" << endl;
 			}
 		}
@@ -317,5 +317,5 @@
 	for (auto op : pointerOperators) {
 		auto forall = [&op]() {
-			cout << "forall(dtype DT" << op.sized << ") ";
+			cout << "forall(DT &" << op.sized << ") ";
 		};
 		for (auto type : { "DT"/*, "void"*/ } ) {
@@ -408,8 +408,8 @@
 	for (auto is_vol : { "        ", "volatile" }) {
 		for (auto cvq : qualifiersPair) {
-				cout << "forall(dtype DT) " << cvq.first << "void * ?=?( " << cvq.first << "void * " << is_vol << " &, " << cvq.second << "DT *);" << endl;
+				cout << "forall(DT &) " << cvq.first << "void * ?=?( " << cvq.first << "void * " << is_vol << " &, " << cvq.second << "DT *);" << endl;
 		}
 		for (auto cvq : qualifiersSingle) {
-			cout << "forall(dtype DT) " << cvq <<   "  DT * ?=?( " << cvq << "  DT * " << is_vol << " &, zero_t);" << endl;
+			cout << "forall(DT &) " << cvq <<   "  DT * ?=?( " << cvq << "  DT * " << is_vol << " &, zero_t);" << endl;
 		}
 	}
Index: libcfa/prelude/prelude.old.cf
===================================================================
--- libcfa/prelude/prelude.old.cf	(revision 2a59655a1dd1d977b68a881bb4951a8e017eeb1d)
+++ libcfa/prelude/prelude.old.cf	(revision fd54fef231baeeb0016103bf19cc8e6d87287faf)
@@ -23,5 +23,5 @@
 // ------------------------------------------------------------
 
-trait sized(dtype T) {};
+trait sized(T &) {};
 
 // ------------------------------------------------------------
@@ -68,21 +68,21 @@
 long double _Complex	?--( long double _Complex & ),		?--( volatile long double _Complex & );
 
-forall( dtype T | sized(T) ) T *			 ?++(		     T *& );
-forall( dtype T | sized(T) ) const T *		 ?++( const	     T *& );
-forall( dtype T | sized(T) ) volatile T *		 ?++(	    volatile T *& );
-forall( dtype T | sized(T) ) const volatile T *	 ?++( const volatile T *& );
-forall( dtype T | sized(T) ) T *			 ?--(		     T *& );
-forall( dtype T | sized(T) ) const T *		 ?--( const	     T *& );
-forall( dtype T | sized(T) ) volatile T *		 ?--(	    volatile T *& );
-forall( dtype T | sized(T) ) const volatile T *	 ?--( const volatile T *& );
-
-forall( dtype T | sized(T) ) T &		 ?[?](		      T *,	    ptrdiff_t );
-forall( dtype T | sized(T) ) const T &	 ?[?]( const	      T *,	    ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T &	 ?[?](       volatile T *,	    ptrdiff_t );
-forall( dtype T | sized(T) ) const volatile T & ?[?]( const volatile T *,	    ptrdiff_t );
-forall( dtype T | sized(T) ) T &		 ?[?](		ptrdiff_t,		  T * );
-forall( dtype T | sized(T) ) const T &	 ?[?](		ptrdiff_t, const	  T * );
-forall( dtype T | sized(T) ) volatile T &	 ?[?](		ptrdiff_t,	 volatile T * );
-forall( dtype T | sized(T) ) const volatile T & ?[?](		ptrdiff_t, const volatile T * );
+forall( T & | sized(T) ) T *			 ?++(		     T *& );
+forall( T & | sized(T) ) const T *		 ?++( const	     T *& );
+forall( T & | sized(T) ) volatile T *		 ?++(	    volatile T *& );
+forall( T & | sized(T) ) const volatile T *	 ?++( const volatile T *& );
+forall( T & | sized(T) ) T *			 ?--(		     T *& );
+forall( T & | sized(T) ) const T *		 ?--( const	     T *& );
+forall( T & | sized(T) ) volatile T *		 ?--(	    volatile T *& );
+forall( T & | sized(T) ) const volatile T *	 ?--( const volatile T *& );
+
+forall( T & | sized(T) ) T &		 ?[?](		      T *,	    ptrdiff_t );
+forall( T & | sized(T) ) const T &	 ?[?]( const	      T *,	    ptrdiff_t );
+forall( T & | sized(T) ) volatile T &	 ?[?](       volatile T *,	    ptrdiff_t );
+forall( T & | sized(T) ) const volatile T & ?[?]( const volatile T *,	    ptrdiff_t );
+forall( T & | sized(T) ) T &		 ?[?](		ptrdiff_t,		  T * );
+forall( T & | sized(T) ) const T &	 ?[?](		ptrdiff_t, const	  T * );
+forall( T & | sized(T) ) volatile T &	 ?[?](		ptrdiff_t,	 volatile T * );
+forall( T & | sized(T) ) const volatile T & ?[?](		ptrdiff_t, const volatile T * );
 
 // ------------------------------------------------------------
@@ -107,17 +107,17 @@
 long double _Complex	++?( long double _Complex & ),		--?( long double _Complex & );
 
-forall( dtype T | sized(T) ) T *			 ++?(		     T *& );
-forall( dtype T | sized(T) ) const T *		 ++?( const	     T *& );
-forall( dtype T | sized(T) ) volatile T *		 ++?(	    volatile T *& );
-forall( dtype T | sized(T) ) const volatile T *	 ++?( const volatile T *& );
-forall( dtype T | sized(T) ) T *			 --?(		     T *& );
-forall( dtype T | sized(T) ) const T *		 --?( const	     T *& );
-forall( dtype T | sized(T) ) volatile T *		 --?(	    volatile T *& );
-forall( dtype T | sized(T) ) const volatile T *	 --?( const volatile T *& );
-
-forall( dtype T | sized(T) ) T &		 *?(		     T * );
-forall( dtype T | sized(T) ) const T &		 *?( const	     T * );
-forall( dtype T | sized(T) ) volatile T &	 *?(       volatile  T * );
-forall( dtype T | sized(T) ) const volatile T & *?( const volatile  T * );
+forall( T & | sized(T) ) T *			 ++?(		     T *& );
+forall( T & | sized(T) ) const T *		 ++?( const	     T *& );
+forall( T & | sized(T) ) volatile T *		 ++?(	    volatile T *& );
+forall( T & | sized(T) ) const volatile T *	 ++?( const volatile T *& );
+forall( T & | sized(T) ) T *			 --?(		     T *& );
+forall( T & | sized(T) ) const T *		 --?( const	     T *& );
+forall( T & | sized(T) ) volatile T *		 --?(	    volatile T *& );
+forall( T & | sized(T) ) const volatile T *	 --?( const volatile T *& );
+
+forall( T & | sized(T) ) T &		 *?(		     T * );
+forall( T & | sized(T) ) const T &		 *?( const	     T * );
+forall( T & | sized(T) ) volatile T &	 *?(       volatile  T * );
+forall( T & | sized(T) ) const volatile T & *?( const volatile  T * );
 forall( ftype FT ) FT &		 *?( FT * );
 
@@ -142,8 +142,8 @@
 		!?( float _Complex ),		!?( double _Complex ),		!?( long double _Complex );
 
-forall( dtype DT ) int !?(                DT * );
-forall( dtype DT ) int !?( const          DT * );
-forall( dtype DT ) int !?(       volatile DT * );
-forall( dtype DT ) int !?( const volatile DT * );
+forall( DT & ) int !?(                DT * );
+forall( DT & ) int !?( const          DT * );
+forall( DT & ) int !?(       volatile DT * );
+forall( DT & ) int !?( const volatile DT * );
 forall( ftype FT ) int !?( FT * );
 
@@ -191,17 +191,17 @@
 long double _Complex	?+?( long double _Complex, long double _Complex ),	?-?( long double _Complex, long double _Complex );
 
-forall( dtype T | sized(T) ) T *		?+?(		    T *,	  ptrdiff_t );
-forall( dtype T | sized(T) ) T *		?+?(	      ptrdiff_t,		T * );
-forall( dtype T | sized(T) ) const T *		?+?( const	    T *,	  ptrdiff_t );
-forall( dtype T | sized(T) ) const T *		?+?(	      ptrdiff_t, const		T * );
-forall( dtype T | sized(T) ) volatile T *	?+?(	   volatile T *,	  ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *	?+?(	      ptrdiff_t,       volatile T * );
-forall( dtype T | sized(T) ) const volatile T *	?+?( const volatile T *,	  ptrdiff_t );
-forall( dtype T | sized(T) ) const volatile T *	?+?(	      ptrdiff_t, const volatile T * );
-forall( dtype T | sized(T) ) T *		?-?(		    T *,	  ptrdiff_t );
-forall( dtype T | sized(T) ) const T *		?-?( const	    T *,	  ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *	?-?(	   volatile T *,	  ptrdiff_t );
-forall( dtype T | sized(T) ) const volatile T *	?-?( const volatile T *,	  ptrdiff_t );
-forall( dtype T | sized(T) ) ptrdiff_t		?-?( const volatile T *, const volatile T * );
+forall( T & | sized(T) ) T *		?+?(		    T *,	  ptrdiff_t );
+forall( T & | sized(T) ) T *		?+?(	      ptrdiff_t,		T * );
+forall( T & | sized(T) ) const T *		?+?( const	    T *,	  ptrdiff_t );
+forall( T & | sized(T) ) const T *		?+?(	      ptrdiff_t, const		T * );
+forall( T & | sized(T) ) volatile T *	?+?(	   volatile T *,	  ptrdiff_t );
+forall( T & | sized(T) ) volatile T *	?+?(	      ptrdiff_t,       volatile T * );
+forall( T & | sized(T) ) const volatile T *	?+?( const volatile T *,	  ptrdiff_t );
+forall( T & | sized(T) ) const volatile T *	?+?(	      ptrdiff_t, const volatile T * );
+forall( T & | sized(T) ) T *		?-?(		    T *,	  ptrdiff_t );
+forall( T & | sized(T) ) const T *		?-?( const	    T *,	  ptrdiff_t );
+forall( T & | sized(T) ) volatile T *	?-?(	   volatile T *,	  ptrdiff_t );
+forall( T & | sized(T) ) const volatile T *	?-?( const volatile T *,	  ptrdiff_t );
+forall( T & | sized(T) ) ptrdiff_t		?-?( const volatile T *, const volatile T * );
 
 // ------------------------------------------------------------
@@ -255,23 +255,23 @@
 	   ?>?( long double, long double ),				?>=?( long double, long double );
 
-forall( dtype DT ) signed int ?<?(                 DT *,                DT * );
-forall( dtype DT ) signed int ?<?(  const          DT *, const          DT * );
-forall( dtype DT ) signed int ?<?(        volatile DT *,       volatile DT * );
-forall( dtype DT ) signed int ?<?(  const volatile DT *, const volatile DT * );
-
-forall( dtype DT ) signed int ?>?(                 DT *,                DT * );
-forall( dtype DT ) signed int ?>?(  const          DT *, const          DT * );
-forall( dtype DT ) signed int ?>?(        volatile DT *,       volatile DT * );
-forall( dtype DT ) signed int ?>?(  const volatile DT *, const volatile DT * );
-
-forall( dtype DT ) signed int ?<=?(                 DT *,                DT * );
-forall( dtype DT ) signed int ?<=?(  const          DT *, const          DT * );
-forall( dtype DT ) signed int ?<=?(        volatile DT *,       volatile DT * );
-forall( dtype DT ) signed int ?<=?( const volatile DT *, const volatile DT * );
-
-forall( dtype DT ) signed int ?>=?(                 DT *,                DT * );
-forall( dtype DT ) signed int ?>=?(  const          DT *, const          DT * );
-forall( dtype DT ) signed int ?>=?(        volatile DT *,       volatile DT * );
-forall( dtype DT ) signed int ?>=?( const volatile DT *, const volatile DT * );
+forall( DT & ) signed int ?<?(                 DT *,                DT * );
+forall( DT & ) signed int ?<?(  const          DT *, const          DT * );
+forall( DT & ) signed int ?<?(        volatile DT *,       volatile DT * );
+forall( DT & ) signed int ?<?(  const volatile DT *, const volatile DT * );
+
+forall( DT & ) signed int ?>?(                 DT *,                DT * );
+forall( DT & ) signed int ?>?(  const          DT *, const          DT * );
+forall( DT & ) signed int ?>?(        volatile DT *,       volatile DT * );
+forall( DT & ) signed int ?>?(  const volatile DT *, const volatile DT * );
+
+forall( DT & ) signed int ?<=?(                 DT *,                DT * );
+forall( DT & ) signed int ?<=?(  const          DT *, const          DT * );
+forall( DT & ) signed int ?<=?(        volatile DT *,       volatile DT * );
+forall( DT & ) signed int ?<=?( const volatile DT *, const volatile DT * );
+
+forall( DT & ) signed int ?>=?(                 DT *,                DT * );
+forall( DT & ) signed int ?>=?(  const          DT *, const          DT * );
+forall( DT & ) signed int ?>=?(        volatile DT *,       volatile DT * );
+forall( DT & ) signed int ?>=?( const volatile DT *, const volatile DT * );
 
 // ------------------------------------------------------------
@@ -302,13 +302,13 @@
 signed int ?==?( one_t, one_t ),							?!=?( one_t, one_t );
 
-forall( dtype DT ) signed int ?==?(		   DT *,		DT * );
-forall( dtype DT ) signed int ?==?( const	   DT *, const		DT * );
-forall( dtype DT ) signed int ?==?(       volatile DT *,       volatile DT * );
-forall( dtype DT ) signed int ?==?( const volatile DT *, const volatile DT * );
+forall( DT & ) signed int ?==?(		   DT *,		DT * );
+forall( DT & ) signed int ?==?( const	   DT *, const		DT * );
+forall( DT & ) signed int ?==?(       volatile DT *,       volatile DT * );
+forall( DT & ) signed int ?==?( const volatile DT *, const volatile DT * );
 forall( ftype FT ) signed int ?==?( FT *, FT * );
-forall( dtype DT ) signed int ?!=?(		   DT *,		DT * );
-forall( dtype DT ) signed int ?!=?( const	   DT *, const		DT * );
-forall( dtype DT ) signed int ?!=?(       volatile DT *,       volatile DT * );
-forall( dtype DT ) signed int ?!=?( const volatile DT *, const volatile DT * );
+forall( DT & ) signed int ?!=?(		   DT *,		DT * );
+forall( DT & ) signed int ?!=?( const	   DT *, const		DT * );
+forall( DT & ) signed int ?!=?(       volatile DT *,       volatile DT * );
+forall( DT & ) signed int ?!=?( const volatile DT *, const volatile DT * );
 forall( ftype FT ) signed int ?!=?( FT *, FT * );
 
@@ -376,73 +376,73 @@
 
 forall( ftype FT ) FT *			?=?( FT *&, FT * );
-forall( ftype FT ) FT *			?=?( FT * volatile &, FT * );
-
-forall( dtype DT ) DT *			?=?(		     DT *	   &,			DT * );
-forall( dtype DT ) DT *			?=?(		     DT * volatile &,			DT * );
-forall( dtype DT ) const DT *		?=?( const	     DT *	   &,			DT * );
-forall( dtype DT ) const DT *		?=?( const	     DT * volatile &,			DT * );
-forall( dtype DT ) const DT *		?=?( const	     DT *	   &, const		DT * );
-forall( dtype DT ) const DT *		?=?( const	     DT * volatile &, const		DT * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   &,			DT * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile &,			DT * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   &,	    volatile	DT * );
-forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile &,	    volatile	DT * );
-
-forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   &,			DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile &,			DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   &, const		DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile &, const		DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   &,	    volatile	DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile &,	    volatile	DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   &, const volatile	DT * );
-forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile &, const volatile	DT * );
-
-forall( dtype DT ) void *		 ?=?(		     void *	     &,			DT * );
-forall( dtype DT ) void *		 ?=?(		     void * volatile &,			DT * );
-forall( dtype DT ) const void *		 ?=?( const	     void *	     &,			DT * );
-forall( dtype DT ) const void *		 ?=?( const	     void * volatile &,			DT * );
-forall( dtype DT ) const void *		 ?=?( const	     void *	     &, const		DT * );
-forall( dtype DT ) const void *		 ?=?( const	     void * volatile &, const		DT * );
-forall( dtype DT ) volatile void *	 ?=?(	    volatile void *	     &,			DT * );
-forall( dtype DT ) volatile void *	 ?=?(	    volatile void * volatile &,			DT * );
-forall( dtype DT ) volatile void *	 ?=?(	    volatile void *	     &,	      volatile	DT * );
-forall( dtype DT ) volatile void *	 ?=?(	    volatile void * volatile &,	      volatile	DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void *	     &,			DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile &,			DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void *	     &, const		DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile &, const		DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void *	     &,	      volatile	DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile &,	      volatile	DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void *	     &, const volatile	DT * );
-forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile &, const volatile	DT * );
+forall( ftyep FT ) FT *			?=?( FT * volatile &, FT * );
+
+forall( DT & ) DT *			?=?(		     DT *	   &,			DT * );
+forall( DT & ) DT *			?=?(		     DT * volatile &,			DT * );
+forall( DT & ) const DT *		?=?( const	     DT *	   &,			DT * );
+forall( DT & ) const DT *		?=?( const	     DT * volatile &,			DT * );
+forall( DT & ) const DT *		?=?( const	     DT *	   &, const		DT * );
+forall( DT & ) const DT *		?=?( const	     DT * volatile &, const		DT * );
+forall( DT & ) volatile DT *	?=?(	   volatile  DT *	   &,			DT * );
+forall( DT & ) volatile DT *	?=?(	   volatile  DT * volatile &,			DT * );
+forall( DT & ) volatile DT *	?=?(	   volatile  DT *	   &,	    volatile	DT * );
+forall( DT & ) volatile DT *	?=?(	   volatile  DT * volatile &,	    volatile	DT * );
+
+forall( DT & ) const volatile DT *	?=?( const volatile  DT *	   &,			DT * );
+forall( DT & ) const volatile DT *  ?=?( const volatile  DT * volatile &,			DT * );
+forall( DT & ) const volatile DT *  ?=?( const volatile  DT *	   &, const		DT * );
+forall( DT & ) const volatile DT *  ?=?( const volatile  DT * volatile &, const		DT * );
+forall( DT & ) const volatile DT *  ?=?( const volatile  DT *	   &,	    volatile	DT * );
+forall( DT & ) const volatile DT *  ?=?( const volatile  DT * volatile &,	    volatile	DT * );
+forall( DT & ) const volatile DT *  ?=?( const volatile  DT *	   &, const volatile	DT * );
+forall( DT & ) const volatile DT *  ?=?( const volatile  DT * volatile &, const volatile	DT * );
+
+forall( DT & ) void *		 ?=?(		     void *	     &,			DT * );
+forall( DT & ) void *		 ?=?(		     void * volatile &,			DT * );
+forall( DT & ) const void *		 ?=?( const	     void *	     &,			DT * );
+forall( DT & ) const void *		 ?=?( const	     void * volatile &,			DT * );
+forall( DT & ) const void *		 ?=?( const	     void *	     &, const		DT * );
+forall( DT & ) const void *		 ?=?( const	     void * volatile &, const		DT * );
+forall( DT & ) volatile void *	 ?=?(	    volatile void *	     &,			DT * );
+forall( DT & ) volatile void *	 ?=?(	    volatile void * volatile &,			DT * );
+forall( DT & ) volatile void *	 ?=?(	    volatile void *	     &,	      volatile	DT * );
+forall( DT & ) volatile void *	 ?=?(	    volatile void * volatile &,	      volatile	DT * );
+forall( DT & ) const volatile void * ?=?( const volatile void *	     &,			DT * );
+forall( DT & ) const volatile void * ?=?( const volatile void * volatile &,			DT * );
+forall( DT & ) const volatile void * ?=?( const volatile void *	     &, const		DT * );
+forall( DT & ) const volatile void * ?=?( const volatile void * volatile &, const		DT * );
+forall( DT & ) const volatile void * ?=?( const volatile void *	     &,	      volatile	DT * );
+forall( DT & ) const volatile void * ?=?( const volatile void * volatile &,	      volatile	DT * );
+forall( DT & ) const volatile void * ?=?( const volatile void *	     &, const volatile	DT * );
+forall( DT & ) const volatile void * ?=?( const volatile void * volatile &, const volatile	DT * );
 
 //forall( dtype DT ) DT *			?=?(		    DT *	  &, zero_t );
 //forall( dtype DT ) DT *			?=?(		    DT * volatile &, zero_t );
-forall( dtype DT ) const DT *		?=?( const	    DT *	  &, zero_t );
-forall( dtype DT ) const DT *		?=?( const	    DT * volatile &, zero_t );
+forall( DT & ) const DT *		?=?( const	    DT *	  &, zero_t );
+forall( DT & ) const DT *		?=?( const	    DT * volatile &, zero_t );
 //forall( dtype DT ) volatile DT *	?=?( volatile	    DT *	  &, zero_t );
 //forall( dtype DT ) volatile DT *	?=?( volatile	    DT * volatile &, zero_t );
-forall( dtype DT ) const volatile DT *	?=?( const volatile DT *	  &, zero_t );
-forall( dtype DT ) const volatile DT *	?=?( const volatile DT * volatile &, zero_t );
+forall( DT & ) const volatile DT *	?=?( const volatile DT *	  &, zero_t );
+forall( DT & ) const volatile DT *	?=?( const volatile DT * volatile &, zero_t );
 
 forall( ftype FT ) FT *			?=?( FT *	   &, zero_t );
 forall( ftype FT ) FT *			?=?( FT * volatile &, zero_t );
 
-forall( dtype T | sized(T) ) T *		?+=?(		     T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) T *		?+=?(		     T * volatile &, ptrdiff_t );
-forall( dtype T | sized(T) ) const T *		?+=?( const	     T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) const T *		?+=?( const	     T * volatile &, ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *	?+=?(	    volatile T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *	?+=?(	    volatile T * volatile &, ptrdiff_t );
-forall( dtype T | sized(T) ) const volatile T *	?+=?( const volatile T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) const volatile T *	?+=?( const volatile T * volatile &, ptrdiff_t );
-forall( dtype T | sized(T) ) T *		?-=?(		     T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) T *		?-=?(		     T * volatile &, ptrdiff_t );
-forall( dtype T | sized(T) ) const T *		?-=?( const	     T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) const T *		?-=?( const	     T * volatile &, ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *	?-=?(	    volatile T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) volatile T *	?-=?(	    volatile T * volatile &, ptrdiff_t );
-forall( dtype T | sized(T) ) const volatile T *	?-=?( const volatile T *	  &, ptrdiff_t );
-forall( dtype T | sized(T) ) const volatile T *	?-=?( const volatile T * volatile &, ptrdiff_t );
+forall( T & | sized(T) ) T *		?+=?(		     T *	  &, ptrdiff_t );
+forall( T & | sized(T) ) T *		?+=?(		     T * volatile &, ptrdiff_t );
+forall( T & | sized(T) ) const T *		?+=?( const	     T *	  &, ptrdiff_t );
+forall( T & | sized(T) ) const T *		?+=?( const	     T * volatile &, ptrdiff_t );
+forall( T & | sized(T) ) volatile T *	?+=?(	    volatile T *	  &, ptrdiff_t );
+forall( T & | sized(T) ) volatile T *	?+=?(	    volatile T * volatile &, ptrdiff_t );
+forall( T & | sized(T) ) const volatile T *	?+=?( const volatile T *	  &, ptrdiff_t );
+forall( T & | sized(T) ) const volatile T *	?+=?( const volatile T * volatile &, ptrdiff_t );
+forall( T & | sized(T) ) T *		?-=?(		     T *	  &, ptrdiff_t );
+forall( T & | sized(T) ) T *		?-=?(		     T * volatile &, ptrdiff_t );
+forall( T & | sized(T) ) const T *		?-=?( const	     T *	  &, ptrdiff_t );
+forall( T & | sized(T) ) const T *		?-=?( const	     T * volatile &, ptrdiff_t );
+forall( T & | sized(T) ) volatile T *	?-=?(	    volatile T *	  &, ptrdiff_t );
+forall( T & | sized(T) ) volatile T *	?-=?(	    volatile T * volatile &, ptrdiff_t );
+forall( T & | sized(T) ) const volatile T *	?-=?( const volatile T *	  &, ptrdiff_t );
+forall( T & | sized(T) ) const volatile T *	?-=?( const volatile T * volatile &, ptrdiff_t );
 
 _Bool			?=?( _Bool &, _Bool ),					?=?( volatile _Bool &, _Bool );
@@ -723,30 +723,30 @@
 forall( ftype FT ) void ?{}( FT * volatile &, FT * );
 
-forall( dtype DT ) void ?{}(		     DT *	   &,			DT * );
-forall( dtype DT ) void ?{}( const	     DT *	   &,			DT * );
-forall( dtype DT ) void ?{}( const	     DT *	   &, const		DT * );
-forall( dtype DT ) void ?{}(	   volatile  DT *	   &,			DT * );
-forall( dtype DT ) void ?{}(	   volatile  DT *	   &,	    volatile	DT * );
-forall( dtype DT ) void ?{}( const volatile  DT *	   &,			DT * );
-forall( dtype DT ) void ?{}( const volatile  DT *	   &, const		DT * );
-forall( dtype DT ) void ?{}( const volatile  DT *	   &,	    volatile	DT * );
-forall( dtype DT ) void ?{}( const volatile  DT *	   &, const volatile	DT * );
-
-forall( dtype DT ) void ?{}(		     void *	     &,			DT * );
-forall( dtype DT ) void ?{}( const	     void *	     &,			DT * );
-forall( dtype DT ) void ?{}( const	     void *	     &, const		DT * );
-forall( dtype DT ) void ?{}(	    volatile void *	     &,			DT * );
-forall( dtype DT ) void ?{}(	    volatile void *	     &,	      volatile	DT * );
-forall( dtype DT ) void ?{}( const volatile void *	     &,			DT * );
-forall( dtype DT ) void ?{}( const volatile void *	     &, const		DT * );
-forall( dtype DT ) void ?{}( const volatile void *	     &,	      volatile	DT * );
-forall( dtype DT ) void ?{}( const volatile void *	     &, const volatile	DT * );
+forall( DT & ) void ?{}(		     DT *	   &,			DT * );
+forall( DT & ) void ?{}( const	     DT *	   &,			DT * );
+forall( DT & ) void ?{}( const	     DT *	   &, const		DT * );
+forall( DT & ) void ?{}(	   volatile  DT *	   &,			DT * );
+forall( DT & ) void ?{}(	   volatile  DT *	   &,	    volatile	DT * );
+forall( DT & ) void ?{}( const volatile  DT *	   &,			DT * );
+forall( DT & ) void ?{}( const volatile  DT *	   &, const		DT * );
+forall( DT & ) void ?{}( const volatile  DT *	   &,	    volatile	DT * );
+forall( DT & ) void ?{}( const volatile  DT *	   &, const volatile	DT * );
+
+forall( DT & ) void ?{}(		     void *	     &,			DT * );
+forall( DT & ) void ?{}( const	     void *	     &,			DT * );
+forall( DT & ) void ?{}( const	     void *	     &, const		DT * );
+forall( DT & ) void ?{}(	    volatile void *	     &,			DT * );
+forall( DT & ) void ?{}(	    volatile void *	     &,	      volatile	DT * );
+forall( DT & ) void ?{}( const volatile void *	     &,			DT * );
+forall( DT & ) void ?{}( const volatile void *	     &, const		DT * );
+forall( DT & ) void ?{}( const volatile void *	     &,	      volatile	DT * );
+forall( DT & ) void ?{}( const volatile void *	     &, const volatile	DT * );
 
 //forall( dtype DT ) void ?{}(		    DT *	  &, zero_t );
 //forall( dtype DT ) void ?{}(		    DT * volatile &, zero_t );
-forall( dtype DT ) void ?{}( const	    DT *	  &, zero_t );
+forall( DT & ) void ?{}( const	    DT *	  &, zero_t );
 //forall( dtype DT ) void ?{}( volatile	    DT *	  &, zero_t );
 //forall( dtype DT ) void ?{}( volatile	    DT * volatile &, zero_t );
-forall( dtype DT ) void ?{}( const volatile DT *	  &, zero_t );
+forall( DT & ) void ?{}( const volatile DT *	  &, zero_t );
 
 forall( ftype FT ) void	?{}( FT *	   &, zero_t );
@@ -755,8 +755,8 @@
 forall( ftype FT ) void	?{}( FT *	   & );
 
-forall( dtype DT ) void	?{}(		     DT *	   &);
-forall( dtype DT ) void	?{}( const	     DT *	   &);
-forall( dtype DT ) void	?{}(	   volatile  DT *	   &);
-forall( dtype DT ) void ?{}( const volatile  DT *	   &);
+forall( DT & ) void	?{}(		     DT *	   &);
+forall( DT & ) void	?{}( const	     DT *	   &);
+forall( DT & ) void	?{}(	   volatile  DT *	   &);
+forall( DT & ) void ?{}( const volatile  DT *	   &);
 
 void 	?{}(		    void *	    &);
@@ -768,8 +768,8 @@
 forall( ftype FT ) void	^?{}( FT *	   & );
 
-forall( dtype DT ) void	^?{}(		     DT *	   &);
-forall( dtype DT ) void	^?{}( const	     DT *	   &);
-forall( dtype DT ) void	^?{}(	   volatile  DT *	   &);
-forall( dtype DT ) void ^?{}( const volatile  DT *	   &);
+forall( DT & ) void	^?{}(		     DT *	   &);
+forall( DT & ) void	^?{}( const	     DT *	   &);
+forall( DT & ) void	^?{}(	   volatile  DT *	   &);
+forall( DT & ) void ^?{}( const volatile  DT *	   &);
 
 void ^?{}(		    void *	    &);
Index: libcfa/prelude/sync-builtins.cf
===================================================================
--- libcfa/prelude/sync-builtins.cf	(revision 2a59655a1dd1d977b68a881bb4951a8e017eeb1d)
+++ libcfa/prelude/sync-builtins.cf	(revision fd54fef231baeeb0016103bf19cc8e6d87287faf)
@@ -206,5 +206,5 @@
 _Bool __sync_bool_compare_and_swap(volatile unsigned __int128 *, unsigned __int128, unsigned __int128,...);
 #endif
-forall(dtype T) _Bool __sync_bool_compare_and_swap(T * volatile *, T *, T*, ...);
+forall(T &) _Bool __sync_bool_compare_and_swap(T * volatile *, T *, T*, ...);
 
 char __sync_val_compare_and_swap(volatile char *, char, char,...);
@@ -223,5 +223,5 @@
 unsigned __int128 __sync_val_compare_and_swap(volatile unsigned __int128 *, unsigned __int128, unsigned __int128,...);
 #endif
-forall(dtype T) T * __sync_val_compare_and_swap(T * volatile *, T *, T*,...);
+forall(T &) T * __sync_val_compare_and_swap(T * volatile *, T *, T*,...);
 
 char __sync_lock_test_and_set(volatile char *, char,...);
@@ -326,6 +326,6 @@
 void __atomic_exchange(volatile unsigned __int128 *, volatile unsigned __int128 *, volatile unsigned __int128 *, int);
 #endif
-forall(dtype T) T * __atomic_exchange_n(T * volatile *, T *, int);
-forall(dtype T) void __atomic_exchange(T * volatile *, T * volatile *, T * volatile *, int);
+forall(T &) T * __atomic_exchange_n(T * volatile *, T *, int);
+forall(T &) void __atomic_exchange(T * volatile *, T * volatile *, T * volatile *, int);
 
 _Bool __atomic_load_n(const volatile _Bool *, int);
@@ -359,6 +359,6 @@
 void __atomic_load(const volatile unsigned __int128 *, volatile unsigned __int128 *, int);
 #endif
-forall(dtype T) T * __atomic_load_n(T * const volatile *, int);
-forall(dtype T) void __atomic_load(T * const volatile *, T **, int);
+forall(T &) T * __atomic_load_n(T * const volatile *, int);
+forall(T &) void __atomic_load(T * const volatile *, T **, int);
 
 _Bool __atomic_compare_exchange_n(volatile char *, char *, char, _Bool, int, int);
@@ -390,6 +390,6 @@
 _Bool __atomic_compare_exchange   (volatile unsigned __int128 *, unsigned __int128 *, unsigned __int128 *, _Bool, int, int);
 #endif
-forall(dtype T) _Bool __atomic_compare_exchange_n (T * volatile *, T **, T*, _Bool, int, int);
-forall(dtype T) _Bool __atomic_compare_exchange   (T * volatile *, T **, T**, _Bool, int, int);
+forall(T &) _Bool __atomic_compare_exchange_n (T * volatile *, T **, T*, _Bool, int, int);
+forall(T &) _Bool __atomic_compare_exchange   (T * volatile *, T **, T**, _Bool, int, int);
 
 void __atomic_store_n(volatile _Bool *, _Bool, int);
@@ -423,6 +423,6 @@
 void __atomic_store(volatile unsigned __int128 *, unsigned __int128 *, int);
 #endif
-forall(dtype T) void __atomic_store_n(T * volatile *, T *, int);
-forall(dtype T) void __atomic_store(T * volatile *, T **, int);
+forall(T &) void __atomic_store_n(T * volatile *, T *, int);
+forall(T &) void __atomic_store(T * volatile *, T **, int);
 
 char __atomic_add_fetch  (volatile char *, char, int);
