Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision f8311773ddba919bb17f47a41db0f35c3fb81226)
+++ src/InitTweak/FixInit.cc	(revision 627f58564ea1659614d187a7110f17db71c41c42)
@@ -1100,4 +1100,5 @@
 			addDeclaration( tmp );
 
+			// xxx - this can be TupleAssignExpr now. Need to properly handle this case.
 			ApplicationExpr * callExpr = safe_dynamic_cast< ApplicationExpr * > ( ctorExpr->get_callExpr() );
 			TypeSubstitution * env = ctorExpr->get_env();
Index: src/libcfa/stdlib
===================================================================
--- src/libcfa/stdlib	(revision f8311773ddba919bb17f47a41db0f35c3fb81226)
+++ src/libcfa/stdlib	(revision 627f58564ea1659614d187a7110f17db71c41c42)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// stdlib -- 
+// stdlib --
 //
 // Author           : Peter A. Buhr
@@ -44,4 +44,8 @@
 void free( void * ptr );
 } // extern "C"
+
+forall( otype T, ttype Params | { void ?{}(T *, Params); } ) T * new( Params p );
+forall( dtype T | { void ^?{}(T *); } ) void delete( T * ptr );
+
 
 //---------------------------------------
Index: src/libcfa/stdlib.c
===================================================================
--- src/libcfa/stdlib.c	(revision f8311773ddba919bb17f47a41db0f35c3fb81226)
+++ src/libcfa/stdlib.c	(revision 627f58564ea1659614d187a7110f17db71c41c42)
@@ -78,4 +78,17 @@
 } // posix_memalign
 
+forall( otype T, ttype Params | { void ?{}(T *, Params); } )
+T * new( Params p ) {
+	return ((T*)malloc()){ p };
+}
+
+forall( dtype T | { void ^?{}(T *); } )
+void delete( T * ptr ) {
+  if ( ptr ) {
+    ^ptr{};
+    free( ptr );
+  }
+}
+
 //---------------------------------------
 
Index: src/tests/avltree/avl.h
===================================================================
--- src/tests/avltree/avl.h	(revision f8311773ddba919bb17f47a41db0f35c3fb81226)
+++ src/tests/avltree/avl.h	(revision 627f58564ea1659614d187a7110f17db71c41c42)
@@ -19,4 +19,7 @@
 forall(otype T | Comparable(T))
 int ?>?(T t1, T t2);
+
+// xxx - unbound type variable problems when trying to use new instead of create
+// forall( otype T, ttype Params | { void ?{}(T *, Params); } ) T * new( Params p );
 
 forall(dtype T | { void ^?{}(T *); })
Index: src/tests/avltree/avl0.c
===================================================================
--- src/tests/avltree/avl0.c	(revision f8311773ddba919bb17f47a41db0f35c3fb81226)
+++ src/tests/avltree/avl0.c	(revision 627f58564ea1659614d187a7110f17db71c41c42)
@@ -10,10 +10,2 @@
   return t2 < t1;
 }
-
-forall(dtype T | { void ^?{}(T *); })
-void delete(T * x) {
-  if (x) {
-    ^?{}(x);
-    free(x);
-  }
-}
Index: src/tests/tupleVariadic.c
===================================================================
--- src/tests/tupleVariadic.c	(revision f8311773ddba919bb17f47a41db0f35c3fb81226)
+++ src/tests/tupleVariadic.c	(revision 627f58564ea1659614d187a7110f17db71c41c42)
@@ -29,10 +29,6 @@
 }
 
-forall(otype T) T * malloc();
-
-forall(otype T, ttype Params | sized(T) | { void ?{}(T *, Params); })
-T * new(Params p) {
-	return ((T*)malloc()){ p };
-}
+forall(otype T, ttype Params | { void ?{}(T *, Params); })
+T * new(Params p);
 
 struct array {
