Index: src/libcfa/containers/maybe
===================================================================
--- src/libcfa/containers/maybe	(revision b72d4ed3c032c44b2e77aa0b0822f63ebaf1bea0)
+++ src/libcfa/containers/maybe	(revision aca65621fec224ce52fce478fdf5225511cb845b)
@@ -29,17 +29,17 @@
 
 forall(otype T)
-void ?{}(maybe(T) * this);
+void ?{}(maybe(T) & this);
 
 forall(otype T)
-void ?{}(maybe(T) * this, T value);
+void ?{}(maybe(T) & this, T value);
 
 forall(otype T)
-void ?{}(maybe(T) * this, maybe(T) other);
+void ?{}(maybe(T) & this, maybe(T) other);
 
 forall(otype T)
-void ^?{}(maybe(T) * this);
+void ^?{}(maybe(T) & this);
 
 forall(otype T)
-maybe(T) ?=?(maybe(T) * this, maybe(T) other);
+maybe(T) ?=?(maybe(T) & this, maybe(T) other);
 
 forall(otype T)
Index: src/libcfa/containers/maybe.c
===================================================================
--- src/libcfa/containers/maybe.c	(revision b72d4ed3c032c44b2e77aa0b0822f63ebaf1bea0)
+++ src/libcfa/containers/maybe.c	(revision aca65621fec224ce52fce478fdf5225511cb845b)
@@ -19,39 +19,40 @@
 
 forall(otype T)
-void ?{}(maybe(T) * this) {
-	this->has_value = false;
+void ?{}(maybe(T) & this) {
+	this.has_value = false;
 }
 
 forall(otype T)
-void ?{}(maybe(T) * this, T value) {
-	this->has_value = true;
-	(&this->value){value};
+void ?{}(maybe(T) & this, T value) {
+	this.has_value = true;
+	(this.value){value};
 }
 
 forall(otype T)
-void ?{}(maybe(T) * this, maybe(T) other) {
-	this->has_value = other.has_value;
+void ?{}(maybe(T) & this, maybe(T) other) {
+	this.has_value = other.has_value;
 	if (other.has_value) {
-		(&this->value){other.value};
+		(this.value){other.value};
 	}
 }
 
 forall(otype T)
-maybe(T) ?=?(maybe(T) * this, maybe(T) that) {
-	if (this->has_value & that.has_value) {
-		this->value = that.value;
-	} else if (this->has_value) {
-		^(&this->value){};
-		this->has_value = false;
+maybe(T) ?=?(maybe(T) & this, maybe(T) that) {
+	if (this.has_value & that.has_value) {
+		this.value = that.value;
+	} else if (this.has_value) {
+		^(this.value){};
+		this.has_value = false;
 	} else if (that.has_value) {
-		this->has_value = true;
-		(&this->value){that.value};
+		this.has_value = true;
+		(this.value){that.value};
 	}
+	return this;
 }
 
 forall(otype T)
-void ^?{}(maybe(T) * this) {
-	if (this->has_value) {
-		^(&this->value){};
+void ^?{}(maybe(T) & this) {
+	if (this.has_value) {
+		^(this.value){};
 	}
 }
@@ -89,5 +90,5 @@
 	} else {
 		this->has_value = true;
-		(&this->value){value};
+		(this->value){value};
 	}
 }
@@ -97,5 +98,5 @@
 	if (this->has_value) {
 		this->has_value = false;
-		^(&this->value){};
+		^(this->value){};
 	}
 }
Index: src/libcfa/containers/vector
===================================================================
--- src/libcfa/containers/vector	(revision b72d4ed3c032c44b2e77aa0b0822f63ebaf1bea0)
+++ src/libcfa/containers/vector	(revision aca65621fec224ce52fce478fdf5225511cb845b)
@@ -31,14 +31,14 @@
 
 forall(otype T)
-void ?{}(heap_allocator(T)* this);
+void ?{}(heap_allocator(T)& this);
 
 forall(otype T)
-void ?{}(heap_allocator(T)* this, heap_allocator(T) rhs);
+void ?{}(heap_allocator(T)& this, heap_allocator(T) rhs);
 
 forall(otype T)
-heap_allocator(T) ?=?(heap_allocator(T)* this, heap_allocator(T) rhs);
+heap_allocator(T) ?=?(heap_allocator(T)& this, heap_allocator(T) rhs);
 
 forall(otype T)
-void ^?{}(heap_allocator(T)* this);
+void ^?{}(heap_allocator(T)& this);
 
 forall(otype T)
@@ -65,14 +65,14 @@
 //Initialization
 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void ?{}(vector(T, allocator_t)* this);
+void ?{}(vector(T, allocator_t)& this);
 
 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void ?{}(vector(T, allocator_t)* this, vector(T, allocator_t) rhs);
+void ?{}(vector(T, allocator_t)& this, vector(T, allocator_t) rhs);
 
 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-vector(T, allocator_t) ?=?(vector(T, allocator_t)* this, vector(T, allocator_t) rhs);
+vector(T, allocator_t) ?=?(vector(T, allocator_t)& this, vector(T, allocator_t) rhs);
 
 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void ^?{}(vector(T, allocator_t)* this);
+void ^?{}(vector(T, allocator_t)& this);
 
 forall(otype T, otype allocator_t = heap_allocator(T) | allocator_c(T, allocator_t))
Index: src/libcfa/containers/vector.c
===================================================================
--- src/libcfa/containers/vector.c	(revision b72d4ed3c032c44b2e77aa0b0822f63ebaf1bea0)
+++ src/libcfa/containers/vector.c	(revision aca65621fec224ce52fce478fdf5225511cb845b)
@@ -24,15 +24,15 @@
 //Initialization
 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void ?{}(vector(T, allocator_t)* this)
+void ?{}(vector(T, allocator_t)& this)
 {
-	(&this->storage){};
-	this->size = 0;
+	(this.storage){};
+	this.size = 0;
 }
 
 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void ?{}(vector(T, allocator_t)* this, vector(T, allocator_t) rhs)
+void ?{}(vector(T, allocator_t)& this, vector(T, allocator_t) rhs)
 {
-	(&this->storage){ rhs.storage };
-	copy_internal(this, &rhs);
+	(this.storage){ rhs.storage };
+	copy_internal(&this, &rhs);
 }
 
@@ -46,8 +46,8 @@
 
 forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void ^?{}(vector(T, allocator_t)* this)
+void ^?{}(vector(T, allocator_t)& this)
 {
-	clear(this);
-	^(&this->storage){};
+	clear(&this);
+	^(this.storage){};
 }
 
@@ -66,5 +66,5 @@
 {
 	this->size--;
-	^(&data(&this->storage)[this->size]){};
+	^(data(&this->storage)[this->size]){};
 }
 
@@ -74,5 +74,5 @@
 	for(size_t i = 0; i < this->size; i++)
 	{
-		^(&data(&this->storage)[this->size]){};
+		^(data(&this->storage)[this->size]){};
 	}
 	this->size = 0;
@@ -87,5 +87,5 @@
 	this->size = other->size;
 	for(size_t i = 0; i < this->size; i++) {
-		(&data(&this->storage)[this->size]){ data(&other->storage)[other->size] };
+		(data(&this->storage)[this->size]){ data(&other->storage)[other->size] };
 	}
 }
@@ -94,29 +94,29 @@
 //Allocator
 forall(otype T)
-void ?{}(heap_allocator(T)* this)
+void ?{}(heap_allocator(T)& this)
 {
-	this->storage = 0;
-	this->capacity = 0;
+	this.storage = 0;
+	this.capacity = 0;
 }
 
 forall(otype T)
-void ?{}(heap_allocator(T)* this, heap_allocator(T) rhs)
+void ?{}(heap_allocator(T)& this, heap_allocator(T) rhs)
 {
-	this->capacity = rhs.capacity;
-	this->storage = (T*)realloc((void*)this->storage, this->capacity * sizeof(T));
+	this.capacity = rhs.capacity;
+	this.storage = (T*)realloc((void*)this.storage, this.capacity * sizeof(T));
 }
 
 forall(otype T)
-heap_allocator(T) ?=?(heap_allocator(T)* this, heap_allocator(T) rhs)
+heap_allocator(T) ?=?(heap_allocator(T)& this, heap_allocator(T) rhs)
 {
-	this->capacity = rhs.capacity;
-	this->storage = (T*)realloc((void*)this->storage, this->capacity * sizeof(T));
-	return *this;
+	this.capacity = rhs.capacity;
+	this.storage = (T*)realloc((void*)this.storage, this.capacity * sizeof(T));
+	return this;
 }
 
 forall(otype T)
-void ^?{}(heap_allocator(T)* this)
+void ^?{}(heap_allocator(T)& this)
 {
-	free(this->storage);
+	free(this.storage);
 }
 
Index: src/libcfa/interpose.c
===================================================================
--- src/libcfa/interpose.c	(revision b72d4ed3c032c44b2e77aa0b0822f63ebaf1bea0)
+++ src/libcfa/interpose.c	(revision aca65621fec224ce52fce478fdf5225511cb845b)
@@ -10,6 +10,6 @@
 // Author           : Thierry Delisle
 // Created On       : Wed Mar 29 16:10:31 2017
-// Last Modified By : 
-// Last Modified On : 
+// Last Modified By :
+// Last Modified On :
 // Update Count     : 0
 //
@@ -50,5 +50,5 @@
 
 	union { generic_fptr_t fptr; void* ptr; } originalFunc;
-	
+
 	#if defined( _GNU_SOURCE )
 		if ( version ) {
@@ -60,7 +60,7 @@
 		originalFunc.ptr = dlsym( library, symbol );
 	#endif // _GNU_SOURCE
-	
+
 	error = dlerror();
-	if ( error ) abortf( "interpose_symbol : internal error, %s\n", error ); 
+	if ( error ) abortf( "interpose_symbol : internal error, %s\n", error );
 
 	return originalFunc.fptr;
@@ -75,7 +75,7 @@
 forall(dtype T)
 static inline void assign_ptr( T** symbol_ptr, const char * symbol_name, const char * version) {
-	union { 
+	union {
 		generic_fptr_t gp;
-		T* tp; 
+		T* tp;
 	} u;
 
Index: src/libcfa/stdlib
===================================================================
--- src/libcfa/stdlib	(revision b72d4ed3c032c44b2e77aa0b0822f63ebaf1bea0)
+++ src/libcfa/stdlib	(revision aca65621fec224ce52fce478fdf5225511cb845b)
@@ -135,12 +135,12 @@
 
 // allocation/deallocation and constructor/destructor, non-array types
-forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } ) T * new( Params p );
-forall( dtype T | { void ^?{}( T * ); } ) void delete( T * ptr );
-forall( dtype T, ttype Params | { void ^?{}( T * ); void delete( Params ); } ) void delete( T * ptr, Params rest );
+forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } ) T * new( Params p );
+forall( dtype T | { void ^?{}( T & ); } ) void delete( T * ptr );
+forall( dtype T, ttype Params | { void ^?{}( T & ); void delete( Params ); } ) void delete( T * ptr, Params rest );
 
 // allocation/deallocation and constructor/destructor, array types
-forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } ) T * anew( size_t dim, Params p );
-forall( dtype T | sized(T) | { void ^?{}( T * ); } ) void adelete( size_t dim, T arr[] );
-forall( dtype T | sized(T) | { void ^?{}( T * ); }, ttype Params | { void adelete( Params ); } ) void adelete( size_t dim, T arr[], Params rest );
+forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } ) T * anew( size_t dim, Params p );
+forall( dtype T | sized(T) | { void ^?{}( T & ); } ) void adelete( size_t dim, T arr[] );
+forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype Params | { void adelete( Params ); } ) void adelete( size_t dim, T arr[], Params rest );
 
 //---------------------------------------
@@ -201,5 +201,5 @@
 double abs( double _Complex );
 long double abs( long double _Complex );
-forall( otype T | { void ?{}( T *, zero_t ); int ?<?( T, T ); T -?( T ); } )
+forall( otype T | { void ?{}( T &, zero_t ); int ?<?( T, T ); T -?( T ); } )
 T abs( T );
 
Index: src/libcfa/stdlib.c
===================================================================
--- src/libcfa/stdlib.c	(revision b72d4ed3c032c44b2e77aa0b0822f63ebaf1bea0)
+++ src/libcfa/stdlib.c	(revision aca65621fec224ce52fce478fdf5225511cb845b)
@@ -34,15 +34,15 @@
 	if ( nlen > olen ) {								// larger ?
 		memset( nptr + olen, (int)fill, nlen - olen );	// initialize added storage
-	} // 
+	} //
     return (T *)nptr;
 } // alloc
 
 // allocation/deallocation and constructor/destructor, non-array types
-forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } )
+forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } )
 T * new( Params p ) {
 	return (malloc()){ p };								// run constructor
 } // new
 
-forall( dtype T | { void ^?{}( T * ); } )
+forall( dtype T | { void ^?{}( T & ); } )
 void delete( T * ptr ) {
 	if ( ptr ) {										// ignore null
@@ -52,5 +52,5 @@
 } // delete
 
-forall( dtype T, ttype Params | { void ^?{}( T * ); void delete( Params ); } )
+forall( dtype T, ttype Params | { void ^?{}( T & ); void delete( Params ); } )
 void delete( T * ptr, Params rest ) {
 	if ( ptr ) {										// ignore null
@@ -63,5 +63,5 @@
 
 // allocation/deallocation and constructor/destructor, array types
-forall( dtype T | sized(T), ttype Params | { void ?{}( T *, Params ); } )
+forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } )
 T * anew( size_t dim, Params p ) {
 	T *arr = alloc( dim );
@@ -72,5 +72,5 @@
 } // anew
 
-forall( dtype T | sized(T) | { void ^?{}( T * ); } )
+forall( dtype T | sized(T) | { void ^?{}( T & ); } )
 void adelete( size_t dim, T arr[] ) {
 	if ( arr ) {										// ignore null
@@ -82,5 +82,5 @@
 } // adelete
 
-forall( dtype T | sized(T) | { void ^?{}( T * ); }, ttype Params | { void adelete( Params ); } )
+forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype Params | { void adelete( Params ); } )
 void adelete( size_t dim, T arr[], Params rest ) {
 	if ( arr ) {										// ignore null
