Index: doc/papers/concurrency/examples/Fib.cfa
===================================================================
--- doc/papers/concurrency/examples/Fib.cfa	(revision bd121597f5a2848db7b765b78bde943061838216)
+++ doc/papers/concurrency/examples/Fib.cfa	(revision c1398e48a1e93cff3edc8dfe33ad1453eead9738)
@@ -13,9 +13,9 @@
 }
 
-#define FibCtor { 0, 1 }
-typedef struct { int fn, fn1; } Fib;
-int fib_state( Fib & f ) with( f ) {
-	int fn0 = fn1 + fn2;  fn2 = fn1;  fn = fn0;
-	return fn1;
+#define FibCtor { 1, 0 }
+typedef struct { int fn1, fn; } Fib;
+int fib_state( Fib & f ) with(f) {
+	int ret = fn; fn = fn1; fn1 = fn + ret;
+	return ret;
 }
 
@@ -32,19 +32,20 @@
 coroutine Fib2 { int fn; };						// used for communication
 void main( Fib2 & fib ) with( fib ) {			// called on first resume
-	int fn1 = 1, fn2 = 0;						// precompute first two states
+	int fn1;									// precompute first two states
+	[fn1, fn] = [1, 0];
 	for () {
-		fn = fn1 + fn2;  fn2 = fn1;  fn1 = fn;	// general case
 		suspend();								// restart last resume
+		[fn1, fn] = [fn, fn + fn1];
 	}
 }
-int ?()( Fib2 & fib ) with( fib ) {
+int ?()( Fib2 & fib ) {							// function-call interface
 	return resume( fib ).fn;					// restart last suspend
 }
-int ?()( Fib2 & fib, int N ) with( fib ) {
-	for ( N - 1 ) fib();
+int ?()( Fib2 & fib, int N ) {					// skip N values
+	for ( N - 1 ) fib();						// use function-call interface
 	return fib();
 }
-double ?()( Fib2 & fib ) with( fib ) {
-	return (int)(fib()) / 3.14159;						// restart last suspend
+double ?()( Fib2 & fib ) {						// different return type
+	return (int)(fib()) / 3.14159;				// cast prevents recursive call
 }
 
