Index: src/libcfa/concurrency/invoke.c
===================================================================
--- src/libcfa/concurrency/invoke.c	(revision e4745d7a69e805e1610459cace93880b062586f3)
+++ src/libcfa/concurrency/invoke.c	(revision fa66f4e106173a9fcebee5940497f48e4261a824)
@@ -4,4 +4,5 @@
 #include <stdio.h>
 
+#include "libhdr.h"
 #include "invoke.h"
 
@@ -18,5 +19,5 @@
 void __invokeCoroutine__F_P9scoVtablePv__1(struct coVtable *vtable, void* vthis)
 {
-      printf("Invoke : Received %p (v %p)\n", vthis, vtable);
+      LIB_DEBUG_PRINTF("Invoke : Received %p (v %p)\n", vthis, vtable);
 
       struct coroutine* cor = vtable->this_coroutine(vthis);
@@ -34,12 +35,5 @@
       void (*invoke)(struct coVtable *, void *)
 ) {
-
-      #if ! defined( __x86_64__ ) && ! defined( __i386__ )
-            #error Only __x86_64__ and __i386__ is supported for threads in cfa
-      #endif
-
-      #if defined( __U_SWAPCONTEXT__ )
-            #error __U_SWAPCONTEXT__ should not be defined for __x86_64__
-      #endif
+      LIB_DEBUG_PRINTF("StartCoroutine : Passing in %p (v %p) to %p\n", vthis, vtable, invoke);
 
       struct coVtable * vtable = get_vtable( vthis );
@@ -47,14 +41,32 @@
       struct coStack_t* stack = &this->stack;
 
+#if defined( __i386__ )
+
+	struct FakeStack {
+	    void *fixedRegisters[3];		  	// fixed registers ebx, edi, esi (popped on 1st uSwitch, values unimportant)
+	    void *rturn;				      // where to go on return from uSwitch
+	    void *dummyReturn;				// fake return compiler would have pushed on call to uInvoke
+	    void *argument[2];				// for 16-byte ABI, 16-byte alignment starts here
+	    void *padding[2];				// padding to force 16-byte alignment, as "base" is 16-byte aligned
+	};
+
+	((struct machine_context_t *)stack->context)->SP = (char *)stack->base - sizeof( struct FakeStack );
+	((struct machine_context_t *)stack->context)->FP = NULL;		// terminate stack with NULL fp
+
+	((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->dummyReturn = NULL;
+	((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->argument[0] = vtable; // argument to invoke
+      ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->argument[1] = vthis;  // argument to invoke
+	((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->rturn = invoke;
+
+#elif defined( __x86_64__ )
+
       struct FakeStack {
             void *fixedRegisters[5];			// fixed registers rbx, r12, r13, r14, r15
             void *rturn;					// where to go on return from uSwitch
             void *dummyReturn;				// NULL return address to provide proper alignment
-      }; // FakeStack
+      };
 
       ((struct machine_context_t *)stack->context)->SP = (char *)stack->base - sizeof( struct FakeStack );
       ((struct machine_context_t *)stack->context)->FP = NULL;		// terminate stack with NULL fp
-
-      fprintf(stderr, "StartCoroutine : Passing in %p (v %p) to %p\n", vthis, vtable, invoke);
 
       ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->dummyReturn = NULL;
@@ -63,3 +75,6 @@
       ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fixedRegisters[1] = vthis;
       ((struct FakeStack *)(((struct machine_context_t *)stack->context)->SP))->fixedRegisters[2] = invoke;
+#else
+      #error Only __i386__ and __x86_64__ is supported for threads in cfa
+#endif
 }
Index: src/libcfa/concurrency/threads.c
===================================================================
--- src/libcfa/concurrency/threads.c	(revision e4745d7a69e805e1610459cace93880b062586f3)
+++ src/libcfa/concurrency/threads.c	(revision fa66f4e106173a9fcebee5940497f48e4261a824)
@@ -166,5 +166,4 @@
 	coroutine* dst = this_coroutine(cor);
 
-	fprintf(stderr, "Resuming %p from %p\n", dst, src);
 	if ( src != dst ) {				// not resuming self ?
 		assertf( dst->notHalted , 
@@ -172,5 +171,4 @@
 			"Possible cause is terminated coroutine's main routine has already returned.",
 			src->name, src, dst->name, dst );
-		fprintf(stderr, "Assigning last pointer\n");
 		dst->last = src;					// set last resumer
 	} // if
