Index: src/Concurrency/Keywords.cc
===================================================================
--- src/Concurrency/Keywords.cc	(revision 7c700890e7a60235a8c2486a9ee74d5b67a7024f)
+++ src/Concurrency/Keywords.cc	(revision 168c00725d596f275bf593f63791743073a1778b)
@@ -150,5 +150,5 @@
 			coroutine_decl = decl;
 		}
-		else if ( false ) {
+		else if ( decl->is_coroutine() ) {
 			handle( decl );
 		}
@@ -178,5 +178,5 @@
 		);
 
-		decl->get_members().push_front( cor );
+		decl->get_members().push_back( cor );
 
 		return cor;
@@ -201,4 +201,20 @@
 			)
 		);
+		type->get_returnVals().push_back(
+			new ObjectDecl(
+				"ret",
+				noStorage,
+				LinkageSpec::Cforall,
+				nullptr,
+				new PointerType(
+					noQualifiers,
+					new StructInstType(
+						noQualifiers,
+						coroutine_decl
+					)
+				),
+				nullptr
+			)
+		);
 
 		CompoundStmt * statement = new CompoundStmt( noLabels );
@@ -206,22 +222,29 @@
 			new ReturnStmt(
 				noLabels,
-				new UntypedMemberExpr(
-					new NameExpr( "__cor" ),
-					new NameExpr( "this" )
+				new AddressExpr(
+					new UntypedMemberExpr(
+						new NameExpr( "__cor" ),
+						new UntypedExpr(
+							new NameExpr( "*?" ),
+							{ new NameExpr( "this" ) }
+						)
+					)
 				)
 			)
 		);
 
-		declsToAddAfter.push_back( 
-			new FunctionDecl(
-				"get_coroutine",
-				Type::Static,
-				LinkageSpec::Cforall,
-				type,
-				statement,
-				noAttributes,
-				Type::Inline
-			)
-		);
+		FunctionDecl * get_decl = new FunctionDecl(
+			"get_coroutine",
+			Type::Static,
+			LinkageSpec::Cforall,
+			type,
+			statement,
+			noAttributes,
+			Type::Inline
+		);
+
+		declsToAddAfter.push_back( get_decl );
+
+		get_decl->fixUniqueId();
 	}
 	
@@ -285,5 +308,5 @@
 
 		//Make sure that typed isn't mutex
-		if( ! base->get_mutex() ) throw SemanticError( "mutex keyword may only appear once per argument ", arg );
+		if( base->get_mutex() ) throw SemanticError( "mutex keyword may only appear once per argument ", arg );
 	}
 
