Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 374cb11784dccbf21002ae7aee894790d8f79d65)
+++ src/Parser/DeclarationNode.cc	(revision 9e7236f4ea98982d55cddf21f808b612dbfe6ddf)
@@ -253,5 +253,5 @@
 } // DeclarationNode::newAggregate
 
-DeclarationNode * DeclarationNode::newEnum( const string * name, DeclarationNode * constants, bool body) {
+DeclarationNode * DeclarationNode::newEnum( const string * name, DeclarationNode * constants, bool body, DeclarationNode * base) {
 	DeclarationNode * newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Enum );
@@ -260,4 +260,9 @@
 	newnode->type->enumeration.body = body;
 	newnode->type->enumeration.anon = name == nullptr;
+	if ( base && base->type)  {
+		newnode->type->base = base->type;	
+	} // if
+
+	// Check: if base has TypeData
 	return newnode;
 } // DeclarationNode::newEnum
@@ -290,5 +295,5 @@
 		return newName( name ); // Not explicitly inited enum value;
 	} // if
-} // DeclarationNode::newEnumGeneric
+} // DeclarationNode::newEnumValueGeneric
 
 DeclarationNode * DeclarationNode::newFromTypedef( const string * name ) {
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 374cb11784dccbf21002ae7aee894790d8f79d65)
+++ src/Parser/ParseNode.h	(revision 9e7236f4ea98982d55cddf21f808b612dbfe6ddf)
@@ -235,5 +235,5 @@
 	static DeclarationNode * newFunction( const std::string * name, DeclarationNode * ret, DeclarationNode * param, StatementNode * body );
 	static DeclarationNode * newAggregate( AggregateDecl::Aggregate kind, const std::string * name, ExpressionNode * actuals, DeclarationNode * fields, bool body );
-	static DeclarationNode * newEnum( const std::string * name, DeclarationNode * constants, bool body );
+	static DeclarationNode * newEnum( const std::string * name, DeclarationNode * constants, bool body, DeclarationNode * base = nullptr );
 	static DeclarationNode * newEnumConstant( const std::string * name, ExpressionNode * constant );
 	static DeclarationNode * newEnumValueGeneric( const std::string * name, InitializerNode * init );
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 374cb11784dccbf21002ae7aee894790d8f79d65)
+++ src/Parser/TypeData.cc	(revision 9e7236f4ea98982d55cddf21f808b612dbfe6ddf)
@@ -388,4 +388,8 @@
 		if ( enumeration.body ) {
 			os << string( indent + 2, ' ' ) << " with body" << endl;
+		} // if
+		if ( base ) {
+			os << "for ";
+			base->print( os, indent + 2 );
 		} // if
 		break;
@@ -926,11 +930,13 @@
 			ObjectDecl * member = dynamic_cast< ObjectDecl * >(* members);
 			member->set_init( new SingleInit( maybeMoveBuild< Expression >( cur->consume_enumeratorValue() ) ) );
-		} else {
+		} else if ( !cur->initializer ) {
 			if ( baseType && (!dynamic_cast<BasicType *>(baseType) || !dynamic_cast<BasicType *>(baseType)->isWholeNumber())) {
 				SemanticError( td->location, "A non whole number enum value decl must be explicitly initialized." );
 			}
-		} // if
+		}
+		// else cur is a List Initializer and has been set as init in buildList()
+		// if
 	} // for
-	ret->set_body( td->enumeration.body ); // Boolean; if it has body
+	ret->set_body( td->enumeration.body );
 	return ret;
 } // buildEnum
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 374cb11784dccbf21002ae7aee894790d8f79d65)
+++ src/Parser/parser.yy	(revision 9e7236f4ea98982d55cddf21f808b612dbfe6ddf)
@@ -2303,5 +2303,5 @@
 	;
 
-enum_type: // static DeclarationNode * newEnum( const std::string * name, DeclarationNode * constants, bool body, bool typed );												// enum
+enum_type:
 	ENUM attribute_list_opt '{' enumerator_list comma_opt '}'
 		{ $$ = DeclarationNode::newEnum( nullptr, $4, true )->addQualifiers( $2 ); }
@@ -2318,7 +2318,7 @@
 			{ SemanticError( yylloc, "storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); }
 
-			$$ = DeclarationNode::newEnum( nullptr, $7, true ) ->addQualifiers( $5 )  -> addEnumBase( $3 );
-		}
-	| ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt identifier attribute_list_opt // Question: why attributes/qualifier after identifier
+			$$ = DeclarationNode::newEnum( nullptr, $7, true, $3 ) ->addQualifiers( $5 );
+		}
+	| ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt identifier attribute_list_opt
 		{
 			if ( $3->storageClasses.val != 0 || $3->type->qualifiers.val != 0 ) { SemanticError( yylloc, "storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); }
@@ -2327,5 +2327,5 @@
 	  '{' enumerator_list comma_opt '}'
 		{
-			$$ = DeclarationNode::newEnum( $6, $10, true ) -> addQualifiers( $5 ) -> addQualifiers( $7 ) -> addEnumBase( $3 );
+			$$ = DeclarationNode::newEnum( $6, $10, true, $3 ) -> addQualifiers( $5 ) -> addQualifiers( $7 );
 		}
 	| ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt typedef_name attribute_list_opt '{' enumerator_list comma_opt '}'
@@ -2333,5 +2333,5 @@
 			if ( $3->storageClasses.val != 0 || $3->type->qualifiers.val != 0 ) { SemanticError( yylloc, "storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); }
 			typedefTable.makeTypedef( *$6->name );
-			$$ = DeclarationNode::newEnum( $6->name, $9, true ) -> addQualifiers( $5 ) -> addQualifiers( $7 ) -> addEnumBase( $3 );
+			$$ = DeclarationNode::newEnum( $6->name, $9, true, $3 ) -> addQualifiers( $5 ) -> addQualifiers( $7 );
 		}
 	| enum_type_nobody
