Index: libcfa/src/stdlib.cfa
===================================================================
--- libcfa/src/stdlib.cfa	(revision 95eb7cfe800ca3bc7760457356d3848fdc56cc93)
+++ libcfa/src/stdlib.cfa	(revision d74369beaab60052b0f6f1c8ae57d8e72c9e2250)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:10:29 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Oct 22 08:57:52 2019
-// Update Count     : 478
+// Last Modified On : Wed Nov 20 17:22:47 2019
+// Update Count     : 485
 //
 
@@ -30,50 +30,19 @@
 	T * alloc_set( T ptr[], size_t dim, char fill ) {	// realloc array with fill
 		size_t olen = malloc_usable_size( ptr );		// current allocation
-		char * nptr = (char *)realloc( (void *)ptr, dim * sizeof(T) ); // C realloc
+		void * nptr = (void *)realloc( (void *)ptr, dim * sizeof(T) ); // C realloc
 		size_t nlen = malloc_usable_size( nptr );		// new allocation
 		if ( nlen > olen ) {							// larger ?
-			memset( nptr + olen, (int)fill, nlen - olen ); // initialize added storage
+			memset( (char *)nptr + olen, (int)fill, nlen - olen ); // initialize added storage
 		} // if
 		return (T *)nptr;
 	} // alloc_set
 
-	T * alloc_align( T ptr[], size_t align ) {			// aligned realloc array
-		char * nptr;
-		size_t alignment = malloc_alignment( ptr );
-		if ( align != alignment && (uintptr_t)ptr % align != 0 ) {
-			size_t olen = malloc_usable_size( ptr );	// current allocation
-			nptr = (char *)memalign( align, olen );
-			size_t nlen = malloc_usable_size( nptr );	// new allocation
-			size_t lnth = olen < nlen ? olen : nlen;	// min
-			memcpy( nptr, ptr, lnth );					// initialize storage
-			free( ptr );
-		} else {
-			nptr = (char *)ptr;
-		} // if
-		return (T *)nptr;
-	} // alloc_align
-
-	T * alloc_align( T ptr[], size_t align, size_t dim ) { // aligned realloc array
-		char * nptr;
-		size_t alignment = malloc_alignment( ptr );
-		if ( align != alignment ) {
-			size_t olen = malloc_usable_size( ptr );	// current allocation
-			nptr = (char *)memalign( align, dim * sizeof(T) );
-			size_t nlen = malloc_usable_size( nptr );	// new allocation
-			size_t lnth = olen < nlen ? olen : nlen;	// min
-			memcpy( nptr, ptr, lnth );					// initialize storage
-			free( ptr );
-		} else {
-			nptr = (char *)realloc( (void *)ptr, dim * sizeof(T) ); // C realloc
-		} // if
-		return (T *)nptr;
-	} // alloc_align
-
 	T * alloc_align_set( T ptr[], size_t align, char fill ) { // aligned realloc with fill
 		size_t olen = malloc_usable_size( ptr );		// current allocation
-		char * nptr = alloc_align( ptr, align );
+		void * nptr = (void *)realloc( (void *)ptr, align, sizeof(T) ); // CFA realloc
+		// char * nptr = alloc_align( ptr, align );
 		size_t nlen = malloc_usable_size( nptr );		// new allocation
 		if ( nlen > olen ) {							// larger ?
-			memset( nptr + olen, (int)fill, nlen - olen ); // initialize added storage
+			memset( (char *)nptr + olen, (int)fill, nlen - olen ); // initialize added storage
 		} // if
 		return (T *)nptr;
Index: libcfa/src/stdlib.hfa
===================================================================
--- libcfa/src/stdlib.hfa	(revision 95eb7cfe800ca3bc7760457356d3848fdc56cc93)
+++ libcfa/src/stdlib.hfa	(revision d74369beaab60052b0f6f1c8ae57d8e72c9e2250)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Oct 20 22:57:33 2019
-// Update Count     : 390
+// Last Modified On : Fri Nov 22 15:13:14 2019
+// Update Count     : 399
 //
 
@@ -28,4 +28,6 @@
 } // extern "C"
 
+void * realloc( void * oaddr, size_t nalign, size_t size ); // CFA heap
+
 //---------------------------------------
 
@@ -50,6 +52,5 @@
 	} // calloc
 
-	T * realloc( T * ptr, size_t size ) {
-		if ( unlikely( ptr == 0 ) ) return malloc();
+	T * realloc( T * ptr, size_t size ) {				// CFA realloc, eliminate return-type cast
 		return (T *)(void *)realloc( (void *)ptr, size ); // C realloc
 	} // realloc
@@ -59,4 +60,8 @@
 	} // memalign
 
+	T * cmemalign( size_t align, size_t dim  ) {
+		return (T *)cmemalign( align, dim, sizeof(T) );	// CFA cmemalign
+	} // cmemalign
+
 	T * aligned_alloc( size_t align ) {
 		return (T *)aligned_alloc( align, sizeof(T) );	// C aligned_alloc
@@ -79,5 +84,5 @@
 
 	T * alloc( T ptr[], size_t dim ) {					// realloc
-		return realloc( ptr, dim * sizeof(T) );
+		return (T *)(void *)realloc( (void *)ptr, dim * sizeof(T) ); // C realloc
 	} // alloc
 
@@ -118,4 +123,12 @@
 	} // alloc_align
 
+	T * alloc_align( T ptr[], size_t align ) {			// aligned realloc array
+		return (T *)(void *)realloc( (void *)ptr, align, sizeof(T) ); // CFA realloc
+	} // alloc_align
+
+	T * alloc_align( T ptr[], size_t align, size_t dim ) { // aligned realloc array
+		return (T *)(void *)realloc( (void *)ptr, align, dim * sizeof(T) ); // CFA realloc
+	} // alloc_align
+
 	T * alloc_align_set( size_t align, char fill ) {
 		return (T *)memset( (T *)alloc_align( align ), (int)fill, sizeof(T) ); // initialize with fill value
@@ -142,6 +155,4 @@
 
 forall( dtype T | sized(T) ) {
-	T * alloc_align( T ptr[], size_t align );			// realign
-	T * alloc_align( T ptr[], size_t align, size_t dim ); // aligned realloc array
 	T * alloc_align_set( T ptr[], size_t align, size_t dim, char fill ); // aligned realloc array with fill
 } // distribution
