Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 25bca423faf4c63a3235517f62afb359f11dbe6a)
+++ src/Parser/parser.yy	(revision 407bde5eb175e4cdbd636d67f97b2a8851cc862b)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun  4 22:22:04 2018
-// Update Count     : 3492
+// Last Modified On : Wed Jun  6 14:53:38 2018
+// Update Count     : 3522
 //
 
@@ -503,7 +503,9 @@
 		{ $$ = new ExpressionNode( build_func( new ExpressionNode( build_postfix_name( $5 ) ), $2 ) ); }
 	| type_name '.' no_attr_identifier					// CFA, nested type
-		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
+		// { SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = nullptr; }
 	| type_name '.' '[' field_list ']'					// CFA, nested type / tuple field selector
-		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
+		// { SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
+		{ $$ = nullptr; }
 	| GENERIC '(' assignment_expression ',' generic_assoc_list ')' // C11
 		{
@@ -1300,5 +1302,5 @@
 	;
 
-KR_parameter_list_opt:								// used to declare parameter types in K&R style functions
+KR_parameter_list_opt:									// used to declare parameter types in K&R style functions
 	// empty
 		{ $$ = nullptr; }
@@ -1790,12 +1792,12 @@
 		{ $$ = DeclarationNode::newFromTypedef( $1 ); }
 	| '.' TYPEDEFname
-		{ $$ = DeclarationNode::newFromTypedef( $2 ); }	// FIX ME
+		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
 	| type_name '.' TYPEDEFname
-		{ $$ = DeclarationNode::newFromTypedef( $3 ); }	// FIX ME
+		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
 	| typegen_name
 	| '.' typegen_name
-		{ $$ = $2; }									// FIX ME
+		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
 	| type_name '.' typegen_name
-		{ $$ = $3; }									// FIX ME
+		{ SemanticError( yylloc, "Qualified name is currently unimplemented." ); $$ = nullptr; }
 	;
 
@@ -1822,5 +1824,5 @@
 	aggregate_key attribute_list_opt '{' field_declaration_list_opt '}'
 		{ $$ = DeclarationNode::newAggregate( $1, new string( DeclarationNode::anonymous.newName() ), nullptr, $4, true )->addQualifiers( $2 ); }
-	| aggregate_key attribute_list_opt no_attr_identifier_or_type_name
+	| aggregate_key attribute_list_opt no_attr_identifier
 		{
 			typedefTable.makeTypedef( *$3 );			// create typedef
@@ -1830,4 +1832,12 @@
 	  '{' field_declaration_list_opt '}'
 		{ $$ = DeclarationNode::newAggregate( $1, $3, nullptr, $6, true )->addQualifiers( $2 ); }
+	| aggregate_key attribute_list_opt type_name
+		{
+			typedefTable.makeTypedef( *$3->type->symbolic.name ); // create typedef
+			if ( forall ) typedefTable.changeKind( *$3->type->symbolic.name, TYPEGENname ); // possibly update
+			forall = false;								// reset
+		}
+	  '{' field_declaration_list_opt '}'
+		{ $$ = DeclarationNode::newAggregate( $1, $3->type->symbolic.name, nullptr, $6, true )->addQualifiers( $2 ); }
 	| aggregate_key attribute_list_opt '(' type_list ')' '{' field_declaration_list_opt '}' // CFA
 		{ $$ = DeclarationNode::newAggregate( $1, new string( DeclarationNode::anonymous.newName() ), $4, $7, false )->addQualifiers( $2 ); }
@@ -1843,10 +1853,5 @@
 			$$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false )->addQualifiers( $2 );
 		}
-	| aggregate_key attribute_list_opt TYPEDEFname
-		{
-			typedefTable.makeTypedef( *$3 );
-			$$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false )->addQualifiers( $2 );
-		}
-	| aggregate_key attribute_list_opt typegen_name		// CFA
+	| aggregate_key attribute_list_opt type_name
 		{
 			// Create new generic declaration with same name as previous forward declaration, where the IDENTIFIER is
@@ -1943,16 +1948,24 @@
 	ENUM attribute_list_opt '{' enumerator_list comma_opt '}'
 		{ $$ = DeclarationNode::newEnum( new string( DeclarationNode::anonymous.newName() ), $4, true )->addQualifiers( $2 ); }
-	| ENUM attribute_list_opt no_attr_identifier_or_type_name
+	| ENUM attribute_list_opt no_attr_identifier
 		{ typedefTable.makeTypedef( *$3 ); }
 	  '{' enumerator_list comma_opt '}'
 		{ $$ = DeclarationNode::newEnum( $3, $6, true )->addQualifiers( $2 ); }
+	| ENUM attribute_list_opt type_name
+	  '{' enumerator_list comma_opt '}'
+		{ $$ = DeclarationNode::newEnum( $3->type->symbolic.name, $5, true )->addQualifiers( $2 ); }
 	| enum_type_nobody
 	;
 
 enum_type_nobody:										// enum - {...}
-	ENUM attribute_list_opt no_attr_identifier_or_type_name
+	ENUM attribute_list_opt no_attr_identifier
 		{
 			typedefTable.makeTypedef( *$3 );
 			$$ = DeclarationNode::newEnum( $3, 0, false )->addQualifiers( $2 );
+		}
+	| ENUM attribute_list_opt type_name
+		{
+			typedefTable.makeTypedef( *$3->type->symbolic.name );
+			$$ = DeclarationNode::newEnum( $3->type->symbolic.name, 0, false )->addQualifiers( $2 );
 		}
 	;
