Index: src/examples/coroutine.c
===================================================================
--- src/examples/coroutine.c	(revision 148f7290b223b10641c960429cd37cc278a5903c)
+++ src/examples/coroutine.c	(revision 78b3f524dae38189ed4f479ebdc4c6f51903a1f1)
@@ -4,16 +4,30 @@
 struct Fibonacci {
       coroutine c;
+      coVtable v;
       int fn; // used for communication
 };
 
+coroutine* this_coroutine(Fibonacci* this);
+void co_main(Fibonacci* this);
+coVtable* vtable(Fibonacci* this);
+
+void co_main_fib(void* this) {
+      co_main( (Fibonacci*) this );
+}
+
+coroutine* this_coroutine_fib(void* this) {
+      return this_coroutine( (Fibonacci*) this);
+}
+
 void ?{}(Fibonacci* this) {
       this->fn = 0;
-}
-
-coroutine* this_coroutine(Fibonacci* this) {
-      return &this->c;
+      this->v.main = co_main_fib;
+      this->v.this_coroutine = this_coroutine_fib;
+      start(this);
 }
 
 void co_main(Fibonacci* this) {
+      sout | "Starting main of coroutine " | this | endl;
+      sout | "Started from " | this_coroutine(this)->last | endl;
       int fn1, fn2; 		// retained between resumes
       this->fn = 0;
@@ -39,8 +53,17 @@
 }
 
+coroutine* this_coroutine(Fibonacci* this) {
+      return &this->c;
+}
+
+coVtable* vtable(Fibonacci* this) {
+      return &this->v;
+}
+
 int main() {
-      Fibonacci f1, f2;
+      Fibonacci f1;
+      sout | "User coroutine : " | &f1 | endl;
       for ( int i = 1; i <= 10; i += 1 ) {
-            sout | next(&f1) | ' ' | next(&f2) | endl;
+            sout | next(&f1) | endl;
       }
 
