Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 861799c7471bc5f428e98ee82e5cc722ab2ffda7)
+++ src/Parser/DeclarationNode.cc	(revision a9b657a26c16b0f0fe660b2c9b0ab868fa6d4245)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Mar  7 08:02:09 2017
-// Update Count     : 936
+// Last Modified On : Tue Mar  7 17:28:56 2017
+// Update Count     : 937
 //
 
@@ -359,5 +359,9 @@
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Pointer );
-	return newnode->addQualifiers( qualifiers );
+	if ( qualifiers ) {
+		return newnode->addQualifiers( qualifiers );
+	} else {
+		return newnode;
+	} // if
 } // DeclarationNode::newPointer
 
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 861799c7471bc5f428e98ee82e5cc722ab2ffda7)
+++ src/Parser/TypeData.h	(revision a9b657a26c16b0f0fe660b2c9b0ab868fa6d4245)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Mar  7 08:03:53 2017
-// Update Count     : 173
+// Last Modified On : Wed Mar  8 22:28:33 2017
+// Update Count     : 174
 //
 
@@ -76,19 +76,19 @@
 	DeclarationNode::Length length = DeclarationNode::NoLength;
 	DeclarationNode::BuiltinType builtintype = DeclarationNode::NoBuiltinType;
+
 	typedef std::bitset< DeclarationNode::NoTypeQualifier > TypeQualifiers;
 	TypeQualifiers typeQualifiers;
 	DeclarationNode * forall;
 
-		// Basic_t basic;
-		Aggregate_t aggregate;
-		AggInst_t aggInst;
-		Array_t array;
-		Enumeration_t enumeration;
-		// Variable_t variable;
-		Function_t function;
-		Symbolic_t symbolic;
-		DeclarationNode * tuple;
-		ExpressionNode * typeexpr;
-		// DeclarationNode::BuiltinType builtin;
+	// Basic_t basic;
+	Aggregate_t aggregate;
+	AggInst_t aggInst;
+	Array_t array;
+	Enumeration_t enumeration;
+	// Variable_t variable;
+	Function_t function;
+	Symbolic_t symbolic;
+	DeclarationNode * tuple;
+	ExpressionNode * typeexpr;
 
 	TypeData( Kind k = Unknown );
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 861799c7471bc5f428e98ee82e5cc722ab2ffda7)
+++ src/Parser/lex.ll	(revision a9b657a26c16b0f0fe660b2c9b0ab868fa6d4245)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Fri Mar  3 22:18:00 2017
- * Update Count     : 502
+ * Last Modified On : Thu Mar  9 21:38:26 2017
+ * Update Count     : 505
  */
 
@@ -202,4 +202,5 @@
 __const__		{ KEYWORD_RETURN(CONST); }				// GCC
 continue		{ KEYWORD_RETURN(CONTINUE); }
+_Coroutine		{ KEYWORD_RETURN(COROUTINE); }			// CFA
 default			{ KEYWORD_RETURN(DEFAULT); }
 disable			{ KEYWORD_RETURN(DISABLE); }			// CFA
@@ -235,4 +236,5 @@
 long			{ KEYWORD_RETURN(LONG); }
 lvalue			{ KEYWORD_RETURN(LVALUE); }				// CFA
+_Monitor		{ KEYWORD_RETURN(MONITOR); }			// CFA
 mutex			{ KEYWORD_RETURN(MUTEX); }				// CFA
 _Noreturn		{ KEYWORD_RETURN(NORETURN); }			// C11
@@ -254,4 +256,5 @@
 struct			{ KEYWORD_RETURN(STRUCT); }
 switch			{ KEYWORD_RETURN(SWITCH); }
+_Thread			{ KEYWORD_RETURN(THREAD); }				// C11
 _Thread_local	{ KEYWORD_RETURN(THREADLOCAL); }		// C11
 throw			{ KEYWORD_RETURN(THROW); }				// CFA
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 861799c7471bc5f428e98ee82e5cc722ab2ffda7)
+++ src/Parser/parser.yy	(revision a9b657a26c16b0f0fe660b2c9b0ab868fa6d4245)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Mar  5 15:48:24 2017
-// Update Count     : 2227
+// Last Modified On : Thu Mar  9 21:40:20 2017
+// Update Count     : 2292
 //
 
@@ -104,4 +104,5 @@
 %token TYPEOF LABEL										// GCC
 %token ENUM STRUCT UNION
+%token COROUTINE MONITOR THREAD							// CFA
 %token OTYPE FTYPE DTYPE TTYPE TRAIT					// CFA
 %token SIZEOF OFFSETOF
@@ -223,6 +224,6 @@
 %type<decl> external_function_definition function_definition function_array function_declarator function_no_ptr function_ptr
 
-%type<decl> identifier_parameter_array identifier_parameter_declarator identifier_parameter_function
-%type<decl> identifier_parameter_ptr identifier_list
+%type<decl> identifier_parameter_declarator identifier_parameter_ptr identifier_parameter_array identifier_parameter_function
+%type<decl> identifier_list
 
 %type<decl> cfa_abstract_array cfa_abstract_declarator_no_tuple cfa_abstract_declarator_tuple
@@ -270,5 +271,6 @@
 %type<en> type_name_list
 
-%type<decl> type_qualifier type_qualifier_name type_qualifier_list type_qualifier_list_opt type_specifier type_specifier_nobody
+%type<decl> type_qualifier type_qualifier_name type_qualifier_list_opt type_qualifier_list
+%type<decl> type_specifier type_specifier_nobody
 
 %type<decl> variable_declarator variable_ptr variable_array variable_function
@@ -1633,4 +1635,10 @@
 	| UNION
 		{ $$ = DeclarationNode::Union; }
+	| COROUTINE
+		{ $$ = DeclarationNode::Struct; }
+	| MONITOR
+		{ $$ = DeclarationNode::Struct; }
+	| THREAD
+		{ $$ = DeclarationNode::Struct; }
 	;
 
Index: src/libcfa/concurrency/CtxSwitch-i386.S
===================================================================
--- src/libcfa/concurrency/CtxSwitch-i386.S	(revision 861799c7471bc5f428e98ee82e5cc722ab2ffda7)
+++ src/libcfa/concurrency/CtxSwitch-i386.S	(revision a9b657a26c16b0f0fe660b2c9b0ab868fa6d4245)
@@ -52,4 +52,10 @@
 	movl 4(%esp),%eax
 
+	// Save floating & SSE control words on the stack.
+
+        sub    $8,%esp
+        stmxcsr 0(%esp)         // 4 bytes
+        fnstcw  4(%esp)         // 2 bytes
+
 	// Save volatile registers on the stack.
 
@@ -69,5 +75,5 @@
 	// argument is now at 8 + 12 = 20(%esp)
 
-	movl 20(%esp),%eax
+	movl 28(%esp),%eax
 
 	// Load new context from the "to" area.
@@ -81,4 +87,10 @@
 	popl %edi
 	popl %ebx
+
+	// Load floating & SSE control words from the stack.
+
+        fldcw   4(%esp)
+        ldmxcsr 0(%esp)
+        add    $8,%esp
 
 	// Return to thread.
Index: src/libcfa/concurrency/CtxSwitch-x86_64.S
===================================================================
--- src/libcfa/concurrency/CtxSwitch-x86_64.S	(revision 861799c7471bc5f428e98ee82e5cc722ab2ffda7)
+++ src/libcfa/concurrency/CtxSwitch-x86_64.S	(revision a9b657a26c16b0f0fe660b2c9b0ab868fa6d4245)
@@ -47,9 +47,12 @@
 CtxSwitch:
 
-	// Save volatile registers on the stack.
+	// Save floating & SSE control words on the stack.
 
 	subq   $8,%rsp
 	stmxcsr 0(%rsp)         // 4 bytes
 	fnstcw  4(%rsp)         // 2 bytes
+
+	// Save volatile registers on the stack.
+
 	pushq %r15
 	pushq %r14
@@ -75,7 +78,10 @@
 	popq %r14
 	popq %r15
+
+	// Load floating & SSE control words from the stack.
+
 	fldcw   4(%rsp)
 	ldmxcsr 0(%rsp)
-	addq $8,%rsp
+	addq   $8,%rsp
 
 	// Return to thread.
Index: src/libcfa/concurrency/invoke.c
===================================================================
--- src/libcfa/concurrency/invoke.c	(revision 861799c7471bc5f428e98ee82e5cc722ab2ffda7)
+++ src/libcfa/concurrency/invoke.c	(revision a9b657a26c16b0f0fe660b2c9b0ab868fa6d4245)
@@ -91,5 +91,7 @@
 	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
+	    uint32_t mxcr;                              // SSE Status and Control bits (control bits are preserved across function calls)
+            uint16_t fcw;                               // X97 FPU control word (preserved across function calls)
+	    void *rturn;                                // where to go on return from uSwitch
 	    void *dummyReturn;				// fake return compiler would have pushed on call to uInvoke
 	    void *argument[3];				// for 16-byte ABI, 16-byte alignment starts here
@@ -108,7 +110,7 @@
       struct FakeStack {
             void *fixedRegisters[5];			// fixed registers rbx, r12, r13, r14, r15
-            uint32_t mxcr;			            // SSE Status and Control bits (control bits are preserved across function calls)
-            uint16_t fcw;			            // X97 FPU control word (preserved across function calls)
-            void *rturn;				      // where to go on return from uSwitch
+            uint32_t mxcr;                              // SSE Status and Control bits (control bits are preserved across function calls)
+            uint16_t fcw;                               // X97 FPU control word (preserved across function calls)
+            void *rturn;                                // where to go on return from uSwitch
             void *dummyReturn;				// NULL return address to provide proper alignment
       };
Index: src/libcfa/fstream
===================================================================
--- src/libcfa/fstream	(revision 861799c7471bc5f428e98ee82e5cc722ab2ffda7)
+++ src/libcfa/fstream	(revision a9b657a26c16b0f0fe660b2c9b0ab868fa6d4245)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Apr 28 08:08:04 2016
-// Update Count     : 88
+// Last Modified On : Tue Mar  7 14:48:08 2017
+// Update Count     : 91
 //
 
@@ -23,5 +23,5 @@
 	void *file;
 	_Bool sepDefault;
-	int sepOnOff;										// FIX ME: type should be _Bool
+	_Bool sepOnOff;
 	char separator[separateSize];
 }; // ofstream
@@ -32,8 +32,9 @@
 void sepReset( ofstream * );
 void sepReset( ofstream *, _Bool );
+const char * sepGet( ofstream * );
 void sepSet( ofstream *, const char * );
-const char * sepGet( ofstream * );
 _Bool sepDisable( ofstream * );
 _Bool sepEnable( ofstream * );
+
 int fail( ofstream * );
 int flush( ofstream * );
Index: src/libcfa/fstream.c
===================================================================
--- src/libcfa/fstream.c	(revision 861799c7471bc5f428e98ee82e5cc722ab2ffda7)
+++ src/libcfa/fstream.c	(revision a9b657a26c16b0f0fe660b2c9b0ab868fa6d4245)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 15 13:35:29 2016
-// Update Count     : 188
+// Last Modified On : Tue Mar  7 14:48:09 2017
+// Update Count     : 192
 //
 
@@ -21,4 +21,5 @@
 #include <stdarg.h>										// varargs
 #include <string.h>										// strlen
+#include <stdbool.h>									// true/false
 #include <float.h>										// DBL_DIG, LDBL_DIG
 #include <complex.h>									// creal, cimag
@@ -32,18 +33,21 @@
 void sepReset( ofstream * os ) { os->sepOnOff = os->sepDefault; }
 void sepReset( ofstream * os, _Bool reset ) { os->sepDefault = reset; os->sepOnOff = os->sepDefault; }
+const char * sepGet( ofstream * os ) { return &(os->separator[0]); }
+
 void sepSet( ofstream * os, const char * s ) {
 	strncpy( &(os->separator[0]), s, separateSize - 1 );
 	os->separator[separateSize - 1] = '\0';
 } // sepSet
-const char * sepGet( ofstream * os ) { return &(os->separator[0]); }
+
 _Bool sepDisable( ofstream *os ) {
 	_Bool temp = os->sepDefault;
-	os->sepDefault = 0;
+	os->sepDefault = false;
 	sepReset( os );
 	return temp;
 } // sepDisable
+
 _Bool sepEnable( ofstream *os ) {
 	_Bool temp = os->sepDefault;
-	os->sepDefault = 1;
+	os->sepDefault = true;
 	sepReset( os );
 	return temp;
